summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/ChangeLog10
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/addrcfi.c6
-rwxr-xr-xtests/run-addrcfi.sh154
-rwxr-xr-xtests/testfiles390.bz2bin0 -> 3132 bytes
-rwxr-xr-xtests/testfiles390x.bz2bin0 -> 3026 bytes
6 files changed, 172 insertions, 1 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 6192d88e..5871f9d0 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,5 +1,15 @@
2013-08-28 Mark Wielaard <[email protected]>
+ * addrcfi.c (handle_cfi): Handle .debug_frame or .eh_frame
+ completely missing.
+ * run-addrcfi.sh: Add case for EM_S390 ELFCLASS32 and ELFCLASS64.
+ * testfiles390.bz2: New testfile.
+ * testfiles390x.bz2: Likewise.
+ * Makefile.am (EXTRA_DIST): Add testfiles390.bz2 and
+ testfiles390x.bz2.
+
+2013-08-28 Mark Wielaard <[email protected]>
+
* addrcfi.c (handle_cfi): Use printf not error.
* run-addrcfi.sh: Add case for EM_PPC and EM_PPC64.
* testfileppc32.bz2: New testfile.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index bebb5cd3..8e4f88af 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -203,7 +203,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
testfilenolines.bz2 test-core-lib.so.bz2 test-core.core.bz2 \
test-core.exec.bz2 run-addr2line-test.sh \
run-addr2line-i-test.sh testfile-inlines.bz2 \
- testfileppc32.bz2 testfileppc64.bz2
+ testfileppc32.bz2 testfileppc64.bz2 \
+ testfiles390.bz2 testfiles390x.bz2
if USE_VALGRIND
valgrind_cmd='valgrind -q --trace-children=yes --error-exitcode=1 --run-libc-freeres=no'
diff --git a/tests/addrcfi.c b/tests/addrcfi.c
index 398b2918..8a2d126c 100644
--- a/tests/addrcfi.c
+++ b/tests/addrcfi.c
@@ -107,6 +107,12 @@ static int
handle_cfi (Dwfl *dwfl, const char *which, Dwarf_CFI *cfi,
GElf_Addr pc, struct stuff *stuff)
{
+ if (cfi == NULL)
+ {
+ printf ("handle_cfi no CFI (%s): %s\n", which, dwarf_errmsg (-1));
+ return -1;
+ }
+
int result = dwarf_cfi_addrframe (cfi, pc - stuff->bias, &stuff->frame);
if (result != 0)
{
diff --git a/tests/run-addrcfi.sh b/tests/run-addrcfi.sh
index 2f9eb151..adf8d8b3 100755
--- a/tests/run-addrcfi.sh
+++ b/tests/run-addrcfi.sh
@@ -2342,3 +2342,157 @@ dwarf_cfi_addrframe (.eh_frame): no matching address range
vector reg1154 (vr30): undefined
vector reg1155 (vr31): undefined
EOF
+
+# EM_S390 (ELFCLASS32) (function bar 0x4004d8)
+# Note. Only in .eh_frame, there is no .debug_frame.
+# Same as PPC above but with -m31.
+testfiles testfiles390
+testrun_compare ${abs_builddir}/addrcfi -e testfiles390 0x4004d8 <<\EOF
+.eh_frame has 0x4004d8 => [0x4004d8, 0x4004e8):
+ return address in reg14
+ CFA location expression: bregx(15,96)
+ integer reg0 (%r0): undefined
+ integer reg1 (%r1): undefined
+ integer reg2 (%r2): undefined
+ integer reg3 (%r3): undefined
+ integer reg4 (%r4): undefined
+ integer reg5 (%r5): undefined
+ integer reg6 (%r6): same_value
+ integer reg7 (%r7): same_value
+ integer reg8 (%r8): same_value
+ integer reg9 (%r9): same_value
+ integer reg10 (%r10): same_value
+ integer reg11 (%r11): same_value
+ integer reg12 (%r12): same_value
+ integer reg13 (%r13): same_value
+ integer reg14 (%r14): same_value
+ integer reg15 (%r15): same_value
+ FPU reg16 (%f0): undefined
+ FPU reg17 (%f2): undefined
+ FPU reg18 (%f4): undefined
+ FPU reg19 (%f6): undefined
+ FPU reg20 (%f1): undefined
+ FPU reg21 (%f3): undefined
+ FPU reg22 (%f5): undefined
+ FPU reg23 (%f7): undefined
+ FPU reg24 (%f8): same_value
+ FPU reg25 (%f10): same_value
+ FPU reg26 (%f12): same_value
+ FPU reg27 (%f14): same_value
+ FPU reg28 (%f9): same_value
+ FPU reg29 (%f11): same_value
+ FPU reg30 (%f13): same_value
+ FPU reg31 (%f15): same_value
+ control reg32 (%c0): undefined
+ control reg33 (%c1): undefined
+ control reg34 (%c2): undefined
+ control reg35 (%c3): undefined
+ control reg36 (%c4): undefined
+ control reg37 (%c5): undefined
+ control reg38 (%c6): undefined
+ control reg39 (%c7): undefined
+ control reg40 (%c8): undefined
+ control reg41 (%c9): undefined
+ control reg42 (%c10): undefined
+ control reg43 (%c11): undefined
+ control reg44 (%c12): undefined
+ control reg45 (%c13): undefined
+ control reg46 (%c14): undefined
+ control reg47 (%c15): undefined
+ access reg48 (%a0): undefined
+ access reg49 (%a1): undefined
+ access reg50 (%a2): undefined
+ access reg51 (%a3): undefined
+ access reg52 (%a4): undefined
+ access reg53 (%a5): undefined
+ access reg54 (%a6): undefined
+ access reg55 (%a7): undefined
+ access reg56 (%a8): undefined
+ access reg57 (%a9): undefined
+ access reg58 (%a10): undefined
+ access reg59 (%a11): undefined
+ access reg60 (%a12): undefined
+ access reg61 (%a13): undefined
+ access reg62 (%a14): undefined
+ access reg63 (%a15): undefined
+ control reg64 (%pswm): undefined
+ control reg65 (%pswa): undefined
+handle_cfi no CFI (.debug_frame): no error
+EOF
+
+# EM_S390 (ELFCLASS64) (function bar 0x0000000080000510)
+# Note. Only in .eh_frame, there is no .debug_frame.
+# Same as s390 above but without -m31.
+testfiles testfiles390x
+testrun_compare ${abs_builddir}/addrcfi -e testfiles390x 0x0000000080000510 <<\EOF
+.eh_frame has 0x80000510 => [0x80000510, 0x80000524):
+ return address in reg14
+ CFA location expression: bregx(15,160)
+ integer reg0 (%r0): undefined
+ integer reg1 (%r1): undefined
+ integer reg2 (%r2): undefined
+ integer reg3 (%r3): undefined
+ integer reg4 (%r4): undefined
+ integer reg5 (%r5): undefined
+ integer reg6 (%r6): same_value
+ integer reg7 (%r7): same_value
+ integer reg8 (%r8): same_value
+ integer reg9 (%r9): same_value
+ integer reg10 (%r10): same_value
+ integer reg11 (%r11): same_value
+ integer reg12 (%r12): same_value
+ integer reg13 (%r13): same_value
+ integer reg14 (%r14): same_value
+ integer reg15 (%r15): same_value
+ FPU reg16 (%f0): undefined
+ FPU reg17 (%f2): undefined
+ FPU reg18 (%f4): undefined
+ FPU reg19 (%f6): undefined
+ FPU reg20 (%f1): undefined
+ FPU reg21 (%f3): undefined
+ FPU reg22 (%f5): undefined
+ FPU reg23 (%f7): undefined
+ FPU reg24 (%f8): same_value
+ FPU reg25 (%f10): same_value
+ FPU reg26 (%f12): same_value
+ FPU reg27 (%f14): same_value
+ FPU reg28 (%f9): same_value
+ FPU reg29 (%f11): same_value
+ FPU reg30 (%f13): same_value
+ FPU reg31 (%f15): same_value
+ control reg32 (%c0): undefined
+ control reg33 (%c1): undefined
+ control reg34 (%c2): undefined
+ control reg35 (%c3): undefined
+ control reg36 (%c4): undefined
+ control reg37 (%c5): undefined
+ control reg38 (%c6): undefined
+ control reg39 (%c7): undefined
+ control reg40 (%c8): undefined
+ control reg41 (%c9): undefined
+ control reg42 (%c10): undefined
+ control reg43 (%c11): undefined
+ control reg44 (%c12): undefined
+ control reg45 (%c13): undefined
+ control reg46 (%c14): undefined
+ control reg47 (%c15): undefined
+ access reg48 (%a0): undefined
+ access reg49 (%a1): undefined
+ access reg50 (%a2): undefined
+ access reg51 (%a3): undefined
+ access reg52 (%a4): undefined
+ access reg53 (%a5): undefined
+ access reg54 (%a6): undefined
+ access reg55 (%a7): undefined
+ access reg56 (%a8): undefined
+ access reg57 (%a9): undefined
+ access reg58 (%a10): undefined
+ access reg59 (%a11): undefined
+ access reg60 (%a12): undefined
+ access reg61 (%a13): undefined
+ access reg62 (%a14): undefined
+ access reg63 (%a15): undefined
+ control reg64 (%pswm): undefined
+ control reg65 (%pswa): undefined
+handle_cfi no CFI (.debug_frame): no error
+EOF
diff --git a/tests/testfiles390.bz2 b/tests/testfiles390.bz2
new file mode 100755
index 00000000..14ebf6c7
--- /dev/null
+++ b/tests/testfiles390.bz2
Binary files differ
diff --git a/tests/testfiles390x.bz2 b/tests/testfiles390x.bz2
new file mode 100755
index 00000000..eb63ed8d
--- /dev/null
+++ b/tests/testfiles390x.bz2
Binary files differ