Add R_X86_64_PC32_BND/R_X86_64_PLT32_BND suppor to gold
[platform/upstream/binutils.git] / gold / testsuite / Makefile.am
index a7fd06d..2b7b5ae 100644 (file)
@@ -8,10 +8,10 @@
 AUTOMAKE_OPTIONS = foreign -Wno-portability
 
 # The two_file_test tests -fmerge-constants, so we simply always turn
-# it on.  This may need to be controlled by a configure option
-# eventually.
-AM_CFLAGS = $(WARN_CFLAGS) $(LFS_CFLAGS) -fmerge-constants
-AM_CXXFLAGS = $(WARN_CXXFLAGS) $(LFS_CFLAGS) -fmerge-constants
+# it on.  For compilers that do not support the command-line option,
+# we assume they just always emit SHF_MERGE sections unconditionally.
+AM_CFLAGS = $(WARN_CFLAGS) $(LFS_CFLAGS) $(MERGE_CONSTANTS_FLAG)
+AM_CXXFLAGS = $(WARN_CXXFLAGS) $(LFS_CFLAGS) $(MERGE_CONSTANTS_FLAG)
 
 AM_CPPFLAGS = \
        -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../../include \
@@ -19,8 +19,34 @@ AM_CPPFLAGS = \
        -DLOCALEDIR="\"$(datadir)/locale\"" \
        @INCINTL@
 
+# COMPILE1, LINK1, CXXCOMPILE1, CXXLINK1 are renamed from COMPILE, LINK,
+# CXXCOMPILE and CXXLINK generated by automake 1.11.1.  FIXME: they should
+# be updated if they are different from automake used by gold.
+COMPILE1 = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LINK1 = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CXXCOMPILE1 = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLINK1 = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+
+# Strip out -Wp,-D_FORTIFY_SOURCE=, which is rrelevant for the gold
+# testsuite and incompatible with -O0 used in gold tests, from
+# COMPILE, LINK, CXXCOMPILE and CXXLINK.
+COMPILE = `echo $(COMPILE1) | sed -e 's/-Wp,-D_FORTIFY_SOURCE=[0-9[0-9]]*//'`
+LINK = `echo $(LINK1) | sed -e 's/-Wp,-D_FORTIFY_SOURCE=[0-9][0-9]*//'`
+CXXCOMPILE = `echo $(CXXCOMPILE1) | sed -e 's/-Wp,-D_FORTIFY_SOURCE=[0-9][0-9]*//'`
+CXXLINK = `echo $(CXXLINK1) | sed -e 's/-Wp,-D_FORTIFY_SOURCE=[0-9][0-9]*//'`
+
+# Strip out -static-libgcc and -static-libstdc++ options, for tests
+# that must have these libraries linked dynamically.  The -shared-libgcc
+# option does not work correctly, and there is no -shared-libstdc++ option.
+# (See GCC PR 55781 and PR 55782.)
+CXXLINK_S = `echo $(CXXLINK1) | sed -e 's/-static-lib\\(gcc\\|stdc++\\)//g'`
+
 TEST_READELF = $(top_builddir)/../binutils/readelf
 TEST_OBJDUMP = $(top_builddir)/../binutils/objdump
+TEST_OBJCOPY = $(top_builddir)/../binutils/objcopy
 TEST_CXXFILT = $(top_builddir)/../binutils/cxxfilt
 TEST_STRIP = $(top_builddir)/../binutils/strip-new
 TEST_AR = $(top_builddir)/../binutils/ar
@@ -45,6 +71,9 @@ endif
 # the right choice for files 'make' builds that people rebuild.
 MOSTLYCLEANFILES = *.so *.syms *.stdout
 
+# Export make variables to the shell scripts so that they can see
+# (for example) DEFAULT_TARGET.
+.EXPORT_ALL_VARIABLES:
 
 # We will add to these later, for each individual test.  Note
 # that we add each test under check_SCRIPTS or check_PROGRAMS;
@@ -122,7 +151,7 @@ flagstest_ndebug.o: constructor_test.cc
 
 check_SCRIPTS += incremental_test.sh
 check_DATA += incremental_test.stdout
-MOSTLYCLEANFILES += incremental_test
+MOSTLYCLEANFILES += incremental_test incremental_test.cmdline
 incremental_test_1.o: incremental_test_1.c
        $(COMPILE) -O0 -c -ffunction-sections -g -o $@ $<
 incremental_test_2.o: incremental_test_2.c
@@ -135,9 +164,9 @@ incremental_test.stdout: incremental_test ../incremental-dump
 check_SCRIPTS += gc_comdat_test.sh
 check_DATA += gc_comdat_test.stdout
 MOSTLYCLEANFILES += gc_comdat_test
-gc_comdat_test_1.o: gc_comdat_test_1.cc 
+gc_comdat_test_1.o: gc_comdat_test_1.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
-gc_comdat_test_2.o: gc_comdat_test_2.cc 
+gc_comdat_test_2.o: gc_comdat_test_2.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
 gc_comdat_test: gc_comdat_test_1.o gc_comdat_test_2.o gcctestdir/ld
        $(CXXLINK) -Bgcctestdir/ -Wl,--gc-sections gc_comdat_test_1.o gc_comdat_test_2.o
@@ -164,15 +193,25 @@ gc_orphan_section_test:gc_orphan_section_test.o gcctestdir/ld
 gc_orphan_section_test.stdout: gc_orphan_section_test
        $(TEST_NM) gc_orphan_section_test > gc_orphan_section_test.stdout
 
+check_SCRIPTS += pr14265.sh
+check_DATA += pr14265.stdout
+MOSTLYCLEANFILES += pr14265
+pr14265.o: pr14265.c
+       $(COMPILE) -O0 -c -o $@ $<
+pr14265: pr14265.o
+       $(LINK) -Bgcctestdir/ -Wl,--gc-sections -Wl,-T,$(srcdir)/pr14265.t -o $@ $<
+pr14265.stdout: pr14265
+       $(TEST_NM) --format=bsd --numeric-sort $< > $@
+
 check_SCRIPTS += icf_test.sh
