summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Srbecky <dsrbecky@google.com>2015-04-13 20:44:26 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-13 20:44:26 +0000
commit6c7bd25b2b2a07740bcd838c2f4024e67be83fd1 (patch)
tree838ee849aceb86966f3a4705b41c92bb0552ed19
parenta2ba36e0e617a02c0d5509699fa5386acb297065 (diff)
parentc2055cf5d764e7f861818121afec9c7d88465af5 (diff)
downloadandroid_art-6c7bd25b2b2a07740bcd838c2f4024e67be83fd1.tar.gz
android_art-6c7bd25b2b2a07740bcd838c2f4024e67be83fd1.tar.bz2
android_art-6c7bd25b2b2a07740bcd838c2f4024e67be83fd1.zip
Merge "Add test for x86-64 DWARF register mapping."
-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;