summaryrefslogtreecommitdiff
path: root/src/third_party/unwind/dist/tests/run-coredump-unwind
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/unwind/dist/tests/run-coredump-unwind')
-rwxr-xr-xsrc/third_party/unwind/dist/tests/run-coredump-unwind53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/third_party/unwind/dist/tests/run-coredump-unwind b/src/third_party/unwind/dist/tests/run-coredump-unwind
new file mode 100755
index 00000000000..8d077425746
--- /dev/null
+++ b/src/third_party/unwind/dist/tests/run-coredump-unwind
@@ -0,0 +1,53 @@
+#!/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
+ ./crasher backing_files
+) 2>/dev/null
+COREFILE=$TEMPDIR/core*
+
+# magic option -testcase enables checking for the specific contents of the stack
+./test-coredump-unwind $COREFILE -testcase `cat $TEMPDIR/backing_files`