summaryrefslogtreecommitdiff
path: root/runtime/class_linker-inl.h
AgeCommit message (Collapse)Author
2017-04-21ART: Clean up art_method.h Andreas Gampe
Clean up the header. Fix up other headers including the -inl file, in an effort to prune the include graph. Fix broken transitive includes by making includes explicit. Introduce new -inl files for method handles and reference visiting. Test: source build/envsetup.sh && lunch aosp_angler-userdebug && mmma art Test: source build/envsetup.sh && lunch aosp_mips64-userdebug && mmma art Change-Id: I8f60f1160c2a702fdf3598149dae38f6fa6bc851
2017-03-14Revert^2 "Hash-based DexCache field array." Vladimir Marko
Test: testrunner.py --host --interpreter Bug: 30627598 This reverts commit 6374c58f2ea403b3a05fb27376110fe4d0fc8e3f. Change-Id: I275508e288a85d3aa08f7405a1a4f362af43b775
2017-03-14Revert^6 "Hash-based dex cache type array." Vladimir Marko
Fixed ImageWriter to write class table also if it contains only boot class loader classes. Added a regression test and added extra checks for debug-build to verify that dex cache types from app image are also in the class table. Removed some unnecessary debug output. Test: 158-app-image-class-table Bug: 34839984 Bug: 30627598 Bug: 34659969 This reverts commit 0b66d6174bf1f6023f9d36dda8538490b79c2e9f. Change-Id: I6a747904940c6ebc297f4946feef99dc0adf930c
2017-03-13Revert^5 "Hash-based dex cache type array." Vladimir Marko
For app images, ImageWriter does not add boot image classes to the app image class table even though it keeps them in the dex caches. The reason for that is unknown, the code looks OK. Bug: 34839984 Bug: 30627598 Bug: 34659969 Also reverts "Improve debugging output for a crash." This reverts commits bfb80d25eaeb7a604d5dd25a370e3869e96a33ab, 8dd56fcb3196f466ecaffd445397cb11ef85f89f. Test: testrunner.py --host Change-Id: Ic8db128207c07588c7f11563208ae1e85c8b0e84
2017-03-13Revert "Hash-based DexCache field array." Vladimir Marko
Reverting to allow rebasing the revert https://android-review.googlesource.com/351689 without too many conflicts. Bug: 30627598 This reverts commit 1aea3510b8dd0c512cec61c91c5ef1f1e5d53d64. Change-Id: I4af65e9f41c8bad8106c028947eca7c5a9534c53
2017-03-10Hash-based DexCache field array. Vladimir Marko
Test: m test-art-host, both AOT and interpreter Test: m test-art-target, both AOT and interpreter Test: m valgrind-test-art-host Bug: 30627598 Change-Id: If992f091aadd862d17b09928d21659573dd285a0
2017-02-20Revert^4 "Hash-based dex cache type array." Vladimir Marko
Added extra output to the abort message to collect more data when we hit the crash. Added extra check when loading an app image to verify that the class table isn't already broken. Test: testrunner.py --host Bug: 34839984 Bug: 30627598 Bug: 34659969 This reverts commit 5812e20ff7cbc8efa0b8d7486ada2f58840a6ad5. Change-Id: I9bb442a184c236dcb75b3e42a095f39cd6bee59d
2017-02-13Revert^3 "Hash-based dex cache type array." Mathieu Chartier
Assert failing for "earchbox:search": F zygote64: class_linker.cc:4612] Check failed: handle_scope_iface.Get() != nullptr Test: m test-art-host Bug: 34839984 Bug: 30627598 Bug: 34659969 This reverts commit 85c0f2ac03417f5125bc2ff1dab8109859c67d5c. Change-Id: I39846c20295af5875b0f945be7035c73ded23135
2017-02-10Revert^2 "Hash-based dex cache type array." Vladimir Marko
The reason for the revert was fixed by https://android-review.googlesource.com/332666 . We now enable clearing dex cache types in test 155 from that CL. Also avoid an unnecessary store in LookupResolvedTypes() and prevent verifier from messing up the dex cache types. Test: m test-art-host Bug: 34839984 Bug: 30627598 Bug: 34659969 This reverts commit d16363a93053de0f32252c7897d839a46aff14ae. Change-Id: Ie8603cfa772e78e648d005b0b6eae59062ae729d
2017-02-02Various improvements to stack walking speed Mathieu Chartier
Make BitMemoryRegion constructor inlined, remove read barrier for IsProxyMethod. Around 15% speedup for pmd benchmark, maybe more for CC. Test: test-art-host Change-Id: Ib4392649e041406e538cc944c26c69f68d388fb4
2017-02-01Revert "Hash-based dex cache type array." Vladimir Marko
Reverting to work around some programs crashing with Check failed: handle_scope_iface.Get() != nullptr. though the reason for the failure not yet understood. Test: m test-art-host Bug: 34839984 Bug: 30627598 Bug: 34659969 Bug: 30419309 This reverts commit ec7862283dd49f5a58d0ac45960ce27c2f7671b8. Change-Id: Ifded663633082f1e59e5b6ff2e026dc559bd6b82
2017-01-30Remove Deoptimization code from class transformation. Alex Light
Since we removed the current_method from the compiled code we don't need to deoptimize all frames anymore. This is a partial revert of commit dba614810. Bug: 32369913 Bug: 33630159 Test: ART_TEST_TRACE=true \ ART_TEST_JIT=true \ ART_TEST_INTERPRETER=true mma -j40 test-art-host Change-Id: I44a6dd89e1d96bd8c82c2c24a2f42fef023a80be
2017-01-30Hash-based dex cache type array. Vladimir Marko
Test: m test-art-host (Interpreter, Optimizing, JIT) Test: m test-art-target on Nexus 6P (Interpreter, Optimizing, JIT) Test: Nexus 6P boots Test: m valgrind-test-art-host Bug: 30627598 Bug: 34659969 Bug: 30419309 Change-Id: Ic00eda89e58088a3573fc9ec0ad04c0e69e161d1
2017-01-17Reduce using ArtMethod's dex_cache_resolved_types_. Vladimir Marko
Avoid using the ArtMethod's dex cache type array shortcut in runtime, preparing for its removal. We do not completely remove the shortcut yet because it is still used by array allocation entrypoints. Fix ArgArray::BuildArgArrayFromObjectArray in reflection.cc to not ask for the parameter type to be resolved. It should have been previously resolved when retrieving the Method. Also partially revert https://android-review.googlesource.com/310717 because it relied on the removed AIOOBE check in the removed ArtMethod::GetDexCacheResolvedType(). The removed check was simply defensive but it could not be triggered without some memory corruption. Test: m test-art-host Bug: 30627598 Change-Id: Ic45a5ff8c66b79429e440cbc08d67bf22a083682
2017-01-05Merge "Revert "Revert "Revert "Revert "Basic obsolete methods support""""" Treehugger Robot
2017-01-05Remove racy DCHECK on string dex cache. Nicolas Geoffray
Test: test-art-host Change-Id: I58940031d43d89f434d3c3239a218b99ebb1106b
2016-12-21Revert "Revert "Revert "Revert "Basic obsolete methods support"""" Alex Light
A GetDeclaringClass()->GetDexCache() got inserted during the merge/review process meaning that we would try to access incorrect dex-cache in obsolete methods in some situations. Also when using tracing we would loop forever (or at least until an OOM error) in test 916 due to tracing forcing InterpretOnly mode meaning methods would never be jitted. Bug: 32369913 Bug: 33630159 Test: ART_TEST_TRACE=true \ ART_TEST_JIT=true \ ART_TEST_INTERPRETER=true mma -j40 test-art-host This reverts commit f6abcda293b115a9d7d8a26376ea2dcf2d1dc510. Change-Id: I0773bfcba52e3cd51a83be815c6a50c189558f48
2016-12-16Merge "Remove dex cache string from mirror::Class." Nicolas Geoffray
2016-12-15Remove dex cache string from mirror::Class. Nicolas Geoffray
The compiled code does not need it anymore. Test: test-art-host test-art-target Change-Id: I71c08ce12d450ab2b2cd018330d42a8b8c9e3da2
2016-12-14Don't call into ResolveType with possible exception Mathieu Chartier
Bug: 33307169 Test: test-art-host Change-Id: Ic4d499d772828ba1da7a1b9acfc2026f0fcec2b2
2016-12-02ART: Clean up ClassLinker Andreas Gampe
Try to clean up and simplify ClassLinker. Move dex_lock to Locks. Remove dead code. Move single-use code to user. Hide implementation details from header. Test: m test-art-host Change-Id: I58150fa9c2a9524f8304370270c2197d655cb3a8
2016-11-29ART: Add dex::StringIndex Andreas Gampe
Add abstraction for uint32_t string index. Test: m test-art-host Change-Id: I917c2881702fe3df112c713f06980f2278ced7ed
2016-11-21ART: Add dex::TypeIndex Andreas Gampe
Add abstraction for uint16_t type index. Test: m test-art-host Change-Id: I47708741c7c579cbbe59ab723c1e31c5fe71f83a
2016-11-16Change iftable to never be null Mathieu Chartier
Simplifies code generation by removing a null check. The null case is rare. Ritzperf code size: 13107624 -> 13095336 Also addressed comments from previous CL. Bug: 32577579 Test: test-art-host, run ritzperf both with CC Change-Id: I2b31e800867112869d7f0643e16c08826296979e
2016-10-19Move most of class linker to ObjPtr Mathieu Chartier
Return values are still mirror pointer. Fix some failing asserts in compiler driver and tests. Bug: 31113334 Test: test-art-host Change-Id: I4450bf9dfb2541749496b8388616e8aae8488919
2016-10-18Remove mirror:: and ArtMethod deps in utils.{h,cc} David Sehr
The latest chapter in the ongoing saga of attempting to dump a DEX file without having to start a whole runtime instance. This episode finds us removing references to ArtMethod/ArtField/mirror. One aspect of this change that I would like to call out specfically is that the utils versions of the "Pretty*" functions all were written to accept nullptr as an argument. I have split these functions up as follows: 1) an instance method, such as PrettyClass that obviously requires this != nullptr. 2) a static method, that behaves the same way as the util method, but calls the instance method if p != nullptr. This requires using a full class qualifier for the static methods, which isn't exactly beautiful. I have tried to remove as many cases as possible where it was clear p != nullptr. Bug: 22322814 Test: test-art-host Change-Id: I21adee3614aa697aa580cd1b86b72d9206e1cb24
2016-10-17Move art/native to ObjPtr Mathieu Chartier
Bug: 31113334 Test: test-art-host Change-Id: I67eb89cf042c762c6dcd5eb8b008b9a28e9b3319
2016-10-13Move mirror::Class to use ObjPtr Mathieu Chartier
Leave the return types as non ObjPtr for now. Fixed moving GC bugs in tests. Test: test-art-host Bug: 31113334 Change-Id: I5da1b5ac55dfbc5cc97a64be2c870ba9f512d9b0
2016-10-06Move remaining jobject related functions to use ObjPtr Mathieu Chartier
Also added ObjPtr::DownCast. Bug: 31113334 Test: test-art-host Change-Id: I59c253211dc435579ffdfd49f856861ab13d262c
2016-10-03Move ArtField to ObjPtr Mathieu Chartier
Added EXPECT_OBJ_PTR_EQ and variants to gtests. Fixed moving GC bugs in: ClassLinker::CreatePathClassLoader ClassLinkerTest: StaticFields ObjPtr Decode call sites: 186 -> 181. Some tests fail due to ResolvedFieldAccessTest, will fix in follow up CL. Bug: 31113334 Test: test-art-host CC baker Change-Id: I8b266ad00f3c20c8cbe7cfdf280d175083df0b88
2016-09-29dex_cache: rewrite StringDexCachePair as DexCachePair<T> Narayan Kamath
.. with [T = mirror::String]. This is in preparation for introducing a dex cache array for MethodTypes, which will be treated the same way. Test: make test-art-host bug: 30550796 Change-Id: Ief4455b4c6e4c9dd897f2c40b14b843a57b1dc8e
2016-09-27Use ObjPtr for reflection.cc/h/inl Mathieu Chartier
Changed Pretty helpers to use this to reduce usage of Decode. The eventual goal is not have almost any calls to ObjPtr::Decode. Moved ObjPtr out of mirror namespace for convenience. Added more PoisonObjectPointers calls in class linker, thread suspension. Bug: 31113334 Test: test-art-host Change-Id: I44d08db5143d95ed1b65e2f00f9749ef5cf379f7
2016-08-30ART: SHARED_REQUIRES to REQUIRES_SHARED Andreas Gampe
This coincides with the actual attribute name and upstream usage. Preparation for deferring to libbase. Test: m Test: m test-art-host Change-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518
2016-08-18ART: Implement a fixed size string dex cache Christina Wadsworth
Previously, the string dex cache was dex_file->NumStringIds() size, and @ruhler found that only ~1% of that cache was ever getting filled. Since many of these string dex caches were previously 100,000+ indices in length, we're wasting a few hundred KB per app by storing null pointers. The intent of this project was to reduce the space the string dex cache is using, while not regressing on time that much. This is the first of a few CLs, which implements the new fixed size array and disables the compiled code so it always goes slow path. In four other CLs, I implemented a "medium path" that regresses from the previous "fast path" only a bit in assembly in the entrypoints. @vmarko will introduce new compiled code in the future so that we ultimately won't be regressing on time at all. Overall, space savings have been confirmed as on the order of 100 KB per application. A 4-5% slow down in art-opt on Golem, and no noticeable slow down in the interpreter. The opt slow down should be diminished once the new compiled code is introduced. Test: m test-art-host Bug: 20323084 Change-Id: Ic654a1fb9c1ae127dde59290bf36a23edb55ca8e
2016-06-13Propagate the read barrier option to Class::VisitNativeRoots. Hiroshi Yamauchi
Propagate the read barrier option from Object::VisitReferences to Class::VisitNativeRoots. This is a step toward the GC thread avoiding graying objects (and reducing dirty pages) in the immune spaces. Bug: 12687968 Change-Id: I29c4126a4ad4c40e63a934e62451fb3fb36aad43
2016-04-25Make sure the referring class is in the dex cache. Nicolas Geoffray
The method CanAccessResolvedMethod expects the referring class in the dex file is already in the dex cache, which is true during AOT, but not necessarilly during JIT. bug:28295348 Change-Id: I58739903f0dff3867b920a7444f53b99ecf86e85
2016-01-28Optimizing compiler support for directly calling interface methods Alex Light
This teaches the optimizing compiler how to perform invoke-super on interfaces. This should make the invokes generally faster. Bug: 24618811 Change-Id: I7f9b0fb1209775c1c8837ab5d21f8acba3cc72a5
2015-12-21Rename NullHandle to ScopedNullHandle Mathieu Chartier
This makes it clearer that is invalid to do things like: Handle<T> h = ScopedNullHandle<T>(); Bug: 26233305 Change-Id: I6d8f54eae01ec2e901cb7043afa853ea77db79fe
2015-12-10ART: Stash a resolved method late in the verifier Andreas Gampe
Invoke-interface should only be called on an interface method. We cannot move the check earlier, as there are other checks that must be done that can fail a class hard. So postpone a push to the dex cache. Clean up the test a bit. Also templatize ResolveMethod with a version always checking the invoke type, and on a cache miss check whether type target type is an interface when an interface invoke type was given. Bug: 21869691 Change-Id: I94cbb23339cbbb3cb6be9995775e4dcefacce7fd
2015-12-10Revert "ART: Check invoke-interface earlier in verifier" Andreas Gampe
This reverts commit dae24142127c64551142a50423085aabdb0a6060. It is important to check the name of the method being called. Bug: 21869691
2015-12-08ART: Check invoke-interface earlier in verifier Andreas Gampe
Invoke-interface should only be called on an interface method. Move the check earlier, as otherwise we'll try to resolve and potentially inject a method into the dex cache. Also templatize ResolveMethod with a version always checking the invoke type, and on a cache miss check whether type target type is an interface when an interface invoke type was given. Bug: 21869691 Change-Id: Ica27158f675b5aa223d9229248189612f4706832
2015-09-04Clean up formatting in class linker Mathieu Chartier
Change-Id: Ifc27dbe0b5fcabec439602e02f4128c063e1b120
2015-09-03ART: Move DexCache arrays to native. Vladimir Marko
This CL has a companion CL in libcore/ https://android-review.googlesource.com/162985 Change-Id: Icbc9e20ad1b565e603195b12714762bb446515fa
2015-08-31Revert "Revert "Change dex caches to be weak roots"" Mathieu Chartier
This reverts commit 81a9087f0df0518c39405b7d18ba5858a6d8b77b. Boot.oat creation time goes from 4.7s to 4.9s on host due to extra locking. Will try to improve this in another CL. Bug: 23602225 Bug: 22720414 Change-Id: I7e25b75cfb63faa196c7b0f60e46cce50bf12021
2015-08-28Revert "Change dex caches to be weak roots" Brian Carlstrom
This reverts commit 3ae6b1d42523bb2a0ddb5edff1aaf05b592f28f4.
2015-08-25Change dex caches to be weak roots Mathieu Chartier
Changed dex caches to be weak roots. This is necessary for class unloading since the resolved types arrays would keep classes live when they should be unloaded. Currently the dex caches still don't get freed due to the class loader roots. Also deleted some unused functionality in image writer. Bug: 22720414 Change-Id: If22cb3cad7e3baabc8158a77d7f20799faf4c341
2015-08-04Revert "cleanup: Replace pointers with out-parameters and fix-up formatting" Igor Murashkin
This reverts commit a315f5c546b796f55f4872bb6efc15eb858d9639. -- Revert "runtime: cleanup class_linker out-parameters and formatting" This reverts commit bc1d78daa463572c5a770cdca858a3b51d8e1b7b. -- Revert "base: replace raw pointers for out-parameters with safer out<T>" This reverts commit fb326cffc679cab8eb873b9e44795706f023cb3c.
2015-07-31runtime: cleanup class_linker out-parameters and formatting Igor Murashkin
* Use out<T> instead of parameters * Fixes up some other signatures to be more correct * Reformat parameters to be one per line if they can't fit on one line * Reformat locks to be one per line if they can't fit on the decl line Change-Id: Ib71b08707d3ed0bb85299406c0b23a1de4e92a1c
2015-07-22Move to newer clang annotations Mathieu Chartier
Also enable -Wthread-safety-negative. Changes: Switch to capabilities and negative capabilities. Future work: Use capabilities to implement uninterruptible annotations to work with AssertNoThreadSuspension. Bug: 20072211 Change-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33
2015-06-24Remove bogus DCHECK. Nicolas Geoffray
Spotted by running libcore tests with libartd.so. The FindClass call will throw the exception if the element type is void. Change-Id: Ic5df7eb6c9934b8e70f7bfdcfe533e5c1ad5c518