#!/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 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 wait #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`