-check_DATA += icf_test.stdout
-MOSTLYCLEANFILES += icf_test
-icf_test.o: icf_test.cc 
+check_DATA += icf_test.map
+MOSTLYCLEANFILES += icf_test icf_test.map
+icf_test.o: icf_test.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
 icf_test: icf_test.o gcctestdir/ld
-       $(CXXLINK) -Bgcctestdir/ -Wl,--icf=all icf_test.o
-icf_test.stdout: icf_test
-       $(TEST_NM) -C icf_test > icf_test.stdout
+       $(CXXLINK) -o icf_test -Bgcctestdir/ -Wl,--icf=all,-Map,icf_test.map icf_test.o
+icf_test.map: icf_test
+       @touch icf_test.map
 
 check_SCRIPTS += icf_keep_unique_test.sh
 check_DATA += icf_keep_unique_test.stdout
@@ -182,46 +221,76 @@ icf_keep_unique_test.o: icf_keep_unique_test.cc
 icf_keep_unique_test: icf_keep_unique_test.o gcctestdir/ld
        $(CXXLINK) -Bgcctestdir/ -Wl,--icf=all -Wl,--keep-unique,_Z11unique_funcv icf_keep_unique_test.o
 icf_keep_unique_test.stdout: icf_keep_unique_test
-       $(TEST_NM) -C icf_keep_unique_test > icf_keep_unique_test.stdout
+       $(TEST_NM) -C $< > $@
 
 check_SCRIPTS += icf_safe_test.sh
-check_DATA += icf_safe_test_1.stdout icf_safe_test_2.stdout
-MOSTLYCLEANFILES += icf_safe_test
+check_DATA += icf_safe_test_1.stdout icf_safe_test_2.stdout icf_safe_test.map
+MOSTLYCLEANFILES += icf_safe_test icf_safe_test.map
 icf_safe_test.o: icf_safe_test.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
 icf_safe_test: icf_safe_test.o gcctestdir/ld
-       $(CXXLINK) -Bgcctestdir/ -Wl,--icf=safe icf_safe_test.o
+       $(CXXLINK) -o icf_safe_test -Bgcctestdir/ -Wl,--icf=safe,-Map,icf_safe_test.map icf_safe_test.o
+icf_safe_test.map: icf_safe_test
+       @touch icf_safe_test.map
 icf_safe_test_1.stdout: icf_safe_test
-       $(TEST_NM) icf_safe_test > icf_safe_test_1.stdout
+       $(TEST_NM) $< > $@
 icf_safe_test_2.stdout: icf_safe_test
-       $(TEST_READELF) -h icf_safe_test > icf_safe_test_2.stdout
+       $(TEST_READELF) -h $< > $@
 
 check_SCRIPTS += icf_safe_so_test.sh
-check_DATA += icf_safe_so_test_1.stdout icf_safe_so_test_2.stdout
-MOSTLYCLEANFILES += icf_safe_so_test
+check_DATA += icf_safe_so_test_1.stdout icf_safe_so_test_2.stdout icf_safe_so_test.map
+MOSTLYCLEANFILES += icf_safe_so_test icf_safe_so_test.map
 icf_safe_so_test.o: icf_safe_so_test.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections -fPIC -g -o $@ $<
 icf_safe_so_test: icf_safe_so_test.o gcctestdir/ld
-       $(CXXLINK) -Bgcctestdir/ -Wl,--icf=safe icf_safe_so_test.o -fPIC -shared
+       $(CXXLINK) -o icf_safe_so_test -Bgcctestdir/ -Wl,--icf=safe,-Map,icf_safe_so_test.map icf_safe_so_test.o -fPIC -shared
+icf_safe_so_test.map:
+       @touch icf_safe_so_test.map
 icf_safe_so_test_1.stdout: icf_safe_so_test
-       $(TEST_NM) icf_safe_so_test > icf_safe_so_test_1.stdout
+       $(TEST_NM) $< > $@
 icf_safe_so_test_2.stdout: icf_safe_so_test
-       $(TEST_READELF) -h icf_safe_so_test > icf_safe_so_test_2.stdout
+       $(TEST_READELF) -h $< > $@
 
 check_SCRIPTS += final_layout.sh
 check_DATA += final_layout.stdout
-MOSTLYCLEANFILES += final_layout
+MOSTLYCLEANFILES += final_layout final_layout_sequence.txt final_layout_script.lds
 final_layout.o: final_layout.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections  -fdata-sections -g -o $@ $<
 final_layout_sequence.txt:
        (echo "*_Z3barv*" && echo ".text._Z3bazv" && echo "*_Z3foov*" && echo "*global_varb*" && echo "*global_vara*" && echo "*global_varc*") > final_layout_sequence.txt
-final_layout: final_layout.o final_layout_sequence.txt gcctestdir/ld
-       $(CXXLINK) -Bgcctestdir/ -Wl,--section-ordering-file,final_layout_sequence.txt final_layout.o
+final_layout_script.lds:
+       (echo "SECTIONS { .text : { *(.text*) } .got : { *(.got .toc) } .sbss : { *(.sbss*) } .bss : { *(.bss*) } }") > final_layout_script.lds
+final_layout: final_layout.o final_layout_sequence.txt final_layout_script.lds gcctestdir/ld
+       $(CXXLINK) -Bgcctestdir/ -Wl,--section-ordering-file,final_layout_sequence.txt -Wl,-T,final_layout_script.lds final_layout.o
 final_layout.stdout: final_layout
