On 25-01-19 18:15, Nathan Sidwell wrote: > On 1/25/19 5:28 AM, Tom de Vries wrote: >> >> This patch fixes it by passing "" instead of NULL, in the call to >> elf_add at line 3083 (for .gnu_debugaltlink), not the call to elf_add at >> line 3044 (for .gnu_debuglink) mentioned above. >> >> Nathan, does this fix the problem for you? If not, can you provide a >> reproducer, or give a hint on how one could be constructed? > > I still hit the problem, and am installing this as sufficiently obvious. > I'm on a fedora system debugging pr88995. The debuglink_name is > "../../.dwz/isl-0.16.1-7.fc29.x86_64" >
I've managed to reproduce this segfault instance by adding a test-case that uses both build-id and dwz. OK for trunk? Thanks, - Tom
[libbacktrace] Add test-cases exercising build-id and dwz Add test-cases b2test_buildid and b3test_dwz_buildid. The last one triggers the segfault fixed by "[backtrace] Avoid segfault" ( r268275 ). 2019-01-27 Tom de Vries <tdevr...@suse.de> * Makefile.am (check_PROGRAMS): Add b2test and b3test. (TESTS): Add b2test_buildid, b3test_dwz and b3test_dwz_buildid. * Makefile.in: Regenerate. * configure.ac (HAVE_ELF): Set with AM_CONDITIONAL. * configure: Regenerate. * elf.c (SYSTEM_BUILD_ID_DIR): Factor out of ... (elf_open_debugfile_by_buildid): ... here. --- libbacktrace/Makefile.am | 53 +++++++++++ libbacktrace/Makefile.in | 223 ++++++++++++++++++++++++++++++++++++++-------- libbacktrace/configure | 18 +++- libbacktrace/configure.ac | 1 + libbacktrace/elf.c | 4 +- 5 files changed, 257 insertions(+), 42 deletions(-) diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am index 997a535dff4..becba1ae1f0 100644 --- a/libbacktrace/Makefile.am +++ b/libbacktrace/Makefile.am @@ -103,6 +103,25 @@ libbacktrace_noformat_la_LIBADD = $(BACKTRACE_FILE) $(VIEW_FILE) $(ALLOC_FILE) libbacktrace_noformat_la_DEPENDENCIES = $(libbacktrace_noformat_la_LIBADD) +if HAVE_ELF + +check_LTLIBRARIES += libbacktrace_elf_for_test.la + +libbacktrace_elf_for_test_la_SOURCES = $(libbacktrace_la_SOURCES) +libbacktrace_elf_for_test_la_LIBADD = $(BACKTRACE_FILE) elf_for_test.lo \ + $(VIEW_FILE) $(ALLOC_FILE) + +elf_for_test.c: elf.c + PWD=$$(pwd -P); \ + BUILD_ID_DIR="usr/lib/debug/.build-id/"; \ + SEARCH='#define SYSTEM_BUILD_ID_DIR'; \ + REPLACE="#define SYSTEM_BUILD_ID_DIR \"$$PWD/$$BUILD_ID_DIR\""; \ + $(SED) "s%^$$SEARCH.*\$$%$$REPLACE%" \ + $< \ + > $@ + +endif HAVE_ELF + xcoff_%.c: xcoff.c SEARCH='#error "Unknown BACKTRACE_XCOFF_SIZE"'; \ REPLACE='#undef BACKTRACE_XCOFF_SIZE\ @@ -166,6 +185,30 @@ allocfail.sh: allocfail TESTS += allocfail.sh +if HAVE_ELF + +b2test_SOURCES = $(btest_SOURCES) +b2test_CFLAGS = $(btest_CFLAGS) +b2test_LDADD = libbacktrace_elf_for_test.la + +# The file b2test_buildid is an objcopy of b2test, so these programs share the +# same build-id. The first time b2test is run, there's no corresponding debug +# file at ./usr/lib/debug/.build-id/aa/bb..zz.debug. The second time b2test is +# run, the .debug file has been created for b2test_buildid, which is now picked +# up by b2test as well. +check_PROGRAMS += b2test +TESTS += b2test_buildid + +b3test_SOURCES = $(btest_SOURCES) +b3test_CFLAGS = $(btest_CFLAGS) +b3test_LDADD = libbacktrace_elf_for_test.la + +# These programs share the same build-id. See b2test for more details. +check_PROGRAMS += b3test +TESTS += b3test_dwz b3test_dwz_buildid + +endif HAVE_ELF + btest_SOURCES = btest.c testlib.c btest_CFLAGS = $(AM_CFLAGS) -g -O btest_LDADD = libbacktrace.la @@ -269,6 +312,16 @@ TESTS += btest_gnudebuglink endif HAVE_OBJCOPY_DEBUGLINK +%_buildid: % + buildid=$$(readelf -n $< | grep "Build ID" | $(AWK) '{print $$3}'); \ + prefix=$$(echo $$buildid | $(SED) 's/.//3g'); \ + remainder=$$(echo $$buildid | $(SED) 's/^.\{2\}//'); \ + pwd=$$(pwd -P); \ + dir=$$pwd/usr/lib/debug/.build-id; \ + mkdir -p $$dir/$$prefix; \ + $(OBJCOPY) --only-keep-debug $< $$dir/$$prefix/$$remainder.debug + $(OBJCOPY) --strip-debug $< $@ + if HAVE_COMPRESSED_DEBUG ctestg_SOURCES = btest.c testlib.c diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in index f04577066f8..1d84b67d0d5 100644 --- a/libbacktrace/Makefile.in +++ b/libbacktrace/Makefile.in @@ -120,19 +120,33 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) -@NATIVE_TRUE@am__append_1 = test_elf test_xcoff_32 test_xcoff_64 \ +check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ + $(am__EXEEXT_4) $(am__EXEEXT_5) +@HAVE_ELF_TRUE@@NATIVE_TRUE@am__append_1 = libbacktrace_elf_for_test.la +@NATIVE_TRUE@am__append_2 = test_elf test_xcoff_32 test_xcoff_64 \ @NATIVE_TRUE@ test_pecoff test_unknown unittest unittest_alloc \ -@NATIVE_TRUE@ allocfail btest btest_alloc stest stest_alloc \ -@NATIVE_TRUE@ ztest ztest_alloc edtest edtest_alloc -@NATIVE_TRUE@am__append_2 = allocfail.sh -@HAVE_DWZ_TRUE@@NATIVE_TRUE@am__append_3 = btest_dwz -@HAVE_DWZ_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_4 = btest_dwz_gnudebuglink -@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_5 = -lz -@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_6 = -lz -@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__append_7 = ttest ttest_alloc -@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_8 = btest_gnudebuglink -@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__append_9 = ctestg ctesta \ +@NATIVE_TRUE@ allocfail +@NATIVE_TRUE@am__append_3 = allocfail.sh + +# The file b2test_buildid is an objcopy of b2test, so these programs share the +# same build-id. The first time b2test is run, there's no corresponding debug +# file at ./usr/lib/debug/.build-id/aa/bb..zz.debug. The second time b2test is +# run, the .debug file has been created for b2test_buildid, which is now picked +# up by b2test as well. + +# These programs share the same build-id. See b2test for more details. +@HAVE_ELF_TRUE@@NATIVE_TRUE@am__append_4 = b2test b3test +@HAVE_ELF_TRUE@@NATIVE_TRUE@am__append_5 = b2test_buildid b3test_dwz \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ b3test_dwz_buildid +@NATIVE_TRUE@am__append_6 = btest btest_alloc stest stest_alloc ztest \ +@NATIVE_TRUE@ ztest_alloc edtest edtest_alloc +@HAVE_DWZ_TRUE@@NATIVE_TRUE@am__append_7 = btest_dwz +@HAVE_DWZ_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_8 = btest_dwz_gnudebuglink +@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_9 = -lz +@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_10 = -lz +@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__append_11 = ttest ttest_alloc +@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_12 = btest_gnudebuglink +@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__append_13 = ctestg ctesta \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg_alloc \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta_alloc subdir = . @@ -172,6 +186,16 @@ am__objects_1 = atomic.lo dwarf.lo fileline.lo posix.lo print.lo \ @NATIVE_TRUE@am_libbacktrace_alloc_la_OBJECTS = $(am__objects_1) libbacktrace_alloc_la_OBJECTS = $(am_libbacktrace_alloc_la_OBJECTS) @NATIVE_TRUE@am_libbacktrace_alloc_la_rpath = +@HAVE_ELF_TRUE@@NATIVE_TRUE@libbacktrace_elf_for_test_la_DEPENDENCIES = \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ $(am__DEPENDENCIES_1) \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ elf_for_test.lo \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ $(am__DEPENDENCIES_1) \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ $(am__DEPENDENCIES_1) +@HAVE_ELF_TRUE@@NATIVE_TRUE@am_libbacktrace_elf_for_test_la_OBJECTS = \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ $(am__objects_1) +libbacktrace_elf_for_test_la_OBJECTS = \ + $(am_libbacktrace_elf_for_test_la_OBJECTS) +@HAVE_ELF_TRUE@@NATIVE_TRUE@am_libbacktrace_elf_for_test_la_rpath = @NATIVE_TRUE@am_libbacktrace_instrumented_alloc_la_OBJECTS = \ @NATIVE_TRUE@ $(am__objects_1) libbacktrace_instrumented_alloc_la_OBJECTS = \ @@ -184,14 +208,16 @@ libbacktrace_noformat_la_OBJECTS = \ @NATIVE_TRUE@am__EXEEXT_1 = test_elf$(EXEEXT) test_xcoff_32$(EXEEXT) \ @NATIVE_TRUE@ test_xcoff_64$(EXEEXT) test_pecoff$(EXEEXT) \ @NATIVE_TRUE@ test_unknown$(EXEEXT) unittest$(EXEEXT) \ -@NATIVE_TRUE@ unittest_alloc$(EXEEXT) allocfail$(EXEEXT) \ -@NATIVE_TRUE@ btest$(EXEEXT) btest_alloc$(EXEEXT) \ +@NATIVE_TRUE@ unittest_alloc$(EXEEXT) allocfail$(EXEEXT) +@HAVE_ELF_TRUE@@NATIVE_TRUE@am__EXEEXT_2 = b2test$(EXEEXT) \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ b3test$(EXEEXT) +@NATIVE_TRUE@am__EXEEXT_3 = btest$(EXEEXT) btest_alloc$(EXEEXT) \ @NATIVE_TRUE@ stest$(EXEEXT) stest_alloc$(EXEEXT) \ @NATIVE_TRUE@ ztest$(EXEEXT) ztest_alloc$(EXEEXT) \ @NATIVE_TRUE@ edtest$(EXEEXT) edtest_alloc$(EXEEXT) -@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__EXEEXT_2 = ttest$(EXEEXT) \ +@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__EXEEXT_4 = ttest$(EXEEXT) \ @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ ttest_alloc$(EXEEXT) -@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__EXEEXT_3 = \ +@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__EXEEXT_5 = \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg$(EXEEXT) \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta$(EXEEXT) \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg_alloc$(EXEEXT) \ @@ -201,6 +227,24 @@ libbacktrace_noformat_la_OBJECTS = \ allocfail_OBJECTS = $(am_allocfail_OBJECTS) @NATIVE_TRUE@allocfail_DEPENDENCIES = \ @NATIVE_TRUE@ libbacktrace_instrumented_alloc.la +@NATIVE_TRUE@am__objects_2 = b2test-btest.$(OBJEXT) \ +@NATIVE_TRUE@ b2test-testlib.$(OBJEXT) +@HAVE_ELF_TRUE@@NATIVE_TRUE@am_b2test_OBJECTS = $(am__objects_2) +b2test_OBJECTS = $(am_b2test_OBJECTS) +@HAVE_ELF_TRUE@@NATIVE_TRUE@b2test_DEPENDENCIES = \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ libbacktrace_elf_for_test.la +b2test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(b2test_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +@NATIVE_TRUE@am__objects_3 = b3test-btest.$(OBJEXT) \ +@NATIVE_TRUE@ b3test-testlib.$(OBJEXT) +@HAVE_ELF_TRUE@@NATIVE_TRUE@am_b3test_OBJECTS = $(am__objects_3) +b3test_OBJECTS = $(am_b3test_OBJECTS) +@HAVE_ELF_TRUE@@NATIVE_TRUE@b3test_DEPENDENCIES = \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ libbacktrace_elf_for_test.la +b3test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(b3test_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ @NATIVE_TRUE@am_btest_OBJECTS = btest-btest.$(OBJEXT) \ @NATIVE_TRUE@ btest-testlib.$(OBJEXT) btest_OBJECTS = $(am_btest_OBJECTS) @@ -208,9 +252,9 @@ btest_OBJECTS = $(am_btest_OBJECTS) btest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(btest_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -@NATIVE_TRUE@am__objects_2 = btest_alloc-btest.$(OBJEXT) \ +@NATIVE_TRUE@am__objects_4 = btest_alloc-btest.$(OBJEXT) \ @NATIVE_TRUE@ btest_alloc-testlib.$(OBJEXT) -@NATIVE_TRUE@am_btest_alloc_OBJECTS = $(am__objects_2) +@NATIVE_TRUE@am_btest_alloc_OBJECTS = $(am__objects_4) btest_alloc_OBJECTS = $(am_btest_alloc_OBJECTS) @NATIVE_TRUE@btest_alloc_DEPENDENCIES = libbacktrace_alloc.la btest_alloc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -224,10 +268,10 @@ ctesta_OBJECTS = $(am_ctesta_OBJECTS) ctesta_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ctesta_CFLAGS) $(CFLAGS) \ $(ctesta_LDFLAGS) $(LDFLAGS) -o $@ -@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__objects_3 = ctesta_alloc-btest.$(OBJEXT) \ +@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__objects_5 = ctesta_alloc-btest.$(OBJEXT) \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta_alloc-testlib.$(OBJEXT) @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am_ctesta_alloc_OBJECTS = \ -@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ $(am__objects_3) +@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ $(am__objects_5) ctesta_alloc_OBJECTS = $(am_ctesta_alloc_OBJECTS) @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctesta_alloc_DEPENDENCIES = libbacktrace_alloc.la ctesta_alloc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -241,10 +285,10 @@ ctestg_OBJECTS = $(am_ctestg_OBJECTS) ctestg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ctestg_CFLAGS) $(CFLAGS) \ $(ctestg_LDFLAGS) $(LDFLAGS) -o $@ -@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__objects_4 = ctestg_alloc-btest.$(OBJEXT) \ +@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__objects_6 = ctestg_alloc-btest.$(OBJEXT) \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg_alloc-testlib.$(OBJEXT) @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am_ctestg_alloc_OBJECTS = \ -@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ $(am__objects_4) +@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ $(am__objects_6) ctestg_alloc_OBJECTS = $(am_ctestg_alloc_OBJECTS) @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ctestg_alloc_DEPENDENCIES = libbacktrace_alloc.la ctestg_alloc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -254,16 +298,16 @@ ctestg_alloc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @NATIVE_TRUE@ edtest2_build.$(OBJEXT) testlib.$(OBJEXT) edtest_OBJECTS = $(am_edtest_OBJECTS) @NATIVE_TRUE@edtest_DEPENDENCIES = libbacktrace.la -@NATIVE_TRUE@am__objects_5 = edtest.$(OBJEXT) edtest2_build.$(OBJEXT) \ +@NATIVE_TRUE@am__objects_7 = edtest.$(OBJEXT) edtest2_build.$(OBJEXT) \ @NATIVE_TRUE@ testlib.$(OBJEXT) -@NATIVE_TRUE@am_edtest_alloc_OBJECTS = $(am__objects_5) +@NATIVE_TRUE@am_edtest_alloc_OBJECTS = $(am__objects_7) edtest_alloc_OBJECTS = $(am_edtest_alloc_OBJECTS) @NATIVE_TRUE@edtest_alloc_DEPENDENCIES = libbacktrace_alloc.la @NATIVE_TRUE@am_stest_OBJECTS = stest.$(OBJEXT) stest_OBJECTS = $(am_stest_OBJECTS) @NATIVE_TRUE@stest_DEPENDENCIES = libbacktrace.la -@NATIVE_TRUE@am__objects_6 = stest.$(OBJEXT) -@NATIVE_TRUE@am_stest_alloc_OBJECTS = $(am__objects_6) +@NATIVE_TRUE@am__objects_8 = stest.$(OBJEXT) +@NATIVE_TRUE@am_stest_alloc_OBJECTS = $(am__objects_8) stest_alloc_OBJECTS = $(am_stest_alloc_OBJECTS) @NATIVE_TRUE@stest_alloc_DEPENDENCIES = libbacktrace_alloc.la @NATIVE_TRUE@am_test_elf_OBJECTS = test_format.$(OBJEXT) \ @@ -298,11 +342,11 @@ ttest_OBJECTS = $(am_ttest_OBJECTS) ttest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ttest_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__objects_7 = \ +@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__objects_9 = \ @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ ttest_alloc-ttest.$(OBJEXT) \ @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ ttest_alloc-testlib.$(OBJEXT) @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am_ttest_alloc_OBJECTS = \ -@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ $(am__objects_7) +@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ $(am__objects_9) ttest_alloc_OBJECTS = $(am_ttest_alloc_OBJECTS) @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ttest_alloc_DEPENDENCIES = \ @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@ libbacktrace_alloc.la @@ -313,8 +357,8 @@ ttest_alloc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @NATIVE_TRUE@ testlib.$(OBJEXT) unittest_OBJECTS = $(am_unittest_OBJECTS) @NATIVE_TRUE@unittest_DEPENDENCIES = libbacktrace.la -@NATIVE_TRUE@am__objects_8 = unittest.$(OBJEXT) testlib.$(OBJEXT) -@NATIVE_TRUE@am_unittest_alloc_OBJECTS = $(am__objects_8) +@NATIVE_TRUE@am__objects_10 = unittest.$(OBJEXT) testlib.$(OBJEXT) +@NATIVE_TRUE@am_unittest_alloc_OBJECTS = $(am__objects_10) unittest_alloc_OBJECTS = $(am_unittest_alloc_OBJECTS) @NATIVE_TRUE@unittest_alloc_DEPENDENCIES = libbacktrace_alloc.la @NATIVE_TRUE@am_ztest_OBJECTS = ztest-ztest.$(OBJEXT) \ @@ -325,9 +369,9 @@ ztest_OBJECTS = $(am_ztest_OBJECTS) ztest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ztest_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -@NATIVE_TRUE@am__objects_9 = ztest_alloc-ztest.$(OBJEXT) \ +@NATIVE_TRUE@am__objects_11 = ztest_alloc-ztest.$(OBJEXT) \ @NATIVE_TRUE@ ztest_alloc-testlib.$(OBJEXT) -@NATIVE_TRUE@am_ztest_alloc_OBJECTS = $(am__objects_9) +@NATIVE_TRUE@am_ztest_alloc_OBJECTS = $(am__objects_11) ztest_alloc_OBJECTS = $(am_ztest_alloc_OBJECTS) @NATIVE_TRUE@ztest_alloc_DEPENDENCIES = libbacktrace_alloc.la \ @NATIVE_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @@ -369,9 +413,11 @@ am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libbacktrace_la_SOURCES) $(EXTRA_libbacktrace_la_SOURCES) \ $(libbacktrace_alloc_la_SOURCES) \ + $(libbacktrace_elf_for_test_la_SOURCES) \ $(libbacktrace_instrumented_alloc_la_SOURCES) \ $(libbacktrace_noformat_la_SOURCES) $(allocfail_SOURCES) \ - $(btest_SOURCES) $(btest_alloc_SOURCES) $(ctesta_SOURCES) \ + $(b2test_SOURCES) $(b3test_SOURCES) $(btest_SOURCES) \ + $(btest_alloc_SOURCES) $(ctesta_SOURCES) \ $(ctesta_alloc_SOURCES) $(ctestg_SOURCES) \ $(ctestg_alloc_SOURCES) $(edtest_SOURCES) \ $(edtest_alloc_SOURCES) $(stest_SOURCES) \ @@ -789,10 +835,10 @@ libbacktrace_la_LIBADD = \ $(ALLOC_FILE) libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD) -TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \ - $(am__append_4) $(am__append_8) +TESTS = $(check_PROGRAMS) $(am__append_3) $(am__append_5) \ + $(am__append_7) $(am__append_8) $(am__append_12) @NATIVE_TRUE@check_LTLIBRARIES = libbacktrace_alloc.la \ -@NATIVE_TRUE@ libbacktrace_noformat.la \ +@NATIVE_TRUE@ libbacktrace_noformat.la $(am__append_1) \ @NATIVE_TRUE@ libbacktrace_instrumented_alloc.la @NATIVE_TRUE@libbacktrace_alloc_la_SOURCES = $(libbacktrace_la_SOURCES) @NATIVE_TRUE@libbacktrace_alloc_la_LIBADD = $(BACKTRACE_FILE) $(FORMAT_FILE) read.lo alloc.lo @@ -800,6 +846,10 @@ TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \ @NATIVE_TRUE@libbacktrace_noformat_la_SOURCES = $(libbacktrace_la_SOURCES) @NATIVE_TRUE@libbacktrace_noformat_la_LIBADD = $(BACKTRACE_FILE) $(VIEW_FILE) $(ALLOC_FILE) @NATIVE_TRUE@libbacktrace_noformat_la_DEPENDENCIES = $(libbacktrace_noformat_la_LIBADD) +@HAVE_ELF_TRUE@@NATIVE_TRUE@libbacktrace_elf_for_test_la_SOURCES = $(libbacktrace_la_SOURCES) +@HAVE_ELF_TRUE@@NATIVE_TRUE@libbacktrace_elf_for_test_la_LIBADD = $(BACKTRACE_FILE) elf_for_test.lo \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ $(VIEW_FILE) $(ALLOC_FILE) + @NATIVE_TRUE@test_elf_SOURCES = test_format.c testlib.c @NATIVE_TRUE@test_elf_LDADD = libbacktrace_noformat.la elf.lo @NATIVE_TRUE@test_xcoff_32_SOURCES = test_format.c testlib.c @@ -823,6 +873,12 @@ TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \ @NATIVE_TRUE@allocfail_SOURCES = allocfail.c testlib.c @NATIVE_TRUE@allocfail_LDADD = libbacktrace_instrumented_alloc.la +@HAVE_ELF_TRUE@@NATIVE_TRUE@b2test_SOURCES = $(btest_SOURCES) +@HAVE_ELF_TRUE@@NATIVE_TRUE@b2test_CFLAGS = $(btest_CFLAGS) +@HAVE_ELF_TRUE@@NATIVE_TRUE@b2test_LDADD = libbacktrace_elf_for_test.la +@HAVE_ELF_TRUE@@NATIVE_TRUE@b3test_SOURCES = $(btest_SOURCES) +@HAVE_ELF_TRUE@@NATIVE_TRUE@b3test_CFLAGS = $(btest_CFLAGS) +@HAVE_ELF_TRUE@@NATIVE_TRUE@b3test_LDADD = libbacktrace_elf_for_test.la @NATIVE_TRUE@btest_SOURCES = btest.c testlib.c @NATIVE_TRUE@btest_CFLAGS = $(AM_CFLAGS) -g -O @NATIVE_TRUE@btest_LDADD = libbacktrace.la @@ -835,10 +891,10 @@ TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \ @NATIVE_TRUE@stest_alloc_LDADD = libbacktrace_alloc.la @NATIVE_TRUE@ztest_SOURCES = ztest.c testlib.c @NATIVE_TRUE@ztest_CFLAGS = -DSRCDIR=\"$(srcdir)\" -@NATIVE_TRUE@ztest_LDADD = libbacktrace.la $(am__append_5) \ -@NATIVE_TRUE@ $(CLOCK_GETTIME_LINK) -@NATIVE_TRUE@ztest_alloc_LDADD = libbacktrace_alloc.la $(am__append_6) \ +@NATIVE_TRUE@ztest_LDADD = libbacktrace.la $(am__append_9) \ @NATIVE_TRUE@ $(CLOCK_GETTIME_LINK) +@NATIVE_TRUE@ztest_alloc_LDADD = libbacktrace_alloc.la \ +@NATIVE_TRUE@ $(am__append_10) $(CLOCK_GETTIME_LINK) @NATIVE_TRUE@ztest_alloc_SOURCES = $(ztest_SOURCES) @NATIVE_TRUE@ztest_alloc_CFLAGS = $(ztest_CFLAGS) @NATIVE_TRUE@edtest_SOURCES = edtest.c edtest2_build.c testlib.c @@ -971,6 +1027,9 @@ libbacktrace.la: $(libbacktrace_la_OBJECTS) $(libbacktrace_la_DEPENDENCIES) $(EX libbacktrace_alloc.la: $(libbacktrace_alloc_la_OBJECTS) $(libbacktrace_alloc_la_DEPENDENCIES) $(EXTRA_libbacktrace_alloc_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libbacktrace_alloc_la_rpath) $(libbacktrace_alloc_la_OBJECTS) $(libbacktrace_alloc_la_LIBADD) $(LIBS) +libbacktrace_elf_for_test.la: $(libbacktrace_elf_for_test_la_OBJECTS) $(libbacktrace_elf_for_test_la_DEPENDENCIES) $(EXTRA_libbacktrace_elf_for_test_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(am_libbacktrace_elf_for_test_la_rpath) $(libbacktrace_elf_for_test_la_OBJECTS) $(libbacktrace_elf_for_test_la_LIBADD) $(LIBS) + libbacktrace_instrumented_alloc.la: $(libbacktrace_instrumented_alloc_la_OBJECTS) $(libbacktrace_instrumented_alloc_la_DEPENDENCIES) $(EXTRA_libbacktrace_instrumented_alloc_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libbacktrace_instrumented_alloc_la_rpath) $(libbacktrace_instrumented_alloc_la_OBJECTS) $(libbacktrace_instrumented_alloc_la_LIBADD) $(LIBS) @@ -990,6 +1049,14 @@ allocfail$(EXEEXT): $(allocfail_OBJECTS) $(allocfail_DEPENDENCIES) $(EXTRA_alloc @rm -f allocfail$(EXEEXT) $(AM_V_CCLD)$(LINK) $(allocfail_OBJECTS) $(allocfail_LDADD) $(LIBS) +b2test$(EXEEXT): $(b2test_OBJECTS) $(b2test_DEPENDENCIES) $(EXTRA_b2test_DEPENDENCIES) + @rm -f b2test$(EXEEXT) + $(AM_V_CCLD)$(b2test_LINK) $(b2test_OBJECTS) $(b2test_LDADD) $(LIBS) + +b3test$(EXEEXT): $(b3test_OBJECTS) $(b3test_DEPENDENCIES) $(EXTRA_b3test_DEPENDENCIES) + @rm -f b3test$(EXEEXT) + $(AM_V_CCLD)$(b3test_LINK) $(b3test_OBJECTS) $(b3test_LDADD) $(LIBS) + btest$(EXEEXT): $(btest_OBJECTS) $(btest_DEPENDENCIES) $(EXTRA_btest_DEPENDENCIES) @rm -f btest$(EXEEXT) $(AM_V_CCLD)$(btest_LINK) $(btest_OBJECTS) $(btest_LDADD) $(LIBS) @@ -1089,6 +1156,30 @@ distclean-compile: .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< +b2test-btest.o: btest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b2test_CFLAGS) $(CFLAGS) -c -o b2test-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c + +b2test-btest.obj: btest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b2test_CFLAGS) $(CFLAGS) -c -o b2test-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi` + +b2test-testlib.o: testlib.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b2test_CFLAGS) $(CFLAGS) -c -o b2test-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c + +b2test-testlib.obj: testlib.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b2test_CFLAGS) $(CFLAGS) -c -o b2test-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi` + +b3test-btest.o: btest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b3test_CFLAGS) $(CFLAGS) -c -o b3test-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c + +b3test-btest.obj: btest.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b3test_CFLAGS) $(CFLAGS) -c -o b3test-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi` + +b3test-testlib.o: testlib.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b3test_CFLAGS) $(CFLAGS) -c -o b3test-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c + +b3test-testlib.obj: testlib.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(b3test_CFLAGS) $(CFLAGS) -c -o b3test-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi` + btest-btest.o: btest.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_CFLAGS) $(CFLAGS) -c -o btest-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c @@ -1474,6 +1565,20 @@ allocfail.log: allocfail$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +b2test.log: b2test$(EXEEXT) + @p='b2test$(EXEEXT)'; \ + b='b2test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +b3test.log: b3test$(EXEEXT) + @p='b3test$(EXEEXT)'; \ + b='b3test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) btest.log: btest$(EXEEXT) @p='btest$(EXEEXT)'; \ b='btest'; \ @@ -1579,6 +1684,27 @@ allocfail.sh.log: allocfail.sh --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +b2test_buildid.log: b2test_buildid + @p='b2test_buildid'; \ + b='b2test_buildid'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +b3test_dwz.log: b3test_dwz + @p='b3test_dwz'; \ + b='b3test_dwz'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +b3test_dwz_buildid.log: b3test_dwz_buildid + @p='b3test_dwz_buildid'; \ + b='b3test_dwz_buildid'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) btest_dwz.log: btest_dwz @p='btest_dwz'; \ b='btest_dwz'; \ @@ -1749,6 +1875,15 @@ uninstall-am: .PRECIOUS: Makefile +@HAVE_ELF_TRUE@@NATIVE_TRUE@elf_for_test.c: elf.c +@HAVE_ELF_TRUE@@NATIVE_TRUE@ PWD=$$(pwd -P); \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ BUILD_ID_DIR="usr/lib/debug/.build-id/"; \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ SEARCH='#define SYSTEM_BUILD_ID_DIR'; \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ REPLACE="#define SYSTEM_BUILD_ID_DIR \"$$PWD/$$BUILD_ID_DIR\""; \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ $(SED) "s%^$$SEARCH.*\$$%$$REPLACE%" \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ $< \ +@HAVE_ELF_TRUE@@NATIVE_TRUE@ > $@ + @NATIVE_TRUE@xcoff_%.c: xcoff.c @NATIVE_TRUE@ SEARCH='#error "Unknown BACKTRACE_XCOFF_SIZE"'; \ @NATIVE_TRUE@ REPLACE='#undef BACKTRACE_XCOFF_SIZE\ @@ -1778,6 +1913,16 @@ uninstall-am: @HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@%_gnudebuglink: % @HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@ $(OBJCOPY) --only-keep-debug $< $@.debug @HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@ $(OBJCOPY) --strip-debug --add-gnu-debuglink=$@.debug $< $@ + +@NATIVE_TRUE@%_buildid: % +@NATIVE_TRUE@ buildid=$$(readelf -n $< | grep "Build ID" | $(AWK) '{print $$3}'); \ +@NATIVE_TRUE@ prefix=$$(echo $$buildid | $(SED) 's/.//3g'); \ +@NATIVE_TRUE@ remainder=$$(echo $$buildid | $(SED) 's/^.\{2\}//'); \ +@NATIVE_TRUE@ pwd=$$(pwd -P); \ +@NATIVE_TRUE@ dir=$$pwd/usr/lib/debug/.build-id; \ +@NATIVE_TRUE@ mkdir -p $$dir/$$prefix; \ +@NATIVE_TRUE@ $(OBJCOPY) --only-keep-debug $< $$dir/$$prefix/$$remainder.debug +@NATIVE_TRUE@ $(OBJCOPY) --strip-debug $< $@ alloc.lo: config.h backtrace.h internal.h backtrace.lo: config.h backtrace.h internal.h btest.lo: (INCDIR)/filenames.h backtrace.h backtrace-supported.h diff --git a/libbacktrace/configure b/libbacktrace/configure index 2ea112bde68..7a902ce1eaa 100755 --- a/libbacktrace/configure +++ b/libbacktrace/configure @@ -651,6 +651,8 @@ ALLOC_FILE VIEW_FILE BACKTRACE_SUPPORTS_DATA BACKTRACE_SUPPORTED +HAVE_ELF_FALSE +HAVE_ELF_TRUE FORMAT_FILE BACKTRACE_SUPPORTS_THREADS PIC_FLAG @@ -11489,7 +11491,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11492 "configure" +#line 11494 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11595,7 +11597,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11598 "configure" +#line 11600 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12512,6 +12514,14 @@ cat >>confdefs.h <<_ACEOF #define BACKTRACE_ELF_SIZE $elfsize _ACEOF + if test "$FORMAT_FILE" = "elf.lo"; then + HAVE_ELF_TRUE= + HAVE_ELF_FALSE='#' +else + HAVE_ELF_TRUE='#' + HAVE_ELF_FALSE= +fi + # XCOFF defines. xcoffsize= @@ -13611,6 +13621,10 @@ if test -z "${HAVE_DWZ_TRUE}" && test -z "${HAVE_DWZ_FALSE}"; then as_fn_error $? "conditional \"HAVE_DWZ\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_ELF_TRUE}" && test -z "${HAVE_ELF_FALSE}"; then + as_fn_error $? "conditional \"HAVE_ELF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_PTHREAD_TRUE}" && test -z "${HAVE_PTHREAD_FALSE}"; then as_fn_error $? "conditional \"HAVE_PTHREAD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac index c64bf3473bb..8c911e25ba3 100644 --- a/libbacktrace/configure.ac +++ b/libbacktrace/configure.ac @@ -259,6 +259,7 @@ elf64) elfsize=64 ;; *) elfsize=unused esac AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64]) +AM_CONDITIONAL(HAVE_ELF, test "$FORMAT_FILE" = "elf.lo") # XCOFF defines. xcoffsize= diff --git a/libbacktrace/elf.c b/libbacktrace/elf.c index 6fee865bece..d933052200c 100644 --- a/libbacktrace/elf.c +++ b/libbacktrace/elf.c @@ -809,6 +809,8 @@ elf_readlink (struct backtrace_state *state, const char *filename, } } +#define SYSTEM_BUILD_ID_DIR "/usr/lib/debug/.build-id/" + /* Open a separate debug info file, using the build ID to find it. Returns an open file descriptor, or -1. @@ -821,7 +823,7 @@ elf_open_debugfile_by_buildid (struct backtrace_state *state, backtrace_error_callback error_callback, void *data) { - const char * const prefix = "/usr/lib/debug/.build-id/"; + const char * const prefix = SYSTEM_BUILD_ID_DIR; const size_t prefix_len = strlen (prefix); const char * const suffix = ".debug"; const size_t suffix_len = strlen (suffix);