diff options
author | 2015-12-01 10:16:19 +0000 | |
---|---|---|
committer | 2015-12-01 10:16:19 +0000 | |
commit | d1744d449cf2b56af7e0896b3729fac2a414e3af (patch) | |
tree | cd23e1e0a3cea10cc9a9ae8269a01f75ada8ef0e /compiler/oat_test.cc | |
parent | e51e3f988ba91f0469757738fa55f835e16e37d9 (diff) | |
parent | 10c13565474de2786aad7c2e79757ea250747a15 (diff) |
Merge "Refactor oat file writing to give Dex2Oat more control."
Diffstat (limited to 'compiler/oat_test.cc')
-rw-r--r-- | compiler/oat_test.cc | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/compiler/oat_test.cc b/compiler/oat_test.cc index 030451c1cb..c305b120cb 100644 --- a/compiler/oat_test.cc +++ b/compiler/oat_test.cc @@ -27,6 +27,9 @@ #include "dex/verification_results.h" #include "driver/compiler_driver.h" #include "driver/compiler_options.h" +#include "dwarf/method_debug_info.h" +#include "elf_writer.h" +#include "elf_writer_quick.h" #include "entrypoints/quick/quick_entrypoints.h" #include "mirror/class-inl.h" #include "mirror/object_array-inl.h" @@ -134,11 +137,36 @@ class OatTest : public CommonCompilerTest { /*compiling_boot_image*/false, &timings, &key_value_store); - return compiler_driver_->WriteElf(GetTestAndroidRoot(), - !kIsTargetBuild, - dex_files, - &oat_writer, - file); + std::unique_ptr<ElfWriter> elf_writer = CreateElfWriterQuick( + compiler_driver_->GetInstructionSet(), + &compiler_driver_->GetCompilerOptions(), + file); + + elf_writer->Start(); + + OutputStream* rodata = elf_writer->StartRoData(); + if (!oat_writer.WriteRodata(rodata)) { + return false; + } + elf_writer->EndRoData(rodata); + + OutputStream* text = elf_writer->StartText(); + if (!oat_writer.WriteCode(text)) { + return false; + } + elf_writer->EndText(text); + + elf_writer->SetBssSize(oat_writer.GetBssSize()); + + elf_writer->WriteDynamicSection(); + + ArrayRef<const dwarf::MethodDebugInfo> method_infos(oat_writer.GetMethodDebugInfo()); + elf_writer->WriteDebugInfo(method_infos); + + ArrayRef<const uintptr_t> patch_locations(oat_writer.GetAbsolutePatchLocations()); + elf_writer->WritePatchLocations(patch_locations); + + return elf_writer->End(); } std::unique_ptr<const InstructionSetFeatures> insn_features_; |