-       $(TEST_NM) -n final_layout > final_layout.stdout
+       $(TEST_NM) -n --synthetic final_layout > final_layout.stdout
+
+check_SCRIPTS += text_section_grouping.sh
+check_DATA += text_section_grouping.stdout text_section_no_grouping.stdout
+MOSTLYCLEANFILES += text_section_grouping text_section_no_grouping
+text_section_grouping.o: text_section_grouping.cc
+       $(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
+text_section_grouping: text_section_grouping.o gcctestdir/ld
+       $(CXXLINK)  -Bgcctestdir/ text_section_grouping.o
+text_section_no_grouping: text_section_grouping.o gcctestdir/ld
+       $(CXXLINK)  -Bgcctestdir/ -Wl,--no-text-reorder text_section_grouping.o
+text_section_grouping.stdout: text_section_grouping
+       $(TEST_NM) -n --synthetic text_section_grouping > text_section_grouping.stdout
+text_section_no_grouping.stdout: text_section_no_grouping
+       $(TEST_NM) -n --synthetic text_section_no_grouping > text_section_no_grouping.stdout
+
+check_SCRIPTS += section_sorting_name.sh
+check_DATA += section_sorting_name.stdout
+MOSTLYCLEANFILES += section_sorting_name
+section_sorting_name.o: section_sorting_name.cc
+       $(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
+section_sorting_name: section_sorting_name.o gcctestdir/ld
+       $(CXXLINK)  -Bgcctestdir/ -Wl,--sort-section=name section_sorting_name.o
+section_sorting_name.stdout: section_sorting_name
+       $(TEST_NM) -n --synthetic section_sorting_name > section_sorting_name.stdout
 
 check_PROGRAMS += icf_virtual_function_folding_test
-MOSTLYCLEANFILES += icf_virtual_function_folding_test
+MOSTLYCLEANFILES += icf_virtual_function_folding_test icf_virtual_function_folding_test.map
 icf_virtual_function_folding_test.o: icf_virtual_function_folding_test.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections -fPIE -g -o $@ $<
 icf_virtual_function_folding_test: icf_virtual_function_folding_test.o gcctestdir/ld
@@ -259,6 +328,24 @@ icf_sht_rel_addend_test: icf_sht_rel_addend_test_1.o icf_sht_rel_addend_test_2.o
 icf_sht_rel_addend_test.stdout: icf_sht_rel_addend_test
        $(TEST_NM) icf_sht_rel_addend_test > icf_sht_rel_addend_test.stdout
 
+check_PROGRAMS += large_symbol_alignment
+large_symbol_alignment_SOURCES = large_symbol_alignment.cc
+large_symbol_alignment_DEPENDENCIES = gcctestdir/ld
+large_symbol_alignment_LDFLAGS = -Bgcctestdir/
+large_symbol_alignment_LDADD =
+
+check_SCRIPTS += merge_string_literals.sh
+check_DATA += merge_string_literals.stdout
+MOSTLYCLEANFILES += merge_string_literals
+merge_string_literals_1.o: merge_string_literals_1.cc
+       $(CXXCOMPILE) -O2 -c -fPIC -g -o $@ $<
+merge_string_literals_2.o: merge_string_literals_2.cc
+       $(CXXCOMPILE) -O2 -c -fPIC -g -o $@ $<
+merge_string_literals: merge_string_literals_1.o merge_string_literals_2.o gcctestdir/ld
+       $(CXXLINK) -Bgcctestdir/ merge_string_literals_1.o merge_string_literals_2.o -O2 -shared -nostdlib
+merge_string_literals.stdout: merge_string_literals
+       $(TEST_OBJDUMP) -s -j.rodata merge_string_literals > merge_string_literals.stdout
+
 check_PROGRAMS += basic_test
 check_PROGRAMS += basic_pic_test
 basic_test.o: basic_test.cc
@@ -577,14 +664,16 @@ exception_same_shared_test_LDADD = exception_shared.so
 exception_separate_shared_12_test_SOURCES = exception_test_main.cc
 exception_separate_shared_12_test_DEPENDENCIES = \
        gcctestdir/ld exception_shared_1.so exception_shared_2.so
-exception_separate_shared_12_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
+exception_separate_shared_12_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. \
+       -Wl,--no-as-needed
 exception_separate_shared_12_test_LDADD = \
        exception_shared_1.so exception_shared_2.so
 
 exception_separate_shared_21_test_SOURCES = exception_test_main.cc
 exception_separate_shared_21_test_DEPENDENCIES = \
        gcctestdir/ld exception_shared_1.so exception_shared_2.so
-exception_separate_shared_21_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
+exception_separate_shared_21_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. \
+       -Wl,--no-as-needed
 exception_separate_shared_21_test_LDADD = \
        exception_shared_2.so exception_shared_1.so
 
@@ -907,6 +996,20 @@ debug_msg.err: debug_msg.o odr_violation1.o odr_violation2.o gcctestdir/ld
          exit 1; \
        fi
 
+# Test error message when a vtable is undefined.
+check_SCRIPTS += missing_key_func.sh
+check_DATA += missing_key_func.err
+MOSTLYCLEANFILES += missing_key_func.err
+missing_key_func.o: missing_key_func.cc
+       $(CXXCOMPILE) -O0 -g -c -o $@ $(srcdir)/missing_key_func.cc
+missing_key_func.err: missing_key_func.o gcctestdir/ld
+       @echo $(CXXLINK) -Bgcctestdir/ -o missing_key_func missing_key_func.o "2>$@"
+       @if $(CXXLINK) -Bgcctestdir/ -o missing_key_func missing_key_func.o 2>$@; \
+       then \
+         echo 1>&2 "Link of missing_key_func should have failed"; \
+         rm -f $@; \
+         exit 1; \
+       fi
 
 if HAVE_ZLIB
 
@@ -940,8 +1043,8 @@ odr_violation1.so: odr_violation1.cc gcctestdir/ld
 odr_violation2.so: odr_violation2.cc gcctestdir/ld
        $(CXXCOMPILE) -Bgcctestdir/ -O2 -g -shared -fPIC -w -o $@ $(srcdir)/odr_violation2.cc
 debug_msg_so.err: debug_msg.so odr_violation1.so odr_violation2.so gcctestdir/ld
-       @echo $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_so debug_msg.so odr_violation1.so odr_violation2.so "2>$@"
-       @if $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_so debug_msg.so odr_violation1.so odr_violation2.so 2>$@; \
+       @echo $(CXXLINK_S) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_so debug_msg.so odr_violation1.so odr_violation2.so "2>$@"
+       @if $(CXXLINK_S) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_so debug_msg.so odr_violation1.so odr_violation2.so 2>$@; \
        then \
          echo 1>&2 "Link of debug_msg_so should have failed"; \
          rm -f $@; \
@@ -959,8 +1062,8 @@ odr_violation1_ndebug.so: odr_violation1.cc gcctestdir/ld
 odr_violation2_ndebug.so: odr_violation2.cc gcctestdir/ld
        $(CXXCOMPILE) -Bgcctestdir/ -O2 -g0 -shared -fPIC -w -o $@ $(srcdir)/odr_violation2.cc
 debug_msg_ndebug.err: debug_msg_ndebug.so odr_violation1_ndebug.so odr_violation2_ndebug.so gcctestdir/ld
-       @echo $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_ndebug debug_msg_ndebug.so odr_violation1_ndebug.so odr_violation2_ndebug.so "2>$@"
-       @if $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_ndebug debug_msg_ndebug.so odr_violation1_ndebug.so odr_violation2_ndebug.so 2>$@; \
+       @echo $(CXXLINK_S) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_ndebug debug_msg_ndebug.so odr_violation1_ndebug.so odr_violation2_ndebug.so -shared-libgcc -Bdynamic -lstdc++ "2>$@"
+       @if $(CXXLINK_S) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_ndebug debug_msg_ndebug.so odr_violation1_ndebug.so odr_violation2_ndebug.so -shared-libgcc -Bdynamic -lstdc++ 2>$@; \
        then \
          echo 1>&2 "Link of debug_msg_ndebug should have failed"; \
          rm -f $@; \
@@ -1022,6 +1125,7 @@ flagstest_o_ttext_1: flagstest_debug.o gcctestdir/ld
 # PT_PHDR segment at file offset 0.  We just make sure that we can
 # build it without error.
 check_DATA += flagstest_o_ttext_2
+MOSTLYCLEANFILES += flagstest_o_ttext_2
 flagstest_o_ttext_2: flagstest_debug.o gcctestdir/ld
        $(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,-Ttext,0x400010 -Wl,-Tdata,0x800010
 
@@ -1205,18 +1309,18 @@ relro_script_test_DEPENDENCIES = gcctestdir/ld relro_script_test.so
 relro_script_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
 relro_script_test_LDADD = relro_script_test.so
 relro_script_test.so: gcctestdir/ld relro_script_test.t relro_test_pic.o
-       $(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro -$(srcdir)/relro_script_test.t relro_test_pic.o
+       $(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro -Wl,-T,$(srcdir)/relro_script_test.t relro_test_pic.o
 
 check_PROGRAMS += script_test_1
 script_test_1_SOURCES = script_test_1.cc
 script_test_1_DEPENDENCIES = gcctestdir/ld script_test_1.t
-script_test_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -$(srcdir)/script_test_1.t
+script_test_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_1.t
 script_test_1_LDADD =
 
 check_PROGRAMS += script_test_2
 script_test_2_SOURCES = script_test_2.cc script_test_2a.cc script_test_2b.cc
 script_test_2_DEPENDENCIES = gcctestdir/ld script_test_2.t
-script_test_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -$(srcdir)/script_test_2.t
+script_test_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_2.t
 script_test_2_LDADD =
 
 check_PROGRAMS += justsyms
@@ -1234,6 +1338,7 @@ justsyms_exec_SOURCES = justsyms_exec.c
 justsyms_exec_DEPENDENCIES = gcctestdir/ld justsyms_lib
 justsyms_exec_LDFLAGS = -Bgcctestdir/ -Wl,-R,justsyms_lib
 justsyms_exec_LDADD =
+MOSTLYCLEANFILES += justsyms_lib
 justsyms_lib.o: justsyms_lib.c
        $(COMPILE) -c -o $@ $<
 justsyms_lib: justsyms_lib.o gcctestdir/ld
@@ -1266,35 +1371,35 @@ check_SCRIPTS += script_test_3.sh
 check_DATA += script_test_3.stdout
 MOSTLYCLEANFILES += script_test_3.stdout
 script_test_3: basic_test.o gcctestdir/ld script_test_3.t
-       $(CXXLINK) -Bgcctestdir/ basic_test.o -$(srcdir)/script_test_3.t
+       $(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_3.t
 script_test_3.stdout: script_test_3
        $(TEST_READELF) -SlW script_test_3 > script_test_3.stdout
 
 check_PROGRAMS += tls_phdrs_script_test
 tls_phdrs_script_test_SOURCES = $(tls_test_SOURCES)
 tls_phdrs_script_test_DEPENDENCIES = $(tls_test_DEPENDENCIES) $(srcdir)/script_test_3.t
-tls_phdrs_script_test_LDFLAGS = $(tls_test_LDFLAGS) -$(srcdir)/script_test_3.t
+tls_phdrs_script_test_LDFLAGS = $(tls_test_LDFLAGS) -Wl,-T,$(srcdir)/script_test_3.t
 tls_phdrs_script_test_LDADD = $(tls_test_LDADD)
 
 check_SCRIPTS += script_test_4.sh
 check_DATA += script_test_4.stdout
 MOSTLYCLEANFILES += script_test_4
 script_test_4: basic_test.o gcctestdir/ld $(srcdir)/script_test_4.t
-       $(CXXLINK) -Bgcctestdir/ basic_test.o -$(srcdir)/script_test_4.t
+       $(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_4.t
 script_test_4.stdout: script_test_4
        $(TEST_READELF) -SlW script_test_4 > script_test_4.stdout
 
 check_PROGRAMS += tls_script_test
 tls_script_test_SOURCES = $(tls_test_SOURCES)
 tls_script_test_DEPENDENCIES = $(tls_test_DEPENDENCIES) $(srcdir)/script_test_4.t
-tls_script_test_LDFLAGS = $(tls_test_LDFLAGS) -$(srcdir)/script_test_4.t
+tls_script_test_LDFLAGS = $(tls_test_LDFLAGS) -Wl,-T,$(srcdir)/script_test_4.t
 tls_script_test_LDADD = $(tls_test_LDADD)
 
 check_SCRIPTS += script_test_5.sh
 check_DATA += script_test_5.stdout
 MOSTLYCLEANFILES += script_test_5
 script_test_5: script_test_5.o gcctestdir/ld $(srcdir)/script_test_5.t
-       $(CXXLINK) -Bgcctestdir/ script_test_5.o -$(srcdir)/script_test_5.t
+       $(CXXLINK) -Bgcctestdir/ script_test_5.o -Wl,-T,$(srcdir)/script_test_5.t
 script_test_5.stdout: script_test_5
        $(TEST_READELF) -SW script_test_5 > script_test_5.stdout
 
@@ -1302,7 +1407,7 @@ check_SCRIPTS += script_test_6.sh
 check_DATA += script_test_6.stdout
 MOSTLYCLEANFILES += script_test_6
 script_test_6: basic_test.o gcctestdir/ld $(srcdir)/script_test_6.t
-       $(CXXLINK) -Bgcctestdir/ basic_test.o -$(srcdir)/script_test_6.t \
+       $(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_6.t \
        -Wl,-Ttext=0x10001000 -Wl,-Tdata=0x10200000 -Wl,-Tbss=0x10400000
 script_test_6.stdout: script_test_6
        $(TEST_READELF) -SlW script_test_6 > script_test_6.stdout
@@ -1311,7 +1416,7 @@ check_SCRIPTS += script_test_7.sh
 check_DATA += script_test_7.stdout
 MOSTLYCLEANFILES += script_test_7
 script_test_7: basic_test.o gcctestdir/ld $(srcdir)/script_test_7.t
-       $(CXXLINK) -Bgcctestdir/ basic_test.o -$(srcdir)/script_test_7.t
+       $(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_7.t
 script_test_7.stdout: script_test_7
        $(TEST_READELF) -SlW script_test_7 > script_test_7.stdout
 
@@ -1319,21 +1424,31 @@ check_SCRIPTS += script_test_8.sh
 check_DATA += script_test_8.stdout
 MOSTLYCLEANFILES += script_test_8
 script_test_8: basic_test.o gcctestdir/ld $(srcdir)/script_test_7.t
-       $(CXXLINK) -Bgcctestdir/ basic_test.o -$(srcdir)/script_test_7.t \
+       $(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_7.t \
        -Wl,-Ttext=0x20001000 -Wl,-Tdata=0x20200000 -Wl,-Tbss=0x20400000
 script_test_8.stdout: script_test_8
        $(TEST_READELF) -SlW script_test_8 > script_test_8.stdout
 
-
 check_SCRIPTS += script_test_9.sh
 check_DATA += script_test_9.stdout
+MOSTLYCLEANFILES += script_test_9
 script_test_9.o: script_test_9.cc
        $(CXXCOMPILE) -O0 -c -o $@ $<
 script_test_9: gcctestdir/ld $(srcdir)/script_test_9.t script_test_9.o
-       $(CXXLINK) -Bgcctestdir/ script_test_9.o -$(srcdir)/script_test_9.t
+       $(CXXLINK) -Bgcctestdir/ script_test_9.o -Wl,-T,$(srcdir)/script_test_9.t
 script_test_9.stdout: script_test_9
        $(TEST_READELF) -lW script_test_9 > script_test_9.stdout
 
+# Test scripts with a relocatable link.
+# The -g option is necessary to trigger a bug where a section
+# declared in a script file is assigned a non-zero starting address.
+check_PROGRAMS += script_test_11
+script_test_11: gcctestdir/ld script_test_11_r.o
+       $(LINK) -Bgcctestdir/ script_test_11_r.o
+script_test_11_r.o: gcctestdir/ld $(srcdir)/script_test_11.t script_test_11.o
+       gcctestdir/ld -r -o $@ -T $(srcdir)/script_test_11.t script_test_11.o
+script_test_11.o: script_test_11.c
+       $(COMPILE) -c -g -o $@ $<
 
 # Test --dynamic-list, --dynamic-list-data, --dynamic-list-cpp-new,
 # and --dynamic-list-cpp-typeinfo
@@ -1509,6 +1624,22 @@ empty.syms:
        @echo "" >$@
        @echo "Symbol table" >>$@
 
+if TLS
+
+check_PROGRAMS += plugin_test_tls
+check_SCRIPTS += plugin_test_tls.sh
+check_DATA += plugin_test_tls.err
+MOSTLYCLEANFILES += plugin_test_tls.err
+plugin_test_tls: two_file_test_tls.o two_file_test_1.syms two_file_test_1b.syms two_file_test_2_tls.syms gcctestdir/ld plugin_test.so
+       $(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_tls.o two_file_test_1.syms two_file_test_1b.syms two_file_test_2_tls.syms 2>plugin_test_tls.err
+plugin_test_tls.err: plugin_test_tls
+       @touch plugin_test_tls.err
+
+two_file_test_2_tls.syms: two_file_test_2_tls.o
+       $(TEST_READELF) -sW $< >$@ 2>/dev/null
+
+endif TLS
+
 MOSTLYCLEANFILES += unused.c
 unused.syms: unused.o
        $(TEST_READELF) -sW $< >$@ 2>/dev/null
@@ -1519,13 +1650,16 @@ unused.c:
        @cp /dev/null $@
 
 check_SCRIPTS += plugin_final_layout.sh
-check_DATA += plugin_final_layout.stdout
+check_DATA += plugin_final_layout.stdout plugin_final_layout_readelf.stdout
+MOSTLYCLEANFILES += plugin_final_layout
 plugin_final_layout.o: plugin_final_layout.cc
        $(CXXCOMPILE) -O0 -c -ffunction-sections  -fdata-sections -g -o $@ $<
 plugin_final_layout: plugin_final_layout.o plugin_section_order.so gcctestdir/ld
        $(CXXLINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_order.so" plugin_final_layout.o
 plugin_final_layout.stdout: plugin_final_layout
-       $(TEST_NM) -n plugin_final_layout > plugin_final_layout.stdout
+       $(TEST_NM) -n --synthetic plugin_final_layout > plugin_final_layout.stdout
+plugin_final_layout_readelf.stdout: plugin_final_layout
+       $(TEST_READELF) -Wl plugin_final_layout > plugin_final_layout_readelf.stdout
 
 plugin_section_order.so: plugin_section_order.o
        $(LINK) -Bgcctestdir/ -shared plugin_section_order.o
@@ -1625,7 +1759,7 @@ retain_symbols_file_test.so: basic_pic_test.o gcctestdir/ld
        echo '_ZN4t16bC1Ev' >> retain_symbols_file_test.in
        echo '_ZNK4t20a3getEv' >> retain_symbols_file_test.in
        echo '_Z3t18v' >> retain_symbols_file_test.in
-       echo '__tcf_0' >> retain_symbols_file_test.in   
+       echo '__tcf_0' >> retain_symbols_file_test.in
        $(CXXLINK) -Bgcctestdir/ -shared -Wl,-retain-symbols-file,retain_symbols_file_test.in basic_pic_test.o
 retain_symbols_file_test.stdout: retain_symbols_file_test.so
        $(TEST_NM) -C retain_symbols_file_test.so > $@
@@ -1655,7 +1789,7 @@ alt/searched_file_test_lib.a: searched_file_test_lib.o
        test -d alt || mkdir -p alt
        $(TEST_AR) rc $@ $^
 
-# Test that no .gnu.version sections are created when 
+# Test that no .gnu.version sections are created when
 # symbol versioning is not used.
 check_SCRIPTS += no_version_test.sh
 check_DATA += no_version_test.stdout
@@ -1673,7 +1807,7 @@ no_version_test.stdout: libno_version_test.so
 if IFUNC
 
 ifuncmod1.o: ifuncmod1.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 ifuncmod1.so: ifuncmod1.o gcctestdir/ld
        $(LINK) -Bgcctestdir/ -shared ifuncmod1.o
 
@@ -1681,9 +1815,9 @@ ifuncdep1.o: ifuncmod1.c
        $(COMPILE) -c -o $@ $<
 
 ifuncmain1pic.o: ifuncmain1.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 ifuncmain1pie.o: ifuncmain1.c
-       $(COMPILE) -c -fpie -o $@ $<
+       $(COMPILE) -c -fPIE -o $@ $<
 
 if HAVE_STATIC
 if IFUNC_STATIC
@@ -1717,7 +1851,7 @@ ifuncmain1vis_LDADD = ifuncmod1.so
 
 check_PROGRAMS += ifuncmain1vispic
 ifuncmain1vispic.o: ifuncmain1vis.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 ifuncmain1vispic: ifuncmain1vispic.o ifuncmod1.so gcctestdir/ld
        $(LINK) -Bgcctestdir/ ifuncmain1pic.o ifuncmod1.so -Wl,-R,.
 
@@ -1731,7 +1865,7 @@ ifuncmain1pie: ifuncmain1pie.o ifuncmod1.so gcctestdir/ld
 
 check_PROGRAMS += ifuncmain1vispie
 ifuncmain1vispie.o: ifuncmain1vis.c
-       $(COMPILE) -c -fpie -o $@ $<
+       $(COMPILE) -c -fPIE -o $@ $<
 ifuncmain1vispie: ifuncmain1vispie.o ifuncmod1.so gcctestdir/ld
        $(LINK) -Bgcctestdir/ -pie ifuncmain1vispie.o ifuncmod1.so -Wl,-R,.
 
@@ -1740,10 +1874,10 @@ ifuncmain1staticpie: ifuncmain1pie.o ifuncmod1.o gcctestdir/ld
        $(LINK) -Bgcctestdir/ -pie ifuncmain1pie.o ifuncmod1.o
 
 ifuncmain2pic.o: ifuncmain2.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 
 ifuncdep2pic.o: ifuncdep2.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 
 if HAVE_STATIC
 if IFUNC_STATIC
@@ -1770,7 +1904,7 @@ ifuncmain2pic: ifuncmain2pic.o ifuncdep2pic.o gcctestdir/ld
        $(LINK) -Bgcctestdir/ ifuncmain2pic.o ifuncdep2pic.o
 
 ifuncmod3.o: ifuncmod3.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 ifuncmod3.so: ifuncmod3.o gcctestdir/ld
        $(LINK) -Bgcctestdir/ -shared ifuncmod3.o
 
@@ -1781,7 +1915,7 @@ ifuncmain3_LDFLAGS = -Bgcctestdir/ -Wl,--export-dynamic -Wl,-R,.
 ifuncmain3_LDADD = -ldl
 
 ifuncmain4pic.o: ifuncmain4.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 
 if HAVE_STATIC
 if IFUNC_STATIC
@@ -1804,13 +1938,13 @@ ifuncmain4_LDFLAGS = -Bgcctestdir/
 ifuncmain4_LDADD =
 
 ifuncmain5pic.o: ifuncmain5.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 
 ifuncmain5pie.o: ifuncmain5.c
-       $(COMPILE) -c -fpie -o $@ $<
+       $(COMPILE) -c -fPIE -o $@ $<
 
 ifuncmod5.o: ifuncmod5.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 ifuncmod5.so: ifuncmod5.o gcctestdir/ld
        $(LINK) -Bgcctestdir/ -shared ifuncmod5.o
 
@@ -1850,10 +1984,10 @@ ifuncmain5pie: ifuncmain5pie.o ifuncmod5.so gcctestdir/ld
        $(LINK) -Bgcctestdir/ -pie ifuncmain5pie.o ifuncmod5.so -Wl,-R,.
 
 ifuncmain6pie.o: ifuncmain6pie.c
-       $(COMPILE) -c -fpie -o $@ $<
+       $(COMPILE) -c -fPIE -o $@ $<
 
 ifuncmod6.o: ifuncmod6.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 ifuncmod6.so: ifuncmod6.o gcctestdir/ld
        $(LINK) -Bgcctestdir/ -shared ifuncmod6.o
 
@@ -1862,10 +1996,10 @@ ifuncmain6pie: ifuncmain6pie.o ifuncmod6.so gcctestdir/ld
        $(LINK) -Bgcctestdir/ -pie ifuncmain6pie.o ifuncmod6.so -Wl,-R,.
 
 ifuncmain7pic.o: ifuncmain7.c
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
 
 ifuncmain7pie.o: ifuncmain7.c
-       $(COMPILE) -c -fpie -o $@ $<
+       $(COMPILE) -c -fPIE -o $@ $<
 
 if HAVE_STATIC
 if IFUNC_STATIC
@@ -1897,9 +2031,9 @@ ifuncmain7pie: ifuncmain7pie.o gcctestdir/ld
 
 check_PROGRAMS += ifuncvar
 ifuncvar1_pic.o: ifuncvar1.c
-       $(COMPILE) -c -fpic -o $@ $<
-ifuncvar2_pic.o: ifuncvar2.c   
-       $(COMPILE) -c -fpic -o $@ $<
+       $(COMPILE) -c -fPIC -o $@ $<
+ifuncvar2_pic.o: ifuncvar2.c
+       $(COMPILE) -c -fPIC -o $@ $<
 ifuncvar.so: ifuncvar1_pic.o ifuncvar2_pic.o gcctestdir/ld
        $(LINK) -Bgcctestdir/ -shared ifuncvar1_pic.o ifuncvar2_pic.o
 ifuncvar_SOURCES = ifuncvar3.c
@@ -1949,6 +2083,7 @@ dyn_weak_ref.stdout: dyn_weak_ref_1.so
 
 # Test that --start-lib and --end-lib function correctly.
 check_PROGRAMS += start_lib_test
+MOSTLYCLEANFILES += libstart_lib_test.a
 start_lib_test: start_lib_test_main.o libstart_lib_test.a start_lib_test_2.o start_lib_test_3.o \
        gcctestdir/ld
        $(LINK) -Bgcctestdir/ -o $@ start_lib_test_main.o -L. -lstart_lib_test \
@@ -1963,10 +2098,62 @@ MOSTLYCLEANFILES += memory_test.stdout memory_test memory_test.o
 memory_test.o: memory_test.s
        $(COMPILE) -o $@ -c $<
 memory_test: memory_test.o gcctestdir/ld $(srcdir)/memory_test.t
-       $(LINK) -Bgcctestdir/ -nostartfiles -nostdlib -$(srcdir)/memory_test.t -o $@ memory_test.o
+       $(LINK) -Bgcctestdir/ -nostartfiles -nostdlib -z max-page-size=0x1000 -z common-page-size=0x1000 -Wl,-T,$(srcdir)/memory_test.t -o $@ memory_test.o
 memory_test.stdout: memory_test
        $(TEST_READELF) -lWS  $< > $@
 
+if HAVE_PUBNAMES
+
+# Test that --gdb-index functions correctly without gcc-generated pubnames.
+check_SCRIPTS += gdb_index_test_1.sh
+check_DATA += gdb_index_test_1.stdout
+MOSTLYCLEANFILES += gdb_index_test_1.stdout gdb_index_test_1
+gdb_index_test.o: gdb_index_test.cc
+       $(CXXCOMPILE) -O0 -g -gno-pubnames -c -o $@ $<
+gdb_index_test_1: gdb_index_test.o gcctestdir/ld
+       $(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
+gdb_index_test_1.stdout: gdb_index_test_1
+       $(TEST_READELF) --debug-dump=gdb_index $< > $@
+
+if HAVE_ZLIB
+
+# Test that --gdb-index functions correctly with compressed debug sections.
+check_SCRIPTS += gdb_index_test_2.sh
+check_DATA += gdb_index_test_2.stdout
+MOSTLYCLEANFILES += gdb_index_test_2.stdout gdb_index_test_2
+gdb_index_test_cdebug.o: gdb_index_test.cc
+       $(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections -c -o $@ $<
+gdb_index_test_2: gdb_index_test_cdebug.o gcctestdir/ld
+       $(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
+gdb_index_test_2.stdout: gdb_index_test_2
+       $(TEST_READELF) --debug-dump=gdb_index $< > $@
+
+endif HAVE_ZLIB
+
+# Another simple C test (DW_AT_high_pc encoding) for --gdb-index.
+check_SCRIPTS += gdb_index_test_3.sh
+check_DATA += gdb_index_test_3.stdout
+MOSTLYCLEANFILES += gdb_index_test_3.stdout gdb_index_test_3
+gdb_index_test_3.o: gdb_index_test_3.c
+       $(COMPILE) -O0 -g -c -o $@ $<
+gdb_index_test_3: gdb_index_test_3.o gcctestdir/ld
+       $(LINK) -Bgcctestdir/ -Wl,--gdb-index,--fatal-warnings $<
+gdb_index_test_3.stdout: gdb_index_test_3
+       $(TEST_READELF) --debug-dump=gdb_index $< > $@
+
+# Test that --gdb-index functions correctly with gcc-generated pubnames.
+check_SCRIPTS += gdb_index_test_4.sh
+check_DATA += gdb_index_test_4.stdout
+MOSTLYCLEANFILES += gdb_index_test_4.stdout gdb_index_test_4
+gdb_index_test_pub.o: gdb_index_test.cc
+       $(CXXCOMPILE) -O0 -g -gpubnames -c -o $@ $<
+gdb_index_test_4: gdb_index_test_pub.o gcctestdir/ld
+       $(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
+gdb_index_test_4.stdout: gdb_index_test_4
+       $(TEST_READELF) --debug-dump=gdb_index $< > $@
+
+endif HAVE_PUBNAMES
+
 # End-to-end incremental linking tests.
 # Incremental linking is currently supported only on the x86_64 target.
 
@@ -2043,10 +2230,10 @@ incremental_test_6: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
 check_PROGRAMS += incremental_copy_test
 incremental_copy_test: copy_test_v1.o copy_test.o copy_test_1.so copy_test_2.so
        cp -f copy_test_v1.o copy_test_tmp.o
-       $(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Bgcctestdir/ -Wl,-R,. copy_test_tmp.o copy_test_1.so copy_test_2.so
+       $(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
        @sleep 1
        cp -f copy_test.o copy_test_tmp.o
-       $(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ -Wl,-R,. copy_test_tmp.o copy_test_1.so copy_test_2.so
+       $(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
 
 check_PROGRAMS += incremental_common_test_1
 incremental_common_test_1: common_test_1_v1.o common_test_1_v2.o gcctestdir/ld
@@ -2069,6 +2256,19 @@ incremental_comdat_test_1: incr_comdat_test_1.o incr_comdat_test_2_v1.o incr_com
 
 endif DEFAULT_TARGET_X86_64
 
+if DEFAULT_TARGET_X86_64
+check_PROGRAMS += exception_x86_64_bnd_test
+exception_x86_64_bnd_test_SOURCES = exception_test_main.cc
+exception_x86_64_bnd_test_DEPENDENCIES = exception_x86_64_bnd_1.o \
+                                        exception_x86_64_bnd_2.o
+exception_x86_64_bnd_test_LDFLAGS = $(exception_test_LDFLAGS)
+exception_x86_64_bnd_test_LDADD = $(exception_x86_64_bnd_test_DEPENDENCIES)
+exception_x86_64_bnd_1.o: exception_test_1.cc
+       $(CXXCOMPILE) -c -fpic -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
+exception_x86_64_bnd_2.o: exception_test_2.cc
+       $(CXXCOMPILE) -c -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
+endif DEFAULT_TARGET_X86_64
+
 endif GCC
 endif NATIVE_LINKER
 
@@ -2079,6 +2279,7 @@ if NATIVE_OR_CROSS_LINKER
 # Test script section order.
 check_SCRIPTS += script_test_10.sh
 check_DATA += script_test_10.stdout
+MOSTLYCLEANFILES += script_test_10
 script_test_10.o: script_test_10.s
        $(TEST_AS) -o $@ $<
 script_test_10: $(srcdir)/script_test_10.t script_test_10.o gcctestdir/ld
@@ -2666,3 +2867,48 @@ endif DEFAULT_TARGET_ARM
 
 endif NATIVE_OR_CROSS_LINKER
 
+# Tests for the dwp tool.
+# We don't want to rely yet on GCC support for -gsplit-dwarf,
+# so we use (for now) test cases in x86 assembly language,
+# compiled from the dwp_test_*.cc sources.
+
+if DEFAULT_TARGET_X86_64
+
+dwp_test_main.o: dwp_test_main.s
+       $(TEST_AS) -o $@ $<
+dwp_test_1.o: dwp_test_1.s
+       $(TEST_AS) -o $@ $<
+dwp_test_1b.o: dwp_test_1b.s
+       $(TEST_AS) -o $@ $<
+dwp_test_2.o: dwp_test_2.s
+       $(TEST_AS) -o $@ $<
+
+dwp_test_main.dwo: dwp_test_main.o
+       $(TEST_OBJCOPY) --extract-dwo $< $@
+dwp_test_1.dwo: dwp_test_1.o
+       $(TEST_OBJCOPY) --extract-dwo $< $@
+dwp_test_1b.dwo: dwp_test_1b.o
+       $(TEST_OBJCOPY) --extract-dwo $< $@
+dwp_test_2.dwo: dwp_test_2.o
+       $(TEST_OBJCOPY) --extract-dwo $< $@
+
+MOSTLYCLEANFILES += *.dwo *.dwp
+check_SCRIPTS += dwp_test_1.sh
+check_DATA += dwp_test_1.stdout
+dwp_test_1.stdout: dwp_test_1.dwp
+       $(TEST_READELF) -wi $< > $@
+dwp_test_1.dwp: ../dwp dwp_test_main.dwo dwp_test_1.dwo dwp_test_1b.dwo dwp_test_2.dwo
+       ../dwp -o $@ dwp_test_main.dwo dwp_test_1.dwo dwp_test_1b.dwo dwp_test_2.dwo
+
+check_SCRIPTS += dwp_test_2.sh
+check_DATA += dwp_test_2.stdout
+dwp_test_2.stdout: dwp_test_2.dwp
+       $(TEST_READELF) -wi $< > $@
+dwp_test_2.dwp: ../dwp dwp_test_2a.dwp dwp_test_2b.dwp
+       ../dwp -o $@ dwp_test_2a.dwp dwp_test_2b.dwp
+dwp_test_2a.dwp: ../dwp dwp_test_main.dwo dwp_test_1.dwo
+       ../dwp -o $@ dwp_test_main.dwo dwp_test_1.dwo
+dwp_test_2b.dwp: ../dwp dwp_test_1b.dwo dwp_test_2.dwo
+       ../dwp -o $@ dwp_test_1b.dwo dwp_test_2.dwo
+
+endif DEFAULT_TARGET_X86_64