summaryrefslogtreecommitdiff
path: root/runtime/aot_class_linker.cc
Commit message (Collapse)AuthorAgeFilesLines
* Explictly pass VerifierDeps when asking for class verification.Nicolas Geoffray2021-03-221-5/+7
| | | | | | | | | | This will simplify creating and populating VerifierDeps at runtime, which is needed for doing and saving background verifcation of secondary dex files. Test: test.py Bug: 158463186 Change-Id: Ic17913ebd173700e866ba9309bf6ae131fcbc423
* Disable the public SDK Checker during exception throwingCalin Juravle2021-01-211-0/+6
| | | | | | | | | | | | | | | | | | | The compiler will try to throw exception when it cannot resolved methods/classes or when there's an incompatible class change. While doing so, it requires the thrown exception class to be initialized. However, when verifying with a public SDK Checker installed, it's possible that the exception class may not initialized due to private member access (e.g. serialVersionUid). Since during verification the exceptions are simply mechanism for the compiler to propagate the verification error it is OK to disable the SDK Checker and allow the class to be initialized. Bug: 177017481 Test: m test-art-host & manual Change-Id: I3765897bf9885b7e26b3ab044002df88866cd3cd
* SDK-stub controlled dex2oat verificationCalin Juravle2020-12-081-0/+19
| | | | | | | | | | | | | | | Allow dex2oat to further limit the resolved (boot classpath) symbols during verification according to an additional list of public SDK files. The additional SDKs can be specified as regular classpath (a list of dex files) and has the effect of limiting what can be resolved from the boot classpath. The extra checks are performed by comparing the symbol descriptors and do not replace common verification access-checks flow. Bug: 111442216 Test: test-art-host Change-Id: Idc13722f34b591d7f858ebeb94bd6f568102b458
* Add a new class status for verified with access checks.Nicolas Geoffray2020-06-091-0/+3
| | | | | | | | | | At runtime, we won't run the verifier for those classes, but run with access checks enabled in the interpreter. Bug: 157265232 Test: test.py Change-Id: Ia087c3b6f9fcbd295307333e524945d844ef54dc
* dex2oat: add --updatable-bcp-packages-file argument.Vladimir Marko2020-04-031-0/+44
| | | | | | | | | | | | Add a command line argument specifying a file that contains the list of updatable boot class path packages. Test: Updated module_exclusion_test Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: aosp_taimen-userdebug boots. Bug: 151314205 Change-Id: Ic6a66ad7e565a9b9b344cc467cb1ed550ab41b3f
* Fix boot image extension class exclusion.Vladimir Marko2019-11-251-0/+72
| | | | | | | | | | The code in CompilerDriver was too permissive for arrays and the code in Transaction was not even checking interfaces. Move the check to AotClassLinker and fix it. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Change-Id: I3400b6c0e212e25acf17e3740ba19a8b407e03d3
* Load classes for boot image extension.Vladimir Marko2019-11-151-5/+18
| | | | | | | | | | | | Previously we actually failed to load and initialize classes for boot image extensions. Though some classes may have been resolved by other code paths, extension art files did not contain the intended classes. This CL fixes that and some other bugs that were exposed by this class initialization. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Change-Id: I63a1970f7ff45dc37b14ebd24c5a68f3edacd6ef
* Update Transaction for boot image extension.Vladimir Marko2019-07-291-1/+1
| | | | | | | | | | | And clean up transaction-related code to keep test code out of the production binaries. Test: Add TransactionTest#Constraints to transaction_test. Test: m test-art-host-gtest Test: testrunner.py --host Test: aosp_taimen-userdebug boots. Change-Id: Iefe5f1cfde95f564069249148f9e7d71564d7a10
* Revert^2 "Support clinit for app image during compilation"Chang Xing2019-07-181-3/+19
| | | | | | | | | | | | Add some spot fixes for app image class initialization and re-enable test 660 features. Bug: 70735003 Test: test-art-host This reverts commit abadf024efdc632f663d7fb503cd277b3f65fca2. Change-Id: Id16fd3ada3eb1bd57ea60c3cdc4a0cf9835950d7
* Revert^2 "Optimize FindClass ClassNotFoundException case"Andreas Gampe2019-04-191-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | With the current class loaders, there are many exceptions thrown for each ClassNotFoundexception from FindClass calling ClassLoader.loadClass. This CL reduces that by throwing directly from FindClass to avoid these extra exceptions. Numbers are from logging time taken by QuickDeliverException. Time spent in exception throwing during startup goes down (Pixel 2 XL): Camera: 20ms -> 5ms Calculator: 5ms -> 2ms Maps: 20ms -> 10ms Added option -XX:FastClassNotFoundException=<bool> to enable or disable the feature. This reverts commit d399f579cf2a8462ef6f1fbea360fe62be174377. Bug: 130310316 Bug: 130293184 Bug: 130209120 Test: test-art-host Test: art/test/testrunner/testrunner.py --host --no-prebuild -t 134 Change-Id: I059abce98fe876d89de35d099647ee673c27343b
* Revert "Optimize FindClass ClassNotFoundException case"Mathieu Chartier2019-04-171-2/+1
| | | | | | | | | | | | Bug: 130310316 Bug: 130293184 Bug: 130209120 Bug: 130680590 Test: TH This reverts commit 9634705832d5eb1f64af7766917e3043648a538f. Change-Id: I07f32256fe718c607e9c304073c4f8d614de1c48
* Optimize FindClass ClassNotFoundException caseMathieu Chartier2019-04-171-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | With the current class loaders, there are many exceptions thrown for each ClassNotFoundexception from FindClass calling ClassLoader.loadClass. This CL reduces that by throwing directly from FindClass to avoid these extra exceptions. Numbers are from logging time taken by QuickDeliverException. Time spent in exception throwing during startup goes down (Pixel 2 XL): Camera: 20ms -> 5ms Calculator: 5ms -> 2ms Maps: 20ms -> 10ms Added option -XX:FastClassNotFoundException=<bool> to enable or disable the feature. Bug: 130310316 Bug: 130293184 Bug: 130209120 Test: test-art-host (cherry picked from commit 40b1ba4543cf33e54f32e31cd2f276700c1be63c) Merged-In: If013a2f2f330684e4f6ab000c19ef3822990e613 Change-Id: Ifca8d8b78e82463488bbb3f5796e9be7d94465b1
* ObjPtr<>-ify mirror::Object::As*(), fix stale refs in test.Vladimir Marko2019-03-291-3/+5
| | | | | | | Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 31113334 Change-Id: Ia04c4996f5cbfa1f26acbadcd747342c57b1aac3
* Move some remaining dex utilitiesDavid Sehr2018-03-191-1/+1
| | | | | | | | | There were several utilities related to building/walking/testing dex files that were not in libdexfile. This change consolidates these. Bug: 22322814 Test: make -j 50 test-art-host Change-Id: Id76e9179d03b8ec7d67f7e0f267121f54f0ec2e0
* Change ClassStatus to fit into 4 bits.Vladimir Marko2018-01-051-3/+3
| | | | | | | | | | | | | | | | | In preparation for extending the type check bit string from 24 to 28 bits, rewrite ClassStatus to fit into 4 bits. Also perform a proper cleanup of the ClassStatus, i.e. change it to an enum class, remove the "Status" word from enumerator names, replace "Max" with "Last" in line with other enumerations and remove aliases from mirror::Class. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Test: Pixel 2 XL boots. Test: testrunner.py --target --optimizing Bug: 64692057 Bug: 65318848 Change-Id: Iec1610ba5dac2c527b36c12819f132e1a77f2d45
* ART: Recognize compile-time soft-failsAndreas Gampe2017-09-051-0/+8
| | | | | | | | | | Add recognition of RetryVerificationAtRuntime to the AoT classlinker. In that case, report a soft failure. Bug: 63467744 Bug: 65318848 Test: m test-art-host Change-Id: I66c623179363db77ce3019233903da96a659ce04
* ART: Change CanAssumeVerified to GetPreviousClassStateAndreas Gampe2017-09-051-2/+4
| | | | | | | | | | Return any stored class state instead of a bool to allow more recognized states in the future. Bug: 63467744 Bug: 65318848 Test: m test-art-host Change-Id: Id097273a41e09ee77c8d53377ad9beb09104a944
* Revert "Revert "Support class unloading in dex2oat for quicken multidex""Mathieu Chartier2017-08-091-2/+18
| | | | | | | | | Bug: 63467744 Test: test-art-host This reverts commit 6921d90a241f0307ac25120f8f976744d4a57706. Change-Id: If70e31d3a15579dc75fd40bfef186e0124568c87
* Revert "Support class unloading in dex2oat for quicken multidex"Richard Uhler2017-08-091-18/+2
| | | | | | | | This reverts commit 0b1c341d2d89a483142cd14bdeb4650ab00184f1. New test Dex2oatDeterminism.UnloadCompile fails on bots gtest-debug-gc and friends. Change-Id: Ib101fc4390d90f88fe017d8482775d5e975f2ccb
* Support class unloading in dex2oat for quicken multidexMathieu Chartier2017-08-081-2/+18
| | | | | | | | | | | | | | | | | Support class unloading for the quicken compilation filter. This will be enabled in a follow up CL. Added a test that compares with and without unloading. The way that it tests this is by adding an output app image. Having an app image disables the unloading. This test also covers that app images don't change the odex (currently). Added a test for the assumed verified logic. Bug: 63467744 Test: test-art-host Test: test/testrunner/testrunner.py --interpreter --host -j40 Change-Id: I1e8a862c6f089c06c58aa0c846797e4c24bd072c
* Revert "Support clinit for app image during compilation"Nicolas Geoffray2017-08-031-19/+3
| | | | | | | | Breaks on bots. This reverts commit 50ce4414a6154ee2d9eeaa27237d80b685e5acf1. Change-Id: I39d856dc76b55788b6775ff2269eb8570742c6ff
* Support clinit for app image during compilationChang Xing2017-08-021-3/+19
| | | | | | | | | | | | | | | | | | | | Enabled compiler driver to start initialization process for classes with static class initializers if debuggable flag is not setted because this might change the behaviour of interpreter (although invisible to user), e.g. the memory heap at startup will contains initialization results. Updated two testcases to reflect the change of heap memory before classes are initialized. Enabled testcase 660-clinit to test whether class initializers are executed. This CL have to be submitted after /c/432328, /c/432154, /c/433242 and /c/433342 because without that four this will break the build. Besides, the other four CL will be tested in this CL. Test: make test-art-host -j64 Change-Id: Ia25b9e18bdcd0fa3619be0058d459651f3b9a492
* Fix recursive initialization on app image.Chang Xing2017-07-291-2/+13
| | | | | | | | | | | | | | | | | | Assume class B extends class A and class A's clinit tries to instantiate class B as a field. In this case, class A is under initializing but ClassLinker allows initialize B as class A is initialized. If class B is initialized successfully and transaction is commited then class A abort the transaction, status of class B will not be reverted. Fixed by a simple approach, when compiling images, AotClassLinker does not allow initialize a subclass when it's superclass is not fully initialized. A testcase produce this error is added in /c/433381 Test: make test-art-host -j64 Change-Id: Ic6bcbf1a5162d0e6ec26979b336c0f644a1c39bc
* Implemented Nested TransactionChang Xing2017-07-261-0/+58
Transaction can be created recursively and every transaction knows which class it is created for. The goal of implementing nested transaction is to let every class initialization (especially execution of class initializer) associates with one transaction which provides the ability to track whether field accesses are valid. To achieve this goal, we implemented a subclass for ClassLinker called AotClassLinker, which will be instantiated instead of ClassLinker under AOT compiler. All invocations of InitializeClass happens at AOT compiler will be wrapped with creating and destorying transactions. Transactions will be paused when rollbacking, otherwise the memory will not be rollbacked properly. The use the transaction is changed and all usage are updated, corresponding with native tests mentioning transaction, including transaction_test and unstarted_runtime_test. The validation rules will be implemented and explained in another CL. Test: make test-art-host -j64 Change-Id: If53d3ee3231c337a9ea917f5b885c173917765de