diff options
| author | Vladimir Marko <vmarko@google.com> | 2016-11-29 15:57:32 +0000 |
|---|---|---|
| committer | Vladimir Marko <vmarko@google.com> | 2017-09-20 10:58:42 +0100 |
| commit | 7452797678c4345d4a9e65b03e00af703c2c5fe0 (patch) | |
| tree | fd23d118a6317737a692402a648217418c3d7b99 /compiler/debug/elf_debug_writer.cc | |
| parent | 3c683150bcf2f1cabbe2e5f9d10d8c670b67fb7e (diff) | |
| download | art-7452797678c4345d4a9e65b03e00af703c2c5fe0.tar.gz art-7452797678c4345d4a9e65b03e00af703c2c5fe0.tar.bz2 art-7452797678c4345d4a9e65b03e00af703c2c5fe0.zip | |
Refactor linker files from compiler/ to dex2oat/.
This shifts some code from the libart-compiler.so to dex2oat
and reduces memory needed for JIT. We also avoid loading the
libart-dexlayout.so for JIT but the memory savings are
minimal (one shared clean page, two shared dirty pages and
some per-app kernel mmap data) as the code has never been
needed in memory by JIT.
aosp_angler-userdebug file sizes (stripped):
lib64/libart-compiler.so: 2989112 -> 2671888 (-310KiB)
lib/libart-compiler.so: 2160816 -> 1939276 (-216KiB)
bin/dex2oat: 141868 -> 368808 (+222KiB)
LOAD/executable elf mapping sizes:
lib64/libart-compiler.so: 2866308 -> 2555500 (-304KiB)
lib/libart-compiler.so: 2050960 -> 1834836 (-211KiB)
bin/dex2oat: 129316 -> 345916 (+212KiB)
Test: m test-art-host-gtest
Test: testrunner.py --host
Test: cd art/; mma; cd -
Change-Id: If62f02847a6cbb208eaf7e1f3e91af4663fa4a5f
Diffstat (limited to 'compiler/debug/elf_debug_writer.cc')
| -rw-r--r-- | compiler/debug/elf_debug_writer.cc | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/debug/elf_debug_writer.cc b/compiler/debug/elf_debug_writer.cc index c5ff85827e..33c46d7e1f 100644 --- a/compiler/debug/elf_debug_writer.cc +++ b/compiler/debug/elf_debug_writer.cc @@ -29,7 +29,7 @@ #include "debug/elf_gnu_debugdata_writer.h" #include "debug/elf_symtab_writer.h" #include "debug/method_debug_info.h" -#include "elf_builder.h" +#include "linker/elf_builder.h" #include "linker/vector_output_stream.h" #include "oat.h" @@ -37,7 +37,7 @@ namespace art { namespace debug { template <typename ElfTypes> -void WriteDebugInfo(ElfBuilder<ElfTypes>* builder, +void WriteDebugInfo(linker::ElfBuilder<ElfTypes>* builder, const ArrayRef<const MethodDebugInfo>& method_infos, dwarf::CFIFormat cfi_format, bool write_oat_patches) { @@ -133,8 +133,9 @@ static std::vector<uint8_t> WriteDebugElfFileForMethodsInternal( const ArrayRef<const MethodDebugInfo>& method_infos) { std::vector<uint8_t> buffer; buffer.reserve(KB); - VectorOutputStream out("Debug ELF file", &buffer); - std::unique_ptr<ElfBuilder<ElfTypes>> builder(new ElfBuilder<ElfTypes>(isa, features, &out)); + linker::VectorOutputStream out("Debug ELF file", &buffer); + std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder( + new linker::ElfBuilder<ElfTypes>(isa, features, &out)); // No program headers since the ELF file is not linked and has no allocated sections. builder->Start(false /* write_program_headers */); WriteDebugInfo(builder.get(), @@ -165,8 +166,9 @@ static std::vector<uint8_t> WriteDebugElfFileForClassesInternal( REQUIRES_SHARED(Locks::mutator_lock_) { std::vector<uint8_t> buffer; buffer.reserve(KB); - VectorOutputStream out("Debug ELF file", &buffer); - std::unique_ptr<ElfBuilder<ElfTypes>> builder(new ElfBuilder<ElfTypes>(isa, features, &out)); + linker::VectorOutputStream out("Debug ELF file", &buffer); + std::unique_ptr<linker::ElfBuilder<ElfTypes>> builder( + new linker::ElfBuilder<ElfTypes>(isa, features, &out)); // No program headers since the ELF file is not linked and has no allocated sections. builder->Start(false /* write_program_headers */); ElfDebugInfoWriter<ElfTypes> info_writer(builder.get()); @@ -192,12 +194,12 @@ std::vector<uint8_t> WriteDebugElfFileForClasses(InstructionSet isa, // Explicit instantiations template void WriteDebugInfo<ElfTypes32>( - ElfBuilder<ElfTypes32>* builder, + linker::ElfBuilder<ElfTypes32>* builder, const ArrayRef<const MethodDebugInfo>& method_infos, dwarf::CFIFormat cfi_format, bool write_oat_patches); template void WriteDebugInfo<ElfTypes64>( - ElfBuilder<ElfTypes64>* builder, + linker::ElfBuilder<ElfTypes64>* builder, const ArrayRef<const MethodDebugInfo>& method_infos, dwarf::CFIFormat cfi_format, bool write_oat_patches); |
