diff options
author | 2015-05-06 18:27:35 +0100 | |
---|---|---|
committer | 2015-05-19 15:36:53 +0100 | |
commit | ad5fa8c5b26a325dc2a9521b87188755046c17f3 (patch) | |
tree | 1be28a827fe9e186196ad744eaa3438c1bea3f0a /compiler/cfi_test.h | |
parent | cfee0507f26375fe048ed35f402e61f904db0095 (diff) |
Support generation of CFI in .debug_frame format.
.debug_frame section is almost identical to .eh_frame section.
There are only minor differences in the CIE and FDE headers.
The main difference is that .eh_frame is intended to be used
at runtime for exception handling and is therefore allocated
within the running program whereas .debug_frame is not.
This makes .debug_frame easier to remove using standard tools.
"objcopy --strip-debug" removes .debug_frame, but not .eh_frame.
(although objcopy can be still be forced to remove .eh_frame)
Similarly, we might want to separate the CFI to separate debug
file or include it as compressed .gnu_debugdata section.
It is more appropriate to use .debug_frame for this purpose.
Bug:20556771
Change-Id: I9d91a333b9fb37523fd6fafccfad89b21d2477af
Diffstat (limited to 'compiler/cfi_test.h')
-rw-r--r-- | compiler/cfi_test.h | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/compiler/cfi_test.h b/compiler/cfi_test.h index f7501d2dda..5e345dbf61 100644 --- a/compiler/cfi_test.h +++ b/compiler/cfi_test.h @@ -30,6 +30,8 @@ namespace art { +constexpr dwarf::CFIFormat kCFIFormat = dwarf::DW_DEBUG_FRAME_FORMAT; + class CFITest : public dwarf::DwarfTest { public: void GenerateExpected(FILE* f, InstructionSet isa, const char* isa_str, @@ -46,11 +48,11 @@ class CFITest : public dwarf::DwarfTest { // Pretty-print CFI opcodes. constexpr bool is64bit = false; dwarf::DebugFrameOpCodeWriter<> initial_opcodes; - dwarf::WriteEhFrameCIE(is64bit, dwarf::DW_EH_PE_absptr, dwarf::Reg(8), - initial_opcodes, &eh_frame_data_); - std::vector<uintptr_t> eh_frame_patches; - dwarf::WriteEhFrameFDE(is64bit, 0, 0, actual_asm.size(), &actual_cfi, - &eh_frame_data_, &eh_frame_patches); + dwarf::WriteDebugFrameCIE(is64bit, dwarf::DW_EH_PE_absptr, dwarf::Reg(8), + initial_opcodes, kCFIFormat, &debug_frame_data_); + std::vector<uintptr_t> debug_frame_patches; + dwarf::WriteDebugFrameFDE(is64bit, 0, 0, actual_asm.size(), &actual_cfi, + kCFIFormat, &debug_frame_data_, &debug_frame_patches); ReformatCfi(Objdump(false, "-W"), &lines); // Pretty-print assembly. auto* opts = new DisassemblerOptions(false, actual_asm.data(), true); |