diff options
author | Martin Milata <mmilata@redhat.com> | 2012-08-08 14:08:49 +0200 |
---|---|---|
committer | Martin Milata <mmilata@redhat.com> | 2012-08-10 15:29:03 +0200 |
commit | 4ab9e5dd10e7b9653651343ac4cfe79bfe4e4ee3 (patch) | |
tree | c1adc9131523e184e9115ab3f7f700bd3a5297a9 /tests/run-coredump-unwind | |
parent | 7d5a1970215bf8537026c425d38d22465e4a07ee (diff) | |
download | libunwind-4ab9e5dd10e7b9653651343ac4cfe79bfe4e4ee3.tar.gz |
MiniDebugInfo test: tests/run-coredump-unwind-mdi
Test that creates MiniDebugInfo-containing binary and then checks if it
can recover the procedure names from its coredump.
Signed-off-by: Martin Milata <mmilata@redhat.com>
Diffstat (limited to 'tests/run-coredump-unwind')
-rwxr-xr-x | tests/run-coredump-unwind | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/tests/run-coredump-unwind b/tests/run-coredump-unwind index d6dd7e03..8d077425 100755 --- a/tests/run-coredump-unwind +++ b/tests/run-coredump-unwind @@ -1,14 +1,51 @@ #!/bin/sh +# this function is slight modification of the one used in RPM +# found at https://bugzilla.redhat.com/show_bug.cgi?id=834073 +# written by Alexander Larsson <alexl@redhat.com> +add_minidebug() +{ + debuginfo="$1" ## we don't have separate debuginfo file + binary="$1" + + dynsyms=`mktemp` + funcsyms=`mktemp` + keep_symbols=`mktemp` + mini_debuginfo=`mktemp` + + # Extract the dynamic symbols from the main binary, there is no need to also have these + # in the normal symbol table + nm -D "$binary" --format=posix --defined-only | awk '{ print $1 }' | sort > "$dynsyms" + # Extract all the text (i.e. function) symbols from the debuginfo + nm "$debuginfo" --format=posix --defined-only | awk '{ if ($2 == "T" || $2 == "t") print $1 }' | sort > "$funcsyms" + # Keep all the function symbols not already in the dynamic symbol table + comm -13 "$dynsyms" "$funcsyms" > "$keep_symbols" + # Copy the full debuginfo, keeping only a minumal set of symbols and removing some unnecessary sections + objcopy -S --remove-section .gdb_index --remove-section .comment --keep-symbols="$keep_symbols" "$debuginfo" "$mini_debuginfo" &> /dev/null + #Inject the compressed data into the .gnu_debugdata section of the original binary + xz "$mini_debuginfo" + mini_debuginfo="${mini_debuginfo}.xz" + objcopy --add-section .gnu_debugdata="$mini_debuginfo" "$binary" + rm -f "$dynsyms" "$funcsyms" "$keep_symbols" "$mini_debuginfo" + + strip "$binary" ## throw away the symbol table +} + + TESTDIR=`pwd` TEMPDIR=`mktemp --tmpdir -d libunwind-test-XXXXXXXXXX` trap "rm -r -- $TEMPDIR" EXIT +cp crasher $TEMPDIR/crasher +if [ "$1" = "-minidebuginfo" ]; then + add_minidebug $TEMPDIR/crasher +fi + # create core dump ( cd $TEMPDIR ulimit -c 10000 - $TESTDIR/crasher $TEMPDIR/backing_files + ./crasher backing_files ) 2>/dev/null COREFILE=$TEMPDIR/core* |