1# Makefile.am -- Backtrace Makefile. 2# Copyright (C) 2012-2021 Free Software Foundation, Inc. 3 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: 7 8# (1) Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10 11# (2) Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in 13# the documentation and/or other materials provided with the 14# distribution. 15 16# (3) The name of the author may not be used to 17# endorse or promote products derived from this software without 18# specific prior written permission. 19 20# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 24# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 28# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30# POSSIBILITY OF SUCH DAMAGE. 31 32ACLOCAL_AMFLAGS = -I .. -I ../config 33 34AM_CPPFLAGS = -I $(top_srcdir)/../include -I $(top_srcdir)/../libgcc \ 35 -I ../libgcc 36 37AM_CFLAGS = $(EXTRA_FLAGS) $(WARN_FLAGS) $(PIC_FLAG) $(CET_HOST_FLAGS) 38 39noinst_LTLIBRARIES = libbacktrace.la 40 41libbacktrace_la_SOURCES = \ 42 backtrace.h \ 43 atomic.c \ 44 dwarf.c \ 45 fileline.c \ 46 internal.h \ 47 posix.c \ 48 print.c \ 49 sort.c \ 50 state.c 51 52BACKTRACE_FILES = \ 53 backtrace.c \ 54 simple.c \ 55 nounwind.c 56 57FORMAT_FILES = \ 58 elf.c \ 59 macho.c \ 60 pecoff.c \ 61 unknown.c \ 62 xcoff.c 63 64VIEW_FILES = \ 65 read.c \ 66 mmapio.c 67 68ALLOC_FILES = \ 69 alloc.c \ 70 mmap.c 71 72EXTRA_libbacktrace_la_SOURCES = \ 73 $(BACKTRACE_FILES) \ 74 $(FORMAT_FILES) \ 75 $(VIEW_FILES) \ 76 $(ALLOC_FILES) 77 78libbacktrace_la_LIBADD = \ 79 $(BACKTRACE_FILE) \ 80 $(FORMAT_FILE) \ 81 $(VIEW_FILE) \ 82 $(ALLOC_FILE) 83 84libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD) 85 86# Testsuite. 87 88# Add a test to this variable if you want it to be built. 89check_PROGRAMS = 90 91# Add a test to this variable if you want it to be run. 92TESTS = 93 94# Add a test to this variable if you want it to be built and run. 95BUILDTESTS = 96 97# Add a file to this variable if you want it to be built for testing. 98check_DATA = 99 100# Flags to use when compiling test programs. 101libbacktrace_TEST_CFLAGS = $(EXTRA_FLAGS) $(WARN_FLAGS) -g 102 103if USE_DSYMUTIL 104 105%.dSYM: % 106 $(DSYMUTIL) $< 107 108endif USE_DSYMUTIL 109 110if NATIVE 111check_LTLIBRARIES = libbacktrace_alloc.la 112 113libbacktrace_alloc_la_SOURCES = $(libbacktrace_la_SOURCES) 114libbacktrace_alloc_la_LIBADD = $(BACKTRACE_FILE) $(FORMAT_FILE) read.lo alloc.lo 115 116libbacktrace_alloc_la_DEPENDENCIES = $(libbacktrace_alloc_la_LIBADD) 117 118check_LTLIBRARIES += libbacktrace_noformat.la 119 120libbacktrace_noformat_la_SOURCES = $(libbacktrace_la_SOURCES) 121libbacktrace_noformat_la_LIBADD = $(BACKTRACE_FILE) $(VIEW_FILE) $(ALLOC_FILE) 122 123libbacktrace_noformat_la_DEPENDENCIES = $(libbacktrace_noformat_la_LIBADD) 124 125if HAVE_ELF 126if HAVE_OBJCOPY_DEBUGLINK 127 128TEST_BUILD_ID_DIR=$(abs_builddir)/usr/lib/debug/.build-id/ 129 130check_LTLIBRARIES += libbacktrace_elf_for_test.la 131 132libbacktrace_elf_for_test_la_SOURCES = $(libbacktrace_la_SOURCES) 133libbacktrace_elf_for_test_la_LIBADD = $(BACKTRACE_FILE) elf_for_test.lo \ 134 $(VIEW_FILE) $(ALLOC_FILE) 135 136elf_for_test.c: elf.c 137 SEARCH='^#define SYSTEM_BUILD_ID_DIR.*$$'; \ 138 REPLACE="#define SYSTEM_BUILD_ID_DIR \"$(TEST_BUILD_ID_DIR)\""; \ 139 $(SED) "s%$$SEARCH%$$REPLACE%" \ 140 $< \ 141 > $@.tmp 142 mv $@.tmp $@ 143 144endif HAVE_OBJCOPY_DEBUGLINK 145endif HAVE_ELF 146 147elf_%.c: elf.c 148 SEARCH='#error "Unknown BACKTRACE_ELF_SIZE"'; \ 149 REPLACE='#undef BACKTRACE_ELF_SIZE\ 150 #define BACKTRACE_ELF_SIZE'; \ 151 $(SED) "s/^$$SEARCH\$$/$$REPLACE $*/" \ 152 $< \ 153 > $@.tmp 154 mv $@.tmp $@ 155 156xcoff_%.c: xcoff.c 157 SEARCH='#error "Unknown BACKTRACE_XCOFF_SIZE"'; \ 158 REPLACE='#undef BACKTRACE_XCOFF_SIZE\ 159 #define BACKTRACE_XCOFF_SIZE'; \ 160 $(SED) "s/^$$SEARCH\$$/$$REPLACE $*/" \ 161 $< \ 162 > $@.tmp 163 mv $@.tmp $@ 164 165test_elf_32_SOURCES = test_format.c testlib.c 166test_elf_32_CFLAGS = $(libbacktrace_TEST_CFLAGS) 167test_elf_32_LDADD = libbacktrace_noformat.la elf_32.lo 168 169BUILDTESTS += test_elf_32 170 171test_elf_64_SOURCES = test_format.c testlib.c 172test_elf_64_CFLAGS = $(libbacktrace_TEST_CFLAGS) 173test_elf_64_LDADD = libbacktrace_noformat.la elf_64.lo 174 175BUILDTESTS += test_elf_64 176 177test_macho_SOURCES = test_format.c testlib.c 178test_macho_CFLAGS = $(libbacktrace_TEST_CFLAGS) 179test_macho_LDADD = libbacktrace_noformat.la macho.lo 180 181BUILDTESTS += test_macho 182 183test_xcoff_32_SOURCES = test_format.c testlib.c 184test_xcoff_32_CFLAGS = $(libbacktrace_TEST_CFLAGS) 185test_xcoff_32_LDADD = libbacktrace_noformat.la xcoff_32.lo 186 187BUILDTESTS += test_xcoff_32 188 189test_xcoff_64_SOURCES = test_format.c testlib.c 190test_xcoff_64_CFLAGS = $(libbacktrace_TEST_CFLAGS) 191test_xcoff_64_LDADD = libbacktrace_noformat.la xcoff_64.lo 192 193BUILDTESTS += test_xcoff_64 194 195test_pecoff_SOURCES = test_format.c testlib.c 196test_pecoff_CFLAGS = $(libbacktrace_TEST_CFLAGS) 197test_pecoff_LDADD = libbacktrace_noformat.la pecoff.lo 198 199BUILDTESTS += test_pecoff 200 201test_unknown_SOURCES = test_format.c testlib.c 202test_unknown_CFLAGS = $(libbacktrace_TEST_CFLAGS) 203test_unknown_LDADD = libbacktrace_noformat.la unknown.lo 204 205BUILDTESTS += test_unknown 206 207unittest_SOURCES = unittest.c testlib.c 208unittest_CFLAGS = $(libbacktrace_TEST_CFLAGS) 209unittest_LDADD = libbacktrace.la 210 211BUILDTESTS += unittest 212 213unittest_alloc_SOURCES = $(unittest_SOURCES) 214unittest_alloc_CFLAGS = $(libbacktrace_TEST_CFLAGS) 215unittest_alloc_LDADD = libbacktrace_alloc.la 216 217BUILDTESTS += unittest_alloc 218 219check_LTLIBRARIES += libbacktrace_instrumented_alloc.la 220 221libbacktrace_instrumented_alloc_la_SOURCES = $(libbacktrace_la_SOURCES) 222libbacktrace_instrumented_alloc_la_LIBADD = $(BACKTRACE_FILE) $(FORMAT_FILE) \ 223 read.lo instrumented_alloc.lo 224 225libbacktrace_instrumented_alloc_la_DEPENDENCIES = \ 226 $(libbacktrace_instrumented_alloc_la_LIBADD) 227 228instrumented_alloc.lo: alloc.c 229 230allocfail_SOURCES = allocfail.c testlib.c 231allocfail_CFLAGS = $(libbacktrace_TEST_CFLAGS) 232allocfail_LDADD = libbacktrace_instrumented_alloc.la 233 234check_PROGRAMS += allocfail 235 236allocfail.sh: allocfail 237 238TESTS += allocfail.sh 239 240if USE_DSYMUTIL 241check_DATA += allocfail.dSYM 242endif USE_DSYMUTIL 243 244if HAVE_ELF 245if HAVE_OBJCOPY_DEBUGLINK 246 247b2test_SOURCES = $(btest_SOURCES) 248b2test_CFLAGS = $(libbacktrace_TEST_CFLAGS) 249b2test_LDFLAGS = -Wl,--build-id 250b2test_LDADD = libbacktrace_elf_for_test.la 251 252check_PROGRAMS += b2test 253TESTS += b2test_buildid 254 255if HAVE_DWZ 256 257b3test_SOURCES = $(btest_SOURCES) 258b3test_CFLAGS = $(libbacktrace_TEST_CFLAGS) 259b3test_LDFLAGS = -Wl,--build-id 260b3test_LDADD = libbacktrace_elf_for_test.la 261 262check_PROGRAMS += b3test 263TESTS += b3test_dwz_buildid 264 265endif HAVE_DWZ 266 267endif HAVE_OBJCOPY_DEBUGLINK 268endif HAVE_ELF 269 270btest_SOURCES = btest.c testlib.c 271btest_CFLAGS = $(libbacktrace_TEST_CFLAGS) -O 272btest_LDADD = libbacktrace.la 273 274BUILDTESTS += btest 275 276if USE_DSYMUTIL 277check_DATA += btest.dSYM 278endif USE_DSYMUTIL 279 280if HAVE_ELF 281 282btest_lto_SOURCES = btest.c testlib.c 283btest_lto_CFLAGS = $(libbacktrace_TEST_CFLAGS) -O -flto 284btest_lto_LDADD = libbacktrace.la 285 286BUILDTESTS += btest_lto 287 288endif HAVE_ELF 289 290btest_alloc_SOURCES = $(btest_SOURCES) 291btest_alloc_CFLAGS = $(libbacktrace_TEST_CFLAGS) 292btest_alloc_LDADD = libbacktrace_alloc.la 293 294BUILDTESTS += btest_alloc 295 296if USE_DSYMUTIL 297check_DATA += btest_alloc.dSYM 298endif USE_DSYMUTIL 299 300if HAVE_DWZ 301 302%_dwz: % 303 rm -f $@ $@_common.debug 304 cp $< $@_1 305 cp $< $@_2 306 if $(DWZ) -m $@_common.debug $@_1 $@_2; then \ 307 rm -f $@_2; \ 308 mv $@_1 $@; \ 309 else \ 310 echo "Ignoring dwz errors, assuming that test passes"; \ 311 cp $< $@; \ 312 fi 313 314TESTS += btest_dwz 315 316if HAVE_OBJCOPY_DEBUGLINK 317 318TESTS += btest_dwz_gnudebuglink 319 320endif HAVE_OBJCOPY_DEBUGLINK 321 322endif HAVE_DWZ 323 324stest_SOURCES = stest.c 325stest_CFLAGS = $(libbacktrace_TEST_CFLAGS) 326stest_LDADD = libbacktrace.la 327 328BUILDTESTS += stest 329 330if USE_DSYMUTIL 331check_DATA += stest.dSYM 332endif USE_DSYMUTIL 333 334stest_alloc_SOURCES = $(stest_SOURCES) 335stest_alloc_CFLAGS = $(libbacktrace_TEST_CFLAGS) 336stest_alloc_LDADD = libbacktrace_alloc.la 337 338BUILDTESTS += stest_alloc 339 340if USE_DSYMUTIL 341check_DATA += stest_alloc.dSYM 342endif USE_DSYMUTIL 343 344if HAVE_ELF 345 346ztest_SOURCES = ztest.c testlib.c 347ztest_CFLAGS = $(libbacktrace_TEST_CFLAGS) -DSRCDIR=\"$(srcdir)\" 348ztest_LDADD = libbacktrace.la 349ztest_alloc_LDADD = libbacktrace_alloc.la 350 351if HAVE_ZLIB 352ztest_LDADD += -lz 353ztest_alloc_LDADD += -lz 354endif 355ztest_LDADD += $(CLOCK_GETTIME_LINK) 356ztest_alloc_LDADD += $(CLOCK_GETTIME_LINK) 357 358BUILDTESTS += ztest 359 360ztest_alloc_SOURCES = $(ztest_SOURCES) 361ztest_alloc_CFLAGS = $(ztest_CFLAGS) 362 363BUILDTESTS += ztest_alloc 364 365endif HAVE_ELF 366 367edtest_SOURCES = edtest.c edtest2_build.c testlib.c 368edtest_CFLAGS = $(libbacktrace_TEST_CFLAGS) 369edtest_LDADD = libbacktrace.la 370 371BUILDTESTS += edtest 372 373if USE_DSYMUTIL 374check_DATA += edtest.dSYM 375endif USE_DSYMUTIL 376 377edtest_alloc_SOURCES = $(edtest_SOURCES) 378edtest_alloc_CFLAGS = $(libbacktrace_TEST_CFLAGS) 379edtest_alloc_LDADD = libbacktrace_alloc.la 380 381if USE_DSYMUTIL 382check_DATA += edtest_alloc.dSYM 383endif USE_DSYMUTIL 384 385BUILDTESTS += edtest_alloc 386 387edtest2_build.c: gen_edtest2_build; @true 388gen_edtest2_build: $(srcdir)/edtest2.c 389 cat $(srcdir)/edtest2.c > tmp-edtest2_build.c 390 $(SHELL) $(srcdir)/../move-if-change tmp-edtest2_build.c edtest2_build.c 391 echo timestamp > $@ 392 393if HAVE_PTHREAD 394 395BUILDTESTS += ttest 396 397ttest_SOURCES = ttest.c testlib.c 398ttest_CFLAGS = $(libbacktrace_TEST_CFLAGS) -pthread 399ttest_LDADD = libbacktrace.la 400 401if USE_DSYMUTIL 402check_DATA += ttest.dSYM 403endif USE_DSYMUTIL 404 405BUILDTESTS += ttest_alloc 406 407ttest_alloc_SOURCES = $(ttest_SOURCES) 408ttest_alloc_CFLAGS = $(ttest_CFLAGS) 409ttest_alloc_LDADD = libbacktrace_alloc.la 410 411if USE_DSYMUTIL 412check_DATA += ttest_alloc.dSYM 413endif USE_DSYMUTIL 414 415endif HAVE_PTHREAD 416 417if HAVE_OBJCOPY_DEBUGLINK 418 419TESTS += btest_gnudebuglink 420 421%_gnudebuglink: % 422 $(OBJCOPY) --only-keep-debug $< $@.debug 423 $(OBJCOPY) --strip-debug --add-gnu-debuglink=$@.debug $< $@ 424 425endif HAVE_OBJCOPY_DEBUGLINK 426 427%_buildid: % 428 ./install-debuginfo-for-buildid.sh \ 429 "$(TEST_BUILD_ID_DIR)" \ 430 $< 431 $(OBJCOPY) --strip-debug $< $@ 432 433if HAVE_COMPRESSED_DEBUG 434 435ctestg_SOURCES = btest.c testlib.c 436ctestg_CFLAGS = $(libbacktrace_TEST_CFLAGS) 437ctestg_LDFLAGS = -Wl,--compress-debug-sections=zlib-gnu 438ctestg_LDADD = libbacktrace.la 439 440ctesta_SOURCES = btest.c testlib.c 441ctesta_CFLAGS = $(libbacktrace_TEST_CFLAGS) 442ctesta_LDFLAGS = -Wl,--compress-debug-sections=zlib-gabi 443ctesta_LDADD = libbacktrace.la 444 445BUILDTESTS += ctestg ctesta 446 447ctestg_alloc_SOURCES = $(ctestg_SOURCES) 448ctestg_alloc_CFLAGS = $(ctestg_CFLAGS) 449ctestg_alloc_LDFLAGS = $(ctestg_LDFLAGS) 450ctestg_alloc_LDADD = libbacktrace_alloc.la 451 452ctesta_alloc_SOURCES = $(ctesta_SOURCES) 453ctesta_alloc_CFLAGS = $(ctesta_CFLAGS) 454ctesta_alloc_LDFLAGS = $(ctesta_LDFLAGS) 455ctesta_alloc_LDADD = libbacktrace_alloc.la 456 457BUILDTESTS += ctestg_alloc ctesta_alloc 458 459endif 460 461if HAVE_DWARF5 462 463dwarf5_SOURCES = btest.c testlib.c 464dwarf5_CFLAGS = $(libbacktrace_TEST_CFLAGS) -gdwarf-5 465dwarf5_LDADD = libbacktrace.la 466 467BUILDTESTS += dwarf5 468 469if USE_DSYMUTIL 470check_DATA += dwarf5.dSYM 471endif USE_DSYMUTIL 472 473dwarf5_alloc_SOURCES = $(dwarf5_SOURCES) 474dwarf5_alloc_CFLAGS = $(dwarf5_CFLAGS) 475dwarf5_alloc_LDADD = libbacktrace_alloc.la 476 477BUILDTESTS += dwarf5_alloc 478 479if USE_DSYMUTIL 480check_DATA += dwarf5_alloc.dSYM 481endif USE_DSYMUTIL 482 483endif 484 485mtest_SOURCES = mtest.c testlib.c 486mtest_CFLAGS = $(libbacktrace_TEST_CFLAGS) -O 487mtest_LDADD = libbacktrace.la 488 489BUILDTESTS += mtest 490 491if USE_DSYMUTIL 492check_DATA += mtest.dSYM 493endif USE_DSYMUTIL 494 495if HAVE_MINIDEBUG 496 497TESTS += mtest_minidebug 498 499%_minidebug: % 500 $(NM) -D $< -P --defined-only | $(AWK) '{ print $$1 }' | sort > $<.dsyms 501 $(NM) $< -P --defined-only | $(AWK) '{ if ($$2 == "T" || $$2 == "t" || $$2 == "D" || $$2 == "d") print $$1 }' | sort > $<.fsyms 502 $(COMM) -13 $<.dsyms $<.fsyms > $<.keepsyms 503 $(OBJCOPY) --only-keep-debug $< $<.dbg 504 $(OBJCOPY) -S --remove-section .gdb_index --remove-section .comment --keep-symbols=$<.keepsyms $<.dbg $<.mdbg 505 $(OBJCOPY) --strip-all --remove-section ..comment $< $<.strip 506 rm -f $<.mdbg.xz 507 $(XZ) $<.mdbg 508 $(OBJCOPY) --add-section .gnu_debugdata=$<.mdbg.xz $<.strip 509 mv $<.strip $@ 510 511endif HAVE_MINIDEBUG 512 513endif NATIVE 514 515if HAVE_ELF 516 517xztest_SOURCES = xztest.c testlib.c 518xztest_CFLAGS = $(libbacktrace_TEST_CFLAGS) -DSRCDIR=\"$(srcdir)\" 519xztest_LDADD = libbacktrace.la 520 521xztest_alloc_SOURCES = $(xztest_SOURCES) 522xztest_alloc_CFLAGS = $(xztest_CFLAGS) 523xztest_alloc_LDADD = libbacktrace_alloc.la 524 525if HAVE_LIBLZMA 526xztest_LDADD += -llzma 527xztest_alloc_LDADD += -llzma 528endif 529 530xztest_LDADD += $(CLOCK_GETTIME_LINK) 531xztest_alloc_LDADD += $(CLOCK_GETTIME_LINK) 532 533BUILDTESTS += xztest xztest_alloc 534 535endif HAVE_ELF 536 537check_PROGRAMS += $(BUILDTESTS) 538 539TESTS += $(BUILDTESTS) 540 541CLEANFILES = \ 542 $(filter-out allocfail.sh,$(TESTS)) *.debug elf_for_test.c edtest2_build.c gen_edtest2_build \ 543 *.dsyms *.fsyms *.keepsyms *.dbg *.mdbg *.mdbg.xz *.strip 544 545clean-local: 546 -rm -rf usr 547 548# We can't use automake's automatic dependency tracking, because it 549# breaks when using bootstrap-lean. Automatic dependency tracking 550# with GCC bootstrap will cause some of the objects to depend on 551# header files in prev-gcc/include, e.g., stddef.h and stdarg.h. When 552# using bootstrap-lean, prev-gcc is removed after each stage. When 553# running "make install", those header files will be gone, causing the 554# library to be rebuilt at install time. That may not succeed. 555 556# These manual dependencies do not include dependencies on unwind.h, 557# even though that is part of GCC, because where to find it depends on 558# whether we are being built as a host library or a target library. 559 560INCDIR = $(top_srcdir)/../include 561alloc.lo: config.h backtrace.h internal.h 562backtrace.lo: config.h backtrace.h internal.h 563btest.lo: $(INCDIR)/filenames.h backtrace.h backtrace-supported.h 564dwarf.lo: config.h $(INCDIR)/dwarf2.h $(INCDIR)/dwarf2.def \ 565 $(INCDIR)/filenames.h backtrace.h internal.h 566elf.lo: config.h backtrace.h internal.h 567fileline.lo: config.h backtrace.h internal.h 568macho.lo: config.h backtrace.h internal.h 569mmap.lo: config.h backtrace.h internal.h 570mmapio.lo: config.h backtrace.h internal.h 571mtest.lo: backtrace.h backtrace-supported.h 572nounwind.lo: config.h internal.h 573pecoff.lo: config.h backtrace.h internal.h 574posix.lo: config.h backtrace.h internal.h 575print.lo: config.h backtrace.h internal.h 576read.lo: config.h backtrace.h internal.h 577simple.lo: config.h backtrace.h internal.h 578sort.lo: config.h backtrace.h internal.h 579stest.lo: config.h backtrace.h internal.h 580state.lo: config.h backtrace.h backtrace-supported.h internal.h 581unknown.lo: config.h backtrace.h internal.h 582xcoff.lo: config.h backtrace.h internal.h 583xztest.lo: config.h backtrace.h backtrace-supported.h internal.h testlib.h 584ztest.lo: config.h backtrace.h backtrace-supported.h internal.h testlib.h 585 586include $(top_srcdir)/../multilib.am 587