diff options
| -rw-r--r-- | compiler/debug/elf_debug_writer.cc | 23 | ||||
| -rw-r--r-- | compiler/debug/elf_debug_writer.h | 40 | ||||
| -rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 4 |
3 files changed, 36 insertions, 31 deletions
diff --git a/compiler/debug/elf_debug_writer.cc b/compiler/debug/elf_debug_writer.cc index 4f2a007492..0ca7370f98 100644 --- a/compiler/debug/elf_debug_writer.cc +++ b/compiler/debug/elf_debug_writer.cc @@ -114,10 +114,10 @@ std::vector<uint8_t> MakeMiniDebugInfo( } template <typename ElfTypes> -static ArrayRef<const uint8_t> WriteDebugElfFileForMethodInternal( - const InstructionSet isa, +static ArrayRef<const uint8_t> WriteDebugElfFileForMethodsInternal( + InstructionSet isa, const InstructionSetFeatures* features, - const MethodDebugInfo& method_info) { + const ArrayRef<const MethodDebugInfo>& method_infos) { std::vector<uint8_t> buffer; buffer.reserve(KB); VectorOutputStream out("Debug ELF file", &buffer); @@ -125,7 +125,7 @@ static ArrayRef<const uint8_t> WriteDebugElfFileForMethodInternal( // No program headers since the ELF file is not linked and has no allocated sections. builder->Start(false /* write_program_headers */); WriteDebugInfo(builder.get(), - ArrayRef<const MethodDebugInfo>(&method_info, 1), + method_infos, dwarf::DW_DEBUG_FRAME_FORMAT, false /* write_oat_patches */); builder->End(); @@ -137,19 +137,20 @@ static ArrayRef<const uint8_t> WriteDebugElfFileForMethodInternal( return ArrayRef<const uint8_t>(result, buffer.size()); } -ArrayRef<const uint8_t> WriteDebugElfFileForMethod(const InstructionSet isa, - const InstructionSetFeatures* features, - const MethodDebugInfo& method_info) { +ArrayRef<const uint8_t> WriteDebugElfFileForMethods( + InstructionSet isa, + const InstructionSetFeatures* features, + const ArrayRef<const MethodDebugInfo>& method_infos) { if (Is64BitInstructionSet(isa)) { - return WriteDebugElfFileForMethodInternal<ElfTypes64>(isa, features, method_info); + return WriteDebugElfFileForMethodsInternal<ElfTypes64>(isa, features, method_infos); } else { - return WriteDebugElfFileForMethodInternal<ElfTypes32>(isa, features, method_info); + return WriteDebugElfFileForMethodsInternal<ElfTypes32>(isa, features, method_infos); } } template <typename ElfTypes> static ArrayRef<const uint8_t> WriteDebugElfFileForClassesInternal( - const InstructionSet isa, + InstructionSet isa, const InstructionSetFeatures* features, const ArrayRef<mirror::Class*>& types) SHARED_REQUIRES(Locks::mutator_lock_) { @@ -174,7 +175,7 @@ static ArrayRef<const uint8_t> WriteDebugElfFileForClassesInternal( return ArrayRef<const uint8_t>(result, buffer.size()); } -ArrayRef<const uint8_t> WriteDebugElfFileForClasses(const InstructionSet isa, +ArrayRef<const uint8_t> WriteDebugElfFileForClasses(InstructionSet isa, const InstructionSetFeatures* features, const ArrayRef<mirror::Class*>& types) { if (Is64BitInstructionSet(isa)) { diff --git a/compiler/debug/elf_debug_writer.h b/compiler/debug/elf_debug_writer.h index d364521f1b..7f5d24d06e 100644 --- a/compiler/debug/elf_debug_writer.h +++ b/compiler/debug/elf_debug_writer.h @@ -31,24 +31,28 @@ namespace debug { struct MethodDebugInfo; template <typename ElfTypes> -void WriteDebugInfo(ElfBuilder<ElfTypes>* builder, - const ArrayRef<const MethodDebugInfo>& method_infos, - dwarf::CFIFormat cfi_format, - bool write_oat_patches); - -std::vector<uint8_t> MakeMiniDebugInfo(InstructionSet isa, - const InstructionSetFeatures* features, - size_t rodata_section_size, - size_t text_section_size, - const ArrayRef<const MethodDebugInfo>& method_infos); - -ArrayRef<const uint8_t> WriteDebugElfFileForMethod(const InstructionSet isa, - const InstructionSetFeatures* features, - const MethodDebugInfo& method_info); - -ArrayRef<const uint8_t> WriteDebugElfFileForClasses(const InstructionSet isa, - const InstructionSetFeatures* features, - const ArrayRef<mirror::Class*>& types) +void WriteDebugInfo( + ElfBuilder<ElfTypes>* builder, + const ArrayRef<const MethodDebugInfo>& method_infos, + dwarf::CFIFormat cfi_format, + bool write_oat_patches); + +std::vector<uint8_t> MakeMiniDebugInfo( + InstructionSet isa, + const InstructionSetFeatures* features, + size_t rodata_section_size, + size_t text_section_size, + const ArrayRef<const MethodDebugInfo>& method_infos); + +ArrayRef<const uint8_t> WriteDebugElfFileForMethods( + InstructionSet isa, + const InstructionSetFeatures* features, + const ArrayRef<const MethodDebugInfo>& method_infos); + +ArrayRef<const uint8_t> WriteDebugElfFileForClasses( + InstructionSet isa, + const InstructionSetFeatures* features, + const ArrayRef<mirror::Class*>& types) SHARED_REQUIRES(Locks::mutator_lock_); } // namespace debug diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 47581b1f0d..64bb919ef5 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -933,10 +933,10 @@ bool OptimizingCompiler::JitCompile(Thread* self, info.frame_size_in_bytes = method_header->GetFrameSizeInBytes(); info.code_info = stack_map_size == 0 ? nullptr : stack_map_data; info.cfi = ArrayRef<const uint8_t>(*codegen->GetAssembler()->cfi().data()); - ArrayRef<const uint8_t> elf_file = debug::WriteDebugElfFileForMethod( + ArrayRef<const uint8_t> elf_file = debug::WriteDebugElfFileForMethods( GetCompilerDriver()->GetInstructionSet(), GetCompilerDriver()->GetInstructionSetFeatures(), - info); + ArrayRef<const debug::MethodDebugInfo>(&info, 1)); CreateJITCodeEntryForAddress(code_address, std::unique_ptr<const uint8_t[]>(elf_file.data()), elf_file.size()); |