summaryrefslogtreecommitdiff
path: root/compiler/cfi_test.h
diff options
context:
space:
mode:
author David Srbecky <dsrbecky@google.com> 2015-05-06 18:27:35 +0100
committer David Srbecky <dsrbecky@google.com> 2015-05-19 15:36:53 +0100
commitad5fa8c5b26a325dc2a9521b87188755046c17f3 (patch)
tree1be28a827fe9e186196ad744eaa3438c1bea3f0a /compiler/cfi_test.h
parentcfee0507f26375fe048ed35f402e61f904db0095 (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.h12
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);