summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Srbecky <dsrbecky@google.com>2015-04-12 14:58:39 +0100
committerDavid Srbecky <dsrbecky@google.com>2015-04-13 21:40:58 +0100
commitc2055cf5d764e7f861818121afec9c7d88465af5 (patch)
treeb05a3d31ed3948aff8ad411be7245048d84198b0
parent2f6cdb01f74772c1c521a125776ef57ea3c73d43 (diff)
downloadart-c2055cf5d764e7f861818121afec9c7d88465af5.tar.gz
art-c2055cf5d764e7f861818121afec9c7d88465af5.tar.bz2
art-c2055cf5d764e7f861818121afec9c7d88465af5.zip
Add test for x86-64 DWARF register mapping.
This is the only mapping which is non-trivial. Change-Id: I59be4b6ffb0ffbbf00ddb72e77e80cfb9e89d9f2
-rw-r--r--compiler/dwarf/dwarf_test.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/compiler/dwarf/dwarf_test.cc b/compiler/dwarf/dwarf_test.cc
index fa12d7e508..98f691a7a1 100644
--- a/compiler/dwarf/dwarf_test.cc
+++ b/compiler/dwarf/dwarf_test.cc
@@ -144,6 +144,40 @@ TEST_F(DwarfTest, DebugFrame64) {
CheckObjdumpOutput(is64bit, "-W");
}
+// Test x86_64 register mapping. It is the only non-trivial architecture.
+// ARM, X86, and Mips have: dwarf_reg = art_reg + constant.
+TEST_F(DwarfTest, x86_64_RegisterMapping) {
+ constexpr bool is64bit = true;
+ DebugFrameOpCodeWriter<> opcodes;
+ for (int i = 0; i < 16; i++) {
+ opcodes.RelOffset(Reg::X86_64Core(i), 0);
+ }
+ DW_CHECK("FDE");
+ DW_CHECK_NEXT("DW_CFA_offset: r0 (rax)");
+ DW_CHECK_NEXT("DW_CFA_offset: r2 (rcx)");
+ DW_CHECK_NEXT("DW_CFA_offset: r1 (rdx)");
+ DW_CHECK_NEXT("DW_CFA_offset: r3 (rbx)");
+ DW_CHECK_NEXT("DW_CFA_offset: r7 (rsp)");
+ DW_CHECK_NEXT("DW_CFA_offset: r6 (rbp)");
+ DW_CHECK_NEXT("DW_CFA_offset: r4 (rsi)");
+ DW_CHECK_NEXT("DW_CFA_offset: r5 (rdi)");
+ DW_CHECK_NEXT("DW_CFA_offset: r8 (r8)");
+ DW_CHECK_NEXT("DW_CFA_offset: r9 (r9)");
+ DW_CHECK_NEXT("DW_CFA_offset: r10 (r10)");
+ DW_CHECK_NEXT("DW_CFA_offset: r11 (r11)");
+ DW_CHECK_NEXT("DW_CFA_offset: r12 (r12)");
+ DW_CHECK_NEXT("DW_CFA_offset: r13 (r13)");
+ DW_CHECK_NEXT("DW_CFA_offset: r14 (r14)");
+ DW_CHECK_NEXT("DW_CFA_offset: r15 (r15)");
+ DebugFrameOpCodeWriter<> initial_opcodes;
+ WriteEhFrameCIE(is64bit, Reg(16), initial_opcodes, &eh_frame_data_);
+ std::vector<uintptr_t> eh_frame_patches;
+ WriteEhFrameFDE(is64bit, 0, 0x0100000000000000, 0x0200000000000000,
+ opcodes.data(), &eh_frame_data_, &eh_frame_patches);
+
+ CheckObjdumpOutput(is64bit, "-W");
+}
+
TEST_F(DwarfTest, DebugLine) {
const bool is64bit = false;
const int code_factor_bits = 1;