cbcedbf9382bc773713cd3552ed96f417bf1daeb |
|
13-Mar-2017 |
Mathieu Chartier <mathieuc@google.com> |
Add method info to oat files The method info data is stored separately from the code info to reduce oat size by improving deduplication of stack maps. To reduce code size, this moves the invoke info and inline info method indices to this table. Oat size for a large app (arm64): 77746816 -> 74023552 (-4.8%) Average oat size reduction for golem (arm64): 2% Repurposed unused SrcMapElem deduping to be for MethodInfo. TODO: Delete SrcMapElem in a follow up CL. Bug: 36124906 Test: clean-oat-host && test-art-host-run-test Change-Id: I2241362e728389030b959f42161ce817cf6e2009
|
c52f3034b06c03632e937aff07d46c2bdcadfef5 |
|
02-Mar-2017 |
Richard Uhler <ruhler@google.com> |
Remove --include-patch-information option from dex2oat. Because we no longer support running patchoat on npic oat files, which means the included patch information is unused . Bug: 33192586 Test: m test-art-host Change-Id: I9e100c4e47dc24d91cd74226c84025e961d30f67
|
6bec91c7d4670905cd67440991ec76fd54d0f000 |
|
09-Jan-2017 |
Vladimir Marko <vmarko@google.com> |
Store resolved types for AOT code in .bss. Test: m test-art-host Test: m test-art-target on Nexus 9. Test: Nexus 9 boots. Test: Build aosp_mips64-eng. Bug: 30627598 Bug: 34193123 Change-Id: I8ec60a98eb488cb46ae3ea56341f5709dad4f623
|
81f57d12de3f3983bbee1e8214a6088aa7bd504b |
|
20-Dec-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Update vdex in place if input_vdex_fd == output_vdex_fd Test: test-art-host bug: 30937355 Change-Id: Ib8180d67996faec518d9092725b5de00d4dba9f6
|
f54e5df37cb42d9a83fc54b375da5ef335d604a9 |
|
01-Dec-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Set the location checksum in vdex. The checksum we check against at runtime isn't the dex checksum if we are compiling a jar/apk, but the crc32 of the entry. This is to optimize the check at startup and avoid reading the contents of the zip file. Because with vdex we do not want to open the zip file, (the test has been done already in getDexOptNeeded), and cannot rely on the .oat file for fetching it, put the location checksum in the vdex directly. Note for later refactorings: the dex checksum location is now in the vdex file, but also in the oat file. This can be revisited after we eventually cleanup OatDexFile. Test: 629-vdex bug: 30937355 Change-Id: I7af8ca63b889370c660d694dd4eb95e78f566a1c
|
b0bbe8e5c28c061bf4ef4086d3bbb2c5c5266979 |
|
19-Nov-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Use input-vdex-fd, or input-vdex in dex2oat. input-vdex-fd is used by installd input-vdex is used by run-tests, and (will be used by) go/lem This change copies the contents of the passed vdex to the new one, unquicken the new vdex, and run the fast verification on the new vdex. bug:30937355 Test: device boots, apps get updated faster with vdex Test: set TEST_VDEX to true in run-test-jar, run all tests Test: 628-vdex Change-Id: Idfbac4de411cebcf8ea7a6af7a417d7c7908dd72
|
608f2ce4b9870354079b9d63d40363914889f01a |
|
19-Oct-2016 |
Jeff Hao <jeffhao@google.com> |
Add new --layout-profile compiler-filter for dex2oat. New compiler filter makes dex2oat call into dexlayout. Added basic test for --layout-profile filter to make sure dex2oat runs to completion and file is valid. Contests of file are not checked. Test: mm test-art-host-gtest-dexlayout_test Bug: 29921113 Change-Id: I4bd0dea3d3f1284c155d1d9dea80a48062e67770
|
1b868498a176705b867e2572cc1bcbd58dbd62d6 |
|
17-Nov-2016 |
Mathieu Chartier <mathieuc@google.com> |
Use type lookup tables in compiler This recently regressed and stopped happening, the fix creates fake OatDexFiles so that the compiler uses the type lookup tables instead of slow FindClassDef and FindTypeId. Perf on host compile Facebook: Before: 2.49%: art::DexFile::FindClassDef(unsigned short) const 1.59%: art::DexFile::FindTypeId(char const*) const After: 0.42%: art::OatDexFile::FindClassDef(art::DexFile const&, char const*, unsigned long) 0%: art::DexFile::FindTypeId(char const*) const 0%: art::DexFile::FindClassDef(unsigned short) const Average install (N6P 960 mhz average of 40 samples): 38.2s -> 35.64s Bug: 32641252 Test: test-art-host, adb install. Change-Id: I34df21dc2c155bc2579c5cafdd91f9cb0fead1a9
|
4acefd33064d37b41ca55c3c9355345a20e5f9c2 |
|
24-Oct-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Encode quickening info in .vdex. We quicken vdex files for performance reasons, but when taking an OTA, we need to revert the quickening to the original instructions. As vdex should be independent of the oat file and oat file versions, we encode the quickening data in the vdex. test: m test-art-host-jit m test-art-host-gtest bug:30937355 Change-Id: I9a543a161b70aa1cff99f8fe6f5b5cab7a6c4d31
|
aad75c6d5bfab2dc8e30fc99fafe8cd2dc8b74d8 |
|
03-Oct-2016 |
Vladimir Marko <vmarko@google.com> |
Revert "Revert "Store resolved Strings for AOT code in .bss."" Fixed oat_test to keep dex files alive. Fixed mips build. Rewritten the .bss GC root visiting and added write barrier to the artResolveStringFromCode(). Test: build aosp_mips-eng Test: m ART_DEFAULT_GC_TYPE=SS test-art-target-host-gtest-oat_test Test: Run ART test suite on host and Nexus 9. Bug: 20323084 Bug: 30627598 This reverts commit 5f926055cb88089d8ca27243f35a9dfd89d981f0. Change-Id: I07fa2278d82b8eb64964c9a4b66cb93726ccda6b
|
5f926055cb88089d8ca27243f35a9dfd89d981f0 |
|
30-Sep-2016 |
Vladimir Marko <vmarko@google.com> |
Revert "Store resolved Strings for AOT code in .bss." There are some issues with oat_test64 on host and aosp_mips-eng. Also reverts "compiler_driver: Fix build." Bug: 20323084 Bug: 30627598 This reverts commit 63dccbbefef3014c99c22748d18befcc7bcb3b41. This reverts commit 04a44135ace10123f059373691594ae0f270a8a4. Change-Id: I568ba3e58cf103987fdd63c8a21521010a9f27c4
|
63dccbbefef3014c99c22748d18befcc7bcb3b41 |
|
21-Sep-2016 |
Vladimir Marko <vmarko@google.com> |
Store resolved Strings for AOT code in .bss. And do some related refactorings. Bug: 20323084 Bug: 30627598 Test: Run ART test suite including gcstress on host and Nexus 9. Test: Run ART test suite including gcstress with baker CC on host and Nexus 9. Test: Build aosp_mips64-eng. Change-Id: I1b12c1570fee8e5da490b47f231050142afcbd1e
|
5d5a36bddbc008cd52a3207aa2b31177c47f9a49 |
|
14-Sep-2016 |
David Brazdil <dbrazdil@google.com> |
Write VerifierDeps into VDEX. This patch serializes VerifierDeps data and writes them into VDEX. It also extends the VDEX header with sizes of the DEX and verifier dependencies sections. Bug: 30937355 Change-Id: I5aa5fc5eb8678533117138e445b757fa771973fb
|
d9c90373d640a5e08072cf469c372e24a8c0fc35 |
|
14-Sep-2016 |
David Brazdil <dbrazdil@google.com> |
Move ArrayRef to runtime/base Will be used in upcoming CLs regarding VDEX and VerifierDeps. Test: m test-art-host Change-Id: I68e611a4a52246c2bdf45eab7c61f3212908afd4
|
7b49e6cade09bc65b3b5f22d45fc9d0a7184e4f2 |
|
01-Sep-2016 |
David Brazdil <dbrazdil@google.com> |
Introduce VDEX file, use it for DEX files This patch introduces a new output file called VDEX. In the future, VDEX files will store pre-validated DEX files which do not need to be re-extracted and re-verified when recompiling, e.g. due to new profiling information or after a system update. With this CL, the OatWriter writes DEX files into the VDEX and the rest of its output into OAT. The OatFile class and related classes are updated to load the VDEX at runtime and mmap the DEX file section from it. Patchoat creates symlinks to the source VDEX files in the target directory or copies the files if passed in as file descriptors. The feature can be disabled by setting the environment variable ART_ENABLE_VDEX to false. Test: m test-art-host Bug: 30937355 Change-Id: I54dcaececf6814c258c80524ec15e2e2ef69c8dd
|
181e1ccc0033a3304f87e3354bf8d3ea9e88690b |
|
01-Sep-2016 |
David Brazdil <dbrazdil@google.com> |
Revert "Revert "Refactor writing type lookup tables into OAT"" OatWriter used to write type lookup tables through an mmap of the DEX section of the OAT file. This approach would not work once the DEX section is moved into the VDEX file, hence it was rewritten to write the data through OutputStream. This reverts commit b92ba6296d4ef5b9a6674120ffaafde7d2511812. Test: m test-art-host Bug: 30937355 Change-Id: Id923f2c8a4f9ce2a3834b9886b4358e1b379b83d
|
b92ba6296d4ef5b9a6674120ffaafde7d2511812 |
|
01-Sep-2016 |
David Brazdil <dbrazdil@google.com> |
Revert "Refactor writing type lookup tables into OAT" Gtest not happy. This reverts commit 1a069a5baa78e55dfa95ad989dc137517000b7fd. Change-Id: Iada7a93c1928f7f61462615f3128c6b50bb21859
|
1a069a5baa78e55dfa95ad989dc137517000b7fd |
|
31-Aug-2016 |
David Brazdil <dbrazdil@google.com> |
Refactor writing type lookup tables into OAT OatWriter used to write type lookup tables through an mmap of the DEX section of the OAT file. This approach would not work once the DEX section is moved into the VDEX file, hence it was rewritten to write the data through OutputStream. Test: m test-art-host Bug: 30937355 Change-Id: Id89a680e6e7cbdba47fa7e211a48b92d30a82b29
|
43e10b031e3bb42df54adf8f0525a29d2b308a4e |
|
16-Jul-2016 |
Andreas Gampe <agampe@google.com> |
ART: Replace ScopedFd with FdFile FdFile can now be used like ScopedFd. Remove ScopedFd. Bug: 21192156 Test: m test-art-host Test: m test-art-target (shamu) Change-Id: I32115fa8b2b8bb5aa5d1886eae63522f80ce836b
|
e079e217157b0a3ba006f96403b19046d4846d35 |
|
25-May-2016 |
Vladimir Marko <vmarko@google.com> |
Fix OatWriter to update the header checksum correctly. Make sure we update the checksum with dex file data, type lookup tables and thunks produced by the relative patcher. Bug: 28874264 (cherry picked from commit 7eef3397eda243186a982737aa79c65d5eb95edc) Change-Id: I8c5535ab54a625109bddc85bdf84e48c43883a52
|
7eef3397eda243186a982737aa79c65d5eb95edc |
|
25-May-2016 |
Vladimir Marko <vmarko@google.com> |
Fix OatWriter to update the header checksum correctly. Make sure we update the checksum with dex file data, type lookup tables and thunks produced by the relative patcher. Bug: 28874264 Change-Id: I5b83237132ccb784acea6c195d0ed909ee33b99a
|
9d07e3d128ccfa0ef7670feadd424a825e447d1d |
|
31-Mar-2016 |
Vladimir Marko <vmarko@google.com> |
Clean up OatQuickMethodHeader after Quick removal. This reduces the size of the pre-header by 8 bytes, reducing oat file size and mmapped .text section size. The memory needed to store a CompiledMethod by dex2oat is also reduced, for 32-bit dex2oat by 8B and for 64-bit dex2oat by 16B. The aosp_flounder-userdebug 32-bit and 64-bit boot.oat are each about 1.1MiB smaller. Disable the broken StubTest.IMT, b/27991555 . Change-Id: I05fe45c28c8ffb7a0fa8b1117b969786748b1039
|
09c2a6be63337ee060e2d54bd01cf18be7301d29 |
|
11-Mar-2016 |
David Srbecky <dsrbecky@google.com> |
Add trampoline symbols to native debug info. The debugger needs them to unwind through the trampolines and to understand what is happening in the call stack. Change-Id: Ia554058c3796788adcd7336d620a7734eb366905
|
944da603cde59a4277f3bbc31d860a90842a1a2a |
|
19-Feb-2016 |
Vladimir Marko <vmarko@google.com> |
ART: Allow method references across oat files for multi-image, 2nd attempt. These were disabled because we didn't have sufficient information about the multi-image layout when processing link-time patches in OatWriter. This CL refactors the ELF file creation so that the information is available. Also clean up ImageWriter to use oat file indexes instead of filenames and avoid reopening the oat file to retrieve the checksum. Change-Id: Icc7b528deca29da1e473c8f079521a36d6c4892f
|
c5bfa97c47d656b76f297af8abcd5f7502987399 |
|
05-Feb-2016 |
David Srbecky <dsrbecky@google.com> |
Split elf_writer_debug.cc to several files. Refactoring only. The file has grown significantly over time, and it is time to split it so it can be better managed. Change-Id: Idce0231718add722292f4701df353d5baf31de5f
|
3a2bd29d274f60fdcfabebb052078edef0190164 |
|
27-Jan-2016 |
Andreas Gampe <agampe@google.com> |
ART: Make sure dex files are verified in the compiler Follow-up to 9bdf108885a27ba05fae8501725649574d7c491b. Make sure that dex files from the oat writer are verified with the dex file verifier. Bug: 26793137 Bug: 26808512 Change-Id: I1a5f51751491eead21d8f9f1b31e37c7374c72a5
|
9bdf108885a27ba05fae8501725649574d7c491b |
|
21-Jan-2016 |
Vladimir Marko <vmarko@google.com> |
Revert "Revert "Write dex files to oat file early."" This reverts commit 919f5536182890d2e03f59b961acf8f7c836ff61. Fix linker error (Mac build): Replace inline definition of art::ZipArchive::~ZipArchive() with an out-of-line definition in zip_archive.cc to avoid direct reference to CloseArchive() from libart-compiler due to inlining. Note that libart is linked against -lziparchive but libart-compiler is not. Change-Id: I92620ea0200282ca7ba9b7f61a592cb6468d90d8
|
919f5536182890d2e03f59b961acf8f7c836ff61 |
|
20-Jan-2016 |
Vladimir Marko <vmarko@google.com> |
Revert "Write dex files to oat file early." This reverts commit 625a64aad13905d8a2454bf3cc0e874487b110d5. Breaks the Mac build: Undefined symbols for architecture i386: "_CloseArchive", referenced from: ... in oat_writer.o ld: symbol(s) not found for architecture i386 Change-Id: I21608bc51437834e1e6abde9bcbe5e7d9998197e
|
625a64aad13905d8a2454bf3cc0e874487b110d5 |
|
26-Nov-2015 |
Vladimir Marko <vmarko@google.com> |
Write dex files to oat file early. Write dex files to oat file before we actually open and verify them. Instead, open and verify the copies from the oat file and use these. This way, in the most common case of zipped dex files, we have mmapped dex files instead of inflated dex files. That reduces the number of dirty pages used by dex2oat. Reading /proc/self/statm after we write the oat file for a compilation of a certain large app on Nexus 5 AOSP build with -j1, three attempts before and after this CL gave before: 346061 189462 6269 26 0 140723 0 346189 189450 6269 26 0 140851 0 346061 189463 6269 26 0 140723 0 after: 346186 185808 23040 27 0 140468 0 346186 185819 23040 27 0 140468 0 346186 185822 23040 27 0 140468 0 These values are in pages (4KiB), so while the "size" (=VmSize) is essentially unchanged, the "resident" (=VmRSS) is over 14MiB less and the "shared" (i.e. backed by a file) is 65.5MiB more. That is, the amount of dirty non-pageable memory used is reduced by about 80MiB. The oat file format has changed slightly, the class offset table has been moved from the OatDexFile to its own section. This actually fixes the alignment of these offsets as they could have been unaligned previously, yet accessed as normal with significant performance impact if the kernel has to emulate the unaligned access (say, mips). Change-Id: I0f4799bb1f1ca28e3533156a3494f55345c3e10a
|
49b0f45d5a9023653ab00c355735910aa51ee0ba |
|
10-Dec-2015 |
Vladimir Marko <vmarko@google.com> |
Refactor and clean up OatWriter and Dex2Oat. This is in preparation for early writing of dex files to oat file. Change-Id: I31195f3c94eb8ff676c600c60bd35ae531f457b4
|
10c13565474de2786aad7c2e79757ea250747a15 |
|
25-Nov-2015 |
Vladimir Marko <vmarko@google.com> |
Refactor oat file writing to give Dex2Oat more control. This is the first step towards writing dex files to oat file and mapping them from there for the actual AOT compilation. Change-Id: Icb0d27487eaf6ba3a66c157e695f9bdc5bb9cf9a
|
da5b28adf5ba013f0784578a8b97577782e23d95 |
|
05-Nov-2015 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Add basic image writer support for app images"" No changes, bug fixed in: https://android-review.googlesource.com/#/c/180886/ Bug: 22858531 This reverts commit 4b018565e57c3349a3c1b5ec8ac9dae261c5e00b. Change-Id: I86d9c2b55d535d803c6e1b3b8b4836bf6ff077e5
|
4b018565e57c3349a3c1b5ec8ac9dae261c5e00b |
|
05-Nov-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Add basic image writer support for app images" interpreter and jit tests fail. Bug: 22858531 This reverts commit c033474cfbfe1e963c07fa5c38aed02e35ed6f91. Change-Id: Ic12a3e2a1908ac0db52d21a0b44b2508c88b2585
|
c033474cfbfe1e963c07fa5c38aed02e35ed6f91 |
|
02-Nov-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add basic image writer support for app images Needed to handle references from app image -> boot image. Generate app images for tests to enable some testing. Bug: 22858531 Change-Id: I1af98b6c4dfcb3a147fb5b0dea64aa4946c7ce57
|
d9786b0e5be23ea0258405165098b4216579209c |
|
14-Oct-2015 |
Artem Udovichenko <artem.u@samsung.com> |
Implementation of fast lookup table to search class_def by descriptor Lookup table is a hash table which built at compile time and stored into oat file. At runtime the table is restored and used in the method DexFile::FindClassDef(const char*) to perform fast search of the class_def_idx by class descriptor. Advantages of the lookup table over the HashSet (runtime/base/hash_set.h) are: 1. Lookup table is built at compile time and uses read-only memory at runtime 2. Lookup table uses less memory then DexFile::Index (less by 80% for /system/framework/framework.jar on Nexus5) 3. Lookup table does less string comparisons compared with HashSet (less by 70% for zygote process on Nexus5) The disadvantage of the lookup table is it increased boot.oat size by 0.2% on Nexus5 and application .oat file by 0.3% in average on Nexus5. mathieuc changes: Create lookup table in dex2oat to speed up compilation. Clean up code to follow style guide and use less static functions. Added performance measurements. Compile ~100 APKs 5 times with filter interpret-only: Before: real 1m8.989s user 0m59.318s sys 0m7.773s After: real 1m1.493s user 0m52.055s sys 0m7.581s App launch (AOSP N5 maps, average of 45 runs): Before: 966.84ms After: 923.733ms Launch speedup is 4.7% Memory usage compared to HashSet index on 50 various APK: 32 bit: HashSet ~625694b vs TypeLookupTable ~404268b 64 bit: HashSet ~1251390b vs TypeLookupTable ~404268b Bug: 10921004 Bug: 20269715 Change-Id: I7246c1d9ad9fe81fe5c5907a4bf70396d8f9242a
|
06d7aaa75f3d6d21fe904d54208b28e486673d97 |
|
16-Oct-2015 |
Vladimir Marko <vmarko@google.com> |
Clean up OatFile. In Setup(), avoid reading beyond the end and use the %zu format specifier instead of %zd for size_t output. Make the .bss section pointers non-const. Change-Id: Ic8f066effe8037b552d8e911c6a5d17370d79ff4
|
09d0943f5efe92c1f3a6b9dbdf255adb0f960a22 |
|
08-Sep-2015 |
Vladimir Marko <vmarko@google.com> |
ART: Use .bss section for dex cache arrays. Change-Id: I5fd507973b56f6a662a02a8c1dd9ac4493fb7b36
|
3cfa4d05afa76e19ca99ec964b535a15c73683f0 |
|
07-Oct-2015 |
Andreas Gampe <agampe@google.com> |
ART: Remove interpreter entrypoints These are no longer used as entrypoints. Make them proper runtime functions local to the interpreter. Bump oat version. Change-Id: Icdd92e20eafc5668b68eeebf55cf624560f462b3
|
3887c468d731420e929e6ad3acf190d5431e94fc |
|
12-Aug-2015 |
Roland Levillain <rpl@google.com> |
Remove unnecessary `explicit` qualifiers on constructors. Change-Id: Id12e392ad50f66a6e2251a68662b7959315dc567
|
90443477f9a0061581c420775ce3b7eeae7468bc |
|
17-Jul-2015 |
Mathieu Chartier <mathieuc@google.com> |
Move to newer clang annotations 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
|
a26cb57f46fd3f27a930d9d688fe8670c1f24754 |
|
23-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
ART stack unwinding fixes for libunwind/gdb/lldb. dex2oat can already generate unwinding and symbol information which allows tools to create backtrace of mixed native and Java code. This is a cherry pick from aosp/master which fixes several issues. Most notably: * It enables generation of ELF-64 on 64-bit systems (in dex2oat, C compilers already produce ELF-64). Libunwind requires ELF-64 on 64-bit systems for backtraces to work. * It enables loading of ELF files with dlopen. This is required for libunwind to be able to generate backtrace of current process (i.e. the process requesting backtrace of itself). * It adds unit test to test the above (32 vs 64 bit, in-proces vs out-of-process, application code vs framework code). * Some other fixes or clean-ups which should not be of much significance but which are easier to include to make the important CLs cherry-pick cleanly. This is squash of the following commits from aosp/master: 7381010 ART: CFI Test e1bbed2 ART: Blacklist CFI test for non-compiled run-tests aab9f73 ART: Blacklist CFI test for JIT 4437219 ART: Blacklist CFI test for Heap Poisoning a3a49fe Switch to using ELF-64 for 64-bit architectures. 297ed22 Write 64-bit address in DWARF if we are on 64-bit architecture. 24981a1 Set correct size of PT_PHDR ELF segment. 1a146bf Link .dynamic to .dynstr 67a0653 Make some parts of ELF more (pointer) aligned. f50fa82 Enable 64-bit CFI tests. 49e1fab Use dlopen to load oat files. 5dedb80 Add more logging output for dlopen. aa03870 Find the dlopened file using address rather than file path. 82e73dc Release dummy MemMaps corresponding to dlopen. 5c40961 Test that we can unwind framework code. 020c543 Add more log output to the CFI test. 88da3b0 ART: Fix CFI test wrt/ PIC a70e5b9 CFI test: kill the other process in native code. ad5fa8c Support generation of CFI in .debug_frame format. 90688ae Fix build - large frame size of ElfWriterQuick<ElfTypes>::Write. 97dabb7 Fix build breakage in dwarf_test. 388d286 Generate just single ARM mapping symbol. f898087 Split .oat_patches to multiple sections. 491a7fe Fix build - large frame size of ElfWriterQuick<ElfTypes>::Write (again). 8363c77 Add --generate-debug-info flag and remove the other two flags. 461d72a Generate debug info for core.oat files. Bug: 21924613 Change-Id: I3f944a08dd2ed1df4d8a807da4fee423fdd35eb7
|
f8980875ef8fb0ce86be4ed2c0af7070f5ae9cfd |
|
22-May-2015 |
David Srbecky <dsrbecky@google.com> |
Split .oat_patches to multiple sections. .oat_patches section currently contains encoded patch locations for several other sections. Split it to several sections - one for each of the destination sections. For example, .text.oat_patches section contains patch locations for the .text section. This ensures that if we strip some the sections using standard tools, we strip the corresponding .oat_patches section as well. It also makes the overall design simpler. I should have done it this way in the first place. Since ApplyOatPatches has been simplified and uses unaligned memory access, this also fixes bug 21403573. Bug:20556771 Bug:21403573 Change-Id: Iae7c423911507b524eec500e8d61744046fcd3ba
|
bc90fd09e09a845ae6ea0d84ad67560575a94142 |
|
22-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Major refactoring of ElfBuilder. Simplify ElfBuilder by removing duplicated or redundant code. Many of the repeated code patterns were replaced by just looping over the list of all sections. Methods Init() and Write() have been merged into one. The split between those was rather arbitrary, but it was there for a reason. It allowed creation of raw sections between the calls which may have depended on layout decisions done in Init(), but not in Write() (e.g. knowing of offset of .text). This has been replaced by more generic solution. All sections are asked about their size first and complete file layout is calculated. Then the sections are asked to write their content (potentially using the layout information). This should be pure refactoring CL - the compiler should produce bit for bit identical output as before. Change-Id: I281d13d469801bd8288b36b360d200d98a3e92d7
|
2cebb24bfc3247d3e9be138a3350106737455918 |
|
22-Apr-2015 |
Mathieu Chartier <mathieuc@google.com> |
Replace NULL with nullptr Also fixed some lines that were too long, and a few other minor details. Change-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb
|
2f6cdb01f74772c1c521a125776ef57ea3c73d43 |
|
11-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Relocate DWARF using .oat_patches. The current solution is to hard-code knowledge of DWARF in the linker. This works for simple use of DWARF, but breaks as soon as I try to do anything more complex. Making the linker fully support DWARF would be non-trivial task and would be essentially rewrite. Using .oat_patches is much easier solution. Relocating .debug_* sections required extending .oat_patches to support more sections than just .text. I have encoded each section as null-terminated section name followed by ULEB128 deltas. The ULEB128 encoding shrinks .oat_patches for .text by factor of about 6 with 64-bit compiler, and factor of 3 with 32-bit compiler. On the other hand, it grows by the extra .oat_patches for DWARF which were not present before (if debug symbols are included). Overall, it is still a clear improvement even with the DWARF patches. Change-Id: I78ffeda0f8a3da03341995a3b5ef15c954e16e9f
|
3b9d57ab580a0593635a7dbe3dd2e2c76274f9fa |
|
10-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Move DWARF related code in ElfWriter to its own file. This is purely for organisation. The DWARF related code is becoming more complex and I do not want to keep mixing it with the ElfWriter. The ElfWriter probably should not be dealing with the fine details of DWARF generation. I intend to do much more work on DWARF in the future so this situatuion would only get worse as the code grows. The code could also use some refactoring and splitting. However, I have mostly just moved it in this CL. Change-Id: I6e3401a2b745ddf991b440ad7899ad7d4b921be6
|
0df9e1faed9b095b084c4eca6ee59d24fba21c9f |
|
07-Apr-2015 |
David Srbecky <dsrbecky@google.com> |
Remove duplicate of DexFile::DecodeDebugInfo. Call DexFile::DecodeDebugInfo instead of having a local copy. Change-Id: I4f94fd56a81fea1a2d10d5a26b9650d6d7ff9448
|
b163bb742a099c1808907b513ae39068b63b1692 |
|
31-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Refactor RelativePatcher out of OatWriter. Move the relative patcher classes to compiler/linker/ and compiler/linker/<arch>/ . Refactor them to avoid OatWriter dependency so that they can be unit tested. Add tests for x86 and x86-64. Change-Id: I1b42baa9fc431378e4cce1399bec590c5b5a409f
|
dc56cc509d8e1718ad321f7a91661dbe85ec8cef |
|
27-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
PC-relative loads from dex cache arrays for x86-64. Change-Id: I6cfe22c7e69512b3c0f95b073aaa572db74ec189
|
6f7158927fee233255f8e96719c374694b10cad3 |
|
30-Mar-2015 |
David Srbecky <dsrbecky@google.com> |
Write .debug_line section using the new DWARF library. Also simplify dex to java mapping and handle mapping in prologues and epilogues. Change-Id: I410f06024580f2a8788f2c93fe9bca132805029a
|
c74658b6cf6af53480b3fa07950dcc0a9231ef6a |
|
31-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Cortex-A53 Erratum 843419 workaround in OatWriter. Bug: 19983916 Change-Id: I572248d035200bb04f74eb3ae065e862572628a0
|
20f85597828194c12be10d3a927999def066555e |
|
19-Mar-2015 |
Vladimir Marko <vmarko@google.com> |
Fixed layout for dex caches in boot image. Define a fixed layout for dex cache arrays (type, method, string and field arrays) for dex caches in the boot image. This gives those arrays fixed offsets from the boot image code and allows PC-relative addressing of their elements. Use the PC-relative load on arm64 for relevant instructions, i.e. invoke-static, invoke-direct, const-string, const-class, check-cast and instance-of. This reduces the arm64 boot.oat on Nexus 9 by 1.1MiB. This CL provides the infrastructure and shows on the arm64 the gains that we can achieve by having fixed dex cache arrays' layout. To fully use this for the boot images, we need to implement the PC-relative addressing for other architectures. To achieve similar gains for apps, we need to move the dex cache arrays to a .bss section of the oat file. These changes will be implemented in subsequent CLs. (Also remove some compiler_driver.h dependencies to reduce incremental build times.) Change-Id: Ib1859fa4452d01d983fd92ae22b611f45a85d69b
|
5c42c29b89286e5efa4a4613132b09051ce5945b |
|
25-Feb-2015 |
Vladimir Marko <vmarko@google.com> |
Add support for .bss section in oat files. Change-Id: I779b80b8139d9afdc28373f8c68edff5df7726ce
|
e5f13e57ff8fa36342beb33830b3ec5942a61cca |
|
24-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Revert "Revert "Add JIT"" Added missing EntryPointToCodePointer. This reverts commit a5ca888d715cd0c6c421313211caa1928be3e399. Change-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af
|
a5ca888d715cd0c6c421313211caa1928be3e399 |
|
24-Feb-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Add JIT" Sorry, run-test crashes on target: 0-05 12:15:51.633 I/DEBUG (27995): Abort message: 'art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast<uintptr_t>(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc=71e3366b code=0x71e3362d size=ad000000' 10-05 12:15:51.633 I/DEBUG (27995): r0 00000000 r1 0000542b r2 00000006 r3 00000000 10-05 12:15:51.633 I/DEBUG (27995): r4 00000006 r5 b6f9addc r6 00000002 r7 0000010c 10-05 12:15:51.633 I/DEBUG (27995): r8 b63fe1e8 r9 be8e1418 sl b6427400 fp b63fcce0 10-05 12:15:51.633 I/DEBUG (27995): ip 0000542b sp be8e1358 lr b6e9a27b pc b6e9c280 cpsr 40070010 10-05 12:15:51.633 I/DEBUG (27995): Bug: 17950037 This reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4. Change-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3
|
2535abe7d1fcdd0e6aca782b1f1932a703ed50a4 |
|
17-Feb-2015 |
Mathieu Chartier <mathieuc@google.com> |
Add JIT Currently disabled by default unless -Xjit is passed in. The proposed JIT is a method JIT which works by utilizing interpreter instrumentation to request compilation of hot methods async during runtime. JIT options: -Xjit / -Xnojit -Xjitcodecachesize:N -Xjitthreshold:integervalue The JIT has a shared copy of a compiler driver which is accessed by worker threads to compile individual methods. Added JIT code cache and data cache, currently sized at 2 MB capacity by default. Most apps will only fill a small fraction of this cache however. Added support to the compiler for compiling interpreter quickened byte codes. Added test target ART_TEST_JIT=TRUE and --jit for run-test. TODO: Clean up code cache. Delete compiled methods after they are added to code cache. Add more optimizations related to runtime checks e.g. direct pointers for invokes. Add method recompilation. Move instrumentation to DexFile to improve performance and reduce memory usage. Bug: 17950037 Change-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca
|
956af0f0cb05422e38c1d22cbef309d16b8a1a12 |
|
11-Dec-2014 |
Elliott Hughes <enh@google.com> |
Remove portable. Change-Id: I3bf3250fa866fd2265f1b115d52fa5dedc48a7fc
|
376b2bbf7c39108223a7a01568a7b4b04d84eeac |
|
09-Dec-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Ensure stack maps are 4 byte aligned. With the recent move to gcc 4.9, we are hitting alignment SIGBUS on ARM. The reason is that gcc will optimize two consecutive 32bits loads into one 64bits load, and the instruction (ldrd) will fail if the data is not aligned. Also removed the emission of mapping table when a method is optimized. The information can be found in the StackMap itself. Change-Id: Icf79406c18a3f4db3c05d52fc2c0dd2e35bf0f8f
|
3115877616e44b245ecf2c5466d52c749086d3b0 |
|
25-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix oatwriter code deduping Now that the GC maps are part of the oat method header they need to be checked in CodeOffsetsKeyComparator. Bug: 18523556 Change-Id: I539a6e7216166342b22515c1e2cf831dad32e41e (cherry picked from commit 4cdf4508903d13fd0f9fba5690aeac1b368db81b)
|
4cdf4508903d13fd0f9fba5690aeac1b368db81b |
|
25-Nov-2014 |
Mathieu Chartier <mathieuc@google.com> |
Fix oatwriter code deduping Now that the GC maps are part of the oat method header they need to be checked in CodeOffsetsKeyComparator. Bug: 18523556 Change-Id: I539a6e7216166342b22515c1e2cf831dad32e41e
|
785d2f2116bb57418d81bb55b55a087afee11053 |
|
04-Nov-2014 |
Andreas Gampe <agampe@google.com> |
ART: Replace COMPILE_ASSERT with static_assert (compiler) Replace all occurrences of COMPILE_ASSERT in the compiler tree. Change-Id: Icc40a38c8bdeaaf7305ab3352a838a2cd7e7d840
|
7c2ad5af0bdd3cc1069038f8e3422d99aeb5f44c |
|
24-Sep-2014 |
Vladimir Marko <vmarko@google.com> |
Implement method calls using relative BL on ARM64. Change-Id: I9e5d0b6c100b6cddd6bbb7ab07cff77ab104ea31
|
f4da675bbc4615c5f854c81964cac9dd1153baea |
|
01-Aug-2014 |
Vladimir Marko <vmarko@google.com> |
Implement method calls using relative BL on ARM. Store the linker patches with each CompiledMethod instead of keeping them in CompilerDriver. Reorganize oat file creation to apply the patches as we're writing the method code. Add framework for platform-specific relative call patches in the OatWriter. Implement relative call patches for ARM. Change-Id: Ie2effb3d92b61ac8f356140eba09dc37d62290f8
|
e3ea83811d47152c00abea24a9b420651a33b496 |
|
08-Aug-2014 |
Yevgeny Rouban <yevgeny.y.rouban@intel.com> |
ART source line debug info in OAT files OAT files have source line information enough for ART runtime needs like jump to/from interpreter and thread suspension. But this information is not enough for finer grained source level debugging and low-level profiling (VTune or perf). This patch adds to OAT files two additional sections: .debug_line - DWARF formatted Elf32 section with detailed source line information (mapping from native PC to Java source lines). In addition to the debugging symbols added using the dex2oat option --include-debug-symbols, the source line information is added to the section .debug_line. The source line info can be read by many Elf reading tools like objdump, readelf, dwarfdump, gdb, perf, VTune, ... gdb can use this debug line information in x86. In 64-bit mode the information can be used if the oat file is mapped in the lower address space (address has higher 32 bits zeroed). Relocation works. Testing: 1. art/test/run-test --host --gdb [--64] 001-HelloWorld 2. in gdb: break Main.java:19 3. in gdb: break Runtime.java:111 4. in gdb: run - stops at void java.lang.Runtime.<init>() 5. in gdb: backtrace - shows call stack down to main() 6. in gdb: continue - stops at void Main.main() (only in 32-bit mode) 7. in gdb: backtrace - shows call stack down to main() 8. objdump -W <oat-file> - addresses are from VMA range of .text section reported by objdump -h <file> 9. dwarfdump -ka <oat-file> - no errors expected Size of aosp-x86-eng boot.oat increased by 11% from 80.5Mb to 89.2Mb with two sections added .debug_line (7.2Mb) and .rel.debug (1.5Mb). Change-Id: Ib8828832686e49782a63d5529008ff4814ed9cda Signed-off-by: Yevgeny Rouban <yevgeny.y.rouban@intel.com>
|
79273802f2b788bcd3eb76edf4df1bcaa57f886f |
|
06-Aug-2014 |
Andreas Gampe <agampe@google.com> |
ART: Rework CFA frame initialization and writing code Move eh_frame initialization code and CFI writing code to elf_writer_quick to remove hard-wired dependencies on specific Quick-compiler backends. Change-Id: I27ee8ce7245da33a20c90e0086b8d4fd0a2baf4d
|
a59dd80f9f48cb750d329d4d4af2d99d72b484d1 |
|
03-Jul-2014 |
Alex Light <allight@google.com> |
Runtime can now be set to require relocation Add a pair of runtime flags -Xrelocate and -Xnorelocate that can force the runtime to require that all files that are run are relocated, to prevent attacks based on the known art base address. Add support for running patchoat on oat files compiled without an image. Change run-test to have new --prebuild and --relocate flags. Bug: 15358152 Change-Id: I91166c62dd1ab80e5cbcb7883a2cd0d56afca32d
|
22f8e5c82d12951be38cd893426e13bee33fd69d |
|
09-Jul-2014 |
Andreas Gampe <agampe@google.com> |
Revert "Revert "ART: Key-Value Store in Oat header"" This reverts commit 452bee5da9811f62123978e142bd67b385e9ff82. Heap-allocate a couple of objects in dex2oat to avoid large frame size. Includes fixes originally in 100596 and 100605. Change-Id: Id51a44198c973c91f0a3f87b9d992a5dc110c6f8
|
c87d27b25994da8670d82a8f7bad6327b693bfff |
|
27-Jun-2014 |
Andreas Gampe <agampe@google.com> |
ART: Key-Value Store in Oat header Allows the storage of string-string pairs in the oat header. The first significant use of this is storing the implicit-check flags, so that an oat file can be rejected if it doesn't agree with the current runtime. Bump the oat version as the header structure changes. Change-Id: I15a1c16886e6b8fa7b881c918c19c1efa5c7c00f
|
452bee5da9811f62123978e142bd67b385e9ff82 |
|
09-Jul-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "ART: Key-Value Store in Oat header" Broke arm64 build. This reverts commit c87d27b25994da8670d82a8f7bad6327b693bfff. Change-Id: I4c2ade295d2b5aa77fc3ad810e0e859629a5bf09
|
78382fa44ee505cf16835e4d22515e7252a90864 |
|
07-Jun-2014 |
Alex Light <allight@google.com> |
Optionally add debug symbols to ELF files made by quick compiler. Added debug symbols to ELF files created by dex2oat using the quick compiler. Adds two flags --include-debug-symbols and --no-include-debug-symbols for dex2oat that control the inclusion of these debug symbols. Debug info is added by default if kIsDebugBuild is true. Fixed bug where Intel DWARF information would not correctly deal with deduplicated code the binary. Changed the portable compiler code path in dex2oat.cc so that symbols will not be stripped when run with --include-debug-symbols. Change-Id: Ia2eb2f654dedf0e5e8606f7744e05b8d14155fb1
|
700a402244a1a423da4f3ba8032459f4b65fa18f |
|
20-May-2014 |
Ian Rogers <irogers@google.com> |
Now we have a proper C++ library, use std::unique_ptr. Also remove the Android.libcxx.mk and other bits of stlport compatibility mechanics. Change-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61
|
507dfdd147c97bfbadebfd63584d094b6a4e7b47 |
|
16-May-2014 |
Ian Rogers <irogers@google.com> |
Compatibility layer to transition from UniquePtr to std::unique_ptr. Use ART_WITH_STLPORT (enabled for the target) to cause the use of UniquePtr, for the host switch to std::unique_ptr. For now the type remains called UniquePtr. Make dalvik compile with clang on the host, move its build to C++11. Change-Id: I5ba8d2757904bc089ed62047ea03de3c0853fb12
|
7624d25dad2d1ba25969ae704fccf68649103ae5 |
|
02-May-2014 |
Vladimir Marko <vmarko@google.com> |
Move quick frame info to OatQuickMethodHeader. Rename OatMethodHeader to OatQuickMethodHeader, move frame info from OatMethodOffsets to OatQuickMethodHeader. Retrieve the info from other places for non-quick methods (portable compiled bytecode or jni stub, generic jni, runtime, abstract and proxy). This change has a libcore/ companion CL "Remove ArtMethod's quick fields for frame size and spills." https://android-review.googlesource.com/94164 Bug: 11767815 Change-Id: I0e31a7875d76732e1ec479c86b9b5ca01203507f
|
8a630577ed2d9e9571c3434c505e5de223b23c07 |
|
09-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Move mapping table and vmap table offsets to OatMethodHeader. This change has a libcore/ companion CL "Remove ArtMethod's quick fields mapping table and vmap table." https://android-review.googlesource.com/91254 Bug: 11767815 Change-Id: I46ce2067e1ecd915da3890606498e31ffc332813
|
96c6ab93336b972a38bd2448bcccf19188b8389b |
|
08-Apr-2014 |
Vladimir Marko <vmarko@google.com> |
Separate maps from code in oat file. Write all GC maps first, then all mapping tables and then all vmap tables and only then align the offset to page size and write all method code chunks with headers. Bug: 11767815 Change-Id: Ic83555c8303c5be119afc43e95e58c0a32ff2a4f
|
d6ed642458c8820e1beca72f3d7b5f0be4a4b64b |
|
10-Apr-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Revert "Use trampolines for calls to helpers""" This reverts commit f9487c039efb4112616d438593a2ab02792e0304. Change-Id: Id48a4aae4ecce73db468587967968a3f7618b700
|
f9487c039efb4112616d438593a2ab02792e0304 |
|
09-Apr-2014 |
Dave Allison <dallison@google.com> |
Revert "Revert "Use trampolines for calls to helpers"" This reverts commit 081f73e888b3c246cf7635db37b7f1105cf1a2ff. Change-Id: Ibd777f8ce73cf8ed6c4cb81d50bf6437ac28cb61 Conflicts: compiler/dex/quick/mir_to_lir.h
|
081f73e888b3c246cf7635db37b7f1105cf1a2ff |
|
07-Apr-2014 |
Dave Allison <dallison@google.com> |
Revert "Use trampolines for calls to helpers" This reverts commit 754ddad084ccb610d0cf486f6131bdc69bae5bc6. Change-Id: Icd979adee1d8d781b40a5e75daf3719444cb72e8
|
754ddad084ccb610d0cf486f6131bdc69bae5bc6 |
|
19-Feb-2014 |
Dave Allison <dallison@google.com> |
Use trampolines for calls to helpers This is an ARM specific optimization to the compiler that uses trampoline islands to make calls to runtime helper functions. The intention is to reduce the size of the generated code (by 2 bytes per call) without affecting performance. By default this is on when generating an OAT file. It is off when compiling to memory. To switch this off in dex2oat, use the command line option: --no-helper-trampolines Enhances disassembler to print the trampoline entry on the BL instruction like this: 0xb6a850c0: f7ffff9e bl -196 (0xb6a85000) ; pTestSuspend Bug: 12607709 Change-Id: I9202bdb7cf21252ad807bd48701f1f6ce8e3d0fe
|
2da882315a61072664f7ce3c212307342e907207 |
|
27-Feb-2014 |
Andreas Gampe <agampe@google.com> |
Initial changes towards Generic JNI option Some initial changes that lead to an UNIMPLEMENTED. Works by not compiling for JNI right now and tracking native methods which have neither quick nor portable code. Uses new trampoline. Change-Id: I5448654044eb2717752fd7359f4ef8bd5c17be6e
|
ae9fd93c39a341e2dffe15c61cc7d9e841fa92c4 |
|
11-Feb-2014 |
Mark Mendell <mark.p.mendell@intel.com> |
Tell GDB about Quick ART generated code This is actually a lot of work. To do this, we need: .debug_info .debug_abbrev .debug_frame .debug_str These are generated into the OAT file by OatWriter and ElfWriterQuick. Since the Quick ART runtime doesn't use dlopen to load the OAT files, GDB can't find this information. Use the alternate GDB JIT interface, which can be invoked at runtime. To use this interface, an ELF image needs to be built in memory. Read the information from the OAT file, fixup the addresses to point to the real locations, add a symbol table to hold the .text symbol, and then let GDB know about the information, which will be read from the runtime address space. This is quite primitive now, and could be cleaned up considerably. It probably needs symbol table entries for the methods, and descriptions of parameters and return types. Currently only supported for X86. This defaults to enabled for debug builds. Added dexoat --gen-gdb-info and --no-gen-gdb-info flags to override. Change-Id: I4d18b2370f6dfaa00c8cc1925f10717be3bd1a62 Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
|
3d504075f7c1204d581923460754bf6d3714b13f |
|
01-Mar-2014 |
Ian Rogers <irogers@google.com> |
Make out arguments non-reference types. Also, tidy some portable related code. Change-Id: I67c8aa52eef8b556ca117ecda1b1e75465ba06a5
|
ef7d42fca18c16fbaf103822ad16f23246e2905d |
|
06-Jan-2014 |
Ian Rogers <irogers@google.com> |
Object model changes to support 64bit. Modify mirror objects so that references between them use an ObjectReference value type rather than an Object* so that functionality to compress larger references can be captured in the ObjectRefererence implementation. ObjectReferences are 32bit and all other aspects of object layout remain as they are currently. Expand fields in objects holding pointers so they can hold 64bit pointers. Its expected the size of these will come down by improving where we hold compiler meta-data. Stub out x86_64 architecture specific runtime implementation. Modify OutputStream so that reads and writes are of unsigned quantities. Make the use of portable or quick code more explicit. Templatize AtomicInteger to support more than just int32_t as a type. Add missing, and fix issues relating to, missing annotalysis information on the mutator lock. Refactor and share implementations for array copy between System and uses elsewhere in the runtime. Fix numerous 64bit build issues. Change-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822
|
ca368cb576cf6a436a32c357fca51fbb3082d7a9 |
|
16-Nov-2013 |
Ian Rogers <irogers@google.com> |
Break apart oat writing times. Change-Id: I11045e29dc58ed1efbd19070ec1dcafc1044c95a
|
88474b416eb257078e590bf9bc7957cee604a186 |
|
24-Oct-2013 |
Jeff Hao <jeffhao@google.com> |
Implement Interface Method Tables (IMT). Change-Id: Idf7fe85e1293453a8ad862ff2380dcd5db4e3a39
|
ba150c37d582eeeb8c11ba5245edc281cf31793c |
|
28-Aug-2013 |
Brian Carlstrom <bdc@google.com> |
Omit OatMethodOffsets for classes without compiled code Change-Id: If0d290f4aebc778ff12d8fed017c270ad2ac3220
|
193bad9b9cfd10642043fa2ebbfc68bd5f9ede4b |
|
30-Aug-2013 |
Mathieu Chartier <mathieuc@google.com> |
Multi threaded hashed deduplication during compilation. Moved deduplication to be in the compiler driver instead of oat writer. This enables deduplication to be performed on multiple threads. Also added a hash function to avoid excessive comparison of byte arrays. Improvements: Before (alloats host): real 1m6.967s user 4m22.940s sys 1m22.610s Thinkfree.apk (target mako): 0m23.74s real 0m50.95s user 0m9.50s system 0m24.62s real 0m50.61s user 0m10.07s system 0m24.22s real 0m51.44s user 0m10.09s system 0m23.70s real 0m51.05s user 0m9.97s system 0m23.50s real 0m50.74s user 0m10.63s system After (alloats host): real 1m5.705s user 4m44.030s sys 1m29.990s Thinkfree.apk (target mako): 0m23.32s real 0m51.38s user 0m10.00s system 0m23.49s real 0m51.20s user 0m9.80s system 0m23.18s real 0m50.80s user 0m9.77s system 0m23.52s real 0m51.22s user 0m10.02s system 0m23.50s real 0m51.55s user 0m9.46s system Bug: 10552630 Change-Id: Ia6d06a747b86b0bfc4473b3cd68f8ce1a1c7eb22
|
3f3d22c8fc89d754172858d1770f16916b407d8b |
|
28-Aug-2013 |
Ian Rogers <irogers@google.com> |
Reduce the scope of a ScopedObjectAccess in dex2oat. Allow concurrent GCs during image writing, etc. Change-Id: I89b70a6dfb17f58b156e164c91457337f1c2648f
|
96faf5b363d922ae91cf25404dee0e87c740c7c5 |
|
10-Aug-2013 |
Ian Rogers <irogers@google.com> |
Uleb128 compression of vmap and mapping table. Bug 9437697. Change-Id: I30bcb97d12cd8b46d3b2cdcbdd358f08fbb9947a (cherry picked from commit 1809a72a66d245ae598582d658b93a24ac3bf01e)
|
468532ea115657709bc32ee498e701a4c71762d4 |
|
05-Aug-2013 |
Ian Rogers <irogers@google.com> |
Entry point clean up. Create set of entry points needed for image methods to avoid fix-up at load time: - interpreter - bridge to interpreter, bridge to compiled code - jni - dlsym lookup - quick - resolution and bridge to interpreter - portable - resolution and bridge to interpreter Fix JNI work around to use JNI work around argument rewriting code that'd been accidentally disabled. Remove abstact method error stub, use interpreter bridge instead. Consolidate trampoline (previously stub) generation in generic helper. Simplify trampolines to jump directly into assembly code, keeps stack crawlable. Dex: replace use of int with ThreadOffset for values that are thread offsets. Tidy entry point routines between interpreter, jni, quick and portable. Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e (cherry picked from commit 848871b4d8481229c32e0d048a9856e5a9a17ef9)
|
1809a72a66d245ae598582d658b93a24ac3bf01e |
|
10-Aug-2013 |
Ian Rogers <irogers@google.com> |
Uleb128 compression of vmap and mapping table. Bug 9437697. Change-Id: I30bcb97d12cd8b46d3b2cdcbdd358f08fbb9947a
|
848871b4d8481229c32e0d048a9856e5a9a17ef9 |
|
05-Aug-2013 |
Ian Rogers <irogers@google.com> |
Entry point clean up. Create set of entry points needed for image methods to avoid fix-up at load time: - interpreter - bridge to interpreter, bridge to compiled code - jni - dlsym lookup - quick - resolution and bridge to interpreter - portable - resolution and bridge to interpreter Fix JNI work around to use JNI work around argument rewriting code that'd been accidentally disabled. Remove abstact method error stub, use interpreter bridge instead. Consolidate trampoline (previously stub) generation in generic helper. Simplify trampolines to jump directly into assembly code, keeps stack crawlable. Dex: replace use of int with ThreadOffset for values that are thread offsets. Tidy entry point routines between interpreter, jni, quick and portable. Change-Id: I52a7c2bbb1b7e0ff8a3c3100b774212309d0828e
|
c50d8e11a098cc5c6239aa86b47d4fcf8cbb4899 |
|
24-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Remove OatWriter buffering to memory for ElfWriterQuick This allows the oat contents to be directly written to the file. Change-Id: Ibc7ddf57477b152f07784b52f7334be73fd22833
|
fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d |
|
17-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Fix multiple inclusion guards to match new pathnames Change-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43
|
7940e44f4517de5e2634a7e07d58d0fb26160513 |
|
12-Jul-2013 |
Brian Carlstrom <bdc@google.com> |
Create separate Android.mk for main build targets The runtime, compiler, dex2oat, and oatdump now are in seperate trees to prevent dependency creep. They can now be individually built without rebuilding the rest of the art projects. dalvikvm and jdwpspy were already this way. Builds in the art directory should behave as before, building everything including tests. Change-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81
|