diff --git a/elfutils-0.170-core-pid.patch b/elfutils-0.170-core-pid.patch new file mode 100644 index 0000000..6354f21 --- /dev/null +++ b/elfutils-0.170-core-pid.patch @@ -0,0 +1,120 @@ +commit 699a741b488010d56cc358a5f7b4d8a8f4886347 +Author: Mark Wielaard +Date: Sat Dec 23 23:16:24 2017 +0100 + + tests: Try to use coredumpctl to extract core files. + + If systemd-coredump is installed we have to use coredumpctl to extract + the core file to test. Unfortunately systemd-coredump/coredumpctl seem + to be somewhat fragile if multiple core dumps are generated/extracted + at the same time. So use a lock file to only run one core dump test at + a time (under make -j). + + Signed-off-by: Mark Wielaard + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index fca0072..64cb5bd 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -515,6 +515,9 @@ dwarf_default_lower_bound_LDADD = $(libdw) + system_elf_libelf_test_CPPFLAGS = + system_elf_libelf_test_LDADD = $(libelf) + ++# A lock file used to make sure only one test dumps core at a time ++CLEANFILES += core-dump-backtrace.lock ++ + if GCOV + check: check-am coverage + .PHONY: coverage +diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh +index c1f3156..e04a7ea 100644 +--- a/tests/backtrace-subr.sh ++++ b/tests/backtrace-subr.sh +@@ -137,19 +137,46 @@ check_native() + # Backtrace core file. + check_native_core() + { ++# systemd-coredump/coredumpctl doesn't seem to like concurrent core dumps ++# use a lock file (fd 200) tests/core-dump-backtrace.lock ++( + child=$1 + + # Disable valgrind while dumping core. + SAVED_VALGRIND_CMD="$VALGRIND_CMD" + unset VALGRIND_CMD + ++ # Wait for lock for 10 seconds or skip. ++ flock -x -w 10 200 || exit 77; ++ + # Skip the test if we cannot adjust core ulimit. +- core="core.`ulimit -c unlimited || exit 77; set +ex; testrun ${abs_builddir}/$child --gencore; true`" ++ pid="`ulimit -c unlimited || exit 77; set +ex; testrun ${abs_builddir}/$child --gencore; true`" ++ core="core.$pid" + # see if /proc/sys/kernel/core_uses_pid is set to 0 + if [ -f core ]; then + mv core "$core" + fi +- if [ ! -f "$core" ]; then echo "No $core file generated"; exit 77; fi ++ type -P coredumpctl && have_coredumpctl=1 || have_coredumpctl=0 ++ if [ ! -f "$core" -a $have_coredumpctl -eq 1 ]; then ++ # Maybe systemd-coredump took it. But give it some time to dump first... ++ sleep 1 ++ coredumpctl --output="$core" dump $pid || rm -f $core ++ ++ # Try a couple of times after waiting some more if something went wrong... ++ if [ ! -f "$core" ]; then ++ sleep 2 ++ coredumpctl --output="$core" dump $pid || rm -f $core ++ fi ++ ++ if [ ! -f "$core" ]; then ++ sleep 3 ++ coredumpctl --output="$core" dump $pid || rm -f $core ++ fi ++ fi ++ if [ ! -f "$core" ]; then ++ echo "No $core file generated"; ++ exit 77; ++ fi + + if [ "x$SAVED_VALGRIND_CMD" != "x" ]; then + VALGRIND_CMD="$SAVED_VALGRIND_CMD" +@@ -163,4 +190,6 @@ check_native_core() + cat $core.{bt,err} + check_native_unsupported $core.err $child-$core + check_all $core.{bt,err} $child-$core ++ rm $core{,.{bt,err}} ++) 200>${abs_builddir}/core-dump-backtrace.lock + } + +commit 61e33d72788c58467668b2f2ad44d5b95ebbee80 +Author: Mark Wielaard +Date: Fri Feb 16 20:34:25 2018 +0100 + + tests: Accept any core if no core with the "correct" pid can be found. + + In some containers our view of pids is confused. We see the container + pid namespace, but the core is generated using the host pid namespace. + Since tests are run in a new fresh directory any core here is most like + is ours. + + Signed-off-by: Mark Wielaard + +diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh +index e04a7ea..ff42c6f 100644 +--- a/tests/backtrace-subr.sh ++++ b/tests/backtrace-subr.sh +@@ -174,6 +174,13 @@ check_native_core() + fi + fi + if [ ! -f "$core" ]; then ++ # In some containers our view of pids is confused. Since tests are ++ # run in a new fresh directory any core here is most like is ours. ++ if ls core.[0-9]* 1> /dev/null 2>&1; then ++ mv core.[0-9]* "$core" ++ fi ++ fi ++ if [ ! -f "$core" ]; then + echo "No $core file generated"; + exit 77; + fi diff --git a/elfutils.spec b/elfutils.spec index aa5ef60..501d74d 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -24,6 +24,7 @@ Patch1: elfutils-0.170-dwarf_aggregate_size.patch Source1: testfile-sizes3.o.bz2 Patch2: elfutils-0.170-sys-ptrace.patch Patch3: elfutils-0.170-m68k-packed-not-aligned.patch +Patch4: elfutils-0.170-core-pid.patch Requires: elfutils-libelf%{depsuffix} = %{version}-%{release} Requires: elfutils-libs%{depsuffix} = %{version}-%{release} @@ -179,6 +180,7 @@ profiling) of processes. cp %SOURCE1 tests/ %patch2 -p1 -b .sys_ptrace %patch3 -p1 -b .m68k_packed +%patch4 -p1 -b .core_pid find . -name \*.sh ! -perm -0100 -print | xargs chmod +x @@ -314,7 +316,10 @@ fi %endif %changelog -* Thu Feb 15 2018 Mark Wielaard +* Fri Feb 16 2018 Mark Wielaard +- Add elfutils-0.170-core-pid.patch + +* Thu Feb 15 2018 Mark Wielaard - 0.170-8 - Add elfutils-0.170-sys-ptrace.patch - Make sure spec can be build even when ldconfig_scriplets aren't defined. - Add elfutils-0.170-m68k-packed-not-aligned.patch