diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ChangeLog | 10 | ||||
| -rw-r--r-- | tests/Makefile.am | 3 | ||||
| -rw-r--r-- | tests/backtrace-subr.sh | 2 | ||||
| -rw-r--r-- | tests/backtrace.aarch64.fp.core.bz2 | bin | 0 -> 8437 bytes | |||
| -rw-r--r-- | tests/backtrace.aarch64.fp.exec.bz2 | bin | 0 -> 394972 bytes | |||
| -rw-r--r-- | tests/backtrace.c | 12 | ||||
| -rwxr-xr-x | tests/run-backtrace-fp-core-aarch64.sh | 28 |
7 files changed, 54 insertions, 1 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog index 81b5f7a2..5b0d486e 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,13 @@ +2017-02-13 Ulf Hermann <[email protected]> + Mark Wielaard <[email protected]> + + * Makefile.am: Add test for unwinding with frame pointers on aarch64 + * backtrace.aarch64.fp.core.bz2: New file + * backtrace.aarch64.fp.exec.bz2: New file + * run-backtrace-fp-core-aarch64.sh: New file + * backtrace-subr.sh (check_err): Allow Invalid register. + * backtrace.c (callback_verify): Allow duplicate_sigusr2 frames. + 2017-04-06 Mark Wielaard <[email protected]> * run-backtrace-fp-core-i386.sh: New test. diff --git a/tests/Makefile.am b/tests/Makefile.am index 2c82bfd8..3a12fe3a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -116,6 +116,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-backtrace-native-biarch.sh run-backtrace-native-core.sh \ run-backtrace-native-core-biarch.sh run-backtrace-core-x86_64.sh \ run-backtrace-fp-core-x86_64.sh \ + run-backtrace-fp-core-aarch64.sh \ run-backtrace-core-x32.sh \ run-backtrace-core-i386.sh run-backtrace-fp-core-i386.sh \ run-backtrace-core-ppc.sh \ @@ -297,6 +298,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-backtrace-core-x86_64.sh run-backtrace-core-i386.sh \ run-backtrace-fp-core-x86_64.sh \ run-backtrace-core-x32.sh \ + run-backtrace-fp-core-aarch64.sh \ + backtrace.aarch64.fp.core.bz2 backtrace.aarch64.fp.exec.bz2 \ backtrace-subr.sh backtrace.i386.core.bz2 backtrace.i386.exec.bz2 \ run-backtrace-fp-core-i386.sh \ backtrace.i386.fp.core.bz2 backtrace.i386.fp.exec.bz2 \ diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh index a303e32c..9731c43a 100644 --- a/tests/backtrace-subr.sh +++ b/tests/backtrace-subr.sh @@ -59,7 +59,7 @@ check_backtracegen() # Ignore it here as it is a bug of OS, not a bug of elfutils. check_err() { - if [ $(egrep -v <$1 'dwfl_thread_getframes: (No DWARF information found|no matching address range|address out of range)$' \ + if [ $(egrep -v <$1 'dwfl_thread_getframes: (No DWARF information found|no matching address range|address out of range|Invalid register)$' \ | wc -c) \ -eq 0 ] then diff --git a/tests/backtrace.aarch64.fp.core.bz2 b/tests/backtrace.aarch64.fp.core.bz2 Binary files differnew file mode 100644 index 00000000..ff867881 --- /dev/null +++ b/tests/backtrace.aarch64.fp.core.bz2 diff --git a/tests/backtrace.aarch64.fp.exec.bz2 b/tests/backtrace.aarch64.fp.exec.bz2 Binary files differnew file mode 100644 index 00000000..9d06db1e --- /dev/null +++ b/tests/backtrace.aarch64.fp.exec.bz2 diff --git a/tests/backtrace.c b/tests/backtrace.c index 1ff6353c..21abe8af 100644 --- a/tests/backtrace.c +++ b/tests/backtrace.c @@ -90,6 +90,10 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, return; } Dwfl_Module *mod; + /* See case 4. Special case to help out simple frame pointer unwinders. */ + static bool duplicate_sigusr2 = false; + if (duplicate_sigusr2) + frameno--; static bool reduce_frameno = false; if (reduce_frameno) frameno--; @@ -125,6 +129,14 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, } /* FALLTHRU */ case 4: + /* Some simple frame unwinders get this wrong and think sigusr2 + is calling itself again. Allow it and just pretend there is + an extra sigusr2 frame. */ + if (symname != NULL && strcmp (symname, "sigusr2") == 0) + { + duplicate_sigusr2 = true; + break; + } assert (symname != NULL && strcmp (symname, "stdarg") == 0); break; case 5: diff --git a/tests/run-backtrace-fp-core-aarch64.sh b/tests/run-backtrace-fp-core-aarch64.sh new file mode 100755 index 00000000..fda88d37 --- /dev/null +++ b/tests/run-backtrace-fp-core-aarch64.sh @@ -0,0 +1,28 @@ +#! /bin/bash +# Copyright (C) 2017 The Qt Company +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/backtrace-subr.sh + +# The binary is generated by compiling with eh_frame CFI, but with frame +# pointers. +# +# gcc -static -O2 -fno-omit-frame-pointer -fno-asynchronous-unwind-tables \ +# -D_GNU_SOURCE -pthread -o tests/backtrace.aarch64.fp.exec -I. -Ilib \ +# tests/backtrace-child.c +# The core is generated by calling the binary with --gencore + +check_core aarch64.fp |
