2006-12-01 00:52:50 +01:00
|
|
|
# Process this file with automake to generate Makefile.in
|
|
|
|
|
2007-09-22 22:11:12 +02:00
|
|
|
# As far as I can tell automake testing support assumes that the build
|
|
|
|
# system and the host system are the same. So these tests will not
|
|
|
|
# work when building with a cross-compiler.
|
|
|
|
|
Cleanups in binutils makefiles.
ld/:
* Makefile.am (bin_PROGRAMS): Renamed from ...
(noinst_PROGRAMS): ... this.
(transform): Override, including the renaming of ld-new to ld.
(install-exec-local): Installation of ld in $(bindir) not needed
here any more.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
(MAINTAINERCLEANFILES): Add ld.1.
* Makefile.in: Regenerate.
gold/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* testsuite/Makefile.am (AUTOMAKE_OPTIONS): Add -Wno-portability.
(AM_CPPFLAGS): Renamed from ...
(INCLUDE): ... this.
* Makefile.in, testsuite/Makefile.in: Regenerate.
bfd/:
* Makefile.am (libbfd_la_LDFLAGS): Initialize early, to allow
appending.
[INSTALL_LIBBFD] (bfdlib_LTLIBRARIES, bfdinclude_HEADERS): Set
only in this condition.
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES, libbfd_la_LDFLAGS): New,
to build but not install libbfd.la in this condition.
(install-bfdlibLTLIBRARIES, uninstall-bfdlibLTLIBRARIES)
(install_libbfd, install_libbfd): Remove.
* Makefile.in: Regenerate.
binutils/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
(bin2c$(EXEEXT_FOR_BUILD): Adjust rule.
(installcheck-local): Renamed from ...
(installcheck): ... this.
* Makefile.in: Regenerate.
gas/:
* Makefile.am (YFLAGS): Remove, not needed any more.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
gprof/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
opcodes/:
* Makefile.am (libopcodes_la_LDFLAGS): Initialize early.
[INSTALL_LIBBFD] (bfdlib_LTLIBRARIES): Set only in this condition.
[INSTALL_LIBBFD] (bfdinclude_DATA): New.
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES): New.
[!INSTALL_LIBBFD] (libopcodes_la_LDFLAGS): Ensure libopcodes.la
is built shared even if it is not to be installed.
(install-bfdlibLTLIBRARIES,uninstall-bfdlibLTLIBRARIES)
(install_libopcodes, uninstall_libopcodes): Remove.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
2009-08-22 21:02:57 +02:00
|
|
|
# Ignore warning about AM_PROG_CC_C_O due to large_CFLAGS
|
|
|
|
AUTOMAKE_OPTIONS = foreign -Wno-portability
|
2006-12-01 00:52:50 +01:00
|
|
|
|
2015-04-01 15:24:42 +02:00
|
|
|
# This is where we get zlib from. zlib is in ../../zlib unless we were
|
|
|
|
# configured with --with-system-zlib, in which case ../../zlib either
|
|
|
|
# doesn't exist or not configured.
|
|
|
|
ZLIB = -L../../zlib -lz
|
|
|
|
|
2007-10-07 19:20:18 +02:00
|
|
|
# The two_file_test tests -fmerge-constants, so we simply always turn
|
2013-10-11 23:56:16 +02:00
|
|
|
# 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)
|
2006-12-01 00:52:50 +01:00
|
|
|
|
Cleanups in binutils makefiles.
ld/:
* Makefile.am (bin_PROGRAMS): Renamed from ...
(noinst_PROGRAMS): ... this.
(transform): Override, including the renaming of ld-new to ld.
(install-exec-local): Installation of ld in $(bindir) not needed
here any more.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
(MAINTAINERCLEANFILES): Add ld.1.
* Makefile.in: Regenerate.
gold/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* testsuite/Makefile.am (AUTOMAKE_OPTIONS): Add -Wno-portability.
(AM_CPPFLAGS): Renamed from ...
(INCLUDE): ... this.
* Makefile.in, testsuite/Makefile.in: Regenerate.
bfd/:
* Makefile.am (libbfd_la_LDFLAGS): Initialize early, to allow
appending.
[INSTALL_LIBBFD] (bfdlib_LTLIBRARIES, bfdinclude_HEADERS): Set
only in this condition.
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES, libbfd_la_LDFLAGS): New,
to build but not install libbfd.la in this condition.
(install-bfdlibLTLIBRARIES, uninstall-bfdlibLTLIBRARIES)
(install_libbfd, install_libbfd): Remove.
* Makefile.in: Regenerate.
binutils/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
(bin2c$(EXEEXT_FOR_BUILD): Adjust rule.
(installcheck-local): Renamed from ...
(installcheck): ... this.
* Makefile.in: Regenerate.
gas/:
* Makefile.am (YFLAGS): Remove, not needed any more.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
gprof/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
opcodes/:
* Makefile.am (libopcodes_la_LDFLAGS): Initialize early.
[INSTALL_LIBBFD] (bfdlib_LTLIBRARIES): Set only in this condition.
[INSTALL_LIBBFD] (bfdinclude_DATA): New.
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES): New.
[!INSTALL_LIBBFD] (libopcodes_la_LDFLAGS): Ensure libopcodes.la
is built shared even if it is not to be installed.
(install-bfdlibLTLIBRARIES,uninstall-bfdlibLTLIBRARIES)
(install_libopcodes, uninstall_libopcodes): Remove.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
2009-08-22 21:02:57 +02:00
|
|
|
AM_CPPFLAGS = \
|
2006-12-01 00:52:50 +01:00
|
|
|
-I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../../include \
|
2008-04-17 09:12:00 +02:00
|
|
|
-I$(srcdir)/../../elfcpp -I.. \
|
2006-12-01 00:52:50 +01:00
|
|
|
-DLOCALEDIR="\"$(datadir)/locale\"" \
|
|
|
|
@INCINTL@
|
|
|
|
|
2014-04-03 00:04:36 +02:00
|
|
|
# Some versions of GCC now automatically enable linker plugins,
|
|
|
|
# but we want to run our tests without GCC's plugins.
|
|
|
|
if HAVE_NO_USE_LINKER_PLUGIN
|
|
|
|
OPT_NO_PLUGINS = -fno-use-linker-plugin
|
|
|
|
endif
|
|
|
|
|
2012-10-26 00:50:54 +02:00
|
|
|
# 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)
|
2014-04-03 00:04:36 +02:00
|
|
|
LINK1 = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(OPT_NO_PLUGINS) \
|
|
|
|
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
2012-10-26 00:50:54 +02:00
|
|
|
CXXCOMPILE1 = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
|
|
|
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
2014-04-03 00:04:36 +02:00
|
|
|
CXXLINK1 = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(OPT_NO_PLUGINS) \
|
|
|
|
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
2012-10-26 00:50:54 +02:00
|
|
|
|
2014-04-03 00:04:36 +02:00
|
|
|
# Strip out -Wp,-D_FORTIFY_SOURCE=, which is irrelevant for the gold
|
2012-10-26 00:50:54 +02:00
|
|
|
# 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]*//'`
|
|
|
|
|
2013-01-05 00:50:27 +01:00
|
|
|
# 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'`
|
|
|
|
|
2008-04-08 00:16:03 +02:00
|
|
|
TEST_READELF = $(top_builddir)/../binutils/readelf
|
|
|
|
TEST_OBJDUMP = $(top_builddir)/../binutils/objdump
|
2012-10-24 04:32:15 +02:00
|
|
|
TEST_OBJCOPY = $(top_builddir)/../binutils/objcopy
|
2008-04-08 00:16:03 +02:00
|
|
|
TEST_CXXFILT = $(top_builddir)/../binutils/cxxfilt
|
|
|
|
TEST_STRIP = $(top_builddir)/../binutils/strip-new
|
2008-09-29 23:23:02 +02:00
|
|
|
TEST_AR = $(top_builddir)/../binutils/ar
|
2009-05-22 20:31:22 +02:00
|
|
|
TEST_NM = $(top_builddir)/../binutils/nm-new
|
2009-10-07 00:58:27 +02:00
|
|
|
TEST_AS = $(top_builddir)/../gas/as-new
|
2008-04-08 00:16:03 +02:00
|
|
|
|
2008-09-20 00:54:57 +02:00
|
|
|
if PLUGINS
|
|
|
|
LIBDL = -ldl
|
|
|
|
endif
|
|
|
|
|
2007-10-17 08:24:50 +02:00
|
|
|
if THREADS
|
|
|
|
THREADSLIB = -lpthread
|
|
|
|
endif
|
|
|
|
|
2008-04-17 09:12:00 +02:00
|
|
|
if OMP_SUPPORT
|
|
|
|
TLS_TEST_C_CFLAGS = -fopenmp
|
|
|
|
endif
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# 'make clean' is good about deleting some intermediate files (such as
|
|
|
|
# .o's), but not all of them (such as .so's and .err files). We
|
|
|
|
# improve on that here. automake-1.9 info docs say "mostlyclean" is
|
|
|
|
# the right choice for files 'make' builds that people rebuild.
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES = *.so *.syms *.stdout
|
2007-10-07 19:10:10 +02:00
|
|
|
|
2013-05-13 19:35:22 +02:00
|
|
|
# Export make variables to the shell scripts so that they can see
|
|
|
|
# (for example) DEFAULT_TARGET.
|
|
|
|
.EXPORT_ALL_VARIABLES:
|
2013-10-11 23:56:16 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# We will add to these later, for each individual test. Note
|
|
|
|
# that we add each test under check_SCRIPTS or check_PROGRAMS;
|
|
|
|
# the TESTS variable is automatically populated from these.
|
|
|
|
check_SCRIPTS =
|
|
|
|
check_DATA =
|
|
|
|
check_PROGRAMS =
|
2008-04-19 20:30:58 +02:00
|
|
|
BUILT_SOURCES =
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
|
2007-09-23 00:44:33 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# ---------------------------------------------------------------------
|
|
|
|
# These tests test the internals of gold (unittests).
|
2006-12-01 00:52:50 +01:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# Infrastucture needed for the unittests
|
2006-12-01 00:52:50 +01:00
|
|
|
check_LIBRARIES = libgoldtest.a
|
|
|
|
libgoldtest_a_SOURCES = test.cc testmain.cc testfile.cc
|
|
|
|
|
2007-10-04 07:49:04 +02:00
|
|
|
DEPENDENCIES = \
|
|
|
|
libgoldtest.a ../libgold.a ../../libiberty/libiberty.a $(LIBINTL_DEP)
|
2007-10-17 08:24:50 +02:00
|
|
|
LDADD = libgoldtest.a ../libgold.a ../../libiberty/libiberty.a $(LIBINTL) \
|
2015-04-01 15:24:42 +02:00
|
|
|
$(THREADSLIB) $(LIBDL) $(ZLIB)
|
2006-12-01 00:52:50 +01:00
|
|
|
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# The unittests themselves
|
2010-10-12 21:21:41 +02:00
|
|
|
if NATIVE_OR_CROSS_LINKER
|
2010-10-29 17:45:40 +02:00
|
|
|
if GCC
|
|
|
|
|
|
|
|
# Infrastucture needed for the unittests: a directory where the linker
|
|
|
|
# is named 'ld'. This is because the -B flag appends 'ld' to its arg.
|
|
|
|
gcctestdir/ld: ../ld-new
|
|
|
|
test -d gcctestdir || mkdir -p gcctestdir
|
|
|
|
rm -f gcctestdir/ld
|
|
|
|
(cd gcctestdir && $(LN_S) ../../ld-new ld)
|
|
|
|
|
2011-06-24 20:08:50 +02:00
|
|
|
# Some tests require the latest features of an in-tree assembler.
|
|
|
|
gcctestdir/as: $(TEST_AS)
|
|
|
|
test -d gcctestdir || mkdir -p gcctestdir
|
|
|
|
rm -f gcctestdir/as
|
|
|
|
(cd gcctestdir && $(LN_S) $(abs_top_builddir)/../gas/as-new as)
|
|
|
|
|
2010-10-29 17:45:40 +02:00
|
|
|
endif GCC
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += object_unittest
|
2006-12-01 00:52:50 +01:00
|
|
|
object_unittest_SOURCES = object_unittest.cc
|
2007-09-23 00:44:33 +02:00
|
|
|
|
2008-02-08 08:06:58 +01:00
|
|
|
check_PROGRAMS += binary_unittest
|
|
|
|
binary_unittest_SOURCES = binary_unittest.cc
|
|
|
|
|
2012-01-25 08:34:55 +01:00
|
|
|
check_PROGRAMS += leb128_unittest
|
|
|
|
leb128_unittest_SOURCES = leb128_unittest.cc
|
|
|
|
|
2016-02-05 17:27:13 +01:00
|
|
|
check_PROGRAMS += overflow_unittest
|
|
|
|
overflow_unittest_SOURCES = overflow_unittest.cc
|
|
|
|
overflow_unittest.o: overflow_unittest.cc
|
|
|
|
$(CXXCOMPILE) -O3 -c -o $@ $<
|
|
|
|
|
2010-10-12 21:21:41 +02:00
|
|
|
endif NATIVE_OR_CROSS_LINKER
|
2007-12-06 18:07:24 +01:00
|
|
|
|
|
|
|
# ---------------------------------------------------------------------
|
|
|
|
# These tests test the output of gold (end-to-end tests). In
|
|
|
|
# particular, they make sure that gold can link "difficult" object
|
|
|
|
# files, and the resulting object files run correctly. These can only
|
|
|
|
# run if we've built ld-new for the native architecture (that is,
|
|
|
|
# we're not cross-compiling it), since we run ld-new as part of these
|
|
|
|
# tests. We use the gcc-specific flag '-B' to use our linker instead
|
|
|
|
# of the default linker, which is why we only run our tests under gcc.
|
2007-10-17 01:09:45 +02:00
|
|
|
|
2007-11-14 08:34:53 +01:00
|
|
|
if NATIVE_LINKER
|
2007-12-06 18:07:24 +01:00
|
|
|
if GCC
|
2007-11-14 08:34:53 +01:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# Each of these .o's is a useful, small complete program. They're
|
|
|
|
# particularly useful for making sure ld-new's flags do what they're
|
|
|
|
# supposed to (hence their names), but are used for many tests that
|
|
|
|
# don't actually involve analyzing input data.
|
2007-12-05 02:10:16 +01:00
|
|
|
flagstest_debug.o: constructor_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g -c -o $@ $<
|
|
|
|
flagstest_ndebug.o: constructor_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -o $@ $<
|
|
|
|
|
2009-12-02 15:51:22 +01:00
|
|
|
check_SCRIPTS += incremental_test.sh
|
|
|
|
check_DATA += incremental_test.stdout
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += incremental_test incremental_test.cmdline
|
2009-12-02 15:51:22 +01:00
|
|
|
incremental_test_1.o: incremental_test_1.c
|
|
|
|
$(COMPILE) -O0 -c -ffunction-sections -g -o $@ $<
|
|
|
|
incremental_test_2.o: incremental_test_2.c
|
|
|
|
$(COMPILE) -O0 -c -ffunction-sections -g -o $@ $<
|
|
|
|
incremental_test: incremental_test_1.o incremental_test_2.o gcctestdir/ld
|
2015-03-12 06:07:51 +01:00
|
|
|
$(LINK) -Bgcctestdir/ -Wl,--incremental-full -Wl,-z,norelro incremental_test_1.o incremental_test_2.o -Wl,-debug 2> incremental_test.cmdline
|
2009-12-02 15:51:22 +01:00
|
|
|
incremental_test.stdout: incremental_test ../incremental-dump
|
|
|
|
../incremental-dump incremental_test > $@
|
2007-12-05 02:10:16 +01:00
|
|
|
|
2009-05-22 20:31:22 +02:00
|
|
|
check_SCRIPTS += gc_comdat_test.sh
|
|
|
|
check_DATA += gc_comdat_test.stdout
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += gc_comdat_test
|
2013-10-11 23:56:16 +02:00
|
|
|
gc_comdat_test_1.o: gc_comdat_test_1.cc
|
2009-05-22 22:27:52 +02:00
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
|
2013-10-11 23:56:16 +02:00
|
|
|
gc_comdat_test_2.o: gc_comdat_test_2.cc
|
2009-05-22 22:27:52 +02:00
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
|
2009-05-22 20:31:22 +02:00
|
|
|
gc_comdat_test: gc_comdat_test_1.o gc_comdat_test_2.o gcctestdir/ld
|
2009-05-22 22:27:52 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--gc-sections gc_comdat_test_1.o gc_comdat_test_2.o
|
2009-05-22 20:31:22 +02:00
|
|
|
gc_comdat_test.stdout: gc_comdat_test
|
|
|
|
$(TEST_NM) -C gc_comdat_test > gc_comdat_test.stdout
|
|
|
|
|
2009-08-07 20:29:54 +02:00
|
|
|
check_SCRIPTS += gc_tls_test.sh
|
|
|
|
check_DATA += gc_tls_test.stdout
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += gc_tls_test
|
2009-08-07 20:29:54 +02:00
|
|
|
gc_tls_test.o: gc_tls_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -g -o $@ $<
|
|
|
|
gc_tls_test:gc_tls_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--gc-sections gc_tls_test.o
|
|
|
|
gc_tls_test.stdout: gc_tls_test
|
|
|
|
$(TEST_NM) -C gc_tls_test > gc_tls_test.stdout
|
|
|
|
|
2010-01-07 08:14:30 +01:00
|
|
|
check_SCRIPTS += gc_orphan_section_test.sh
|
|
|
|
check_DATA += gc_orphan_section_test.stdout
|
|
|
|
MOSTLYCLEANFILES += gc_orphan_section_test
|
|
|
|
gc_orphan_section_test.o: gc_orphan_section_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -g -o $@ $<
|
|
|
|
gc_orphan_section_test:gc_orphan_section_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--gc-sections gc_orphan_section_test.o
|
|
|
|
gc_orphan_section_test.stdout: gc_orphan_section_test
|
|
|
|
$(TEST_NM) gc_orphan_section_test > gc_orphan_section_test.stdout
|
|
|
|
|
2012-08-14 10:31:57 +02:00
|
|
|
check_SCRIPTS += pr14265.sh
|
|
|
|
check_DATA += pr14265.stdout
|
|
|
|
MOSTLYCLEANFILES += pr14265
|
|
|
|
pr14265.o: pr14265.c
|
|
|
|
$(COMPILE) -O0 -c -o $@ $<
|
2013-10-11 23:56:16 +02:00
|
|
|
pr14265: pr14265.o
|
2013-10-12 00:05:16 +02:00
|
|
|
$(LINK) -Bgcctestdir/ -Wl,--gc-sections -Wl,-T,$(srcdir)/pr14265.t -o $@ $<
|
2012-08-14 10:31:57 +02:00
|
|
|
pr14265.stdout: pr14265
|
|
|
|
$(TEST_NM) --format=bsd --numeric-sort $< > $@
|
|
|
|
|
2014-02-05 23:01:52 +01:00
|
|
|
check_SCRIPTS += gc_dynamic_list_test.sh
|
|
|
|
check_DATA += gc_dynamic_list_test.stdout
|
|
|
|
MOSTLYCLEANFILES += gc_dynamic_list_test
|
|
|
|
gc_dynamic_list_test.o: gc_dynamic_list_test.c
|
|
|
|
$(COMPILE) -c -ffunction-sections -o $@ $<
|
|
|
|
gc_dynamic_list_test: gc_dynamic_list_test.o gcctestdir/ld $(srcdir)/gc_dynamic_list_test.t
|
|
|
|
$(LINK) -Bgcctestdir/ -Wl,--gc-sections -Wl,--dynamic-list,$(srcdir)/gc_dynamic_list_test.t gc_dynamic_list_test.o
|
|
|
|
gc_dynamic_list_test.stdout: gc_dynamic_list_test
|
|
|
|
$(TEST_NM) gc_dynamic_list_test > $@
|
|
|
|
|
2009-08-05 22:51:56 +02:00
|
|
|
check_SCRIPTS += icf_test.sh
|
2013-03-12 23:46:19 +01:00
|
|
|
check_DATA += icf_test.map
|
|
|
|
MOSTLYCLEANFILES += icf_test icf_test.map
|
2013-10-11 23:56:16 +02:00
|
|
|
icf_test.o: icf_test.cc
|
2009-08-05 22:51:56 +02:00
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
|
2013-10-07 19:08:34 +02:00
|
|
|
icf_test: icf_test.o gcctestdir/ld
|
2013-03-12 23:46:19 +01:00
|
|
|
$(CXXLINK) -o icf_test -Bgcctestdir/ -Wl,--icf=all,-Map,icf_test.map icf_test.o
|
2013-10-07 19:08:34 +02:00
|
|
|
icf_test.map: icf_test
|
|
|
|
@touch icf_test.map
|
2009-08-05 22:51:56 +02:00
|
|
|
|
2009-08-12 21:03:16 +02:00
|
|
|
check_SCRIPTS += icf_keep_unique_test.sh
|
|
|
|
check_DATA += icf_keep_unique_test.stdout
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += icf_keep_unique_test
|
2009-08-12 21:03:16 +02:00
|
|
|
icf_keep_unique_test.o: icf_keep_unique_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
|
|
|
|
icf_keep_unique_test: icf_keep_unique_test.o gcctestdir/ld
|
2009-10-13 23:17:43 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--icf=all -Wl,--keep-unique,_Z11unique_funcv icf_keep_unique_test.o
|
2009-08-12 21:03:16 +02:00
|
|
|
icf_keep_unique_test.stdout: icf_keep_unique_test
|
2013-03-12 23:46:19 +01:00
|
|
|
$(TEST_NM) -C $< > $@
|
2009-05-22 20:31:22 +02:00
|
|
|
|
2009-10-13 23:17:43 +02:00
|
|
|
check_SCRIPTS += icf_safe_test.sh
|
2013-03-12 23:46:19 +01:00
|
|
|
check_DATA += icf_safe_test_1.stdout icf_safe_test_2.stdout icf_safe_test.map
|
|
|
|
MOSTLYCLEANFILES += icf_safe_test icf_safe_test.map
|
2010-02-13 03:04:21 +01:00
|
|
|
icf_safe_test.o: icf_safe_test.cc
|
2009-10-13 23:17:43 +02:00
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -g -o $@ $<
|
2013-10-07 19:08:34 +02:00
|
|
|
icf_safe_test: icf_safe_test.o gcctestdir/ld
|
2013-03-12 23:46:19 +01:00
|
|
|
$(CXXLINK) -o icf_safe_test -Bgcctestdir/ -Wl,--icf=safe,-Map,icf_safe_test.map icf_safe_test.o
|
2013-10-07 19:08:34 +02:00
|
|
|
icf_safe_test.map: icf_safe_test
|
|
|
|
@touch icf_safe_test.map
|
2010-02-13 03:04:21 +01:00
|
|
|
icf_safe_test_1.stdout: icf_safe_test
|
2013-03-12 23:46:19 +01:00
|
|
|
$(TEST_NM) $< > $@
|
2010-02-13 03:04:21 +01:00
|
|
|
icf_safe_test_2.stdout: icf_safe_test
|
2013-03-12 23:46:19 +01:00
|
|
|
$(TEST_READELF) -h $< > $@
|
2010-02-13 03:04:21 +01:00
|
|
|
|
|
|
|
check_SCRIPTS += icf_safe_so_test.sh
|
2013-03-12 23:46:19 +01:00
|
|
|
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
|
2010-02-13 03:04:21 +01:00
|
|
|
icf_safe_so_test.o: icf_safe_so_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -fPIC -g -o $@ $<
|
2013-10-07 19:08:34 +02:00
|
|
|
icf_safe_so_test: icf_safe_so_test.o gcctestdir/ld
|
2013-03-12 23:46:19 +01:00
|
|
|
$(CXXLINK) -o icf_safe_so_test -Bgcctestdir/ -Wl,--icf=safe,-Map,icf_safe_so_test.map icf_safe_so_test.o -fPIC -shared
|
2013-10-07 19:08:34 +02:00
|
|
|
icf_safe_so_test.map:
|
|
|
|
@touch icf_safe_so_test.map
|
2010-02-13 03:04:21 +01:00
|
|
|
icf_safe_so_test_1.stdout: icf_safe_so_test
|
2013-03-12 23:46:19 +01:00
|
|
|
$(TEST_NM) $< > $@
|
2010-02-13 03:04:21 +01:00
|
|
|
icf_safe_so_test_2.stdout: icf_safe_so_test
|
2013-03-12 23:46:19 +01:00
|
|
|
$(TEST_READELF) -h $< > $@
|
2009-10-13 23:17:43 +02:00
|
|
|
|
2010-06-02 01:37:58 +02:00
|
|
|
check_SCRIPTS += final_layout.sh
|
|
|
|
check_DATA += final_layout.stdout
|
2013-01-10 01:18:15 +01:00
|
|
|
MOSTLYCLEANFILES += final_layout final_layout_sequence.txt final_layout_script.lds
|
2010-06-02 01:37:58 +02:00
|
|
|
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
|
2013-01-10 01:18:15 +01:00
|
|
|
final_layout_script.lds:
|
2013-03-04 01:48:01 +01:00
|
|
|
(echo "SECTIONS { .text : { *(.text*) } .got : { *(.got .toc) } .sbss : { *(.sbss*) } .bss : { *(.bss*) } }") > final_layout_script.lds
|
2013-01-10 01:18:15 +01:00
|
|
|
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
|
2010-06-02 01:37:58 +02:00
|
|
|
final_layout.stdout: final_layout
|
2012-09-05 13:01:43 +02:00
|
|
|
$(TEST_NM) -n --synthetic final_layout > final_layout.stdout
|
2010-06-02 01:37:58 +02:00
|
|
|
|
2012-12-19 03:55:15 +01:00
|
|
|
check_SCRIPTS += text_section_grouping.sh
|
2013-01-24 19:49:55 +01:00
|
|
|
check_DATA += text_section_grouping.stdout text_section_no_grouping.stdout
|
|
|
|
MOSTLYCLEANFILES += text_section_grouping text_section_no_grouping
|
2012-12-19 03:55:15 +01:00
|
|
|
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
|
2013-01-24 19:49:55 +01:00
|
|
|
text_section_no_grouping: text_section_grouping.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-text-reorder text_section_grouping.o
|
2012-12-19 03:55:15 +01:00
|
|
|
text_section_grouping.stdout: text_section_grouping
|
2013-01-24 19:49:55 +01:00
|
|
|
$(TEST_NM) -n --synthetic text_section_grouping > text_section_grouping.stdout
|
|
|
|
text_section_no_grouping.stdout: text_section_no_grouping
|
2013-10-11 23:56:16 +02:00
|
|
|
$(TEST_NM) -n --synthetic text_section_no_grouping > text_section_no_grouping.stdout
|
2012-12-19 03:55:15 +01:00
|
|
|
|
2013-05-31 01:01:11 +02:00
|
|
|
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
|
|
|
|
|
2010-04-22 16:12:42 +02:00
|
|
|
check_PROGRAMS += icf_virtual_function_folding_test
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += icf_virtual_function_folding_test icf_virtual_function_folding_test.map
|
2010-04-20 23:13:30 +02:00
|
|
|
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
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--icf=all icf_virtual_function_folding_test.o -pie
|
|
|
|
|
|
|
|
check_SCRIPTS += icf_preemptible_functions_test.sh
|
|
|
|
check_DATA += icf_preemptible_functions_test.stdout
|
|
|
|
MOSTLYCLEANFILES += icf_preemptible_functions_test
|
|
|
|
icf_preemptible_functions_test.o: icf_preemptible_functions_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -fPIC -g -o $@ $<
|
|
|
|
icf_preemptible_functions_test: icf_preemptible_functions_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--icf=all icf_preemptible_functions_test.o -fPIC -shared
|
|
|
|
icf_preemptible_functions_test.stdout: icf_preemptible_functions_test
|
|
|
|
$(TEST_NM) icf_preemptible_functions_test > icf_preemptible_functions_test.stdout
|
|
|
|
|
|
|
|
check_SCRIPTS += icf_string_merge_test.sh
|
|
|
|
check_DATA += icf_string_merge_test.stdout
|
|
|
|
MOSTLYCLEANFILES += icf_string_merge_test
|
|
|
|
icf_string_merge_test.o: icf_string_merge_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -fPIC -g -o $@ $<
|
|
|
|
icf_string_merge_test: icf_string_merge_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--icf=all icf_string_merge_test.o
|
|
|
|
icf_string_merge_test.stdout: icf_string_merge_test
|
|
|
|
$(TEST_NM) icf_string_merge_test > icf_string_merge_test.stdout
|
|
|
|
|
2010-07-29 20:57:28 +02:00
|
|
|
check_SCRIPTS += icf_sht_rel_addend_test.sh
|
|
|
|
check_DATA += icf_sht_rel_addend_test.stdout
|
|
|
|
MOSTLYCLEANFILES += icf_sht_rel_addend_test
|
|
|
|
icf_sht_rel_addend_test_1.o: icf_sht_rel_addend_test_1.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -fPIC -g -o $@ $<
|
|
|
|
icf_sht_rel_addend_test_2.o: icf_sht_rel_addend_test_2.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -ffunction-sections -fPIC -g -o $@ $<
|
|
|
|
icf_sht_rel_addend_test: icf_sht_rel_addend_test_1.o icf_sht_rel_addend_test_2.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--icf=all 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
|
|
|
|
|
2013-06-06 01:52:21 +02:00
|
|
|
check_PROGRAMS += large_symbol_alignment
|
|
|
|
large_symbol_alignment_SOURCES = large_symbol_alignment.cc
|
|
|
|
large_symbol_alignment_DEPENDENCIES = gcctestdir/ld
|
|
|
|
large_symbol_alignment_LDFLAGS = -Bgcctestdir/
|
2013-10-07 19:08:34 +02:00
|
|
|
large_symbol_alignment_LDADD =
|
2013-06-06 01:52:21 +02:00
|
|
|
|
2013-04-29 19:15:09 +02:00
|
|
|
check_SCRIPTS += merge_string_literals.sh
|
|
|
|
check_DATA += merge_string_literals.stdout
|
|
|
|
MOSTLYCLEANFILES += merge_string_literals
|
2013-10-11 23:56:16 +02:00
|
|
|
merge_string_literals_1.o: merge_string_literals_1.cc
|
2013-04-29 19:15:09 +02:00
|
|
|
$(CXXCOMPILE) -O2 -c -fPIC -g -o $@ $<
|
2013-10-11 23:56:16 +02:00
|
|
|
merge_string_literals_2.o: merge_string_literals_2.cc
|
2013-04-29 19:15:09 +02:00
|
|
|
$(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
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += basic_test
|
|
|
|
check_PROGRAMS += basic_pic_test
|
2007-09-23 01:36:01 +02:00
|
|
|
basic_test.o: basic_test.cc
|
2007-09-23 00:44:33 +02:00
|
|
|
$(CXXCOMPILE) -O0 -c -o $@ $<
|
2007-09-23 01:36:01 +02:00
|
|
|
basic_test: basic_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o
|
2011-07-02 02:19:04 +02:00
|
|
|
|
2015-04-27 20:33:02 +02:00
|
|
|
check_PROGRAMS += eh_test
|
|
|
|
eh_test_a.o: eh_test_a.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -o $@ $<
|
|
|
|
eh_test_b.o: eh_test_b.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -o $@ $<
|
|
|
|
eh_test: eh_test_a.o eh_test_b.o gcctestdir/ld
|
|
|
|
$(CXXLINK_S) -Bgcctestdir/ eh_test_a.o eh_test_b.o
|
|
|
|
|
Fix problem where gold cannot build .eh_frame_hdr from ld -r output.
When running ld -r on objects that have comdat groups, when gold
deduplicates a function in a comdat group, it removes the relocations
from the EH information that referred to the dropped copy of the function.
When running a final link using the result of the -r link, the missing
relocation cause it to fail to recognize the FDE for the dropped
function.
This patch improves gold's FDE scanning to take into account the
possibility that an FDE corresponds to a dropped function, and drops
that FDE as well.
Gnu ld, on the other hand, leaves the relocations in the ld -r output,
but makes them R_NONE with an r_sym field of 0. This was sufficient to
let both linkers recognize the FDE properly.
With this fix, if you do an ld -r with gold, then do the final link with
Gnu ld, the .eh_frame_hdr section will not be generated. To make it work
with Gnu ld, we would have to leave the R_NONE relocations in, but I
think it's better to drop the relocations entirely. I'd hope that if
you're doing a -r link with gold, you'll also do the final link with
gold.
gold/
PR gold/19002
* ehframe.cc (Eh_frame::read_fde): Check for dropped functions.
* testsuite/Makefile.am (eh_test_2): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/eh_test_2.sh: New test script.
* testsuite/eh_test_a.cc (bar): Make it comdat.
* testsuite/eh_test_b.cc (bar): Add a duplicate copy.
2016-03-21 03:15:56 +01:00
|
|
|
check_SCRIPTS += eh_test_2.sh
|
|
|
|
check_DATA += eh_test_2.sects
|
2016-06-30 08:16:24 +02:00
|
|
|
MOSTLYCLEANFILES += eh_test_2 eh_test_2.sects
|
Fix problem where gold cannot build .eh_frame_hdr from ld -r output.
When running ld -r on objects that have comdat groups, when gold
deduplicates a function in a comdat group, it removes the relocations
from the EH information that referred to the dropped copy of the function.
When running a final link using the result of the -r link, the missing
relocation cause it to fail to recognize the FDE for the dropped
function.
This patch improves gold's FDE scanning to take into account the
possibility that an FDE corresponds to a dropped function, and drops
that FDE as well.
Gnu ld, on the other hand, leaves the relocations in the ld -r output,
but makes them R_NONE with an r_sym field of 0. This was sufficient to
let both linkers recognize the FDE properly.
With this fix, if you do an ld -r with gold, then do the final link with
Gnu ld, the .eh_frame_hdr section will not be generated. To make it work
with Gnu ld, we would have to leave the R_NONE relocations in, but I
think it's better to drop the relocations entirely. I'd hope that if
you're doing a -r link with gold, you'll also do the final link with
gold.
gold/
PR gold/19002
* ehframe.cc (Eh_frame::read_fde): Check for dropped functions.
* testsuite/Makefile.am (eh_test_2): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/eh_test_2.sh: New test script.
* testsuite/eh_test_a.cc (bar): Make it comdat.
* testsuite/eh_test_b.cc (bar): Add a duplicate copy.
2016-03-21 03:15:56 +01:00
|
|
|
eh_test_r.o: eh_test_a.o eh_test_b.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -r -o $@ eh_test_a.o eh_test_b.o
|
|
|
|
eh_test_2: eh_test_r.o gcctestdir/ld
|
|
|
|
$(CXXLINK_S) -Bgcctestdir/ -Wl,--eh-frame-hdr eh_test_r.o
|
|
|
|
eh_test_2.sects: eh_test_2
|
|
|
|
$(TEST_READELF) -SW $< >$@ 2>/dev/null
|
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
|
|
|
check_PROGRAMS += basic_static_test
|
2007-09-23 01:36:01 +02:00
|
|
|
basic_static_test: basic_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -static basic_test.o
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2007-09-23 00:44:33 +02:00
|
|
|
|
2007-09-23 01:36:01 +02:00
|
|
|
basic_pic_test.o: basic_test.cc
|
2007-09-23 00:44:33 +02:00
|
|
|
$(CXXCOMPILE) -O0 -c -fpic -o $@ $<
|
2007-09-23 01:36:01 +02:00
|
|
|
basic_pic_test: basic_pic_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_pic_test.o
|
2011-07-02 02:19:04 +02:00
|
|
|
|
|
|
|
if HAVE_STATIC
|
|
|
|
check_PROGRAMS += basic_static_pic_test
|
2007-09-23 01:36:01 +02:00
|
|
|
basic_static_pic_test: basic_pic_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -static basic_pic_test.o
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2007-09-23 00:44:33 +02:00
|
|
|
|
2009-10-14 07:25:02 +02:00
|
|
|
check_PROGRAMS += basic_pie_test
|
|
|
|
basic_pie_test.o: basic_test.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -fpie -o $@ $<
|
|
|
|
basic_pie_test: basic_pie_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -pie basic_pie_test.o
|
2007-12-06 18:07:24 +01:00
|
|
|
|
|
|
|
check_PROGRAMS += constructor_test
|
2007-09-23 05:18:42 +02:00
|
|
|
constructor_test_SOURCES = constructor_test.cc
|
|
|
|
constructor_test_DEPENDENCIES = gcctestdir/ld
|
|
|
|
constructor_test_LDFLAGS = -Bgcctestdir/
|
2009-12-06 00:22:54 +01:00
|
|
|
constructor_test_LDADD =
|
2007-09-23 05:18:42 +02:00
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
|
|
|
check_PROGRAMS += constructor_static_test
|
2007-12-06 18:07:24 +01:00
|
|
|
constructor_static_test_SOURCES = $(constructor_test_SOURCES)
|
|
|
|
constructor_static_test_DEPENDENCIES = $(constructor_test_DEPENDENCIES)
|
|
|
|
constructor_static_test_LDFLAGS = $(constructor_test_LDFLAGS) -static
|
2009-12-06 00:22:54 +01:00
|
|
|
constructor_static_test_LDADD = $(constructor_test_LDADD)
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2007-12-06 18:07:24 +01:00
|
|
|
|
|
|
|
check_PROGRAMS += two_file_test
|
|
|
|
check_PROGRAMS += two_file_pic_test
|
2007-09-23 07:35:51 +02:00
|
|
|
two_file_test_SOURCES = \
|
|
|
|
two_file_test_1.cc \
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_test_1b.cc \
|
2007-09-23 07:35:51 +02:00
|
|
|
two_file_test_2.cc \
|
|
|
|
two_file_test_main.cc \
|
|
|
|
two_file_test.h
|
|
|
|
two_file_test_DEPENDENCIES = gcctestdir/ld
|
|
|
|
two_file_test_LDFLAGS = -Bgcctestdir/
|
2009-12-06 00:22:54 +01:00
|
|
|
two_file_test_LDADD =
|
2007-09-23 07:35:51 +02:00
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
|
|
|
check_PROGRAMS += two_file_static_test
|
2007-12-06 18:07:24 +01:00
|
|
|
two_file_static_test_SOURCES = $(two_file_test_SOURCES)
|
|
|
|
two_file_static_test_DEPENDENCIES = $(two_file_test_DEPENDENCIES)
|
|
|
|
two_file_static_test_LDFLAGS = $(two_file_test_LDFLAGS) -static
|
2009-12-06 00:22:54 +01:00
|
|
|
two_file_static_test_LDADD = $(two_file_test_LDADD)
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2007-10-07 19:20:18 +02:00
|
|
|
|
|
|
|
two_file_pic_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_pic_test_DEPENDENCIES = \
|
2008-02-01 01:39:10 +01:00
|
|
|
gcctestdir/ld two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o
|
2007-10-07 19:20:18 +02:00
|
|
|
two_file_pic_test_LDFLAGS = -Bgcctestdir/
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_pic_test_LDADD = two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o
|
2007-10-07 19:20:18 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
|
|
|
|
check_PROGRAMS += two_file_shared_1_test
|
|
|
|
check_PROGRAMS += two_file_shared_2_test
|
|
|
|
check_PROGRAMS += two_file_shared_1_pic_2_test
|
|
|
|
check_PROGRAMS += two_file_shared_2_pic_1_test
|
|
|
|
check_PROGRAMS += two_file_same_shared_test
|
|
|
|
check_PROGRAMS += two_file_separate_shared_12_test
|
|
|
|
check_PROGRAMS += two_file_separate_shared_21_test
|
|
|
|
two_file_test_1_pic.o: two_file_test_1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_test_1b_pic.o: two_file_test_1b.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2007-12-06 18:07:24 +01:00
|
|
|
two_file_test_2_pic.o: two_file_test_2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_shared_1.so: two_file_test_1_pic.o two_file_test_1b_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o
|
2007-12-06 18:07:24 +01:00
|
|
|
two_file_shared_2.so: two_file_test_2_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_2_pic.o
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_shared.so: two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o
|
2007-12-06 18:07:24 +01:00
|
|
|
|
2007-09-23 07:35:51 +02:00
|
|
|
two_file_shared_1_test_SOURCES = two_file_test_2.cc two_file_test_main.cc
|
|
|
|
two_file_shared_1_test_DEPENDENCIES = gcctestdir/ld two_file_shared_1.so
|
|
|
|
two_file_shared_1_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_shared_1_test_LDADD = two_file_shared_1.so
|
|
|
|
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_shared_2_test_SOURCES = two_file_test_1.cc two_file_test_1b.cc two_file_test_main.cc
|
2007-09-23 07:35:51 +02:00
|
|
|
two_file_shared_2_test_DEPENDENCIES = gcctestdir/ld two_file_shared_2.so
|
|
|
|
two_file_shared_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_shared_2_test_LDADD = two_file_shared_2.so
|
|
|
|
|
2007-11-12 18:51:55 +01:00
|
|
|
two_file_shared_1_pic_2_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_shared_1_pic_2_test_DEPENDENCIES = \
|
2009-12-09 17:26:36 +01:00
|
|
|
gcctestdir/ld two_file_shared_2.so two_file_test_1_pic.o two_file_test_1b_pic.o
|
2007-11-12 18:51:55 +01:00
|
|
|
two_file_shared_1_pic_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_shared_1_pic_2_test_LDADD = two_file_test_1_pic.o two_file_test_1b_pic.o two_file_shared_2.so
|
2007-11-12 18:51:55 +01:00
|
|
|
|
|
|
|
two_file_shared_2_pic_1_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_shared_2_pic_1_test_DEPENDENCIES = \
|
2015-02-09 14:33:19 +01:00
|
|
|
gcctestdir/ld two_file_shared_1.so two_file_test_2_pic.o
|
2007-11-12 18:51:55 +01:00
|
|
|
two_file_shared_2_pic_1_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_shared_2_pic_1_test_LDADD = two_file_test_2_pic.o two_file_shared_1.so
|
|
|
|
|
2007-09-23 07:35:51 +02:00
|
|
|
two_file_same_shared_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_same_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared.so
|
|
|
|
two_file_same_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_same_shared_test_LDADD = two_file_shared.so
|
|
|
|
|
|
|
|
two_file_separate_shared_12_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_separate_shared_12_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_1.so two_file_shared_2.so
|
|
|
|
two_file_separate_shared_12_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_separate_shared_12_test_LDADD = \
|
|
|
|
two_file_shared_1.so two_file_shared_2.so
|
|
|
|
|
|
|
|
two_file_separate_shared_21_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_separate_shared_21_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_1.so two_file_shared_2.so
|
|
|
|
two_file_separate_shared_21_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_separate_shared_21_test_LDADD = \
|
|
|
|
two_file_shared_2.so two_file_shared_1.so
|
|
|
|
|
2008-02-06 09:13:50 +01:00
|
|
|
check_PROGRAMS += two_file_relocatable_test
|
|
|
|
two_file_relocatable_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_relocatable_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_relocatable.o
|
|
|
|
two_file_relocatable_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_relocatable_test_LDADD = two_file_relocatable.o
|
|
|
|
two_file_relocatable.o: gcctestdir/ld two_file_test_1.o two_file_test_1b.o two_file_test_2.o
|
|
|
|
gcctestdir/ld -r -o $@ two_file_test_1.o two_file_test_1b.o two_file_test_2.o
|
|
|
|
|
2009-10-14 07:25:02 +02:00
|
|
|
check_PROGRAMS += two_file_pie_test
|
|
|
|
two_file_test_1_pie.o: two_file_test_1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpie -o $@ $<
|
|
|
|
two_file_test_1b_pie.o: two_file_test_1b.cc
|
|
|
|
$(CXXCOMPILE) -c -fpie -o $@ $<
|
|
|
|
two_file_test_2_pie.o: two_file_test_2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpie -o $@ $<
|
|
|
|
two_file_test_main_pie.o: two_file_test_main.cc
|
|
|
|
$(CXXCOMPILE) -c -fpie -o $@ $<
|
|
|
|
two_file_pie_test: two_file_test_1_pie.o two_file_test_1b_pie.o \
|
|
|
|
two_file_test_2_pie.o two_file_test_main_pie.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -pie two_file_test_1_pie.o two_file_test_1b_pie.o two_file_test_2_pie.o two_file_test_main_pie.o
|
|
|
|
|
2014-05-13 19:51:48 +02:00
|
|
|
check_PROGRAMS += pie_copyrelocs_test
|
|
|
|
pie_copyrelocs_test_SOURCES = pie_copyrelocs_test.cc
|
|
|
|
pie_copyrelocs_test_DEPENDENCIES = gcctestdir/ld pie_copyrelocs_shared_test.so
|
2014-12-03 19:59:46 +01:00
|
|
|
pie_copyrelocs_test_CXXFLAGS = -fno-exceptions -fno-asynchronous-unwind-tables
|
2014-05-13 19:51:48 +02:00
|
|
|
pie_copyrelocs_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -pie
|
|
|
|
pie_copyrelocs_test_LDADD = pie_copyrelocs_shared_test.so
|
|
|
|
pie_copyrelocs_shared_test.o: pie_copyrelocs_shared_test.cc
|
|
|
|
$(CXXCOMPILE) -O2 -fpic -c -o $@ $<
|
|
|
|
pie_copyrelocs_shared_test.so: pie_copyrelocs_shared_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared pie_copyrelocs_shared_test.o
|
|
|
|
|
2015-04-23 22:56:40 +02:00
|
|
|
check_PROGRAMS += weak_unresolved_symbols_test
|
|
|
|
weak_unresolved_symbols_test_SOURCES = weak_unresolved_symbols_test.cc
|
|
|
|
weak_unresolved_symbols_test_CXXFLAGS = -fPIE
|
|
|
|
weak_unresolved_symbols_test_LDFLAGS = -Bgcctestdir/ -pie -Wl,--weak-unresolved-symbols
|
|
|
|
|
2009-03-04 07:46:27 +01:00
|
|
|
check_SCRIPTS += two_file_shared.sh
|
|
|
|
check_DATA += two_file_shared.dbg
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += two_file_shared.dbg
|
2009-03-04 07:46:27 +01:00
|
|
|
two_file_shared.dbg: two_file_shared.so
|
|
|
|
$(TEST_READELF) -w $< >$@ 2>/dev/null
|
|
|
|
|
2007-10-03 00:45:07 +02:00
|
|
|
# The nonpic tests will fail on platforms which can not put non-PIC
|
|
|
|
# code into shared libraries, so we just don't run them in that case.
|
|
|
|
if FN_PTRS_IN_SO_WITHOUT_PIC
|
2007-09-23 07:35:51 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += two_file_shared_1_nonpic_test
|
|
|
|
check_PROGRAMS += two_file_shared_2_nonpic_test
|
|
|
|
check_PROGRAMS += two_file_same_shared_nonpic_test
|
|
|
|
check_PROGRAMS += two_file_separate_shared_12_nonpic_test
|
|
|
|
check_PROGRAMS += two_file_separate_shared_21_nonpic_test
|
2008-02-01 01:39:10 +01:00
|
|
|
check_PROGRAMS += two_file_mixed_shared_test
|
|
|
|
check_PROGRAMS += two_file_mixed_2_shared_test
|
2007-12-06 18:07:24 +01:00
|
|
|
two_file_shared_1_nonpic.so: two_file_test_1.o gcctestdir/ld
|
2011-07-02 02:39:13 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b.o -Wl,-z,notext
|
2007-12-06 18:07:24 +01:00
|
|
|
two_file_shared_2_nonpic.so: two_file_test_2.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_2.o
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_shared_nonpic.so: two_file_test_1.o two_file_test_1b.o two_file_test_2.o gcctestdir/ld
|
2011-07-02 02:39:13 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b.o two_file_test_2.o -Wl,-z,notext
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_shared_mixed.so: two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2.o gcctestdir/ld
|
2011-07-02 02:39:13 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2.o -Wl,-z,notext
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_shared_mixed_1.so: two_file_test_1.o two_file_test_1b_pic.o two_file_shared_2.so gcctestdir/ld
|
2011-07-02 02:39:13 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b_pic.o two_file_shared_2.so -Wl,-z,notext
|
2007-12-06 18:07:24 +01:00
|
|
|
|
2007-09-23 07:35:51 +02:00
|
|
|
two_file_shared_1_nonpic_test_SOURCES = \
|
|
|
|
two_file_test_2.cc two_file_test_main.cc
|
|
|
|
two_file_shared_1_nonpic_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_1_nonpic.so
|
|
|
|
two_file_shared_1_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_shared_1_nonpic_test_LDADD = two_file_shared_1_nonpic.so
|
|
|
|
|
|
|
|
two_file_shared_2_nonpic_test_SOURCES = \
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_test_1.cc two_file_test_1b.cc two_file_test_main.cc
|
2007-09-23 07:35:51 +02:00
|
|
|
two_file_shared_2_nonpic_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_2_nonpic.so
|
|
|
|
two_file_shared_2_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_shared_2_nonpic_test_LDADD = two_file_shared_2_nonpic.so
|
|
|
|
|
|
|
|
two_file_same_shared_nonpic_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_same_shared_nonpic_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_nonpic.so
|
|
|
|
two_file_same_shared_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_same_shared_nonpic_test_LDADD = two_file_shared_nonpic.so
|
|
|
|
|
|
|
|
two_file_separate_shared_12_nonpic_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_separate_shared_12_nonpic_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_1_nonpic.so two_file_shared_2_nonpic.so
|
|
|
|
two_file_separate_shared_12_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_separate_shared_12_nonpic_test_LDADD = \
|
|
|
|
two_file_shared_1_nonpic.so two_file_shared_2_nonpic.so
|
|
|
|
|
|
|
|
two_file_separate_shared_21_nonpic_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_separate_shared_21_nonpic_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_1_nonpic.so two_file_shared_2_nonpic.so
|
|
|
|
two_file_separate_shared_21_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_separate_shared_21_nonpic_test_LDADD = \
|
|
|
|
two_file_shared_2_nonpic.so two_file_shared_1_nonpic.so
|
|
|
|
|
2008-02-01 01:39:10 +01:00
|
|
|
two_file_mixed_shared_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_mixed_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed.so
|
|
|
|
two_file_mixed_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_mixed_shared_test_LDADD = two_file_shared_mixed.so
|
|
|
|
|
|
|
|
two_file_mixed_2_shared_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_mixed_2_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed_1.so two_file_shared_2.so
|
|
|
|
two_file_mixed_2_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
two_file_mixed_2_shared_test_LDADD = two_file_shared_mixed_1.so two_file_shared_2.so
|
|
|
|
|
2010-09-12 21:58:02 +02:00
|
|
|
check_PROGRAMS += two_file_mixed_pie_test
|
|
|
|
two_file_mixed_pie_test: two_file_test_1.o two_file_test_1b_pie.o \
|
|
|
|
two_file_test_main_pie.o two_file_shared_2.so gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,-R,. -pie two_file_test_1.o two_file_test_1b_pie.o two_file_test_main_pie.o two_file_shared_2.so
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
endif FN_PTRS_IN_SO_WITHOUT_PIC
|
2007-09-23 07:35:51 +02:00
|
|
|
|
2008-04-08 00:16:03 +02:00
|
|
|
check_PROGRAMS += two_file_strip_test
|
|
|
|
two_file_strip_test: two_file_test
|
|
|
|
$(TEST_STRIP) -o two_file_strip_test two_file_test
|
|
|
|
|
|
|
|
check_PROGRAMS += two_file_same_shared_strip_test
|
|
|
|
two_file_same_shared_strip_test_SOURCES = two_file_test_main.cc
|
|
|
|
two_file_same_shared_strip_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld two_file_shared_strip.so
|
|
|
|
two_file_same_shared_strip_test_LDFLAGS = -Bgcctestdir/ -Wl,-R.
|
|
|
|
two_file_same_shared_strip_test_LDADD = two_file_shared_strip.so
|
|
|
|
two_file_shared_strip.so: two_file_shared.so
|
|
|
|
$(TEST_STRIP) -S -o two_file_shared_strip.so two_file_shared.so
|
|
|
|
|
2008-03-27 20:57:41 +01:00
|
|
|
check_PROGRAMS += common_test_1
|
|
|
|
common_test_1_SOURCES = common_test_1.c
|
|
|
|
common_test_1_DEPENDENCIES = gcctestdir/ld
|
|
|
|
common_test_1_LDFLAGS = -Bgcctestdir/
|
2009-12-06 00:22:54 +01:00
|
|
|
common_test_1_LDADD =
|
2007-12-06 18:07:24 +01:00
|
|
|
|
2009-12-31 06:07:22 +01:00
|
|
|
check_PROGRAMS += common_test_2
|
|
|
|
common_test_2_SOURCES = common_test_1.c
|
|
|
|
common_test_2_DEPENDENCIES = common_test_2.so common_test_3.so gcctestdir/ld
|
|
|
|
common_test_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
common_test_2_LDADD = common_test_2.so common_test_3.so
|
|
|
|
common_test_2_pic.o: common_test_2.c
|
|
|
|
$(COMPILE) -c -fpic -o $@ $<
|
|
|
|
common_test_2.so: common_test_2_pic.o common_test_3.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared common_test_2_pic.o common_test_3.so
|
|
|
|
common_test_3_pic.o: common_test_3.c
|
|
|
|
$(COMPILE) -c -fpic -o $@ $<
|
|
|
|
common_test_3.so: common_test_3_pic.o ver_test_2.script gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared common_test_3_pic.o -Wl,--version-script,$(srcdir)/ver_test_2.script
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += exception_test
|
|
|
|
check_PROGRAMS += exception_shared_1_test
|
|
|
|
check_PROGRAMS += exception_shared_2_test
|
|
|
|
check_PROGRAMS += exception_same_shared_test
|
|
|
|
check_PROGRAMS += exception_separate_shared_12_test
|
|
|
|
check_PROGRAMS += exception_separate_shared_21_test
|
|
|
|
exception_test_1_pic.o: exception_test_1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
exception_test_2_pic.o: exception_test_2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
exception_shared_1.so: exception_test_1_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared exception_test_1_pic.o
|
|
|
|
exception_shared_2.so: exception_test_2_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared exception_test_2_pic.o
|
|
|
|
exception_shared.so: exception_test_1_pic.o exception_test_2_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared exception_test_1_pic.o exception_test_2_pic.o
|
2007-10-03 00:45:07 +02:00
|
|
|
|
2007-09-26 07:44:38 +02:00
|
|
|
exception_test_SOURCES = \
|
|
|
|
exception_test_main.cc \
|
|
|
|
exception_test_1.cc \
|
|
|
|
exception_test_2.cc \
|
|
|
|
exception_test.h
|
|
|
|
exception_test_DEPENDENCIES = gcctestdir/ld
|
|
|
|
exception_test_LDFLAGS = -Bgcctestdir/
|
2009-12-06 00:22:54 +01:00
|
|
|
exception_test_LDADD =
|
2007-09-26 07:44:38 +02:00
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
|
|
|
check_PROGRAMS += exception_static_test
|
2007-12-06 18:07:24 +01:00
|
|
|
exception_static_test_SOURCES = $(exception_test_SOURCES)
|
|
|
|
exception_static_test_DEPENDENCIES = $(exception_test_DEPENDENCIES)
|
|
|
|
exception_static_test_LDFLAGS = $(exception_test_LDFLAGS) -static
|
2009-12-06 00:22:54 +01:00
|
|
|
exception_static_test_LDADD = $(exception_test_LDADD)
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2007-09-26 07:44:38 +02:00
|
|
|
|
|
|
|
exception_shared_1_test_SOURCES = exception_test_2.cc exception_test_main.cc
|
|
|
|
exception_shared_1_test_DEPENDENCIES = gcctestdir/ld exception_shared_1.so
|
|
|
|
exception_shared_1_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
exception_shared_1_test_LDADD = exception_shared_1.so
|
|
|
|
|
|
|
|
exception_shared_2_test_SOURCES = exception_test_1.cc exception_test_main.cc
|
|
|
|
exception_shared_2_test_DEPENDENCIES = gcctestdir/ld exception_shared_2.so
|
|
|
|
exception_shared_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
exception_shared_2_test_LDADD = exception_shared_2.so
|
|
|
|
|
|
|
|
exception_same_shared_test_SOURCES = exception_test_main.cc
|
|
|
|
exception_same_shared_test_DEPENDENCIES = gcctestdir/ld exception_shared.so
|
|
|
|
exception_same_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
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
|
2012-12-15 02:55:08 +01:00
|
|
|
exception_separate_shared_12_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. \
|
|
|
|
-Wl,--no-as-needed
|
2007-09-26 07:44:38 +02:00
|
|
|
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
|
2012-12-15 02:55:08 +01:00
|
|
|
exception_separate_shared_21_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. \
|
|
|
|
-Wl,--no-as-needed
|
2007-09-26 07:44:38 +02:00
|
|
|
exception_separate_shared_21_test_LDADD = \
|
|
|
|
exception_shared_2.so exception_shared_1.so
|
|
|
|
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += weak_test
|
2007-10-17 01:09:45 +02:00
|
|
|
weak_test_SOURCES = weak_test.cc
|
2007-12-14 06:27:45 +01:00
|
|
|
weak_test_DEPENDENCIES = gcctestdir/ld
|
2007-10-17 01:09:45 +02:00
|
|
|
weak_test_LDFLAGS = -Bgcctestdir/
|
2009-12-06 00:22:54 +01:00
|
|
|
weak_test_LDADD =
|
2007-10-17 01:09:45 +02:00
|
|
|
|
2008-04-04 19:24:47 +02:00
|
|
|
check_PROGRAMS += weak_undef_test
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += alt/weak_undef_lib.so
|
2008-04-04 19:24:47 +02:00
|
|
|
weak_undef_test_SOURCES = weak_undef_test.cc
|
|
|
|
weak_undef_test_DEPENDENCIES = gcctestdir/ld weak_undef_lib.so alt/weak_undef_lib.so
|
|
|
|
weak_undef_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,alt
|
|
|
|
weak_undef_test_LDADD = -L . weak_undef_lib.so
|
|
|
|
weak_undef_file1.o: weak_undef_file1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
weak_undef_file2.o: weak_undef_file2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
weak_undef_lib.so: weak_undef_file1.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_undef_file1.o
|
|
|
|
alt/weak_undef_lib.so: weak_undef_file2.o
|
|
|
|
test -d alt || mkdir -p alt
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_undef_file2.o
|
2007-12-06 18:07:24 +01:00
|
|
|
|
2014-02-07 02:12:50 +01:00
|
|
|
check_PROGRAMS += weak_undef_test_2
|
|
|
|
weak_undef_test_2_SOURCES = weak_undef_test_2.cc
|
|
|
|
weak_undef_test_2_DEPENDENCIES = gcctestdir/ld libweak_undef_2.a
|
|
|
|
weak_undef_test_2_LDFLAGS = -Bgcctestdir/ -u weak_undef_2
|
|
|
|
weak_undef_test_2_LDADD = -L . -lweak_undef_2
|
2015-02-06 08:50:49 +01:00
|
|
|
MOSTLYCLEANFILES += libweak_undef_2.a
|
2014-02-07 02:12:50 +01:00
|
|
|
libweak_undef_2.a: weak_undef_file3.o weak_undef_file4.o
|
|
|
|
$(TEST_AR) rc $@ $^
|
|
|
|
weak_undef_file3.o: weak_undef_file3.cc
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
weak_undef_file4.o: weak_undef_file4.cc
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
|
2008-04-17 02:14:36 +02:00
|
|
|
if FN_PTRS_IN_SO_WITHOUT_PIC
|
|
|
|
check_PROGRAMS += weak_undef_nonpic_test
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += alt/weak_undef_lib_nonpic.so
|
2008-04-17 02:14:36 +02:00
|
|
|
weak_undef_nonpic_test_SOURCES = weak_undef_test.cc
|
|
|
|
weak_undef_nonpic_test_DEPENDENCIES = gcctestdir/ld weak_undef_lib_nonpic.so alt/weak_undef_lib_nonpic.so
|
|
|
|
weak_undef_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,alt
|
|
|
|
weak_undef_nonpic_test_LDADD = -L . weak_undef_lib_nonpic.so
|
|
|
|
weak_undef_file1_nonpic.o: weak_undef_file1.cc
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
weak_undef_file2_nonpic.o: weak_undef_file2.cc
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
weak_undef_lib_nonpic.so: weak_undef_file1_nonpic.o
|
2011-07-02 02:39:13 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_undef_file1_nonpic.o -Wl,-z,notext
|
2008-04-17 02:14:36 +02:00
|
|
|
alt/weak_undef_lib_nonpic.so: weak_undef_file2_nonpic.o
|
|
|
|
test -d alt || mkdir -p alt
|
2011-07-02 02:39:13 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_undef_file2_nonpic.o -Wl,-z,notext
|
2008-04-17 02:14:36 +02:00
|
|
|
endif FN_PTRS_IN_SO_WITHOUT_PIC
|
|
|
|
|
|
|
|
|
2008-04-10 00:45:08 +02:00
|
|
|
check_PROGRAMS += weak_alias_test
|
|
|
|
weak_alias_test_SOURCES = weak_alias_test_main.cc
|
|
|
|
weak_alias_test_DEPENDENCIES = \
|
|
|
|
gcctestdir/ld weak_alias_test_1.so weak_alias_test_2.so \
|
2011-07-02 07:30:00 +02:00
|
|
|
weak_alias_test_3.o weak_alias_test_4.so weak_alias_test_5.so
|
2008-04-10 00:45:08 +02:00
|
|
|
weak_alias_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
weak_alias_test_LDADD = \
|
|
|
|
weak_alias_test_1.so weak_alias_test_2.so weak_alias_test_3.o \
|
2011-07-02 07:30:00 +02:00
|
|
|
weak_alias_test_4.so weak_alias_test_5.so
|
2008-04-10 00:45:08 +02:00
|
|
|
weak_alias_test_1_pic.o: weak_alias_test_1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2008-08-05 00:22:13 +02:00
|
|
|
weak_alias_test_1.so: weak_alias_test_1_pic.o gcctestdir/ld
|
2008-04-10 00:45:08 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_1_pic.o
|
|
|
|
weak_alias_test_2_pic.o: weak_alias_test_2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2008-08-05 00:22:13 +02:00
|
|
|
weak_alias_test_2.so: weak_alias_test_2_pic.o gcctestdir/ld
|
2008-04-10 00:45:08 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_2_pic.o
|
|
|
|
weak_alias_test_3.o: weak_alias_test_3.cc
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
weak_alias_test_4_pic.o: weak_alias_test_4.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2008-08-05 00:22:13 +02:00
|
|
|
weak_alias_test_4.so: weak_alias_test_4_pic.o gcctestdir/ld
|
2008-04-10 00:45:08 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_4_pic.o
|
2011-07-02 07:30:00 +02:00
|
|
|
weak_alias_test_5_pic.o: weak_alias_test_5.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
weak_alias_test_5.so: weak_alias_test_5_pic.o $(srcdir)/weak_alias_test.script gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_5_pic.o \
|
|
|
|
-Wl,--version-script,$(srcdir)/weak_alias_test.script
|
2008-04-10 00:45:08 +02:00
|
|
|
|
2008-08-05 00:22:13 +02:00
|
|
|
check_SCRIPTS += weak_plt.sh
|
|
|
|
check_PROGRAMS += weak_plt
|
|
|
|
check_DATA += weak_plt_shared.so
|
|
|
|
weak_plt_main_pic.o: weak_plt_main.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
weak_plt: weak_plt_main_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ weak_plt_main_pic.o
|
|
|
|
weak_plt_shared_pic.o: weak_plt_shared.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
weak_plt_shared.so: weak_plt_shared_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared weak_plt_shared_pic.o
|
|
|
|
|
2008-06-18 06:39:41 +02:00
|
|
|
check_PROGRAMS += copy_test
|
|
|
|
copy_test_SOURCES = copy_test.cc
|
|
|
|
copy_test_DEPENDENCIES = gcctestdir/ld copy_test_1.so copy_test_2.so
|
|
|
|
copy_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
copy_test_LDADD = copy_test_1.so copy_test_2.so
|
|
|
|
copy_test_1_pic.o: copy_test_1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
copy_test_1.so: gcctestdir/ld copy_test_1_pic.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared copy_test_1_pic.o
|
|
|
|
copy_test_2_pic.o: copy_test_2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
copy_test_2.so: gcctestdir/ld copy_test_2_pic.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared copy_test_2_pic.o
|
|
|
|
|
2016-06-29 00:29:34 +02:00
|
|
|
if !DEFAULT_TARGET_POWERPC
|
2016-05-19 23:58:18 +02:00
|
|
|
check_SCRIPTS += copy_test_protected.sh
|
|
|
|
check_DATA += copy_test_protected.err
|
|
|
|
MOSTLYCLEANFILES += copy_test_protected.err
|
|
|
|
copy_test_protected.err: copy_test_protected.o copy_test_2.so gcctestdir/ld
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -o copy_test_protected copy_test_protected.o copy_test_2.so -Wl,-R,. "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -o copy_test_protected copy_test_protected.o copy_test_2.so -Wl,-R,. 2>$@; \
|
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of copy_test_protected should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
2016-06-29 00:29:34 +02:00
|
|
|
endif
|
2016-05-19 23:58:18 +02:00
|
|
|
|
2007-10-07 19:10:10 +02:00
|
|
|
if TLS
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += tls_test
|
|
|
|
check_PROGRAMS += tls_pic_test
|
2010-02-10 23:12:11 +01:00
|
|
|
check_PROGRAMS += tls_pie_test
|
2010-02-11 00:00:29 +01:00
|
|
|
check_PROGRAMS += tls_pie_pic_test
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += tls_shared_test
|
2007-12-12 00:33:11 +01:00
|
|
|
check_PROGRAMS += tls_shared_ie_test
|
2008-04-11 23:24:30 +02:00
|
|
|
check_PROGRAMS += tls_shared_gd_to_ie_test
|
2007-12-06 18:07:24 +01:00
|
|
|
tls_test_pic.o: tls_test.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
tls_test_file2_pic.o: tls_test_file2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_test_c_pic.o: tls_test_c.c
|
|
|
|
$(COMPILE) -c -fpic $(TLS_TEST_C_CFLAGS) -o $@ $<
|
|
|
|
tls_test_shared.so: tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o gcctestdir/ld
|
2008-09-16 19:23:37 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o -Wl,-z,defs
|
2008-04-11 23:24:30 +02:00
|
|
|
tls_test_shared2.so: tls_test_file2_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared tls_test_file2_pic.o
|
2007-12-06 18:07:24 +01:00
|
|
|
|
2007-12-12 00:33:11 +01:00
|
|
|
tls_test_pic_ie.o: tls_test.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -ftls-model=initial-exec -o $@ $<
|
|
|
|
tls_test_file2_pic_ie.o: tls_test_file2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -ftls-model=initial-exec -o $@ $<
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_test_c_pic_ie.o: tls_test_c.c
|
|
|
|
$(COMPILE) -c -fpic -ftls-model=initial-exec $(TLS_TEST_C_CFLAGS) -o $@ $<
|
|
|
|
tls_test_ie_shared.so: tls_test_pic_ie.o tls_test_file2_pic_ie.o tls_test_c_pic_ie.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared tls_test_pic_ie.o tls_test_file2_pic_ie.o tls_test_c_pic_ie.o
|
2007-12-12 00:33:11 +01:00
|
|
|
|
2007-10-12 19:32:20 +02:00
|
|
|
tls_test_SOURCES = tls_test.cc tls_test_file2.cc tls_test_main.cc tls_test.h
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_test_DEPENDENCIES = gcctestdir/ld tls_test_c.o
|
2007-10-07 19:10:10 +02:00
|
|
|
tls_test_LDFLAGS = -Bgcctestdir/
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_test_LDADD = tls_test_c.o -lpthread
|
|
|
|
tls_test_c.o: tls_test_c.c
|
|
|
|
$(COMPILE) -c $(TLS_TEST_C_CFLAGS) -o $@ $<
|
2007-10-07 19:10:10 +02:00
|
|
|
|
|
|
|
tls_pic_test_SOURCES = tls_test_main.cc
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_pic_test_DEPENDENCIES = gcctestdir/ld tls_test_pic.o tls_test_file2_pic.o \
|
|
|
|
tls_test_c_pic.o
|
2007-10-07 19:10:10 +02:00
|
|
|
tls_pic_test_LDFLAGS = -Bgcctestdir/
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_pic_test_LDADD = tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o \
|
|
|
|
-lpthread
|
2007-10-07 19:10:10 +02:00
|
|
|
|
2010-02-10 23:12:11 +01:00
|
|
|
tls_test_main_pie.o: tls_test_main.cc tls_test.h
|
|
|
|
$(CXXCOMPILE) -c -fpie -o $@ $<
|
|
|
|
tls_test_pie.o: tls_test.cc tls_test.h
|
|
|
|
$(CXXCOMPILE) -c -fpie -o $@ $<
|
|
|
|
tls_test_file2_pie.o: tls_test_file2.cc tls_test.h
|
|
|
|
$(CXXCOMPILE) -c -fpie -o $@ $<
|
|
|
|
tls_test_c_pie.o: tls_test_c.c
|
|
|
|
$(COMPILE) -c -fpic $(TLS_TEST_C_CFLAGS) -o $@ $<
|
|
|
|
tls_pie_test: tls_test_main_pie.o tls_test_pie.o tls_test_file2_pie.o \
|
|
|
|
tls_test_c_pie.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -pie tls_test_main_pie.o tls_test_pie.o tls_test_file2_pie.o tls_test_c_pie.o -lpthread
|
|
|
|
|
2015-04-10 00:47:13 +02:00
|
|
|
check_SCRIPTS += tls_pie_test.sh
|
|
|
|
check_DATA += tls_pie_test.stdout
|
|
|
|
tls_pie_test.stdout: tls_pie_test
|
|
|
|
$(TEST_READELF) -rW $< > $@ 2>/dev/null
|
|
|
|
|
2010-02-11 00:00:29 +01:00
|
|
|
tls_pie_pic_test: tls_test_main_pie.o tls_test_pic.o tls_test_file2_pic.o \
|
|
|
|
tls_test_c_pic.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -pie tls_test_main_pie.o tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o -lpthread
|
|
|
|
|
2007-10-07 19:10:10 +02:00
|
|
|
tls_shared_test_SOURCES = tls_test_main.cc
|
|
|
|
tls_shared_test_DEPENDENCIES = gcctestdir/ld tls_test_shared.so
|
|
|
|
tls_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
tls_shared_test_LDADD = tls_test_shared.so -lpthread
|
|
|
|
|
2007-12-12 00:33:11 +01:00
|
|
|
tls_shared_ie_test_SOURCES = tls_test_main.cc
|
|
|
|
tls_shared_ie_test_DEPENDENCIES = gcctestdir/ld tls_test_ie_shared.so
|
|
|
|
tls_shared_ie_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
tls_shared_ie_test_LDADD = tls_test_ie_shared.so -lpthread
|
|
|
|
|
2008-04-11 23:24:30 +02:00
|
|
|
tls_shared_gd_to_ie_test_SOURCES = tls_test_main.cc
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_shared_gd_to_ie_test_DEPENDENCIES = gcctestdir/ld tls_test_pic.o \
|
|
|
|
tls_test_c_pic.o tls_test_shared2.so
|
2008-04-11 23:24:30 +02:00
|
|
|
tls_shared_gd_to_ie_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_shared_gd_to_ie_test_LDADD = tls_test_pic.o tls_test_c_pic.o \
|
|
|
|
tls_test_shared2.so -lpthread
|
2008-04-11 23:24:30 +02:00
|
|
|
|
|
|
|
if TLS_GNU2_DIALECT
|
|
|
|
|
|
|
|
check_PROGRAMS += tls_shared_gnu2_gd_to_ie_test
|
|
|
|
|
|
|
|
tls_test_gnu2.o: tls_test.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $<
|
|
|
|
tls_test_file2_gnu2.o: tls_test_file2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $<
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_test_c_gnu2.o: tls_test_c.c
|
|
|
|
$(COMPILE) -c -fpic -mtls-dialect=gnu2 $(TLS_TEST_C_CFLAGS) -o $@ $<
|
2008-04-11 23:24:30 +02:00
|
|
|
tls_test_gnu2_shared2.so: tls_test_file2_gnu2.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared tls_test_file2_gnu2.o
|
|
|
|
|
|
|
|
tls_shared_gnu2_gd_to_ie_test_SOURCES = tls_test_main.cc
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_shared_gnu2_gd_to_ie_test_DEPENDENCIES = gcctestdir/ld tls_test_gnu2.o \
|
|
|
|
tls_test_c_gnu2.o tls_test_gnu2_shared2.so
|
2008-04-11 23:24:30 +02:00
|
|
|
tls_shared_gnu2_gd_to_ie_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_shared_gnu2_gd_to_ie_test_LDADD = tls_test_gnu2.o tls_test_c_gnu2.o \
|
|
|
|
tls_test_gnu2_shared2.so -lpthread
|
2008-04-11 23:24:30 +02:00
|
|
|
|
|
|
|
if TLS_DESCRIPTORS
|
|
|
|
|
|
|
|
check_PROGRAMS += tls_shared_gnu2_test
|
|
|
|
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_test_gnu2_shared.so: tls_test_gnu2.o tls_test_file2_gnu2.o tls_test_c_gnu2.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared tls_test_gnu2.o tls_test_file2_gnu2.o tls_test_c_gnu2.o
|
2008-04-11 23:24:30 +02:00
|
|
|
|
|
|
|
tls_shared_gnu2_test_SOURCES = tls_test_main.cc
|
|
|
|
tls_shared_gnu2_test_DEPENDENCIES = gcctestdir/ld tls_test_gnu2_shared.so
|
|
|
|
tls_shared_gnu2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
tls_shared_gnu2_test_LDADD = tls_test_gnu2_shared.so -lpthread
|
|
|
|
|
|
|
|
endif TLS_DESCRIPTORS
|
|
|
|
|
|
|
|
endif TLS_GNU2_DIALECT
|
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
2007-12-06 18:07:24 +01:00
|
|
|
if STATIC_TLS
|
|
|
|
check_PROGRAMS += tls_static_test
|
|
|
|
check_PROGRAMS += tls_static_pic_test
|
|
|
|
|
|
|
|
tls_static_test_SOURCES = $(tls_test_SOURCES)
|
|
|
|
tls_static_test_DEPENDENCIES = $(tls_test_DEPENDENCIES)
|
|
|
|
tls_static_test_LDFLAGS = $(tls_test_LDFLAGS) -static
|
|
|
|
tls_static_test_LDADD = $(tls_test_LDADD)
|
|
|
|
|
|
|
|
tls_static_pic_test_SOURCES = $(tls_pic_test_SOURCES)
|
|
|
|
tls_static_pic_test_DEPENDENCIES = $(tls_pic_test_DEPENDENCIES)
|
|
|
|
tls_static_pic_test_LDFLAGS = $(tls_pic_test_LDFLAGS) -static
|
|
|
|
tls_static_pic_test_LDADD = $(tls_pic_test_LDADD)
|
|
|
|
endif
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2007-10-07 19:10:10 +02:00
|
|
|
|
|
|
|
if FN_PTRS_IN_SO_WITHOUT_PIC
|
2007-12-06 18:07:24 +01:00
|
|
|
check_PROGRAMS += tls_shared_nonpic_test
|
2008-04-17 09:12:00 +02:00
|
|
|
tls_test_shared_nonpic.so: tls_test.o tls_test_file2.o tls_test_c.o gcctestdir/ld
|
2011-07-02 02:39:13 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared tls_test.o tls_test_file2.o tls_test_c.o -Wl,-z,notext
|
2007-10-07 19:10:10 +02:00
|
|
|
|
|
|
|
tls_shared_nonpic_test_SOURCES = tls_test_main.cc
|
|
|
|
tls_shared_nonpic_test_DEPENDENCIES = gcctestdir/ld tls_test_shared_nonpic.so
|
|
|
|
tls_shared_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
tls_shared_nonpic_test_LDADD = tls_test_shared_nonpic.so -lpthread
|
2007-12-06 18:07:24 +01:00
|
|
|
endif FN_PTRS_IN_SO_WITHOUT_PIC
|
2007-10-07 19:10:10 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
endif TLS
|
2007-10-07 19:10:10 +02:00
|
|
|
|
2015-04-06 11:37:34 +02:00
|
|
|
if DEFAULT_TARGET_X86_64
|
|
|
|
|
|
|
|
check_SCRIPTS += x86_64_mov_to_lea.sh
|
|
|
|
check_DATA += x86_64_mov_to_lea1.stdout x86_64_mov_to_lea2.stdout \
|
|
|
|
x86_64_mov_to_lea3.stdout x86_64_mov_to_lea4.stdout \
|
|
|
|
x86_64_mov_to_lea5.stdout x86_64_mov_to_lea6.stdout \
|
|
|
|
x86_64_mov_to_lea7.stdout x86_64_mov_to_lea8.stdout \
|
|
|
|
x86_64_mov_to_lea9.stdout x86_64_mov_to_lea10.stdout \
|
|
|
|
x86_64_mov_to_lea11.stdout x86_64_mov_to_lea12.stdout \
|
|
|
|
x86_64_mov_to_lea13.stdout x86_64_mov_to_lea14.stdout
|
|
|
|
MOSTLYCLEANFILES += x86_64_mov_to_lea1 x86_64_mov_to_lea2 \
|
|
|
|
x86_64_mov_to_lea3 x86_64_mov_to_lea4 x86_64_mov_to_lea5 \
|
|
|
|
x86_64_mov_to_lea6 x86_64_mov_to_lea7 x86_64_mov_to_lea8 \
|
|
|
|
x86_64_mov_to_lea9 x86_64_mov_to_lea10 x86_64_mov_to_lea11 \
|
|
|
|
x86_64_mov_to_lea12 x86_64_mov_to_lea13 x86_64_mov_to_lea14
|
|
|
|
|
|
|
|
x86_64_mov_to_lea1.o: x86_64_mov_to_lea1.s
|
|
|
|
$(TEST_AS) --64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea2.o: x86_64_mov_to_lea1.s
|
|
|
|
$(TEST_AS) --x32 -o $@ $<
|
|
|
|
x86_64_mov_to_lea3.o: x86_64_mov_to_lea2.s
|
|
|
|
$(TEST_AS) --x32 -o $@ $<
|
|
|
|
x86_64_mov_to_lea4.o: x86_64_mov_to_lea2.s
|
|
|
|
$(TEST_AS) --64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea5.o: x86_64_mov_to_lea3.s
|
2016-02-16 14:55:11 +01:00
|
|
|
$(TEST_AS) --x32 -mrelax-relocations=yes -o $@ $<
|
2015-04-06 11:37:34 +02:00
|
|
|
x86_64_mov_to_lea6.o: x86_64_mov_to_lea3.s
|
2016-02-16 14:55:11 +01:00
|
|
|
$(TEST_AS) --64 -mrelax-relocations=yes -o $@ $<
|
2015-04-06 11:37:34 +02:00
|
|
|
x86_64_mov_to_lea7.o: x86_64_mov_to_lea4.s
|
|
|
|
$(TEST_AS) --x32 -o $@ $<
|
|
|
|
x86_64_mov_to_lea8.o: x86_64_mov_to_lea4.s
|
|
|
|
$(TEST_AS) --64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea1: x86_64_mov_to_lea1.o
|
|
|
|
../ld-new -Bsymbolic -shared -melf_x86_64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea2: x86_64_mov_to_lea1.o
|
|
|
|
../ld-new -pie -melf_x86_64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea3: x86_64_mov_to_lea1.o
|
|
|
|
../ld-new -melf_x86_64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea4: x86_64_mov_to_lea2.o
|
|
|
|
../ld-new -Bsymbolic -shared -melf32_x86_64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea5: x86_64_mov_to_lea2.o
|
|
|
|
../ld-new -pie -melf32_x86_64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea6: x86_64_mov_to_lea2.o
|
|
|
|
../ld-new -melf32_x86_64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea7: x86_64_mov_to_lea3.o
|
|
|
|
../ld-new -melf32_x86_64 -pie -o $@ $<
|
|
|
|
x86_64_mov_to_lea8: x86_64_mov_to_lea4.o
|
|
|
|
../ld-new -melf_x86_64 -pie -o $@ $<
|
|
|
|
x86_64_mov_to_lea9: x86_64_mov_to_lea5.o
|
|
|
|
../ld-new -melf32_x86_64 -o $@ $<
|
|
|
|
x86_64_mov_to_lea10: x86_64_mov_to_lea6.o
|
|
|
|
../ld-new -melf_x86_64 -o $@ $<
|
2015-10-20 19:43:33 +02:00
|
|
|
x86_64_mov_to_lea11: x86_64_mov_to_lea2.o
|
2015-04-06 11:37:34 +02:00
|
|
|
../ld-new -melf32_x86_64 -shared -o $@ $<
|
2015-10-20 19:43:33 +02:00
|
|
|
x86_64_mov_to_lea12: x86_64_mov_to_lea1.o
|
2015-04-06 11:37:34 +02:00
|
|
|
../ld-new -melf_x86_64 -shared -o $@ $<
|
|
|
|
x86_64_mov_to_lea13: x86_64_mov_to_lea7.o
|
|
|
|
../ld-new -melf32_x86_64 -shared -o $@ $<
|
|
|
|
x86_64_mov_to_lea14: x86_64_mov_to_lea8.o
|
|
|
|
../ld-new -melf_x86_64 -shared -o $@ $<
|
|
|
|
x86_64_mov_to_lea1.stdout: x86_64_mov_to_lea1
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea2.stdout: x86_64_mov_to_lea2
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea3.stdout: x86_64_mov_to_lea3
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea4.stdout: x86_64_mov_to_lea4
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea5.stdout: x86_64_mov_to_lea5
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea6.stdout: x86_64_mov_to_lea6
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea7.stdout: x86_64_mov_to_lea7
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea8.stdout: x86_64_mov_to_lea8
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea9.stdout: x86_64_mov_to_lea9
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea10.stdout: x86_64_mov_to_lea10
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea11.stdout: x86_64_mov_to_lea11
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea12.stdout: x86_64_mov_to_lea12
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea13.stdout: x86_64_mov_to_lea13
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_mov_to_lea14.stdout: x86_64_mov_to_lea14
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
|
2016-06-29 00:42:33 +02:00
|
|
|
check_SCRIPTS += x86_64_indirect_call_to_direct.sh
|
|
|
|
check_DATA += x86_64_indirect_call_to_direct1.stdout \
|
|
|
|
x86_64_indirect_jump_to_direct1.stdout
|
|
|
|
MOSTLYCLEANFILES += x86_64_indirect_call_to_direct1 \
|
|
|
|
x86_64_indirect_jump_to_direct1
|
|
|
|
|
|
|
|
x86_64_indirect_call_to_direct1.o: x86_64_indirect_call_to_direct1.s
|
|
|
|
$(TEST_AS) --64 -mrelax-relocations=yes -o $@ $<
|
|
|
|
x86_64_indirect_call_to_direct1: x86_64_indirect_call_to_direct1.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -o $@ $<
|
|
|
|
x86_64_indirect_call_to_direct1.stdout: x86_64_indirect_call_to_direct1
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
x86_64_indirect_jump_to_direct1.o: x86_64_indirect_jump_to_direct1.s
|
|
|
|
$(TEST_AS) --64 -mrelax-relocations=yes -o $@ $<
|
|
|
|
x86_64_indirect_jump_to_direct1: x86_64_indirect_jump_to_direct1.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -o $@ $<
|
|
|
|
x86_64_indirect_jump_to_direct1.stdout: x86_64_indirect_jump_to_direct1
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
|
2016-02-05 18:19:47 +01:00
|
|
|
check_SCRIPTS += x86_64_overflow_pc32.sh
|
|
|
|
check_DATA += x86_64_overflow_pc32.err
|
|
|
|
MOSTLYCLEANFILES += x86_64_overflow_pc32.err
|
|
|
|
x86_64_overflow_pc32.o: x86_64_overflow_pc32.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
x86_64_overflow_pc32.err: x86_64_overflow_pc32.o gcctestdir/ld
|
2016-02-06 23:47:05 +01:00
|
|
|
@echo gcctestdir/ld -e bar -Tdata=0x81000000 -o x86_64_overflow_pc32 x86_64_overflow_pc32.o "2>$@"
|
|
|
|
@if gcctestdir/ld -e bar -Tdata=0x81000000 -o x86_64_overflow_pc32 x86_64_overflow_pc32.o 2>$@; \
|
2016-02-05 18:19:47 +01:00
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of x86_64_overflow_pc32 should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
2016-02-06 23:47:05 +01:00
|
|
|
check_SCRIPTS += x32_overflow_pc32.sh
|
|
|
|
check_DATA += x32_overflow_pc32.err
|
|
|
|
MOSTLYCLEANFILES += x32_overflow_pc32.err
|
|
|
|
x32_overflow_pc32.o: x86_64_overflow_pc32.s
|
|
|
|
$(TEST_AS) --x32 -o $@ $<
|
|
|
|
x32_overflow_pc32.err: x32_overflow_pc32.o gcctestdir/ld
|
|
|
|
@echo gcctestdir/ld -e bar -Tdata=0x81000000 -o x32_overflow_pc32 x32_overflow_pc32.o "2>$@"
|
|
|
|
@if gcctestdir/ld -e bar -Tdata=0x81000000 -o x32_overflow_pc32 x32_overflow_pc32.o 2>$@; \
|
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of x32_overflow_pc32 should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
2015-04-06 11:37:34 +02:00
|
|
|
endif DEFAULT_TARGET_X86_64
|
|
|
|
|
gold: Support x86-64 TLS code sequences without PLT
There are extensions to x86-64 psABI:
https://groups.google.com/forum/#!topic/x86-64-abi/de5_KnLHxtI
to call tls_get_addr via GOT:
call *__tls_get_addr@GOTPCREL(%rip)
Since direct call is 4-byte long and indirect call, is 5-byte long, the
extra one byte must be handled properly.
For general dynamic model, one 0x66 prefix before call instruction is
removed to make room for indirect call. For local dynamic model, we
simply use 5-byte indirect call.
TLS linker optimization is updated to recognize new instruction
patterns. For local dynamic model to local exec model transition, we
generate 4 0x66 prefixes, instead of 3, before mov instruction in 64-bit
and generate a 5-byte nop, instead of 4-byte, before mov instruction in
32-bit.
PR gold/20216
* configure.ac (DEFAULT_TARGET_X86_64_OR_X32): New
AM_CONDITIONAL.
* configure: Regenerated.
* x86_64.cc (Target_x86_64<size>::Relocate::relocate): Allow
R_X86_64_GOTPCRELX relocation against __tls_get_addr.
(Target_x86_64<size>::Relocate::tls_gd_to_ie): Support indirect
call to __tls_get_addr.
(Target_x86_64<size>::Relocate::tls_gd_to_le): Likewise.
(Target_x86_64<size>::Relocate::tls_ld_to_le): Likewise.
* testsuite/Makefile.am (check_PROGRAMS): Add pr20216a_test,
pr20216b_test, pr20216c_test, pr20216d_test, pr20216e_test.
(pr20216a_test_SOURCES): New.
(pr20216a_test_DEPENDENCIES): Likewise.
(pr20216a_test_CFLAGS): Likewise.
(pr20216a_test_LDFLAGS): Likewise.
(pr20216a_test_LDADD): Likewise.
(pr20216b_test_SOURCES): Likewise.
(pr20216b_test_DEPENDENCIES): Likewise.
(pr20216b_test_CFLAGS): Likewise.
(pr20216b_test_LDFLAGS): Likewise.
(pr20216b_test_LDADD): Likewise.
(pr20216c_test_SOURCES): Likewise.
(pr20216c_test_DEPENDENCIES): Likewise.
(pr20216c_test_CFLAGS): Likewise.
(pr20216c_test_LDFLAGS): Likewise.
(pr20216c_test_LDADD): Likewise.
(pr20216d_test_SOURCES): Likewise.
(pr20216d_test_DEPENDENCIES): Likewise.
(pr20216d_test_CFLAGS): Likewise.
(pr20216d_test_LDFLAGS): Likewise.
(pr20216d_test_LDADD): Likewise.
(pr20216e_test_SOURCES): Likewise.
(pr20216e_test_DEPENDENCIES): Likewise.
(pr20216e_test_CFLAGS): Likewise.
(pr20216e_test_LDFLAGS): Likewise.
(pr20216e_test_LDADD): Likewise.
(pr20216a.so): Likewise.
(pr20216b.so): Likewise.
(pr20216_gd.o): Likewise.
(pr20216_ld.o): Likewise.
(MOSTLYCLEANFILES): Add pr20216a.so pr20216b.so.
* testsuite/Makefile.in: Regenerated.
* testsuite/pr20216_def.c: New file.
* testsuite/pr20216_gd.S: Likewise.
* testsuite/pr20216_ld.S: Likewise.
* testsuite/pr20216_main.c: Likewise.
2016-06-29 17:37:30 +02:00
|
|
|
if DEFAULT_TARGET_X86_64_OR_X32
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20216a_test
|
|
|
|
pr20216a_test_SOURCES = pr20216_main.c pr20216_def.c
|
|
|
|
pr20216a_test_DEPENDENCIES = pr20216_gd.o pr20216_ld.o gcctestdir/ld gcctestdir/as
|
|
|
|
pr20216a_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20216a_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20216a_test_LDADD = pr20216_gd.o pr20216_ld.o
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20216b_test
|
|
|
|
pr20216b_test_SOURCES = pr20216_main.c pr20216_def.c
|
|
|
|
pr20216b_test_DEPENDENCIES = pr20216_gd.o pr20216_ld.o gcctestdir/ld gcctestdir/as
|
|
|
|
pr20216b_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20216b_test_LDFLAGS = -pie -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20216b_test_LDADD = pr20216_gd.o pr20216_ld.o
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20216c_test
|
|
|
|
pr20216c_test_SOURCES = pr20216_main.c pr20216_def.c
|
|
|
|
pr20216c_test_DEPENDENCIES = pr20216_gd.o pr20216_ld.o gcctestdir/ld gcctestdir/as
|
|
|
|
pr20216c_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20216c_test_LDFLAGS = -static -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20216c_test_LDADD = pr20216_gd.o pr20216_ld.o
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20216d_test
|
|
|
|
pr20216d_test_SOURCES = pr20216_main.c pr20216_def.c
|
|
|
|
pr20216d_test_DEPENDENCIES = pr20216a.so gcctestdir/ld gcctestdir/as
|
|
|
|
pr20216d_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20216d_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20216d_test_LDADD = pr20216a.so
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20216e_test
|
|
|
|
pr20216e_test_SOURCES = pr20216_main.c
|
|
|
|
pr20216e_test_DEPENDENCIES = pr20216_gd.o pr20216_ld.o pr20216b.so gcctestdir/ld gcctestdir/as
|
|
|
|
pr20216e_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20216e_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20216e_test_LDADD = pr20216_gd.o pr20216_ld.o pr20216b.so
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += pr20216a.so pr20216b.so
|
|
|
|
|
|
|
|
pr20216a.so: pr20216_gd.o pr20216_ld.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared pr20216_gd.o pr20216_ld.o
|
|
|
|
|
|
|
|
pr20216b.so: pr20216_def.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared pr20216_def.o
|
|
|
|
|
|
|
|
pr20216_gd.o: pr20216_gd.S
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
|
|
|
|
pr20216_ld.o: pr20216_ld.S
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
|
|
|
|
endif DEFAULT_TARGET_X86_64_OR_X32
|
|
|
|
|
2015-04-01 15:48:38 +02:00
|
|
|
if DEFAULT_TARGET_I386
|
|
|
|
|
|
|
|
check_SCRIPTS += i386_mov_to_lea.sh
|
|
|
|
check_DATA += i386_mov_to_lea1.stdout i386_mov_to_lea2.stdout \
|
|
|
|
i386_mov_to_lea3.stdout i386_mov_to_lea4.stdout \
|
|
|
|
i386_mov_to_lea5.stdout i386_mov_to_lea6.stdout \
|
|
|
|
i386_mov_to_lea7.stdout i386_mov_to_lea8.stdout
|
|
|
|
MOSTLYCLEANFILES += i386_mov_to_lea1 i386_mov_to_lea2 i386_mov_to_lea3 \
|
|
|
|
i386_mov_to_lea4 i386_mov_to_lea5 i386_mov_to_lea6 \
|
|
|
|
i386_mov_to_lea7 i386_mov_to_lea8
|
|
|
|
|
|
|
|
i386_mov_to_lea1.o: i386_mov_to_lea1.s
|
|
|
|
$(TEST_AS) --32 -o $@ $<
|
|
|
|
i386_mov_to_lea2.o: i386_mov_to_lea2.s
|
|
|
|
$(TEST_AS) --32 -o $@ $<
|
|
|
|
i386_mov_to_lea3.o: i386_mov_to_lea3.s
|
|
|
|
$(TEST_AS) --32 -o $@ $<
|
|
|
|
i386_mov_to_lea4.o: i386_mov_to_lea4.s
|
|
|
|
$(TEST_AS) --32 -o $@ $<
|
|
|
|
i386_mov_to_lea5.o: i386_mov_to_lea5.s
|
|
|
|
$(TEST_AS) --32 -o $@ $<
|
|
|
|
i386_mov_to_lea1: i386_mov_to_lea1.o
|
|
|
|
../ld-new -Bsymbolic -shared -melf_i386 -o $@ $<
|
|
|
|
i386_mov_to_lea2: i386_mov_to_lea1.o
|
|
|
|
../ld-new -pie -melf_i386 -o $@ $<
|
|
|
|
i386_mov_to_lea3: i386_mov_to_lea1.o
|
|
|
|
../ld-new -melf_i386 -o $@ $<
|
|
|
|
i386_mov_to_lea4: i386_mov_to_lea1.o
|
|
|
|
../ld-new -melf_i386 -shared -o $@ $<
|
|
|
|
i386_mov_to_lea5: i386_mov_to_lea2.o
|
|
|
|
../ld-new -melf_i386 -shared -o $@ $<
|
|
|
|
i386_mov_to_lea6: i386_mov_to_lea3.o
|
|
|
|
../ld-new -melf_i386 -shared -o $@ $<
|
|
|
|
i386_mov_to_lea7: i386_mov_to_lea4.o
|
|
|
|
../ld-new -melf_i386 -shared -o $@ $<
|
|
|
|
i386_mov_to_lea8: i386_mov_to_lea5.o
|
|
|
|
../ld-new -melf_i386 -shared -o $@ $<
|
|
|
|
i386_mov_to_lea1.stdout: i386_mov_to_lea1
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
i386_mov_to_lea2.stdout: i386_mov_to_lea2
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
i386_mov_to_lea3.stdout: i386_mov_to_lea3
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
i386_mov_to_lea4.stdout: i386_mov_to_lea4
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
i386_mov_to_lea5.stdout: i386_mov_to_lea5
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
i386_mov_to_lea6.stdout: i386_mov_to_lea6
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
i386_mov_to_lea7.stdout: i386_mov_to_lea7
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
i386_mov_to_lea8.stdout: i386_mov_to_lea8
|
|
|
|
$(TEST_OBJDUMP) -dw $< > $@
|
|
|
|
|
gold: Support 386 TLS code sequences without PLT
There are extensions to 386 psABI:
https://groups.google.com/forum/#!topic/ia32-abi/awsRSvJOJfs
to call tls_get_addr via GOT:
call *___tls_get_addr@GOT(%reg)
where EBX register isn't required as GOT base.
Since direct call is 4-byte long and indirect call, is 5-byte long, the
extra one byte must be handled properly.
For general dynamic model, 7-byte lea instruction before call
instruction is replaced by 6-byte one to make room for indirect call.
For local dynamic model, we simply use 5-byte indirect call.
TLS linker optimization is updated to recognize new instruction
patterns. For local dynamic model to local exec model transition,
we generate a 6-byte lea instruction as nop, instead of a 1-byte nop
plus a 4-byte lea instruction.
PR gold/20308
* i386.cc (Target_i386::Relocate::relocate): Allow
R_386_GOT32X relocation against ___tls_get_addr.
(Target_i386::Relocate::tls_gd_to_ie): Support indirect
call to __tls_get_addr.
(Target_i386::Relocate::tls_gd_to_le): Likewise.
(Target_i386::Relocate::tls_ld_to_le): Likewise.
* testsuite/Makefile.am (check_PROGRAMS): Add pr20308a_test,
pr20308b_test, pr20308c_test, pr20308d_test, pr20308e_test.
(pr20308a_test_SOURCES): New.
(pr20308a_test_DEPENDENCIES): Likewise.
(pr20308a_test_CFLAGS): Likewise.
(pr20308a_test_LDFLAGS): Likewise.
(pr20308a_test_LDADD): Likewise.
(pr20308b_test_SOURCES): Likewise.
(pr20308b_test_DEPENDENCIES): Likewise.
(pr20308b_test_CFLAGS): Likewise.
(pr20308b_test_LDFLAGS): Likewise.
(pr20308b_test_LDADD): Likewise.
(pr20308c_test_SOURCES): Likewise.
(pr20308c_test_DEPENDENCIES): Likewise.
(pr20308c_test_CFLAGS): Likewise.
(pr20308c_test_LDFLAGS): Likewise.
(pr20308c_test_LDADD): Likewise.
(pr20308d_test_SOURCES): Likewise.
(pr20308d_test_DEPENDENCIES): Likewise.
(pr20308d_test_CFLAGS): Likewise.
(pr20308d_test_LDFLAGS): Likewise.
(pr20308d_test_LDADD): Likewise.
(pr20308e_test_SOURCES): Likewise.
(pr20308e_test_DEPENDENCIES): Likewise.
(pr20308e_test_CFLAGS): Likewise.
(pr20308e_test_LDFLAGS): Likewise.
(pr20308e_test_LDADD): Likewise.
(pr20308a.so): Likewise.
(pr20308b.so): Likewise.
(pr20308_gd.o): Likewise.
(pr20308_ld.o): Likewise.
(MOSTLYCLEANFILES): Add pr20308a.so pr20308b.so.
* testsuite/Makefile.in: Regenerated.
* testsuite/pr20308_def.c: New file.
* testsuite/pr20308_gd.S: Likewise.
* testsuite/pr20308_ld.S: Likewise.
* testsuite/pr20308_main.c: Likewise.
2016-06-29 17:38:43 +02:00
|
|
|
check_PROGRAMS += pr20308a_test
|
|
|
|
pr20308a_test_SOURCES = pr20308_main.c pr20308_def.c
|
|
|
|
pr20308a_test_DEPENDENCIES = pr20308_gd.o pr20308_ld.o gcctestdir/ld gcctestdir/as
|
|
|
|
pr20308a_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20308a_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20308a_test_LDADD = pr20308_gd.o pr20308_ld.o
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20308b_test
|
|
|
|
pr20308b_test_SOURCES = pr20308_main.c pr20308_def.c
|
|
|
|
pr20308b_test_DEPENDENCIES = pr20308_gd.o pr20308_ld.o gcctestdir/ld gcctestdir/as
|
|
|
|
pr20308b_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20308b_test_LDFLAGS = -pie -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20308b_test_LDADD = pr20308_gd.o pr20308_ld.o
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20308c_test
|
|
|
|
pr20308c_test_SOURCES = pr20308_main.c pr20308_def.c
|
|
|
|
pr20308c_test_DEPENDENCIES = pr20308_gd.o pr20308_ld.o gcctestdir/ld gcctestdir/as
|
|
|
|
pr20308c_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20308c_test_LDFLAGS = -static -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20308c_test_LDADD = pr20308_gd.o pr20308_ld.o
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20308d_test
|
|
|
|
pr20308d_test_SOURCES = pr20308_main.c pr20308_def.c
|
|
|
|
pr20308d_test_DEPENDENCIES = pr20308a.so gcctestdir/ld gcctestdir/as
|
|
|
|
pr20308d_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20308d_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20308d_test_LDADD = pr20308a.so
|
|
|
|
|
|
|
|
check_PROGRAMS += pr20308e_test
|
|
|
|
pr20308e_test_SOURCES = pr20308_main.c
|
|
|
|
pr20308e_test_DEPENDENCIES = pr20308_gd.o pr20308_ld.o pr20308b.so gcctestdir/ld gcctestdir/as
|
|
|
|
pr20308e_test_CFLAGS = -Bgcctestdir/ -fPIE
|
|
|
|
pr20308e_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
pr20308e_test_LDADD = pr20308_gd.o pr20308_ld.o pr20308b.so
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += pr20308a.so pr20308b.so
|
|
|
|
|
|
|
|
pr20308a.so: pr20308_gd.o pr20308_ld.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared pr20308_gd.o pr20308_ld.o
|
|
|
|
|
|
|
|
pr20308b.so: pr20308_def.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared pr20308_def.o
|
|
|
|
|
|
|
|
pr20308_gd.o: pr20308_gd.S
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
|
|
|
|
pr20308_ld.o: pr20308_ld.S
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
|
2015-04-01 15:48:38 +02:00
|
|
|
endif DEFAULT_TARGET_I386
|
|
|
|
|
2008-04-19 20:30:58 +02:00
|
|
|
check_PROGRAMS += many_sections_test
|
|
|
|
many_sections_test_SOURCES = many_sections_test.cc
|
|
|
|
many_sections_test_DEPENDENCIES = gcctestdir/ld
|
|
|
|
many_sections_test_LDFLAGS = -Bgcctestdir/ -rdynamic
|
2009-12-06 00:22:54 +01:00
|
|
|
many_sections_test_LDADD =
|
2008-04-19 20:30:58 +02:00
|
|
|
|
|
|
|
BUILT_SOURCES += many_sections_define.h
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += many_sections_define.h
|
2008-04-19 20:30:58 +02:00
|
|
|
many_sections_define.h:
|
|
|
|
(for i in `seq 1 70000`; do \
|
|
|
|
echo "int var_$$i __attribute__((section(\"section_$$i\"))) = $$i;"; \
|
|
|
|
done) > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
BUILT_SOURCES += many_sections_check.h
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += many_sections_check.h
|
2008-04-19 20:30:58 +02:00
|
|
|
many_sections_check.h:
|
2008-04-19 21:15:36 +02:00
|
|
|
(for i in `seq 1 1000 70000`; do \
|
2008-04-19 20:30:58 +02:00
|
|
|
echo "assert(var_$$i == $$i);"; \
|
|
|
|
done) > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
check_PROGRAMS += many_sections_r_test
|
|
|
|
many_sections_r_test.o: many_sections_test.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -r -o $@ many_sections_test.o
|
2008-04-19 21:43:13 +02:00
|
|
|
many_sections_r_test: many_sections_r_test.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ many_sections_r_test.o $(LIBS)
|
2007-10-07 19:10:10 +02:00
|
|
|
|
2008-03-28 23:42:34 +01:00
|
|
|
check_PROGRAMS += initpri1
|
|
|
|
initpri1_SOURCES = initpri1.c
|
|
|
|
initpri1_DEPENDENCIES = gcctestdir/ld
|
|
|
|
initpri1_LDFLAGS = -Bgcctestdir/
|
2009-12-06 00:22:54 +01:00
|
|
|
initpri1_LDADD =
|
2008-03-28 23:42:34 +01:00
|
|
|
|
2011-06-23 02:46:14 +02:00
|
|
|
check_PROGRAMS += initpri2
|
|
|
|
initpri2_SOURCES = initpri2.c
|
|
|
|
initpri2_DEPENDENCIES = gcctestdir/ld
|
2012-02-16 20:37:34 +01:00
|
|
|
initpri2_LDFLAGS = -Bgcctestdir/ -Wl,--ctors-in-init-array
|
2011-06-23 02:46:14 +02:00
|
|
|
initpri2_LDADD =
|
2008-03-28 23:42:34 +01:00
|
|
|
|
2011-06-25 02:40:57 +02:00
|
|
|
check_PROGRAMS += initpri3a
|
|
|
|
initpri3a_SOURCES = initpri3.c
|
|
|
|
initpri3a_DEPENDENCIES = gcctestdir/ld
|
|
|
|
initpri3a_LDFLAGS = -Bgcctestdir/
|
|
|
|
initpri3a_LDADD =
|
|
|
|
|
2012-03-17 02:33:19 +01:00
|
|
|
# This test fails on targets not using .ctors and .dtors sections (e.g. ARM
|
|
|
|
# EABI). Given that gcc is moving towards using .init_array in all cases,
|
|
|
|
# this test is commented out. A better fix would be checking whether gcc
|
|
|
|
# uses .ctors or .init_array sections in configure.
|
|
|
|
|
|
|
|
# check_PROGRAMS += initpri3b
|
|
|
|
# initpri3b_SOURCES = initpri3.c
|
|
|
|
# initpri3b_DEPENDENCIES = gcctestdir/ld
|
|
|
|
# initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
|
|
|
|
# initpri3b_LDADD =
|
2011-06-25 02:40:57 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# Test --detect-odr-violations
|
|
|
|
check_SCRIPTS += debug_msg.sh
|
2007-10-07 19:10:10 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# Create the data files that debug_msg.sh analyzes.
|
|
|
|
check_DATA += debug_msg.err
|
|
|
|
MOSTLYCLEANFILES += debug_msg.err
|
|
|
|
debug_msg.o: debug_msg.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g -c -w -o $@ $(srcdir)/debug_msg.cc
|
|
|
|
odr_violation1.o: odr_violation1.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g -c -w -o $@ $(srcdir)/odr_violation1.cc
|
2011-03-10 02:31:33 +01:00
|
|
|
# Compile with different optimization flags to check that rearranged
|
|
|
|
# instructions don't cause a false positive.
|
2007-12-06 18:07:24 +01:00
|
|
|
odr_violation2.o: odr_violation2.cc
|
2011-03-10 02:31:33 +01:00
|
|
|
$(CXXCOMPILE) -O2 -g -c -w -o $@ $(srcdir)/odr_violation2.cc
|
2007-12-06 18:07:24 +01:00
|
|
|
debug_msg.err: debug_msg.o odr_violation1.o odr_violation2.o gcctestdir/ld
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg debug_msg.o odr_violation1.o odr_violation2.o "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg debug_msg.o odr_violation1.o odr_violation2.o 2>$@; \
|
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of debug_msg should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
2013-05-21 23:14:40 +02:00
|
|
|
# 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
|
2011-06-24 20:08:50 +02:00
|
|
|
|
|
|
|
# Check that --detect-odr-violations works with compressed debug sections.
|
|
|
|
check_DATA += debug_msg_cdebug.err
|
|
|
|
MOSTLYCLEANFILES += debug_msg_cdebug.err
|
|
|
|
debug_msg_cdebug.o: debug_msg.cc gcctestdir/as
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections -c -w -o $@ $(srcdir)/debug_msg.cc
|
|
|
|
odr_violation1_cdebug.o: odr_violation1.cc gcctestdir/as
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections -c -w -o $@ $(srcdir)/odr_violation1.cc
|
|
|
|
odr_violation2_cdebug.o: odr_violation2.cc gcctestdir/as
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O2 -g -Wa,--compress-debug-sections -c -w -o $@ $(srcdir)/odr_violation2.cc
|
|
|
|
debug_msg_cdebug.err: debug_msg_cdebug.o odr_violation1_cdebug.o odr_violation2_cdebug.o gcctestdir/ld
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug debug_msg_cdebug.o odr_violation1_cdebug.o odr_violation2_cdebug.o "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug debug_msg_cdebug.o odr_violation1_cdebug.o odr_violation2_cdebug.o 2>$@; \
|
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of debug_msg_cdebug should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
2015-07-12 19:50:25 +02:00
|
|
|
check_DATA += debug_msg_cdebug_gabi.err
|
|
|
|
MOSTLYCLEANFILES += debug_msg_cdebug_gabi.err
|
|
|
|
debug_msg_cdebug_gabi.o: debug_msg.cc gcctestdir/as
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/debug_msg.cc
|
|
|
|
odr_violation1_cdebug_gabi.o: odr_violation1.cc gcctestdir/as
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/odr_violation1.cc
|
|
|
|
odr_violation2_cdebug_gabi.o: odr_violation2.cc gcctestdir/as
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O2 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/odr_violation2.cc
|
|
|
|
debug_msg_cdebug_gabi.err: debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o gcctestdir/ld
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -Wl,--detect-odr-violations -o debug_msg_cdebug_gabi debug_msg_cdebug_gabi.o odr_violation1_cdebug_gabi.o odr_violation2_cdebug_gabi.o 2>$@; \
|
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of debug_msg_cdebug_gabi should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
2011-06-24 20:08:50 +02:00
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# See if we can also detect problems when we're linking .so's, not .o's.
|
|
|
|
check_DATA += debug_msg_so.err
|
|
|
|
MOSTLYCLEANFILES += debug_msg_so.err
|
|
|
|
debug_msg.so: debug_msg.cc gcctestdir/ld
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g -shared -fPIC -w -o $@ $(srcdir)/debug_msg.cc
|
|
|
|
odr_violation1.so: odr_violation1.cc gcctestdir/ld
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g -shared -fPIC -w -o $@ $(srcdir)/odr_violation1.cc
|
|
|
|
odr_violation2.so: odr_violation2.cc gcctestdir/ld
|
2011-03-10 02:31:33 +01:00
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O2 -g -shared -fPIC -w -o $@ $(srcdir)/odr_violation2.cc
|
2007-12-06 18:07:24 +01:00
|
|
|
debug_msg_so.err: debug_msg.so odr_violation1.so odr_violation2.so gcctestdir/ld
|
2013-01-05 00:50:27 +01:00
|
|
|
@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>$@; \
|
2007-12-06 18:07:24 +01:00
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of debug_msg_so should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
# We also want to make sure we do something reasonable when there's no
|
|
|
|
# debug info available. For the best test, we use .so's.
|
|
|
|
check_DATA += debug_msg_ndebug.err
|
|
|
|
MOSTLYCLEANFILES += debug_msg_ndebug.err
|
|
|
|
debug_msg_ndebug.so: debug_msg.cc gcctestdir/ld
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g0 -shared -fPIC -w -o $@ $(srcdir)/debug_msg.cc
|
|
|
|
odr_violation1_ndebug.so: odr_violation1.cc gcctestdir/ld
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g0 -shared -fPIC -w -o $@ $(srcdir)/odr_violation1.cc
|
|
|
|
odr_violation2_ndebug.so: odr_violation2.cc gcctestdir/ld
|
2011-03-10 02:31:33 +01:00
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O2 -g0 -shared -fPIC -w -o $@ $(srcdir)/odr_violation2.cc
|
2007-12-06 18:07:24 +01:00
|
|
|
debug_msg_ndebug.err: debug_msg_ndebug.so odr_violation1_ndebug.so odr_violation2_ndebug.so gcctestdir/ld
|
2013-01-05 00:50:27 +01:00
|
|
|
@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>$@; \
|
2007-12-06 18:07:24 +01:00
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of debug_msg_ndebug should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Similar to --detect-odr-violations: check for undefined symbols in .so's
|
|
|
|
check_SCRIPTS += undef_symbol.sh
|
|
|
|
check_DATA += undef_symbol.err
|
|
|
|
MOSTLYCLEANFILES += undef_symbol.err
|
|
|
|
undef_symbol.o: undef_symbol.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g -c -fPIC $<
|
|
|
|
undef_symbol.so: undef_symbol.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared undef_symbol.o
|
|
|
|
undef_symbol.err: undef_symbol_main.o undef_symbol.so gcctestdir/ld
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -o undef_symbol_test undef_symbol_main.o undef_symbol.so "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -o undef_symbol_test undef_symbol_main.o undef_symbol.so 2>$@; \
|
|
|
|
then \
|
|
|
|
echo 1>&2 "Link of undef_symbol_test should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Test -o when emitting to a special file (such as something in /dev).
|
|
|
|
check_PROGRAMS += flagstest_o_specialfile
|
2007-12-14 06:27:45 +01:00
|
|
|
flagstest_o_specialfile: flagstest_debug.o gcctestdir/ld
|
2007-12-06 18:07:24 +01:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< 2>&1 | cat > $@
|
|
|
|
chmod a+x $@
|
|
|
|
test -s $@
|
|
|
|
|
2015-07-12 19:56:41 +02:00
|
|
|
# Test --compress-debug-sections.
|
|
|
|
check_PROGRAMS += flagstest_compress_debug_sections_none
|
|
|
|
check_DATA += flagstest_compress_debug_sections_none.stdout
|
|
|
|
flagstest_compress_debug_sections_none: flagstest_debug.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,--compress-debug-sections=none
|
|
|
|
test -s $@
|
|
|
|
|
|
|
|
# Dump DWARF debug sections.
|
|
|
|
flagstest_compress_debug_sections_none.stdout: flagstest_compress_debug_sections_none
|
|
|
|
$(TEST_READELF) -w $< > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
2008-04-08 16:33:35 +02:00
|
|
|
check_PROGRAMS += flagstest_compress_debug_sections
|
2015-07-12 19:56:41 +02:00
|
|
|
check_DATA += flagstest_compress_debug_sections.stdout \
|
|
|
|
flagstest_compress_debug_sections.cmp \
|
|
|
|
flagstest_compress_debug_sections.check
|
2016-03-09 04:52:07 +01:00
|
|
|
MOSTLYCLEANFILES += flagstest_compress_debug_sections.check \
|
|
|
|
flagstest_compress_debug_sections.cmp
|
2008-04-08 16:33:35 +02:00
|
|
|
flagstest_compress_debug_sections: flagstest_debug.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,--compress-debug-sections=zlib
|
|
|
|
test -s $@
|
|
|
|
|
2015-06-02 18:45:24 +02:00
|
|
|
# Test --compress-debug-sections with --build-id=tree.
|
|
|
|
check_PROGRAMS += flagstest_compress_debug_sections_and_build_id_tree
|
|
|
|
flagstest_compress_debug_sections_and_build_id_tree: flagstest_debug.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,--compress-debug-sections=zlib \
|
|
|
|
-Wl,--build-id=tree \
|
|
|
|
-Wl,--build-id-chunk-size-for-treehash=4096 \
|
|
|
|
-Wl,--build-id-min-file-size-for-treehash=0
|
|
|
|
test -s $@
|
2008-04-08 16:33:35 +02:00
|
|
|
|
2015-07-12 19:56:41 +02:00
|
|
|
# Dump compressed DWARF debug sections.
|
|
|
|
flagstest_compress_debug_sections.stdout: flagstest_compress_debug_sections
|
|
|
|
$(TEST_READELF) -w $< | sed -e "s/.zdebug_/.debug_/" > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
2015-07-14 19:25:52 +02:00
|
|
|
# Check there are compressed DWARF .debug_* sections.
|
2015-07-12 19:56:41 +02:00
|
|
|
flagstest_compress_debug_sections.check: flagstest_compress_debug_sections
|
2015-07-14 19:25:52 +02:00
|
|
|
$(TEST_READELF) -SW $< | egrep ".debug_.* C *" > $@.tmp
|
2015-07-12 19:56:41 +02:00
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
# Compare DWARF debug info.
|
|
|
|
flagstest_compress_debug_sections.cmp: flagstest_compress_debug_sections.stdout \
|
|
|
|
flagstest_compress_debug_sections_none.stdout
|
|
|
|
cmp flagstest_compress_debug_sections.stdout \
|
|
|
|
flagstest_compress_debug_sections_none.stdout > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
check_PROGRAMS += flagstest_compress_debug_sections_gnu
|
|
|
|
check_DATA += flagstest_compress_debug_sections_gnu.stdout \
|
|
|
|
flagstest_compress_debug_sections_gnu.cmp \
|
|
|
|
flagstest_compress_debug_sections_gnu.check
|
2016-03-09 04:52:07 +01:00
|
|
|
MOSTLYCLEANFILES += flagstest_compress_debug_sections_gnu.check \
|
|
|
|
flagstest_compress_debug_sections_gnu.cmp
|
2015-07-12 19:56:41 +02:00
|
|
|
flagstest_compress_debug_sections_gnu: flagstest_debug.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,--compress-debug-sections=zlib-gnu
|
|
|
|
test -s $@
|
|
|
|
|
|
|
|
# Dump compressed DWARF debug sections.
|
|
|
|
flagstest_compress_debug_sections_gnu.stdout: flagstest_compress_debug_sections_gnu
|
|
|
|
$(TEST_READELF) -w $< | sed -e "s/.zdebug_/.debug_/" > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
# Check there are compressed DWARF .zdebug_* sections.
|
|
|
|
flagstest_compress_debug_sections_gnu.check: flagstest_compress_debug_sections_gnu
|
|
|
|
$(TEST_READELF) -SW $< | grep ".zdebug_" > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
# Compare DWARF debug info.
|
|
|
|
flagstest_compress_debug_sections_gnu.cmp: flagstest_compress_debug_sections_gnu.stdout \
|
|
|
|
flagstest_compress_debug_sections_none.stdout
|
|
|
|
cmp flagstest_compress_debug_sections_gnu.stdout \
|
|
|
|
flagstest_compress_debug_sections_none.stdout > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
check_PROGRAMS += flagstest_compress_debug_sections_gabi
|
|
|
|
check_DATA += flagstest_compress_debug_sections_gabi.stdout \
|
|
|
|
flagstest_compress_debug_sections_gabi.cmp \
|
|
|
|
flagstest_compress_debug_sections_gabi.check
|
2016-03-09 04:52:07 +01:00
|
|
|
MOSTLYCLEANFILES += flagstest_compress_debug_sections_gabi.cmp \
|
|
|
|
flagstest_compress_debug_sections_gabi.check
|
2015-07-12 19:56:41 +02:00
|
|
|
flagstest_compress_debug_sections_gabi: flagstest_debug.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,--compress-debug-sections=zlib-gabi
|
|
|
|
test -s $@
|
|
|
|
|
|
|
|
# Dump compressed DWARF debug sections.
|
|
|
|
flagstest_compress_debug_sections_gabi.stdout: flagstest_compress_debug_sections_gabi
|
|
|
|
$(TEST_READELF) -w $< > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
# Check there are compressed DWARF .debug_* sections.
|
|
|
|
flagstest_compress_debug_sections_gabi.check: flagstest_compress_debug_sections_gabi
|
|
|
|
$(TEST_READELF) -tW $< | grep "COMPRESSED" > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
|
|
|
# Compare DWARF debug info.
|
|
|
|
flagstest_compress_debug_sections_gabi.cmp: flagstest_compress_debug_sections_gabi.stdout \
|
|
|
|
flagstest_compress_debug_sections_none.stdout
|
|
|
|
cmp flagstest_compress_debug_sections_gabi.stdout \
|
|
|
|
flagstest_compress_debug_sections_none.stdout > $@.tmp
|
|
|
|
mv -f $@.tmp $@
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
# The specialfile output has a tricky case when we also compress debug
|
|
|
|
# sections, because it requires output-file resizing.
|
|
|
|
check_PROGRAMS += flagstest_o_specialfile_and_compress_debug_sections
|
2007-12-14 06:27:45 +01:00
|
|
|
flagstest_o_specialfile_and_compress_debug_sections: flagstest_debug.o \
|
|
|
|
gcctestdir/ld
|
2008-04-03 16:18:37 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -o /dev/stdout $< -Wl,--compress-debug-sections=zlib 2>&1 | cat > $@
|
2007-12-06 18:07:24 +01:00
|
|
|
chmod a+x $@
|
|
|
|
test -s $@
|
|
|
|
|
2015-07-20 19:14:26 +02:00
|
|
|
check_SCRIPTS += pr18689.sh
|
|
|
|
check_DATA += pr18689.stdout
|
|
|
|
MOSTLYCLEANFILES += pr18689a.o pr18689b.o
|
|
|
|
|
|
|
|
pr18689.stdout: pr18689b.o
|
|
|
|
$(TEST_READELF) -SW $< > $@
|
|
|
|
|
|
|
|
pr18689a.o: pr18689.o ../ld-new
|
|
|
|
../ld-new -r -o $@ $<
|
|
|
|
|
|
|
|
pr18689b.o: pr18689a.o ../ld-new
|
|
|
|
../ld-new -r -o $@ $<
|
|
|
|
|
|
|
|
pr18689.o: pr18689.c gcctestdir/as
|
|
|
|
$(COMPILE) -Bgcctestdir/ -ggdb3 -g -Wa,--compress-debug-sections=zlib-gabi -c -w -o $@ $(srcdir)/pr18689.c
|
|
|
|
|
2011-07-26 00:48:42 +02:00
|
|
|
# Test -TText and -Tdata.
|
|
|
|
check_PROGRAMS += flagstest_o_ttext_1
|
|
|
|
flagstest_o_ttext_1: flagstest_debug.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,-Ttext,0x400000 -Wl,-Tdata,0x800000
|
|
|
|
|
|
|
|
# This version won't be runnable, because there is no way to put the
|
|
|
|
# PT_PHDR segment at file offset 0. We just make sure that we can
|
|
|
|
# build it without error.
|
|
|
|
check_DATA += flagstest_o_ttext_2
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += flagstest_o_ttext_2
|
2011-07-26 00:48:42 +02:00
|
|
|
flagstest_o_ttext_2: flagstest_debug.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -o $@ $< -Wl,-Ttext,0x400010 -Wl,-Tdata,0x800010
|
|
|
|
|
2007-12-22 00:31:19 +01:00
|
|
|
# Test symbol versioning.
|
|
|
|
check_PROGRAMS += ver_test
|
|
|
|
ver_test_SOURCES = ver_test_main.cc
|
|
|
|
ver_test_DEPENDENCIES = gcctestdir/ld ver_test_1.so ver_test_2.so ver_test_4.so
|
|
|
|
ver_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ver_test_LDADD = ver_test_1.so ver_test_2.so ver_test_4.so
|
|
|
|
ver_test_1.so: ver_test_1.o ver_test_2.so ver_test_3.o ver_test_4.so gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared ver_test_1.o ver_test_2.so ver_test_3.o ver_test_4.so
|
2008-01-16 00:41:28 +01:00
|
|
|
ver_test_2.so: ver_test_2.o $(srcdir)/ver_test_2.script ver_test_4.so gcctestdir/ld
|
2011-05-27 20:45:38 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_2.script -Wl,-R,. ver_test_2.o ver_test_4.so
|
2008-01-16 00:41:28 +01:00
|
|
|
ver_test_4.so: ver_test_4.o $(srcdir)/ver_test_4.script gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_4.script ver_test_4.o
|
2007-12-22 00:31:19 +01:00
|
|
|
ver_test_1.o: ver_test_1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
ver_test_2.o: ver_test_2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
ver_test_3.o: ver_test_3.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
ver_test_4.o: ver_test_4.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2007-12-06 18:07:24 +01:00
|
|
|
|
2009-02-27 20:57:46 +01:00
|
|
|
check_SCRIPTS += ver_test_1.sh
|
|
|
|
check_DATA += ver_test_1.syms
|
|
|
|
ver_test_1.syms: ver_test_1.so
|
|
|
|
$(TEST_READELF) -s $< >$@ 2>/dev/null
|
|
|
|
|
2008-03-14 06:57:19 +01:00
|
|
|
check_PROGRAMS += ver_test_2
|
|
|
|
ver_test_2_SOURCES = ver_test_main_2.cc
|
|
|
|
ver_test_2_DEPENDENCIES = gcctestdir/ld ver_test_4.so ver_test_2.so
|
|
|
|
ver_test_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ver_test_2_LDADD = ver_test_4.so ver_test_2.so
|
|
|
|
|
|
|
|
check_SCRIPTS += ver_test_2.sh
|
|
|
|
check_DATA += ver_test_2.syms
|
|
|
|
ver_test_2.syms: ver_test_2
|
2008-04-08 00:16:03 +02:00
|
|
|
$(TEST_READELF) -s $< >$@ 2>/dev/null
|
2008-03-14 06:57:19 +01:00
|
|
|
|
2008-03-29 09:39:26 +01:00
|
|
|
check_SCRIPTS += ver_test_4.sh
|
|
|
|
check_DATA += ver_test_4.syms
|
|
|
|
ver_test_4.syms: ver_test_4.so
|
2008-04-08 00:16:03 +02:00
|
|
|
$(TEST_READELF) -s $< >$@ 2>/dev/null
|
2008-03-27 07:11:57 +01:00
|
|
|
|
|
|
|
ver_test_5.so: ver_test_5.o $(srcdir)/ver_test_5.script ver_test_4.so gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_5.script ver_test_5.o ver_test_4.so
|
|
|
|
ver_test_5.o: ver_test_5.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
check_SCRIPTS += ver_test_5.sh
|
|
|
|
check_DATA += ver_test_5.syms
|
|
|
|
ver_test_5.syms: ver_test_5.so
|
2008-04-08 00:16:03 +02:00
|
|
|
$(TEST_READELF) -s $< >$@ 2>/dev/null
|
2008-03-27 07:11:57 +01:00
|
|
|
|
2008-03-27 19:19:09 +01:00
|
|
|
check_PROGRAMS += ver_test_6
|
|
|
|
ver_test_6_SOURCES = ver_test_6.c
|
|
|
|
ver_test_6_DEPENDENCIES = gcctestdir/ld ver_test_2.so
|
|
|
|
ver_test_6_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ver_test_6_LDADD = ver_test_2.so
|
|
|
|
|
2008-03-29 08:19:02 +01:00
|
|
|
ver_test_7.so: ver_test_4.o $(srcdir)/ver_test_4.script ver_test_7.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_4.script ver_test_4.o ver_test_7.o
|
|
|
|
ver_test_7.o: ver_test_7.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
check_SCRIPTS += ver_test_7.sh
|
|
|
|
check_DATA += ver_test_7.syms
|
|
|
|
ver_test_7.syms: ver_test_7.so
|
2008-04-08 00:16:03 +02:00
|
|
|
$(TEST_READELF) -s $< >$@ 2>/dev/null
|
2008-03-29 08:19:02 +01:00
|
|
|
|
2008-05-08 20:44:33 +02:00
|
|
|
check_PROGRAMS += ver_test_8
|
|
|
|
ver_test_8_SOURCES = two_file_test_main.cc
|
|
|
|
ver_test_8_DEPENDENCIES = gcctestdir/ld ver_test_8_1.so ver_test_8_2.so
|
|
|
|
ver_test_8_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ver_test_8_LDADD = ver_test_8_1.so ver_test_8_2.so
|
|
|
|
ver_test_8_1.so: two_file_test_1_pic.o two_file_test_1b_pic.o ver_test_8_2.so gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o ver_test_8_2.so
|
|
|
|
ver_test_8_2.so: two_file_test_2_pic.o $(srcdir)/ver_test_8.script gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_8.script two_file_test_2_pic.o
|
|
|
|
|
2008-07-23 16:36:09 +02:00
|
|
|
check_PROGRAMS += ver_test_9
|
|
|
|
ver_test_9_SOURCES = ver_test_main.cc
|
|
|
|
ver_test_9_DEPENDENCIES = gcctestdir/ld ver_test_9.so
|
|
|
|
ver_test_9_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ver_test_9_LDADD = ver_test_9.so
|
|
|
|
ver_test_9.so: ver_test_9.o ver_test_4.so ver_test_5.so gcctestdir/ld
|
2011-05-27 20:45:38 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-R,. ver_test_9.o ver_test_5.so ver_test_4.so
|
2008-07-23 16:36:09 +02:00
|
|
|
ver_test_9.o: ver_test_9.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
|
2008-07-24 01:44:02 +02:00
|
|
|
check_SCRIPTS += ver_test_10.sh
|
|
|
|
check_DATA += ver_test_10.syms
|
|
|
|
ver_test_10.syms: ver_test_10.so
|
|
|
|
$(TEST_READELF) -s $< >$@ 2>/dev/null
|
|
|
|
ver_test_10.so: gcctestdir/ld ver_test_2.o ver_test_10.script
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_10.script ver_test_2.o
|
|
|
|
|
2009-03-18 06:09:52 +01:00
|
|
|
check_PROGRAMS += ver_test_11
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += ver_test_11.a
|
2009-03-18 06:09:52 +01:00
|
|
|
ver_test_11_SOURCES = ver_test_main_2.cc
|
|
|
|
ver_test_11_DEPENDENCIES = gcctestdir/ld ver_test_11.a
|
|
|
|
ver_test_11_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ver_test_11_LDADD = ver_test_11.a
|
|
|
|
ver_test_11.a: ver_test_1.o ver_test_2.o ver_test_4.o
|
|
|
|
$(TEST_AR) rc $@ $^
|
|
|
|
|
2011-06-28 07:39:45 +02:00
|
|
|
check_PROGRAMS += ver_test_12
|
|
|
|
ver_test_12_SOURCES = ver_test_main_2.cc
|
|
|
|
ver_test_12_DEPENDENCIES = gcctestdir/ld ver_test_12.o
|
|
|
|
ver_test_12_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ver_test_12_LDADD = ver_test_12.o
|
|
|
|
ver_test_12.o: gcctestdir/ld ver_test_1.o ver_test_2.o ver_test_4.o
|
|
|
|
gcctestdir/ld -r -o $@ ver_test_1.o ver_test_2.o ver_test_4.o
|
|
|
|
|
Fix symbol versioning problems in PR 18703.
If a symbol is defined with ".symver foo,foo@VER", the assembler
creates two symbols in the object: one unversioned, and one with
the (non-default) version "VER". If foo is listed in a version
script, gold would then make the first of those symbols the
default version, and would ignore the second symbol as a
duplicate, without making it a non-default version. While this is
arguably reasonable behavior, it doesn't match Gnu ld behavior,
so this patch fixes that by allowing the second definition to
override the first by resetting the "default version" indication.
Several test cases from the Gnu ld testsuite also exposed another
related problem, where a symbol defined with ".symver foo,foo@",
placed into a shared library, is not handled properly by gold.
This patch also fixes that case, binding the symbol to the base
version.
gold/
PR gold/18703
* dynobj.cc (Versions::record_version): Handle symbol defined with
base version.
(Versions::symbol_section_contents): Likewise.
* symtab.h (Symbol::set_is_not_default): New class method.
(Symbol_table::resolve): Add is_default_version parameter.
(Symbol_table::should_override): Likewise.
* resolve.cc (Symbol_table::resolve): Add is_default_version parameter,
and pass to should_override. Adjust all callers and explicit
instantiations.
(Symbol_table::should_override): Add is_default_value parameter;
allow default version in a dynamic object to override existing
definition from same object.
* symtab.cc (Symbol_table::add_from_object): Handle case where same
symbol is defined as unversioned and non-default version in the same
object.
* testsuite/Makefile.am (ver_test_13): New test case.
* testsuite/Makefile.in: Regenerate.
* testsuite/ver_test_4.cc: Add test for symbol with base version.
* testsuite/ver_test_4.sh: Likewise.
* testsuite/ver_test_13.c: New source file.
* testsuite/ver_test_13.script: New version script.
* testsuite/ver_test_13.sh: New test case.
2015-07-28 00:09:08 +02:00
|
|
|
check_SCRIPTS += ver_test_13.sh
|
|
|
|
check_DATA += ver_test_13.syms
|
|
|
|
ver_test_13.syms: ver_test_13.so
|
|
|
|
$(TEST_READELF) -s $< >$@ 2>/dev/null
|
|
|
|
ver_test_13.so: gcctestdir/ld ver_test_13.o ver_test_13.script
|
|
|
|
$(LINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_13.script ver_test_13.o
|
|
|
|
ver_test_13.o: ver_test_13.c
|
|
|
|
$(COMPILE) -c -fpic -o $@ $<
|
|
|
|
|
2008-05-07 00:24:26 +02:00
|
|
|
check_PROGRAMS += protected_1
|
|
|
|
protected_1_SOURCES = \
|
|
|
|
protected_main_1.cc protected_main_2.cc protected_main_3.cc
|
|
|
|
protected_1_DEPENDENCIES = gcctestdir/ld protected_1.so
|
|
|
|
protected_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
protected_1_LDADD = protected_1.so
|
|
|
|
|
|
|
|
protected_1.so: gcctestdir/ld protected_1_pic.o protected_2_pic.o protected_3_pic.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared protected_1_pic.o protected_2_pic.o protected_3_pic.o
|
|
|
|
protected_1_pic.o: protected_1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
protected_2_pic.o: protected_2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
protected_3_pic.o: protected_3.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
|
|
|
|
check_PROGRAMS += protected_2
|
|
|
|
protected_2_SOURCES = protected_main_1.cc protected_3.cc
|
|
|
|
protected_2_DEPENDENCIES = gcctestdir/ld protected_1.so
|
|
|
|
protected_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
protected_2_LDADD = protected_1.so
|
|
|
|
|
2010-01-12 20:12:40 +01:00
|
|
|
check_DATA += protected_3.err
|
|
|
|
MOSTLYCLEANFILES += protected_3.err
|
|
|
|
protected_4_pic.o: protected_4.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
protected_3.err: protected_4_pic.o gcctestdir/ld
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -shared -o protected_4.so protected_4_pic.o "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -shared -o protected_4.so protected_4_pic.o 2>$@; then \
|
|
|
|
echo 1>&2 "Link of protected_4.so should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
|
2008-05-20 06:00:47 +02:00
|
|
|
check_PROGRAMS += relro_test
|
2010-10-16 02:37:25 +02:00
|
|
|
check_SCRIPTS += relro_test.sh
|
|
|
|
check_DATA += relro_test.stdout
|
2008-05-20 06:00:47 +02:00
|
|
|
relro_test_SOURCES = relro_test_main.cc
|
|
|
|
relro_test_DEPENDENCIES = gcctestdir/ld relro_test.so
|
|
|
|
relro_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
relro_test_LDADD = relro_test.so
|
|
|
|
relro_test.so: gcctestdir/ld relro_test_pic.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro relro_test_pic.o
|
|
|
|
relro_test_pic.o: relro_test.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
2010-10-16 02:37:25 +02:00
|
|
|
relro_test.stdout: relro_test.so
|
|
|
|
$(TEST_READELF) -SlW relro_test.so > relro_test.stdout
|
2008-05-20 06:00:47 +02:00
|
|
|
|
2011-07-14 00:47:08 +02:00
|
|
|
check_PROGRAMS += relro_now_test
|
|
|
|
relro_now_test_SOURCES = relro_test_main.cc
|
|
|
|
relro_now_test_DEPENDENCIES = gcctestdir/ld relro_now_test.so
|
|
|
|
relro_now_test_LDFLAGS = -Bgcctestdir -Wl,-R,. -Wl,-z,relro -Wl,-z,now
|
|
|
|
relro_now_test_LDADD = relro_now_test.so
|
|
|
|
relro_now_test.so: gcctestdir/ld relro_test_pic.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro -Wl,-z,now relro_test_pic.o
|
|
|
|
|
2010-08-02 13:59:11 +02:00
|
|
|
check_PROGRAMS += relro_strip_test
|
|
|
|
relro_strip_test_SOURCES = relro_test_main.cc
|
|
|
|
relro_strip_test_DEPENDENCIES = gcctestdir/ld relro_strip_test.so
|
|
|
|
relro_strip_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
relro_strip_test_LDADD = relro_strip_test.so
|
|
|
|
relro_strip_test.so: relro_test.so
|
|
|
|
$(TEST_STRIP) -o $@ $<
|
|
|
|
|
2008-08-13 09:37:46 +02:00
|
|
|
check_PROGRAMS += relro_script_test
|
|
|
|
relro_script_test_SOURCES = relro_test_main.cc
|
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro -Wl,-T,$(srcdir)/relro_script_test.t relro_test_pic.o
|
2008-08-13 09:37:46 +02:00
|
|
|
|
2008-01-09 20:57:45 +01:00
|
|
|
check_PROGRAMS += script_test_1
|
2015-07-22 12:36:42 +02:00
|
|
|
script_test_1_SOURCES = script_test_1a.cc script_test_1b.cc
|
2008-01-09 20:57:45 +01:00
|
|
|
script_test_1_DEPENDENCIES = gcctestdir/ld script_test_1.t
|
2013-10-12 00:05:16 +02:00
|
|
|
script_test_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_1.t
|
2009-12-06 00:22:54 +01:00
|
|
|
script_test_1_LDADD =
|
2008-01-09 20:57:45 +01:00
|
|
|
|
2008-02-04 06:43:05 +01:00
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
script_test_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_2.t
|
2009-12-06 00:22:54 +01:00
|
|
|
script_test_2_LDADD =
|
2008-02-04 06:43:05 +01:00
|
|
|
|
2008-02-07 02:51:25 +01:00
|
|
|
check_PROGRAMS += justsyms
|
|
|
|
justsyms_SOURCES = justsyms_1.cc
|
|
|
|
justsyms_DEPENDENCIES = gcctestdir/ld justsyms_2r.o
|
|
|
|
justsyms_LDFLAGS = -Bgcctestdir/ -Wl,-R,justsyms_2r.o
|
2009-12-06 00:22:54 +01:00
|
|
|
justsyms_LDADD =
|
2008-02-07 02:51:25 +01:00
|
|
|
justsyms_2.o: justsyms_2.cc
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
2008-04-11 22:44:52 +02:00
|
|
|
justsyms_2r.o: justsyms_2.o gcctestdir/ld $(srcdir)/justsyms.t
|
2013-10-12 00:16:34 +02:00
|
|
|
gcctestdir/ld -o $@ -r -T $(srcdir)/justsyms.t justsyms_2.o
|
2008-02-07 02:51:25 +01:00
|
|
|
|
2011-08-01 22:09:25 +02:00
|
|
|
check_PROGRAMS += justsyms_exec
|
|
|
|
justsyms_exec_SOURCES = justsyms_exec.c
|
|
|
|
justsyms_exec_DEPENDENCIES = gcctestdir/ld justsyms_lib
|
|
|
|
justsyms_exec_LDFLAGS = -Bgcctestdir/ -Wl,-R,justsyms_lib
|
|
|
|
justsyms_exec_LDADD =
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += justsyms_lib
|
2011-08-01 22:09:25 +02:00
|
|
|
justsyms_lib.o: justsyms_lib.c
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
justsyms_lib: justsyms_lib.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -o $@ -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
|
|
|
|
|
2008-02-08 08:06:58 +01:00
|
|
|
check_PROGRAMS += binary_test
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += binary.txt
|
2008-02-08 08:06:58 +01:00
|
|
|
binary_test_SOURCES = binary_test.cc
|
|
|
|
binary_test_DEPENDENCIES = gcctestdir/ld binary.txt
|
|
|
|
binary_test_LDFLAGS = -Bgcctestdir/ -Wl,--format,binary,binary.txt,--format,elf
|
2009-12-06 00:22:54 +01:00
|
|
|
binary_test_LDADD =
|
2008-02-08 08:06:58 +01:00
|
|
|
# Copy the file to the build directory to avoid worrying about the
|
|
|
|
# full pathname in the generated symbols.
|
|
|
|
binary.txt: $(srcdir)/binary.in
|
|
|
|
rm -f $@
|
|
|
|
$(LN_S) $< $@
|
|
|
|
|
2008-01-16 00:41:28 +01:00
|
|
|
check_SCRIPTS += ver_matching_test.sh
|
|
|
|
check_DATA += ver_matching_test.stdout
|
|
|
|
MOSTLYCLEANFILES += ver_matching_test.stdout
|
2010-12-15 16:35:27 +01:00
|
|
|
ver_matching_def.so: ver_matching_def_pic.o $(srcdir)/version_script.map gcctestdir/ld
|
|
|
|
$(CXXLINK) -O0 -Bgcctestdir/ -shared ver_matching_def_pic.o -Wl,--version-script=$(srcdir)/version_script.map
|
|
|
|
ver_matching_def_pic.o: ver_matching_def.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -fpic -o $@ $<
|
2008-01-16 00:41:28 +01:00
|
|
|
ver_matching_test.stdout: ver_matching_def.so
|
2013-10-12 00:16:34 +02:00
|
|
|
$(TEST_OBJDUMP) -T ver_matching_def.so | $(TEST_CXXFILT) > ver_matching_test.stdout
|
2008-02-04 23:54:31 +01:00
|
|
|
|
|
|
|
check_PROGRAMS += script_test_3
|
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_3.t
|
2008-02-04 23:54:31 +01:00
|
|
|
script_test_3.stdout: script_test_3
|
2008-04-10 03:02:46 +02:00
|
|
|
$(TEST_READELF) -SlW script_test_3 > script_test_3.stdout
|
2008-01-16 00:41:28 +01:00
|
|
|
|
2010-03-24 19:12:48 +01:00
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
tls_phdrs_script_test_LDFLAGS = $(tls_test_LDFLAGS) -Wl,-T,$(srcdir)/script_test_3.t
|
2010-03-24 19:12:48 +01:00
|
|
|
tls_phdrs_script_test_LDADD = $(tls_test_LDADD)
|
|
|
|
|
2008-04-16 00:50:37 +02:00
|
|
|
check_SCRIPTS += script_test_4.sh
|
|
|
|
check_DATA += script_test_4.stdout
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += script_test_4
|
2008-04-16 00:50:37 +02:00
|
|
|
script_test_4: basic_test.o gcctestdir/ld $(srcdir)/script_test_4.t
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_4.t
|
2008-04-16 00:50:37 +02:00
|
|
|
script_test_4.stdout: script_test_4
|
|
|
|
$(TEST_READELF) -SlW script_test_4 > script_test_4.stdout
|
|
|
|
|
2010-03-23 22:06:10 +01:00
|
|
|
check_PROGRAMS += tls_script_test
|
|
|
|
tls_script_test_SOURCES = $(tls_test_SOURCES)
|
|
|
|
tls_script_test_DEPENDENCIES = $(tls_test_DEPENDENCIES) $(srcdir)/script_test_4.t
|
2013-10-12 00:05:16 +02:00
|
|
|
tls_script_test_LDFLAGS = $(tls_test_LDFLAGS) -Wl,-T,$(srcdir)/script_test_4.t
|
2010-03-23 22:06:10 +01:00
|
|
|
tls_script_test_LDADD = $(tls_test_LDADD)
|
|
|
|
|
2009-02-25 20:05:21 +01:00
|
|
|
check_SCRIPTS += script_test_5.sh
|
|
|
|
check_DATA += script_test_5.stdout
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += script_test_5
|
2009-02-25 20:05:21 +01:00
|
|
|
script_test_5: script_test_5.o gcctestdir/ld $(srcdir)/script_test_5.t
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ script_test_5.o -Wl,-T,$(srcdir)/script_test_5.t
|
2009-02-25 20:05:21 +01:00
|
|
|
script_test_5.stdout: script_test_5
|
|
|
|
$(TEST_READELF) -SW script_test_5 > script_test_5.stdout
|
|
|
|
|
2009-10-16 Doug Kwan <dougkwan@google.com>
* expression.cc (class Segment_start_expression): New class definition.
(Segment_start_expression::value): New method definition.
(script_exp_function_segment_start): Return a new
Segment_start_expression.
* gold/script-c.h (script_saw_segment_start_expression): New function
prototype.
* script-sections.cc (Script_sections::Script_sections): Initialize
SAW_SEGMENT_START_EXPRESSION_ to false.
(Script_sections::set_section_addresses): Use -Ttext, -Tdata
and -Tbbs options to specify section addresses if given in
command line and no SEGMENT_START expression is seen in a script.
* script-sections.h (Script_sections::saw_segment_start_expression,
Script_sections::set_saw_segment_start_expression): New method
definition.
(Script_sections::saw_segment_start_expression_): New data member
declaration.
* script.cc (script_saw_segment_start_expression): New function.
* yyscript.y (SEGMENT_START): Call script_saw_segment_start_expression.
* testsuite/Makefile.am (check_SCRIPTS): Add script_test_6.sh,
script_test_7.sh and script_test_8.sh.
(check_DATA): Add script_test_6.stdout, script_test_7.stdout and
script_test_8.stdout.
(MOSTLYCLEANFILES): Add script_test_6, script_test_7 and script_test_8.
(script_test_6, script_test_6.stdout, script_test_7,
script_test_7.stdout, script_test_8, script_test_8.stdout): New rules.
* Makefile.in: Regenerate.
* testsuite/script_test_6.sh: New file.
* testsuite/script_test_6.t: Same.
* testsuite/script_test_7.sh: Same.
* testsuite/script_test_7.t: Same.
* testsuite/script_test_8.sh: Same.
2009-10-16 20:56:07 +02:00
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_6.t \
|
2009-10-16 Doug Kwan <dougkwan@google.com>
* expression.cc (class Segment_start_expression): New class definition.
(Segment_start_expression::value): New method definition.
(script_exp_function_segment_start): Return a new
Segment_start_expression.
* gold/script-c.h (script_saw_segment_start_expression): New function
prototype.
* script-sections.cc (Script_sections::Script_sections): Initialize
SAW_SEGMENT_START_EXPRESSION_ to false.
(Script_sections::set_section_addresses): Use -Ttext, -Tdata
and -Tbbs options to specify section addresses if given in
command line and no SEGMENT_START expression is seen in a script.
* script-sections.h (Script_sections::saw_segment_start_expression,
Script_sections::set_saw_segment_start_expression): New method
definition.
(Script_sections::saw_segment_start_expression_): New data member
declaration.
* script.cc (script_saw_segment_start_expression): New function.
* yyscript.y (SEGMENT_START): Call script_saw_segment_start_expression.
* testsuite/Makefile.am (check_SCRIPTS): Add script_test_6.sh,
script_test_7.sh and script_test_8.sh.
(check_DATA): Add script_test_6.stdout, script_test_7.stdout and
script_test_8.stdout.
(MOSTLYCLEANFILES): Add script_test_6, script_test_7 and script_test_8.
(script_test_6, script_test_6.stdout, script_test_7,
script_test_7.stdout, script_test_8, script_test_8.stdout): New rules.
* Makefile.in: Regenerate.
* testsuite/script_test_6.sh: New file.
* testsuite/script_test_6.t: Same.
* testsuite/script_test_7.sh: Same.
* testsuite/script_test_7.t: Same.
* testsuite/script_test_8.sh: Same.
2009-10-16 20:56:07 +02:00
|
|
|
-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
|
|
|
|
|
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_7.t
|
2009-10-16 Doug Kwan <dougkwan@google.com>
* expression.cc (class Segment_start_expression): New class definition.
(Segment_start_expression::value): New method definition.
(script_exp_function_segment_start): Return a new
Segment_start_expression.
* gold/script-c.h (script_saw_segment_start_expression): New function
prototype.
* script-sections.cc (Script_sections::Script_sections): Initialize
SAW_SEGMENT_START_EXPRESSION_ to false.
(Script_sections::set_section_addresses): Use -Ttext, -Tdata
and -Tbbs options to specify section addresses if given in
command line and no SEGMENT_START expression is seen in a script.
* script-sections.h (Script_sections::saw_segment_start_expression,
Script_sections::set_saw_segment_start_expression): New method
definition.
(Script_sections::saw_segment_start_expression_): New data member
declaration.
* script.cc (script_saw_segment_start_expression): New function.
* yyscript.y (SEGMENT_START): Call script_saw_segment_start_expression.
* testsuite/Makefile.am (check_SCRIPTS): Add script_test_6.sh,
script_test_7.sh and script_test_8.sh.
(check_DATA): Add script_test_6.stdout, script_test_7.stdout and
script_test_8.stdout.
(MOSTLYCLEANFILES): Add script_test_6, script_test_7 and script_test_8.
(script_test_6, script_test_6.stdout, script_test_7,
script_test_7.stdout, script_test_8, script_test_8.stdout): New rules.
* Makefile.in: Regenerate.
* testsuite/script_test_6.sh: New file.
* testsuite/script_test_6.t: Same.
* testsuite/script_test_7.sh: Same.
* testsuite/script_test_7.t: Same.
* testsuite/script_test_8.sh: Same.
2009-10-16 20:56:07 +02:00
|
|
|
script_test_7.stdout: script_test_7
|
|
|
|
$(TEST_READELF) -SlW script_test_7 > script_test_7.stdout
|
|
|
|
|
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o -Wl,-T,$(srcdir)/script_test_7.t \
|
2009-10-16 Doug Kwan <dougkwan@google.com>
* expression.cc (class Segment_start_expression): New class definition.
(Segment_start_expression::value): New method definition.
(script_exp_function_segment_start): Return a new
Segment_start_expression.
* gold/script-c.h (script_saw_segment_start_expression): New function
prototype.
* script-sections.cc (Script_sections::Script_sections): Initialize
SAW_SEGMENT_START_EXPRESSION_ to false.
(Script_sections::set_section_addresses): Use -Ttext, -Tdata
and -Tbbs options to specify section addresses if given in
command line and no SEGMENT_START expression is seen in a script.
* script-sections.h (Script_sections::saw_segment_start_expression,
Script_sections::set_saw_segment_start_expression): New method
definition.
(Script_sections::saw_segment_start_expression_): New data member
declaration.
* script.cc (script_saw_segment_start_expression): New function.
* yyscript.y (SEGMENT_START): Call script_saw_segment_start_expression.
* testsuite/Makefile.am (check_SCRIPTS): Add script_test_6.sh,
script_test_7.sh and script_test_8.sh.
(check_DATA): Add script_test_6.stdout, script_test_7.stdout and
script_test_8.stdout.
(MOSTLYCLEANFILES): Add script_test_6, script_test_7 and script_test_8.
(script_test_6, script_test_6.stdout, script_test_7,
script_test_7.stdout, script_test_8, script_test_8.stdout): New rules.
* Makefile.in: Regenerate.
* testsuite/script_test_6.sh: New file.
* testsuite/script_test_6.t: Same.
* testsuite/script_test_7.sh: Same.
* testsuite/script_test_7.t: Same.
* testsuite/script_test_8.sh: Same.
2009-10-16 20:56:07 +02:00
|
|
|
-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
|
|
|
|
|
2010-05-19 19:49:19 +02:00
|
|
|
check_SCRIPTS += script_test_9.sh
|
|
|
|
check_DATA += script_test_9.stdout
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += script_test_9
|
2010-05-19 19:49:19 +02:00
|
|
|
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
|
2013-10-12 00:05:16 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ script_test_9.o -Wl,-T,$(srcdir)/script_test_9.t
|
2010-05-19 19:49:19 +02:00
|
|
|
script_test_9.stdout: script_test_9
|
|
|
|
$(TEST_READELF) -lW script_test_9 > script_test_9.stdout
|
|
|
|
|
2013-04-15 18:34:12 +02:00
|
|
|
# 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
|
2015-07-22 12:36:42 +02:00
|
|
|
script_test_11_r.o: gcctestdir/ld $(srcdir)/script_test_11.t script_test_11a.o script_test_11b.o
|
|
|
|
gcctestdir/ld -r -o $@ -T $(srcdir)/script_test_11.t script_test_11a.o script_test_11b.o
|
|
|
|
script_test_11a.o: script_test_11a.c
|
|
|
|
$(COMPILE) -c -g -o $@ $<
|
|
|
|
script_test_11b.o: script_test_11b.c
|
2013-04-15 18:34:12 +02:00
|
|
|
$(COMPILE) -c -g -o $@ $<
|
2010-05-19 19:49:19 +02:00
|
|
|
|
Fix gold to group sections correctly via linker script.
In PR 15370, it is noted that gold does not distinguish between
"*(.foo .bar)" and "*(.foo) *(.bar)" in linker scripts. In both
cases, gold groups all .foo sections together, followed by all
.bar sections, whereas in the first case, it should collect all
.foo and .bar sections in the order seen.
If you add sort specs, the Gnu linker has some bizarre corner
cases that I do not try to replicate. In particular,
"*(SORT_BY_NAME(.foo) SORT_BY_NAME(.bar))" does the same thing
as "*(.foo) *(.bar)". But if you apply a sort spec
to just one of several patterns, say, "*(SORT_BY_NAME(.foo) .bar)",
the Gnu linker will collect any .bar section it sees before the
first .foo, then all .foo sections, then all remaining .bar
sections. With this patch, if any of the input patterns have a
sort spec, gold will group them all as it did before; e.g.,
all .foo sections followed by all .bar sections.
2015-06-03 Cary Coutant <ccoutant@gmail.com>
gold/
PR gold/15370
* script-sections.cc
(Output_section_element_input::set_section_addresses): When there
are several patterns with no sort spec, put all sections in the same
bin.
* testsuite/Makefile.am (script_test_12): New testcase.
(script_test_12i): New testcase.
* testsuite/Makefile.in: Regenerate.
* testsuite/script_test_12.t: New test linker script.
* testsuite/script_test_12i.t: New test linker script.
* testsuite/script_test_12a.c: New test source file.
* testsuite/script_test_12b.c: New test source file.
2015-06-04 04:11:42 +02:00
|
|
|
# Test difference between "*(a b)" and "*(a) *(b)" in input section spec.
|
|
|
|
check_PROGRAMS += script_test_12
|
|
|
|
script_test_12: gcctestdir/ld $(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
|
|
|
|
$(LINK) -Bgcctestdir/ -Wl,-T,$(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
|
|
|
|
|
|
|
|
check_PROGRAMS += script_test_12i
|
|
|
|
script_test_12i: gcctestdir/ld $(srcdir)/script_test_12i.t script_test_12a.o script_test_12b.o
|
|
|
|
$(LINK) -Bgcctestdir/ -Wl,-T,$(srcdir)/script_test_12i.t script_test_12a.o script_test_12b.o
|
2015-06-11 21:41:36 +02:00
|
|
|
script_test_12a.o: script_test_12a.c
|
|
|
|
$(COMPILE) -O0 -c -o $@ $<
|
|
|
|
script_test_12b.o: script_test_12b.c
|
|
|
|
$(COMPILE) -O0 -c -o $@ $<
|
Fix gold to group sections correctly via linker script.
In PR 15370, it is noted that gold does not distinguish between
"*(.foo .bar)" and "*(.foo) *(.bar)" in linker scripts. In both
cases, gold groups all .foo sections together, followed by all
.bar sections, whereas in the first case, it should collect all
.foo and .bar sections in the order seen.
If you add sort specs, the Gnu linker has some bizarre corner
cases that I do not try to replicate. In particular,
"*(SORT_BY_NAME(.foo) SORT_BY_NAME(.bar))" does the same thing
as "*(.foo) *(.bar)". But if you apply a sort spec
to just one of several patterns, say, "*(SORT_BY_NAME(.foo) .bar)",
the Gnu linker will collect any .bar section it sees before the
first .foo, then all .foo sections, then all remaining .bar
sections. With this patch, if any of the input patterns have a
sort spec, gold will group them all as it did before; e.g.,
all .foo sections followed by all .bar sections.
2015-06-03 Cary Coutant <ccoutant@gmail.com>
gold/
PR gold/15370
* script-sections.cc
(Output_section_element_input::set_section_addresses): When there
are several patterns with no sort spec, put all sections in the same
bin.
* testsuite/Makefile.am (script_test_12): New testcase.
(script_test_12i): New testcase.
* testsuite/Makefile.in: Regenerate.
* testsuite/script_test_12.t: New test linker script.
* testsuite/script_test_12i.t: New test linker script.
* testsuite/script_test_12a.c: New test source file.
* testsuite/script_test_12b.c: New test source file.
2015-06-04 04:11:42 +02:00
|
|
|
|
2016-06-28 22:56:05 +02:00
|
|
|
# Test for SORT_BY_INIT_PRIORITY.
|
|
|
|
check_SCRIPTS += script_test_14.sh
|
|
|
|
check_DATA += script_test_14.stdout
|
|
|
|
MOSTLYCLEANFILES += script_test_14
|
|
|
|
script_test_14.o: script_test_14.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
script_test_14: $(srcdir)/script_test_14.t script_test_14.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -o $@ script_test_14.o -T $(srcdir)/script_test_14.t
|
|
|
|
script_test_14.stdout: script_test_14
|
|
|
|
$(TEST_OBJDUMP) -s script_test_14 > $@
|
|
|
|
|
2008-11-06 08:23:31 +01:00
|
|
|
# Test --dynamic-list, --dynamic-list-data, --dynamic-list-cpp-new,
|
|
|
|
# and --dynamic-list-cpp-typeinfo
|
|
|
|
|
|
|
|
check_SCRIPTS += dynamic_list.sh
|
|
|
|
check_DATA += dynamic_list.stdout
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += dynamic_list dynamic_list.stdout
|
2008-11-06 08:23:31 +01:00
|
|
|
dynamic_list: basic_test.o gcctestdir/ld $(srcdir)/dynamic_list.t
|
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o \
|
|
|
|
-Wl,--dynamic-list $(srcdir)/dynamic_list.t \
|
|
|
|
-Wl,--dynamic-list-data \
|
|
|
|
-Wl,--dynamic-list-cpp-new \
|
|
|
|
-Wl,--dynamic-list-cpp-typeinfo
|
|
|
|
dynamic_list.stdout: dynamic_list
|
2010-01-11 19:34:48 +01:00
|
|
|
$(TEST_READELF) -W --dyn-syms dynamic_list > dynamic_list.stdout
|
2008-11-06 08:23:31 +01:00
|
|
|
|
2014-02-05 23:01:52 +01:00
|
|
|
check_PROGRAMS += dynamic_list_2
|
|
|
|
dynamic_list_2_SOURCES = dynamic_list_2.cc
|
|
|
|
dynamic_list_2_DEPENDENCIES = gcctestdir/ld dynamic_list_lib1.so dynamic_list_lib2.so
|
|
|
|
dynamic_list_2_LDFLAGS = -Bgcctestdir/ -L. -Wl,-R,. -Wl,--no-as-needed
|
|
|
|
dynamic_list_2_LDADD = dynamic_list_lib1.so dynamic_list_lib2.so
|
|
|
|
|
|
|
|
dynamic_list_lib1.so: gcctestdir/ld dynamic_list_lib1.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared dynamic_list_lib1.o
|
|
|
|
dynamic_list_lib1.o: dynamic_list_lib1.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
|
|
|
|
dynamic_list_lib2.so: gcctestdir/ld dynamic_list_lib2.o $(srcdir)/dynamic_list_2.t
|
Fix --dynamic-list so that symbols not in the list are still exported.
In PR 13577, the complaint was that -Bsymbolic was overriding the binding
behavior for symbols listed in the --dynamic-list by setting the DT_SYMBOLIC
tag in the dynamic table. In reading the Gnu ld manual, I decided that
--dynamic-list should be mutually exclusive of -Bsymbolic, and modified
gold so that --dynamic-list would treat symbols listed as preemptible,
and all other symbols as internally bound. I was wrong.
PR 16992 shows that with --dynamic-list (and not -Bsymbolic), a symbol
not listed in the dynamic list is being internally bound within the
shared library, but because it's still in the dynamic symbol table, we
expose it to a COPY relocation, and things go really bad from there.
(I can reproduce the same failure, simply by turning on -Bsymbolic-functions
with the Gnu linker. Even though the symbol is bound internally, it's
still exported to the dynamic symbol table, and is exposed to a COPY
relocation.)
I've backed out part of the fix for PR 13577, and -Bsymbolic (or
-Bsymbolic-functions) can now be used with --dynamic-list, but if the
two are used together, we do not set DT_SYMBOLIC or DF_SYMBOLIC
(this matches Gnu ld behavior). We now treat symbols listed in the
dynamic list as premptible, but we do not automatically treat symbols
not listed there as non-premptible.
gold/
PR gold/13577
PR gold/16992
* layout.cc (Layout::finish_dynamic_section): Don't set DT_SYMBOLIC or
DF_SYMBOLIC if --dynamic-list option is used.
* options.cc (General_options::finalize): --dynamic-list is not
mutually exclusive with -Bsymbolic.
* symtab.h (Symbol::is_preemptible): Don't exclude dynamic symbols not
listed in --dynamic-list.
* testsuite/Makefile.am (dynamic_list_lib2.so): Add
-Bsymbolic-functions.
* testsuite/Makefile.in: Regenerate.
2015-02-17 07:15:12 +01:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-Bsymbolic-functions -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
|
2014-02-05 23:01:52 +01:00
|
|
|
dynamic_list_lib2.o: dynamic_list_lib2.cc
|
|
|
|
$(CXXCOMPILE) -c -fpic -o $@ $<
|
|
|
|
|
2008-09-29 23:23:02 +02:00
|
|
|
check_PROGRAMS += thin_archive_test_1
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += libthin1.a libthin3.a libthinall.a \
|
|
|
|
alt/thin_archive_test_2.o alt/thin_archive_test_4.o \
|
|
|
|
alt/libthin2.a alt/libthin4.a
|
2008-09-29 23:23:02 +02:00
|
|
|
thin_archive_test_1_SOURCES = thin_archive_main.cc
|
|
|
|
thin_archive_test_1_DEPENDENCIES = gcctestdir/ld libthin1.a alt/libthin2.a
|
|
|
|
thin_archive_test_1_LDFLAGS = -Bgcctestdir/ -Lalt
|
|
|
|
thin_archive_test_1_LDADD = libthin1.a -lthin2
|
|
|
|
|
|
|
|
check_PROGRAMS += thin_archive_test_2
|
|
|
|
thin_archive_test_2_SOURCES = thin_archive_main.cc
|
|
|
|
thin_archive_test_2_DEPENDENCIES = gcctestdir/ld libthinall.a
|
|
|
|
thin_archive_test_2_LDFLAGS = -Bgcctestdir/ -L.
|
|
|
|
thin_archive_test_2_LDADD = -lthinall
|
|
|
|
|
|
|
|
libthin1.a: thin_archive_test_1.o alt/thin_archive_test_2.o
|
|
|
|
rm -f $@
|
|
|
|
$(TEST_AR) crT $@ $^
|
|
|
|
alt/libthin2.a: thin_archive_test_3.o alt/thin_archive_test_4.o
|
|
|
|
rm -f $@
|
|
|
|
$(TEST_AR) crT $@ $^
|
|
|
|
libthin3.a: thin_archive_test_1.o alt/thin_archive_test_4.o
|
|
|
|
rm -f $@
|
|
|
|
$(TEST_AR) crT $@ $^
|
|
|
|
alt/libthin4.a: alt/thin_archive_test_2.o thin_archive_test_3.o
|
|
|
|
rm -f $@
|
|
|
|
$(TEST_AR) crT $@ $^
|
|
|
|
libthinall.a: libthin3.a alt/libthin4.a
|
|
|
|
rm -f $@
|
|
|
|
$(TEST_AR) crT $@ $^
|
|
|
|
alt/thin_archive_test_2.o: thin_archive_test_2.cc
|
|
|
|
test -d alt || mkdir -p alt
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
alt/thin_archive_test_4.o: thin_archive_test_4.cc
|
|
|
|
test -d alt || mkdir -p alt
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
|
2008-09-20 00:54:57 +02:00
|
|
|
if PLUGINS
|
|
|
|
|
|
|
|
check_PROGRAMS += plugin_test_1
|
|
|
|
check_SCRIPTS += plugin_test_1.sh
|
|
|
|
check_DATA += plugin_test_1.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_1.err
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_1: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
|
2008-09-20 00:54:57 +02:00
|
|
|
plugin_test_1.err: plugin_test_1
|
|
|
|
@touch plugin_test_1.err
|
|
|
|
|
|
|
|
check_PROGRAMS += plugin_test_2
|
|
|
|
check_SCRIPTS += plugin_test_2.sh
|
|
|
|
check_DATA += plugin_test_2.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_2.err
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_2: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_shared_2.so gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,-R,.,--plugin,"./plugin_test.so" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_shared_2.so 2>plugin_test_2.err
|
2008-09-20 00:54:57 +02:00
|
|
|
plugin_test_2.err: plugin_test_2
|
|
|
|
@touch plugin_test_2.err
|
|
|
|
|
2008-12-24 00:46:55 +01:00
|
|
|
check_PROGRAMS += plugin_test_3
|
|
|
|
check_SCRIPTS += plugin_test_3.sh
|
|
|
|
check_DATA += plugin_test_3.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_3.err
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_3: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--export-dynamic -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_3.err
|
2008-12-24 00:46:55 +01:00
|
|
|
plugin_test_3.err: plugin_test_3
|
|
|
|
@touch plugin_test_3.err
|
|
|
|
|
2009-01-15 02:29:25 +01:00
|
|
|
check_PROGRAMS += plugin_test_4
|
|
|
|
check_SCRIPTS += plugin_test_4.sh
|
|
|
|
check_DATA += plugin_test_4.err
|
2009-09-16 22:57:27 +02:00
|
|
|
MOSTLYCLEANFILES += plugin_test_4.a plugin_test_4.err
|
2009-01-15 02:29:25 +01:00
|
|
|
plugin_test_4: two_file_test_main.o plugin_test_4.a gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o -Wl,--whole-archive,plugin_test_4.a,--no-whole-archive 2>plugin_test_4.err
|
|
|
|
plugin_test_4.err: plugin_test_4
|
|
|
|
@touch plugin_test_4.err
|
|
|
|
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_4.a: two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms
|
2009-01-15 02:29:25 +01:00
|
|
|
$(TEST_AR) cr $@ $^
|
|
|
|
|
2009-10-28 01:32:12 +01:00
|
|
|
check_PROGRAMS += plugin_test_5
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_5: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms unused.o.syms gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv",--gc-sections two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms unused.o.syms
|
2009-10-28 01:32:12 +01:00
|
|
|
|
2010-04-06 23:56:24 +02:00
|
|
|
check_PROGRAMS += plugin_test_6
|
|
|
|
check_SCRIPTS += plugin_test_6.sh
|
|
|
|
check_DATA += plugin_test_6.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_6.err
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_6: plugin_common_test_1.o.syms plugin_common_test_2.o.syms gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so" plugin_common_test_1.o.syms plugin_common_test_2.o.syms 2>plugin_test_6.err
|
2010-04-06 23:56:24 +02:00
|
|
|
plugin_test_6.err: plugin_test_6
|
|
|
|
@touch plugin_test_6.err
|
|
|
|
|
2010-05-26 17:47:39 +02:00
|
|
|
check_PROGRAMS += plugin_test_7
|
|
|
|
check_SCRIPTS += plugin_test_7.sh
|
2015-02-04 04:54:57 +01:00
|
|
|
check_DATA += plugin_test_7.err plugin_test_7.o.syms
|
2010-05-26 17:47:39 +02:00
|
|
|
MOSTLYCLEANFILES += plugin_test_7.err
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_7: plugin_test_7_1.o plugin_test_7_1.o.syms plugin_test_7_2.o gcctestdir/ld plugin_test.so
|
|
|
|
$(LINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--gc-sections,--print-gc-sections plugin_test_7_1.o.syms plugin_test_7_2.o 2>plugin_test_7.err
|
|
|
|
plugin_test_7.o.syms: plugin_test_7
|
2010-05-26 17:47:39 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
plugin_test_7_1.o: plugin_test_7_1.c
|
|
|
|
$(COMPILE) -DLTO -O0 -c -ffunction-sections -fdata-sections -o $@ $<
|
|
|
|
plugin_test_7_1_orig.o: plugin_test_7_1.c
|
|
|
|
$(COMPILE) -O0 -c -ffunction-sections -fdata-sections -o $@ $<
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_7_1.o.syms: plugin_test_7_1_orig.o
|
2010-05-26 17:47:39 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
plugin_test_7_2.o: plugin_test_7_2.c
|
|
|
|
$(COMPILE) -O0 -c -ffunction-sections -fdata-sections -o $@ $<
|
|
|
|
plugin_test_7.err: plugin_test_7
|
|
|
|
|
2010-06-10 19:20:27 +02:00
|
|
|
# Test plugins with -r.
|
|
|
|
check_PROGRAMS += plugin_test_8
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_8.o: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o ../ld-new plugin_test.so
|
|
|
|
../ld-new -r -o $@ --no-demangle --plugin "./plugin_test.so" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o
|
2010-06-10 19:20:27 +02:00
|
|
|
plugin_test_8: plugin_test_8.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle plugin_test_8.o
|
|
|
|
|
|
|
|
# Test that symbols known in the IR file but not in the replacement file
|
|
|
|
# produce an unresolved symbol error.
|
|
|
|
check_DATA += plugin_test_9.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_9.err
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_9.err: two_file_test_main.o two_file_test_1c.o.syms two_file_test_2.o.syms gcctestdir/ld plugin_test.so
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -o plugin_test_9 -Wl,--no-demangle,--plugin,"./plugin_test.so" two_file_test_main.o two_file_test_1c.o.syms two_file_test_2.o.syms "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -o plugin_test_9 -Wl,--no-demangle,--plugin,"./plugin_test.so" two_file_test_main.o two_file_test_1c.o.syms two_file_test_2.o.syms 2>$@; then \
|
2010-06-10 19:20:27 +02:00
|
|
|
echo 1>&2 "Link of plugin_test_9 should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
# Make a .syms file that claims to define the symbol _Z4t16av.
|
2015-02-04 04:54:57 +01:00
|
|
|
two_file_test_1c.o.syms: two_file_test_1.o.syms two_file_test_1c.o
|
|
|
|
cp two_file_test_1.o.syms $@.tmp
|
|
|
|
grep "_Z4t16av" two_file_test_1b.o.syms >> $@.tmp
|
2010-06-10 19:20:27 +02:00
|
|
|
mv -f $@.tmp $@
|
|
|
|
# Make a copy of two_file_test_1.o, which does not define the symbol _Z4t16av.
|
|
|
|
MOSTLYCLEANFILES += two_file_test_1c.o
|
|
|
|
two_file_test_1c.o: two_file_test_1.o
|
|
|
|
cp two_file_test_1.o $@
|
|
|
|
|
2016-03-22 03:07:55 +01:00
|
|
|
# As above, but check COMDAT case, where a non-IR file contains a duplicate
|
|
|
|
# of a COMDAT group in an IR file.
|
|
|
|
check_DATA += plugin_test_9b.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_9b.err
|
|
|
|
plugin_test_9b.err: plugin_test_9b_ir.o.syms plugin_test_9b_ir.o plugin_test_9b_elf.o gcctestdir/ld plugin_test.so
|
|
|
|
@echo $(CXXLINK) -Bgcctestdir/ -o plugin_test_9b -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_ZN1A5printEv" plugin_test_9b_ir.o plugin_test_9b_elf.o "2>$@"
|
|
|
|
@if $(CXXLINK) -Bgcctestdir/ -o plugin_test_9b -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_ZN1A5printEv" plugin_test_9b_ir.o plugin_test_9b_elf.o 2>$@; then \
|
|
|
|
echo 1>&2 "Link of plugin_test_9b should have failed"; \
|
|
|
|
rm -f $@; \
|
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
# Make a .syms file that claims to define a method in class A in a COMDAT group.
|
|
|
|
# The real plugin_test_9b_ir.o will be compiled without the -D, and will not
|
|
|
|
# define any methods in class A.
|
|
|
|
plugin_test_9b_ir.o.syms: plugin_test_9b_ir_witha.o
|
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
plugin_test_9b_ir_witha.o: plugin_test_9b_ir.cc
|
|
|
|
$(CXXCOMPILE) -c -DUSE_CLASS_A -o $@ $<
|
|
|
|
|
2014-09-18 19:58:16 +02:00
|
|
|
check_PROGRAMS += plugin_test_10
|
|
|
|
check_SCRIPTS += plugin_test_10.sh
|
|
|
|
check_DATA += plugin_test_10.sections
|
|
|
|
MOSTLYCLEANFILES += plugin_test_10.sections
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_10: plugin_common_test_1.o.syms plugin_common_test_2.o gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so" plugin_common_test_1.o.syms plugin_common_test_2.o
|
2014-09-18 19:58:16 +02:00
|
|
|
plugin_test_10.sections: plugin_test_10
|
|
|
|
$(TEST_READELF) -SW $< >$@ 2>/dev/null
|
|
|
|
|
2015-02-04 04:54:57 +01:00
|
|
|
check_PROGRAMS += plugin_test_11
|
|
|
|
check_SCRIPTS += plugin_test_11.sh
|
|
|
|
check_DATA += plugin_test_11.err
|
2015-02-06 08:50:49 +01:00
|
|
|
MOSTLYCLEANFILES += plugin_test_11.err plugin_test_thin.a
|
2015-02-04 04:54:57 +01:00
|
|
|
PLUGIN_TEST_11_SYMS = two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms
|
|
|
|
plugin_test_11: two_file_test_main.o plugin_test_thin.a gcctestdir/ld plugin_test.so $(PLUGIN_TEST_11_SYMS)
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o plugin_test_thin.a 2>plugin_test_11.err
|
|
|
|
plugin_test_11.err: plugin_test_11
|
|
|
|
@touch plugin_test_11.err
|
|
|
|
plugin_test_thin.a: two_file_test_1.o two_file_test_1b.o two_file_test_2.o
|
|
|
|
rm -f $@
|
|
|
|
$(TEST_AR) crT $@ $^
|
2014-09-18 19:58:16 +02:00
|
|
|
|
2016-03-03 20:36:36 +01:00
|
|
|
|
|
|
|
check_PROGRAMS += plugin_test_start_lib
|
|
|
|
check_SCRIPTS += plugin_test_start_lib.sh
|
|
|
|
check_DATA += plugin_test_start_lib.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_start_lib.err
|
|
|
|
plugin_test_start_lib: unused.o plugin_start_lib_test.o plugin_start_lib_test_2.syms gcctestdir/ld plugin_test.so
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so" plugin_start_lib_test.o \
|
|
|
|
-Wl,--start-lib plugin_start_lib_test_2.syms -Wl,--end-lib 2>plugin_test_start_lib.err
|
|
|
|
plugin_test_start_lib.err: plugin_test_start_lib
|
|
|
|
@touch plugin_test_start_lib.err
|
|
|
|
|
|
|
|
|
|
|
|
plugin_start_lib_test_2.syms: plugin_start_lib_test_2.o
|
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
|
|
|
|
|
2008-09-20 00:54:57 +02:00
|
|
|
plugin_test.so: plugin_test.o
|
|
|
|
$(LINK) -Bgcctestdir/ -shared plugin_test.o
|
|
|
|
plugin_test.o: plugin_test.c
|
|
|
|
$(COMPILE) -O0 -c -fpic -o $@ $<
|
|
|
|
|
2015-02-04 04:54:57 +01:00
|
|
|
two_file_test_main.o.syms: two_file_test_main.o
|
2008-09-20 00:54:57 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
2015-02-04 04:54:57 +01:00
|
|
|
two_file_test_1.o.syms: two_file_test_1.o
|
2008-09-20 00:54:57 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
2015-02-04 04:54:57 +01:00
|
|
|
two_file_test_1b.o.syms: two_file_test_1b.o
|
2008-09-20 00:54:57 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
2015-02-04 04:54:57 +01:00
|
|
|
two_file_test_2.o.syms: two_file_test_2.o
|
2008-09-20 00:54:57 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_common_test_1.o.syms: plugin_common_test_1.o
|
2010-04-06 23:56:24 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_common_test_2.o.syms: plugin_common_test_2.o
|
2010-04-06 23:56:24 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
2009-10-28 01:32:12 +01:00
|
|
|
|
2015-02-04 04:54:57 +01:00
|
|
|
empty.o.syms:
|
2009-10-28 01:32:12 +01:00
|
|
|
@echo "" >$@
|
|
|
|
@echo "Symbol table" >>$@
|
|
|
|
|
2013-06-14 22:07:18 +02:00
|
|
|
if TLS
|
|
|
|
|
|
|
|
check_PROGRAMS += plugin_test_tls
|
|
|
|
check_SCRIPTS += plugin_test_tls.sh
|
|
|
|
check_DATA += plugin_test_tls.err
|
|
|
|
MOSTLYCLEANFILES += plugin_test_tls.err
|
2015-02-04 04:54:57 +01:00
|
|
|
plugin_test_tls: two_file_test_tls.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2_tls.o.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.o.syms two_file_test_1b.o.syms two_file_test_2_tls.o.syms 2>plugin_test_tls.err
|
2013-06-14 22:07:18 +02:00
|
|
|
plugin_test_tls.err: plugin_test_tls
|
|
|
|
@touch plugin_test_tls.err
|
|
|
|
|
2015-02-04 04:54:57 +01:00
|
|
|
two_file_test_2_tls.o.syms: two_file_test_2_tls.o
|
2013-06-14 22:07:18 +02:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
|
|
|
|
endif TLS
|
|
|
|
|
2009-10-28 01:32:12 +01:00
|
|
|
MOSTLYCLEANFILES += unused.c
|
2015-02-04 04:54:57 +01:00
|
|
|
unused.o.syms: unused.o
|
2009-10-28 01:32:12 +01:00
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
@echo " 1: 00000000 4 FUNC GLOBAL DEFAULT 1 UNUSED" >>$@
|
|
|
|
unused.o: unused.c
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
unused.c:
|
|
|
|
@cp /dev/null $@
|
2008-09-20 00:54:57 +02:00
|
|
|
|
2011-09-30 01:45:57 +02:00
|
|
|
check_SCRIPTS += plugin_final_layout.sh
|
2012-08-24 20:35:35 +02:00
|
|
|
check_DATA += plugin_final_layout.stdout plugin_final_layout_readelf.stdout
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += plugin_final_layout
|
2011-09-30 01:45:57 +02:00
|
|
|
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
|
2012-09-05 13:01:43 +02:00
|
|
|
$(TEST_NM) -n --synthetic plugin_final_layout > plugin_final_layout.stdout
|
2012-08-24 20:35:35 +02:00
|
|
|
plugin_final_layout_readelf.stdout: plugin_final_layout
|
|
|
|
$(TEST_READELF) -Wl plugin_final_layout > plugin_final_layout_readelf.stdout
|
2011-09-30 01:45:57 +02:00
|
|
|
|
|
|
|
plugin_section_order.so: plugin_section_order.o
|
|
|
|
$(LINK) -Bgcctestdir/ -shared plugin_section_order.o
|
|
|
|
plugin_section_order.o: plugin_section_order.c
|
|
|
|
$(COMPILE) -O0 -c -fpic -o $@ $<
|
|
|
|
|
2016-03-03 21:09:06 +01:00
|
|
|
check_SCRIPTS += plugin_layout_with_alignment.sh
|
|
|
|
check_DATA += plugin_layout_with_alignment.stdout
|
|
|
|
MOSTLYCLEANFILES += plugin_layout_with_alignment
|
2016-03-09 17:27:03 +01:00
|
|
|
plugin_layout_with_alignment.o: plugin_layout_with_alignment.c
|
|
|
|
$(COMPILE) -O0 -c -ffunction-sections -fdata-sections -g -o $@ $<
|
2016-03-03 21:09:06 +01:00
|
|
|
plugin_layout_with_alignment: plugin_layout_with_alignment.o plugin_section_alignment.so gcctestdir/ld
|
2016-03-09 17:27:03 +01:00
|
|
|
$(LINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_alignment.so" plugin_layout_with_alignment.o
|
2016-03-03 21:09:06 +01:00
|
|
|
plugin_layout_with_alignment.stdout: plugin_layout_with_alignment
|
|
|
|
$(TEST_NM) -n --synthetic plugin_layout_with_alignment > plugin_layout_with_alignment.stdout
|
|
|
|
|
|
|
|
plugin_section_alignment.so: plugin_section_alignment.o
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -shared plugin_section_alignment.o
|
|
|
|
plugin_section_alignment.o: plugin_section_alignment.cc
|
|
|
|
$(CXXCOMPILE) -O0 -c -fpic -o $@ $<
|
|
|
|
|
2008-09-20 00:54:57 +02:00
|
|
|
endif PLUGINS
|
|
|
|
|
2009-05-20 00:14:17 +02:00
|
|
|
check_PROGRAMS += exclude_libs_test
|
|
|
|
check_SCRIPTS += exclude_libs_test.sh
|
|
|
|
check_DATA += exclude_libs_test.syms
|
|
|
|
MOSTLYCLEANFILES += exclude_libs_test.syms libexclude_libs_test_1.a \
|
2009-05-27 00:52:56 +02:00
|
|
|
libexclude_libs_test_2.a alt/libexclude_libs_test_3.a
|
2009-05-20 00:14:17 +02:00
|
|
|
exclude_libs_test_SOURCES = exclude_libs_test.c
|
|
|
|
exclude_libs_test_DEPENDENCIES = gcctestdir/ld libexclude_libs_test_1.a \
|
2009-05-27 00:52:56 +02:00
|
|
|
libexclude_libs_test_2.a alt/libexclude_libs_test_3.a
|
|
|
|
exclude_libs_test_LDFLAGS = -Bgcctestdir/ -L. -Lalt \
|
|
|
|
-Wl,--exclude-libs,dummy:libexclude_libs_test_1 \
|
|
|
|
-Wl,--exclude-libs,libexclude_libs_test_3
|
|
|
|
exclude_libs_test_LDADD = -lexclude_libs_test_1 -lexclude_libs_test_2 \
|
|
|
|
alt/libexclude_libs_test_3.a
|
2009-05-20 00:14:17 +02:00
|
|
|
exclude_libs_test.syms: exclude_libs_test
|
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
libexclude_libs_test_1.a: exclude_libs_test_1.o
|
|
|
|
$(TEST_AR) rc $@ $^
|
|
|
|
libexclude_libs_test_2.a: exclude_libs_test_2.o
|
|
|
|
$(TEST_AR) rc $@ $^
|
2009-05-27 00:52:56 +02:00
|
|
|
alt/libexclude_libs_test_3.a: exclude_libs_test_3.o
|
|
|
|
test -d alt || mkdir -p alt
|
|
|
|
$(TEST_AR) rc $@ $^
|
2009-05-20 00:14:17 +02:00
|
|
|
|
2009-06-05 20:16:31 +02:00
|
|
|
check_PROGRAMS += local_labels_test
|
|
|
|
local_labels_test.o: ver_test_6.c
|
|
|
|
$(COMPILE) -g -c -Wa,-L -o $@ $<
|
|
|
|
local_labels_test: local_labels_test.o
|
|
|
|
$(LINK) -Bgcctestdir/ local_labels_test.o
|
|
|
|
|
2009-06-05 23:32:57 +02:00
|
|
|
check_PROGRAMS += discard_locals_test
|
|
|
|
check_SCRIPTS += discard_locals_test.sh
|
2010-03-03 20:31:54 +01:00
|
|
|
check_DATA += discard_locals_test.syms \
|
|
|
|
discard_locals_relocatable_test1.syms \
|
|
|
|
discard_locals_relocatable_test2.syms
|
|
|
|
MOSTLYCLEANFILES += discard_locals_test.syms \
|
|
|
|
discard_locals_relocatable_test1.syms \
|
|
|
|
discard_locals_relocatable_test2.syms \
|
|
|
|
discard_locals_relocatable_test1.out \
|
|
|
|
discard_locals_relocatable_test2.out
|
2009-06-05 23:32:57 +02:00
|
|
|
discard_locals_test_SOURCES = discard_locals_test.c
|
|
|
|
discard_locals_test_LDFLAGS = -Bgcctestdir/ -Wl,--discard-locals
|
|
|
|
discard_locals_test.syms: discard_locals_test
|
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
# '-Wa,-L' is required to preserve the local label used for testing.
|
|
|
|
discard_locals_test.o: discard_locals_test.c
|
|
|
|
$(COMPILE) -c -Wa,-L -o $@ $<
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
discard_locals_relocatable_test1.syms: discard_locals_relocatable_test1.out
|
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
discard_locals_relocatable_test.o: discard_locals_relocatable_test.c
|
|
|
|
$(COMPILE) -c -Wa,-L -fPIC -o $@ $<
|
|
|
|
discard_locals_relocatable_test1.out: discard_locals_relocatable_test.o ../ld-new
|
|
|
|
../ld-new --discard-locals -relocatable -o $@ $<
|
|
|
|
|
|
|
|
discard_locals_relocatable_test2.syms: discard_locals_relocatable_test2.out
|
|
|
|
$(TEST_READELF) -sW $< >$@ 2>/dev/null
|
|
|
|
discard_locals_relocatable_test2.out: discard_locals_relocatable_test.o ../ld-new
|
|
|
|
../ld-new --discard-all -relocatable -o $@ $<
|
|
|
|
|
2009-06-22 08:51:53 +02:00
|
|
|
if MCMODEL_MEDIUM
|
|
|
|
check_PROGRAMS += large
|
|
|
|
large_SOURCES = large.c
|
|
|
|
large_CFLAGS = -mcmodel=medium
|
|
|
|
large_DEPENDENCIES = gcctestdir/ld
|
|
|
|
large_LDFLAGS = -Bgcctestdir/
|
2009-12-06 00:22:54 +01:00
|
|
|
large_LDADD =
|
2009-06-22 08:51:53 +02:00
|
|
|
endif MCMODEL_MEDIUM
|
|
|
|
|
2009-08-12 20:30:39 +02:00
|
|
|
# Test that hidden and internal symbols in the main program cannot be
|
|
|
|
# referenced by a shared library.
|
|
|
|
check_SCRIPTS += hidden_test.sh
|
|
|
|
check_DATA += hidden_test.err
|
2015-07-20 17:47:57 +02:00
|
|
|
MOSTLYCLEANFILES += hidden_test hidden_test.err hidden_test.syms
|
2009-08-12 20:30:39 +02:00
|
|
|
libhidden.so: hidden_test_1.c gcctestdir/ld
|
|
|
|
$(COMPILE) -Bgcctestdir/ -g -shared -fPIC -w -o $@ $(srcdir)/hidden_test_1.c
|
|
|
|
hidden_test: hidden_test_main.o libhidden.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -Wl,-R,. hidden_test_main.o libhidden.so 2>hidden_test.err
|
2015-07-20 17:47:57 +02:00
|
|
|
hidden_test.syms: hidden_test
|
|
|
|
$(TEST_NM) -D hidden_test > $@
|
2009-08-12 20:30:39 +02:00
|
|
|
hidden_test.err: hidden_test
|
|
|
|
@touch hidden_test.err
|
|
|
|
|
2009-09-18 22:03:22 +02:00
|
|
|
# Test -retain-symbols-file.
|
|
|
|
check_SCRIPTS += retain_symbols_file_test.sh
|
|
|
|
check_DATA += retain_symbols_file_test.stdout
|
|
|
|
MOSTLYCLEANFILES += retain_symbols_file_test retain_symbols_file_test.in \
|
|
|
|
retain_symbols_file_test.stdout
|
|
|
|
retain_symbols_file_test.so: basic_pic_test.o gcctestdir/ld
|
|
|
|
echo 'main' > retain_symbols_file_test.in
|
|
|
|
echo 't1' >> retain_symbols_file_test.in
|
|
|
|
echo '_ZNK4t20a3getEv' >> retain_symbols_file_test.in
|
|
|
|
echo '_Z3t18v' >> retain_symbols_file_test.in
|
2013-10-11 23:56:16 +02:00
|
|
|
echo '__tcf_0' >> retain_symbols_file_test.in
|
2009-09-18 22:03:22 +02:00
|
|
|
$(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 > $@
|
|
|
|
|
|
|
|
|
2009-09-09 00:32:51 +02:00
|
|
|
# Test that if the output file already exists and is empty,
|
|
|
|
# it will get execute permission.
|
|
|
|
check_PROGRAMS += permission_test
|
|
|
|
permission_test: basic_test.o gcctestdir/ld
|
|
|
|
umask 022; \
|
|
|
|
rm -f $@; \
|
|
|
|
touch $@; \
|
|
|
|
chmod 600 $@; \
|
|
|
|
$(CXXLINK) -Bgcctestdir/ basic_test.o
|
|
|
|
|
2009-10-10 09:39:04 +02:00
|
|
|
# Check -l:foo.a
|
|
|
|
check_PROGRAMS += searched_file_test
|
|
|
|
MOSTLYCLEANFILES += searched_file_test searched_file_test_lib.o \
|
|
|
|
alt/searched_file_test_lib.a
|
|
|
|
searched_file_test_SOURCES = searched_file_test.cc
|
|
|
|
searched_file_test_DEPENDENCIES = alt/searched_file_test_lib.a
|
|
|
|
searched_file_test_LDFLAGS = -Bgcctestdir/ -Lalt
|
|
|
|
searched_file_test_LDADD = -l:searched_file_test_lib.a
|
|
|
|
searched_file_test_lib.o: searched_file_test_lib.cc
|
|
|
|
$(CXXCOMPILE) -c -o $@ $<
|
|
|
|
alt/searched_file_test_lib.a: searched_file_test_lib.o
|
|
|
|
test -d alt || mkdir -p alt
|
|
|
|
$(TEST_AR) rc $@ $^
|
|
|
|
|
2013-10-11 23:56:16 +02:00
|
|
|
# Test that no .gnu.version sections are created when
|
2009-10-16 21:11:32 +02:00
|
|
|
# symbol versioning is not used.
|
|
|
|
check_SCRIPTS += no_version_test.sh
|
|
|
|
check_DATA += no_version_test.stdout
|
|
|
|
MOSTLYCLEANFILES += libno_version_test.so no_version_test.stdout
|
|
|
|
# We invoke the linker directly since gcc may include additional objects that
|
|
|
|
# uses symbol versioning.
|
|
|
|
libno_version_test.so: no_version_test.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -shared -o $@ no_version_test.o
|
|
|
|
no_version_test.o: no_version_test.c
|
|
|
|
$(COMPILE) -o $@ -c -fPIC $<
|
|
|
|
no_version_test.stdout: libno_version_test.so
|
|
|
|
$(TEST_OBJDUMP) -h $< > $@
|
|
|
|
|
2010-08-20 00:50:16 +02:00
|
|
|
# Test STT_GNU_IFUNC symbols.
|
|
|
|
if IFUNC
|
|
|
|
|
|
|
|
ifuncmod1.o: ifuncmod1.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
ifuncmod1.so: ifuncmod1.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared ifuncmod1.o
|
|
|
|
|
|
|
|
ifuncdep1.o: ifuncmod1.c
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
|
|
|
|
ifuncmain1pic.o: ifuncmain1.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
ifuncmain1pie.o: ifuncmain1.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIE -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
2011-09-14 03:29:01 +02:00
|
|
|
if IFUNC_STATIC
|
2010-08-20 00:50:16 +02:00
|
|
|
check_PROGRAMS += ifuncmain1static
|
|
|
|
ifuncmain1static_SOURCES = ifuncmain1.c
|
|
|
|
ifuncmain1static_DEPENDENCIES = gcctestdir/ld ifuncdep1.o
|
|
|
|
ifuncmain1static_LDFLAGS = -Bgcctestdir/ -static
|
|
|
|
ifuncmain1static_LDADD = ifuncdep1.o
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1picstatic
|
|
|
|
ifuncmain1picstatic: ifuncmain1pic.o ifuncmod1.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -static ifuncmain1pic.o ifuncmod1.o
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2011-09-14 03:29:01 +02:00
|
|
|
endif
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1
|
|
|
|
ifuncmain1_SOURCES = ifuncmain1.c
|
|
|
|
ifuncmain1_DEPENDENCIES = gcctestdir/ld ifuncmod1.so
|
|
|
|
ifuncmain1_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ifuncmain1_LDADD = ifuncmod1.so
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1pic
|
|
|
|
ifuncmain1pic: ifuncmain1pic.o ifuncmod1.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ ifuncmain1pic.o ifuncmod1.so -Wl,-R,.
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1vis
|
|
|
|
ifuncmain1vis_SOURCES = ifuncmain1vis.c
|
|
|
|
ifuncmain1vis_DEPENDENCIES = gcctestdir/ld ifuncmod1.so
|
|
|
|
ifuncmain1vis_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ifuncmain1vis_LDADD = ifuncmod1.so
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1vispic
|
|
|
|
ifuncmain1vispic.o: ifuncmain1vis.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
ifuncmain1vispic: ifuncmain1vispic.o ifuncmod1.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ ifuncmain1pic.o ifuncmod1.so -Wl,-R,.
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1staticpic
|
|
|
|
ifuncmain1staticpic: ifuncmain1pic.o ifuncmod1.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ ifuncmain1pic.o ifuncmod1.o
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1pie
|
|
|
|
ifuncmain1pie: ifuncmain1pie.o ifuncmod1.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -pie ifuncmain1pie.o ifuncmod1.so -Wl,-R,.
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1vispie
|
|
|
|
ifuncmain1vispie.o: ifuncmain1vis.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIE -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
ifuncmain1vispie: ifuncmain1vispie.o ifuncmod1.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -pie ifuncmain1vispie.o ifuncmod1.so -Wl,-R,.
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain1staticpie
|
|
|
|
ifuncmain1staticpie: ifuncmain1pie.o ifuncmod1.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -pie ifuncmain1pie.o ifuncmod1.o
|
|
|
|
|
|
|
|
ifuncmain2pic.o: ifuncmain2.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
ifuncdep2pic.o: ifuncdep2.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
2011-09-14 03:29:01 +02:00
|
|
|
if IFUNC_STATIC
|
2010-08-20 00:50:16 +02:00
|
|
|
check_PROGRAMS += ifuncmain2static
|
|
|
|
ifuncmain2static_SOURCES = ifuncmain2.c ifuncdep2.c
|
|
|
|
ifuncmain2static_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ifuncmain2static_LDFLAGS = -Bgcctestdir/ -static
|
2010-12-16 19:28:44 +01:00
|
|
|
ifuncmain2static_LDADD =
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain2picstatic
|
|
|
|
ifuncmain2picstatic: ifuncmain2pic.o ifuncdep2pic.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -static ifuncmain2pic.o ifuncdep2pic.o
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2011-09-14 03:29:01 +02:00
|
|
|
endif
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain2
|
|
|
|
ifuncmain2_SOURCES = ifuncmain2.c ifuncdep2.c
|
|
|
|
ifuncmain2_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ifuncmain2_LDFLAGS = -Bgcctestdir/
|
2010-12-16 19:28:44 +01:00
|
|
|
ifuncmain2_LDADD =
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain2pic
|
|
|
|
ifuncmain2pic: ifuncmain2pic.o ifuncdep2pic.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ ifuncmain2pic.o ifuncdep2pic.o
|
|
|
|
|
|
|
|
ifuncmod3.o: ifuncmod3.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
ifuncmod3.so: ifuncmod3.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared ifuncmod3.o
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain3
|
|
|
|
ifuncmain3_SOURCES = ifuncmain3.c
|
|
|
|
ifuncmain3_DEPENDENCIES = gcctestdir/ld ifuncmod3.so
|
|
|
|
ifuncmain3_LDFLAGS = -Bgcctestdir/ -Wl,--export-dynamic -Wl,-R,.
|
|
|
|
ifuncmain3_LDADD = -ldl
|
|
|
|
|
|
|
|
ifuncmain4pic.o: ifuncmain4.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
2011-09-14 03:29:01 +02:00
|
|
|
if IFUNC_STATIC
|
2010-08-20 00:50:16 +02:00
|
|
|
check_PROGRAMS += ifuncmain4static
|
|
|
|
ifuncmain4static_SOURCES = ifuncmain4.c
|
|
|
|
ifuncmain4static_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ifuncmain4static_LDFLAGS = -Bgcctestdir/ -static
|
2010-12-16 19:28:44 +01:00
|
|
|
ifuncmain4static_LDADD =
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain4picstatic
|
|
|
|
ifuncmain4picstatic: ifuncmain4pic.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -static ifuncmain4pic.o
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2011-09-14 03:29:01 +02:00
|
|
|
endif
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain4
|
|
|
|
ifuncmain4_SOURCES = ifuncmain4.c
|
|
|
|
ifuncmain4_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ifuncmain4_LDFLAGS = -Bgcctestdir/
|
2010-12-16 19:28:44 +01:00
|
|
|
ifuncmain4_LDADD =
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
ifuncmain5pic.o: ifuncmain5.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
ifuncmain5pie.o: ifuncmain5.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIE -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
ifuncmod5.o: ifuncmod5.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
ifuncmod5.so: ifuncmod5.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared ifuncmod5.o
|
|
|
|
|
|
|
|
ifuncdep5.o: ifuncmod5.c
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
2011-09-14 03:29:01 +02:00
|
|
|
if IFUNC_STATIC
|
2010-08-20 00:50:16 +02:00
|
|
|
check_PROGRAMS += ifuncmain5static
|
|
|
|
ifuncmain5static_SOURCES = ifuncmain5.c
|
|
|
|
ifuncmain5static_DEPENDENCIES = gcctestdir/ld ifuncdep5.o
|
|
|
|
ifuncmain5static_LDFLAGS = -Bgcctestdir/ -static
|
|
|
|
ifuncmain5static_LDADD = ifuncdep5.o
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain5picstatic
|
|
|
|
ifuncmain5picstatic: ifuncmain5pic.o ifuncmod5.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -static ifuncmain5pic.o ifuncmod5.o
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2011-09-14 03:29:01 +02:00
|
|
|
endif
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain5
|
|
|
|
ifuncmain5_SOURCES = ifuncmain5.c
|
|
|
|
ifuncmain5_DEPENDENCIES = gcctestdir/ld ifuncmod5.so
|
|
|
|
ifuncmain5_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ifuncmain5_LDADD = ifuncmod5.so
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain5pic
|
|
|
|
ifuncmain5pic: ifuncmain5pic.o ifuncmod5.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ ifuncmain5pic.o ifuncmod5.so -Wl,-R,.
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain5staticpic
|
|
|
|
ifuncmain5staticpic: ifuncmain5pic.o ifuncmod5.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ ifuncmain5pic.o ifuncmod5.o
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain5pie
|
|
|
|
ifuncmain5pie: ifuncmain5pie.o ifuncmod5.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -pie ifuncmain5pie.o ifuncmod5.so -Wl,-R,.
|
|
|
|
|
|
|
|
ifuncmain6pie.o: ifuncmain6pie.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIE -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
ifuncmod6.o: ifuncmod6.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
ifuncmod6.so: ifuncmod6.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared ifuncmod6.o
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain6pie
|
|
|
|
ifuncmain6pie: ifuncmain6pie.o ifuncmod6.so gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -pie ifuncmain6pie.o ifuncmod6.so -Wl,-R,.
|
|
|
|
|
|
|
|
ifuncmain7pic.o: ifuncmain7.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
ifuncmain7pie.o: ifuncmain7.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIE -o $@ $<
|
2010-08-20 00:50:16 +02:00
|
|
|
|
2011-07-02 02:19:04 +02:00
|
|
|
if HAVE_STATIC
|
2011-09-14 03:29:01 +02:00
|
|
|
if IFUNC_STATIC
|
2010-08-20 00:50:16 +02:00
|
|
|
check_PROGRAMS += ifuncmain7static
|
|
|
|
ifuncmain7static_SOURCES = ifuncmain7.c
|
|
|
|
ifuncmain7static_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ifuncmain7static_LDFLAGS = -Bgcctestdir/ -static
|
2010-12-16 19:28:44 +01:00
|
|
|
ifuncmain7static_LDADD =
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain7picstatic
|
|
|
|
ifuncmain7picstatic: ifuncmain7pic.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -static ifuncmain7pic.o
|
2011-07-02 02:19:04 +02:00
|
|
|
endif
|
2011-09-14 03:29:01 +02:00
|
|
|
endif
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain7
|
|
|
|
ifuncmain7_SOURCES = ifuncmain7.c
|
|
|
|
ifuncmain7_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ifuncmain7_LDFLAGS = -Bgcctestdir/
|
2010-12-16 19:28:44 +01:00
|
|
|
ifuncmain7_LDADD =
|
2010-08-20 00:50:16 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain7pic
|
|
|
|
ifuncmain7pic: ifuncmain7pic.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ ifuncmain7pic.o
|
|
|
|
|
|
|
|
check_PROGRAMS += ifuncmain7pie
|
|
|
|
ifuncmain7pie: ifuncmain7pie.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -pie ifuncmain7pie.o
|
|
|
|
|
PR gold/12372
* target.h (Target::plt_address_for_global): New function.
(Target::plt_address_for_local): New function.
(Target::plt_section_for_global): Remove.
(Target::plt_section_for_local): Remove.
(Target::do_plt_address_for_global): New virtual function.
(Target::do_plt_address_for_local): New virtual function.
(Target::do_plt_section_for_global): Remove.
(Target::do_plt_section_for_local): Remove.
(Target::register_global_plt_entry): Add Symbol_table and Layout
parameters.
* output.cc (Output_data_got::Got_entry::write): Use
plt_address_for_global and plt_address_for_local.
* layout.cc (Layout::add_target_dynamic_tags): Use size and
address of output section.
* i386.cc (class Output_data_plt_i386): Add irelative_rel_,
got_irelative_, and irelative_count_ fields. Update
declarations.
(Output_data_plt_i386::has_irelative_section): New function.
(Output_data_plt_i386::entry_count): Add irelative_count_.
(Output_data_plt_i386::set_final_data_size): Likewise.
(class Target_i386): Add got_irelative_ and rel_irelative_
fields. Update declarations.
(Target_i386::Target_i386): Initialize new fields.
(Target_i386::do_plt_address_for_global): New function replacing
do_plt_section_for_global.
(Target_i386::do_plt_address_for_local): New function replacing
do_plt_section_for_local.
(Target_i386::got_section): Create got_irelative_.
(Target_i386::rel_irelative_section): New function.
(Output_data_plt_i386::Output_data_plt_i386): Initialize new
fields. Don't define __rel_iplt_{start,end}.
(Output_data_plt_i386::add_entry): Add symtab and layout
parameters. Change all callers. Use different PLT and GOT for
IFUNC symbols.
(Output_data_plt_i386::add_local_ifunc_entry): Add symtab and
layout parameters. Change all callers. Use different PLT and
GOT.
(Output_data_plt_i386::rel_tls_desc): Fix formatting.
(Output_data_plt_i386::rel_irelative): New function.
(Output_data_plt_i386::address_for_global): New function.
(Output_data_plt_i386::address_for_local): New function.
(Output_data_plt_i386::do_write): Write out IRELATIVE area. Use
IRELATIVE GOT when changing IFUNC GOT entries.
(Target_i386::Scan::global): Use IRELATIVE GOT for IRELATIVE
reloc.
(Target_i386::do_finalize_sections): Create the __rel_iplt symbols
if we didn't create an IRELATIVE GOT.
(Target_i386::Relocate::relocate): Use plt_address_for_global and
plt_address_for_local.
(Target_i386::do_dynsym_value): Use plt_address_for_global.
* x86_64.cc (class Output_data_plt_x86_64): Add irelative_rel_,
got_irelative_, and irelative_count_ fields. Update
declarations.
(Output_data_plt_x86_64::Output_data_plt_x86_64) [both versions]:
Initialize new fields. Remove symtab parameter. Change all
callers.
(Output_data_plt_x86_64::get_tlsdesc_plt_offset): Add
irelative_count_.
(Output_data_plt_x86_64::has_irelative_section): New function.
(Output_data_plt_x86_64::entry_count): Add irelative_count_.
(class Target_x86_64): Add got_irelative_ and rel_irelative_
fields. Update declarations.
(Target_x86_64::Target_x86_64): Initialize new fields.
(Target_x86_64::do_plt_address_for_global): New function replacing
do_plt_section_for_global.
(Target_x86_64::do_plt_address_for_local): New function replacing
do_plt_section_for_local.
(Target_x86_64::got_section): Create got_irelative_.
(Target_x86_64::rela_irelative_section): New function.
(Output_data_plt_x86_64::init): Remove symtab parameter. Change
all callers. Don't create __rel_iplt_{start,end}.
(Output_data_plt_x86_64::add_entry): Add symtab and layout
parameters. Change all callers. Use different PLT and GOT for
IFUNC symbols.
(Output_data_plt_x86_64::add_local_ifunc_entry): Add symtab and
layout parameters. Change all callers. Use different PLT and
GOT.
(Output_data_plt_x86_64::add_relocation): Add symtab and layout
parameters. Change all callers. Use different PLT and GOT for
IFUNC symbols.
(Output_data_plt_x86_64::rela_tlsdesc): Fix formatting.
(Output_data_plt_x86_64::rela_irelative): New function.
(Output_data_plt_x86_64::address_for_global): New function.
(Output_data_plt_x86_64::address_for_local): New function.
(Output_data_plt_x86_64::set_final_data_size): Likewise.
(Output_data_plt_x86_64::do_write): Write out IRELATIVE area.
(Target_x86_64::init_got_plt_for_update): Create got_irelative_.
(Target_x86_64::register_global_plt_entry): Add symtab and layout
parameters.
(Target_x86_64::Scan::global): Use IRELATIVE GOT for IRELATIVE
reloc.
(Target_x86_64::do_finalize_sections): Create the __rela_iplt
symbols if we didn't create an IRELATIVE GOT.
(Target_x86_64::Relocate::relocate): Use plt_address_for_global and
plt_address_for_local.
(Target_x86_64::do_dynsym_value): Use plt_address_for_global.
* testsuite/ifuncvar1.c: New test file.
* testsuite/ifuncvar2.c: New test file.
* testsuite/ifuncvar3.c: New test file.
* testsuite/Makefile.am (check_PROGRAMS): Add ifuncvar.
(ifuncvar1_pic.o, ifuncvar2_pic.o, ifuncvar.so): New targets.
(ifuncvar_SOURCES, ifuncvar_DEPENDENCIES): New variables.
(ifuncvar_LDFLAGS, ifuncvar_LDADD): New variables.
* testsuite/Makefile.in: Rebuild.
2011-07-09 00:48:08 +02:00
|
|
|
check_PROGRAMS += ifuncvar
|
|
|
|
ifuncvar1_pic.o: ifuncvar1.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
2013-10-11 23:56:16 +02:00
|
|
|
ifuncvar2_pic.o: ifuncvar2.c
|
2012-04-17 04:09:42 +02:00
|
|
|
$(COMPILE) -c -fPIC -o $@ $<
|
PR gold/12372
* target.h (Target::plt_address_for_global): New function.
(Target::plt_address_for_local): New function.
(Target::plt_section_for_global): Remove.
(Target::plt_section_for_local): Remove.
(Target::do_plt_address_for_global): New virtual function.
(Target::do_plt_address_for_local): New virtual function.
(Target::do_plt_section_for_global): Remove.
(Target::do_plt_section_for_local): Remove.
(Target::register_global_plt_entry): Add Symbol_table and Layout
parameters.
* output.cc (Output_data_got::Got_entry::write): Use
plt_address_for_global and plt_address_for_local.
* layout.cc (Layout::add_target_dynamic_tags): Use size and
address of output section.
* i386.cc (class Output_data_plt_i386): Add irelative_rel_,
got_irelative_, and irelative_count_ fields. Update
declarations.
(Output_data_plt_i386::has_irelative_section): New function.
(Output_data_plt_i386::entry_count): Add irelative_count_.
(Output_data_plt_i386::set_final_data_size): Likewise.
(class Target_i386): Add got_irelative_ and rel_irelative_
fields. Update declarations.
(Target_i386::Target_i386): Initialize new fields.
(Target_i386::do_plt_address_for_global): New function replacing
do_plt_section_for_global.
(Target_i386::do_plt_address_for_local): New function replacing
do_plt_section_for_local.
(Target_i386::got_section): Create got_irelative_.
(Target_i386::rel_irelative_section): New function.
(Output_data_plt_i386::Output_data_plt_i386): Initialize new
fields. Don't define __rel_iplt_{start,end}.
(Output_data_plt_i386::add_entry): Add symtab and layout
parameters. Change all callers. Use different PLT and GOT for
IFUNC symbols.
(Output_data_plt_i386::add_local_ifunc_entry): Add symtab and
layout parameters. Change all callers. Use different PLT and
GOT.
(Output_data_plt_i386::rel_tls_desc): Fix formatting.
(Output_data_plt_i386::rel_irelative): New function.
(Output_data_plt_i386::address_for_global): New function.
(Output_data_plt_i386::address_for_local): New function.
(Output_data_plt_i386::do_write): Write out IRELATIVE area. Use
IRELATIVE GOT when changing IFUNC GOT entries.
(Target_i386::Scan::global): Use IRELATIVE GOT for IRELATIVE
reloc.
(Target_i386::do_finalize_sections): Create the __rel_iplt symbols
if we didn't create an IRELATIVE GOT.
(Target_i386::Relocate::relocate): Use plt_address_for_global and
plt_address_for_local.
(Target_i386::do_dynsym_value): Use plt_address_for_global.
* x86_64.cc (class Output_data_plt_x86_64): Add irelative_rel_,
got_irelative_, and irelative_count_ fields. Update
declarations.
(Output_data_plt_x86_64::Output_data_plt_x86_64) [both versions]:
Initialize new fields. Remove symtab parameter. Change all
callers.
(Output_data_plt_x86_64::get_tlsdesc_plt_offset): Add
irelative_count_.
(Output_data_plt_x86_64::has_irelative_section): New function.
(Output_data_plt_x86_64::entry_count): Add irelative_count_.
(class Target_x86_64): Add got_irelative_ and rel_irelative_
fields. Update declarations.
(Target_x86_64::Target_x86_64): Initialize new fields.
(Target_x86_64::do_plt_address_for_global): New function replacing
do_plt_section_for_global.
(Target_x86_64::do_plt_address_for_local): New function replacing
do_plt_section_for_local.
(Target_x86_64::got_section): Create got_irelative_.
(Target_x86_64::rela_irelative_section): New function.
(Output_data_plt_x86_64::init): Remove symtab parameter. Change
all callers. Don't create __rel_iplt_{start,end}.
(Output_data_plt_x86_64::add_entry): Add symtab and layout
parameters. Change all callers. Use different PLT and GOT for
IFUNC symbols.
(Output_data_plt_x86_64::add_local_ifunc_entry): Add symtab and
layout parameters. Change all callers. Use different PLT and
GOT.
(Output_data_plt_x86_64::add_relocation): Add symtab and layout
parameters. Change all callers. Use different PLT and GOT for
IFUNC symbols.
(Output_data_plt_x86_64::rela_tlsdesc): Fix formatting.
(Output_data_plt_x86_64::rela_irelative): New function.
(Output_data_plt_x86_64::address_for_global): New function.
(Output_data_plt_x86_64::address_for_local): New function.
(Output_data_plt_x86_64::set_final_data_size): Likewise.
(Output_data_plt_x86_64::do_write): Write out IRELATIVE area.
(Target_x86_64::init_got_plt_for_update): Create got_irelative_.
(Target_x86_64::register_global_plt_entry): Add symtab and layout
parameters.
(Target_x86_64::Scan::global): Use IRELATIVE GOT for IRELATIVE
reloc.
(Target_x86_64::do_finalize_sections): Create the __rela_iplt
symbols if we didn't create an IRELATIVE GOT.
(Target_x86_64::Relocate::relocate): Use plt_address_for_global and
plt_address_for_local.
(Target_x86_64::do_dynsym_value): Use plt_address_for_global.
* testsuite/ifuncvar1.c: New test file.
* testsuite/ifuncvar2.c: New test file.
* testsuite/ifuncvar3.c: New test file.
* testsuite/Makefile.am (check_PROGRAMS): Add ifuncvar.
(ifuncvar1_pic.o, ifuncvar2_pic.o, ifuncvar.so): New targets.
(ifuncvar_SOURCES, ifuncvar_DEPENDENCIES): New variables.
(ifuncvar_LDFLAGS, ifuncvar_LDADD): New variables.
* testsuite/Makefile.in: Rebuild.
2011-07-09 00:48:08 +02:00
|
|
|
ifuncvar.so: ifuncvar1_pic.o ifuncvar2_pic.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -shared ifuncvar1_pic.o ifuncvar2_pic.o
|
|
|
|
ifuncvar_SOURCES = ifuncvar3.c
|
|
|
|
ifuncvar_DEPENDENCIES = gcctestdir/ld ifuncvar.so
|
|
|
|
ifuncvar_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
|
|
|
|
ifuncvar_LDADD = ifuncvar.so
|
|
|
|
|
2010-08-20 00:50:16 +02:00
|
|
|
endif IFUNC
|
|
|
|
|
2010-08-13 02:18:19 +02:00
|
|
|
# Test that strong reference to a weak symbol in a DSO remains strong.
|
|
|
|
check_SCRIPTS += strong_ref_weak_def.sh
|
|
|
|
check_DATA += strong_ref_weak_def.stdout
|
|
|
|
MOSTLYCLEANFILES += strong_ref_weak_def_1.so strong_ref_weak_def_2.so \
|
|
|
|
strong_ref_weak_def.stdout
|
|
|
|
strong_ref_weak_def_2.o: strong_ref_weak_def_2.c
|
|
|
|
$(COMPILE) -o $@ -c -fPIC $<
|
|
|
|
strong_ref_weak_def_2.so: strong_ref_weak_def_2.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -shared -o $@ strong_ref_weak_def_2.o
|
|
|
|
strong_ref_weak_def_1.o: strong_ref_weak_def_1.c
|
|
|
|
$(COMPILE) -o $@ -c -fPIC $<
|
|
|
|
strong_ref_weak_def_1.so: strong_ref_weak_def_1.o strong_ref_weak_def_2.so \
|
|
|
|
gcctestdir/ld
|
|
|
|
gcctestdir/ld -shared -o $@ strong_ref_weak_def_1.o \
|
|
|
|
strong_ref_weak_def_2.so
|
|
|
|
strong_ref_weak_def.stdout: strong_ref_weak_def_1.so
|
|
|
|
$(TEST_READELF) -sWD $< > $@
|
|
|
|
|
2010-08-28 10:05:04 +02:00
|
|
|
# Test that a strong weak reference remains strong if there is another
|
|
|
|
# weak reference in a DSO.
|
|
|
|
check_SCRIPTS += dyn_weak_ref.sh
|
|
|
|
check_DATA += dyn_weak_ref.stdout
|
|
|
|
MOSTLYCLEANFILES += dyn_weak_ref_1.so dyn_weak_ref_2.so \
|
|
|
|
dyn_weak_ref.stdout
|
|
|
|
dyn_weak_ref_2.o: dyn_weak_ref_2.c
|
|
|
|
$(COMPILE) -o $@ -c -fPIC $<
|
|
|
|
dyn_weak_ref_2.so: dyn_weak_ref_2.o gcctestdir/ld
|
|
|
|
gcctestdir/ld -shared -o $@ dyn_weak_ref_2.o
|
|
|
|
dyn_weak_ref_1.o: dyn_weak_ref_1.c
|
|
|
|
$(COMPILE) -o $@ -c -fPIC $<
|
|
|
|
# We intentionally put dyn_weak_ref_2.so in front of dyn_weak_ref_1.o
|
|
|
|
# so that the weak ref there goes to gold's symbol table first.
|
|
|
|
dyn_weak_ref_1.so: dyn_weak_ref_1.o dyn_weak_ref_2.so gcctestdir/ld
|
|
|
|
gcctestdir/ld -shared -o $@ dyn_weak_ref_2.so dyn_weak_ref_1.o
|
|
|
|
dyn_weak_ref.stdout: dyn_weak_ref_1.so
|
|
|
|
$(TEST_READELF) -sWD $< > $@
|
|
|
|
|
|
|
|
|
2010-08-20 02:35:13 +02:00
|
|
|
# Test that --start-lib and --end-lib function correctly.
|
|
|
|
check_PROGRAMS += start_lib_test
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += libstart_lib_test.a
|
2010-08-20 02:35:13 +02:00
|
|
|
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 \
|
|
|
|
-Wl,--start-lib start_lib_test_2.o start_lib_test_3.o -Wl,--end-lib
|
|
|
|
libstart_lib_test.a: start_lib_test_1.o
|
|
|
|
$(TEST_AR) rc $@ $^
|
|
|
|
|
2010-09-08 18:10:33 +02:00
|
|
|
# Test that MEMORY region support works.
|
|
|
|
check_SCRIPTS += memory_test.sh
|
|
|
|
check_DATA += memory_test.stdout
|
|
|
|
MOSTLYCLEANFILES += memory_test.stdout memory_test memory_test.o
|
2010-09-18 02:34:58 +02:00
|
|
|
memory_test.o: memory_test.s
|
|
|
|
$(COMPILE) -o $@ -c $<
|
|
|
|
memory_test: memory_test.o gcctestdir/ld $(srcdir)/memory_test.t
|
2016-06-29 11:07:27 +02:00
|
|
|
$(LINK) -Bgcctestdir/ -nostartfiles -nostdlib -Wl,-z,max-page-size=0x1000 -Wl,-z,common-page-size=0x1000 -Wl,-T,$(srcdir)/memory_test.t -o $@ memory_test.o
|
2010-09-08 18:10:33 +02:00
|
|
|
memory_test.stdout: memory_test
|
2010-09-08 23:06:53 +02:00
|
|
|
$(TEST_READELF) -lWS $< > $@
|
2010-09-08 18:10:33 +02:00
|
|
|
|
2015-03-22 03:03:00 +01:00
|
|
|
# Test INCLUDE directives in linker scripts.
|
|
|
|
# The binary isn't runnable, so we just check that we can build it without errors.
|
|
|
|
check_DATA += memory_test_2
|
2016-03-09 04:52:07 +01:00
|
|
|
MOSTLYCLEANFILES += memory_test_inc_1.t memory_test_inc_2.t memory_test_inc_3.t memory_test_2
|
2015-03-22 03:03:00 +01:00
|
|
|
memory_test_inc_1.t: $(srcdir)/memory_test_inc_1.t.src
|
|
|
|
cp $< $@
|
|
|
|
memory_test_inc_2.t: $(srcdir)/memory_test_inc_2.t.src
|
|
|
|
cp $< $@
|
|
|
|
memory_test_inc_3.t: $(srcdir)/memory_test_inc_3.t.src
|
|
|
|
cp $< $@
|
|
|
|
memory_test_2: memory_test.o gcctestdir/ld $(srcdir)/memory_test.t memory_test_inc_1.t memory_test_inc_2.t memory_test_inc_3.t
|
2016-06-29 11:07:27 +02:00
|
|
|
$(LINK) -Bgcctestdir/ -nostartfiles -nostdlib -Wl,-z,max-page-size=0x1000 -Wl,-z,common-page-size=0x1000 -Wl,-T,$(srcdir)/memory_test.t -o $@ memory_test.o
|
2015-03-22 03:03:00 +01:00
|
|
|
|
2012-07-19 02:19:35 +02:00
|
|
|
if HAVE_PUBNAMES
|
|
|
|
|
|
|
|
# Test that --gdb-index functions correctly without gcc-generated pubnames.
|
2012-03-21 20:02:22 +01:00
|
|
|
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
|
2012-07-19 02:19:35 +02:00
|
|
|
$(CXXCOMPILE) -O0 -g -gno-pubnames -c -o $@ $<
|
2012-03-21 20:02:22 +01:00
|
|
|
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 $< > $@
|
|
|
|
|
2012-07-19 02:19:35 +02:00
|
|
|
# Test that --gdb-index functions correctly with compressed debug sections.
|
2012-03-21 20:02:22 +01:00
|
|
|
check_SCRIPTS += gdb_index_test_2.sh
|
|
|
|
check_DATA += gdb_index_test_2.stdout
|
2016-03-09 04:52:07 +01:00
|
|
|
MOSTLYCLEANFILES += gdb_index_test_2.stdout gdb_index_test_2 gdb_index_test_2_gabi
|
2012-03-21 20:02:22 +01:00
|
|
|
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 $< > $@
|
2015-07-12 19:50:25 +02:00
|
|
|
check_SCRIPTS += gdb_index_test_2_gabi.sh
|
|
|
|
check_DATA += gdb_index_test_2_gabi.stdout
|
|
|
|
MOSTLYCLEANFILES += gdb_index_test_2.stdout gdb_index_test_2
|
|
|
|
gdb_index_test_cdebug_gabi.o: gdb_index_test.cc
|
|
|
|
$(CXXCOMPILE) -Bgcctestdir/ -O0 -g -Wa,--compress-debug-sections=zlib-gabi -c -o $@ $<
|
|
|
|
gdb_index_test_2_gabi: gdb_index_test_cdebug_gabi.o gcctestdir/ld
|
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,--gdb-index $<
|
|
|
|
gdb_index_test_2_gabi.stdout: gdb_index_test_2_gabi
|
|
|
|
$(TEST_READELF) --debug-dump=gdb_index $< > $@
|
2012-03-21 20:02:22 +01:00
|
|
|
|
2012-07-19 02:19:35 +02:00
|
|
|
# Another simple C test (DW_AT_high_pc encoding) for --gdb-index.
|
2012-05-01 21:12:21 +02:00
|
|
|
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 $< > $@
|
|
|
|
|
2012-07-19 02:19:35 +02:00
|
|
|
# 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
|
2012-05-01 21:12:21 +02:00
|
|
|
|
2014-04-02 23:21:14 +02:00
|
|
|
# Test that __ehdr_start is defined correctly.
|
|
|
|
check_PROGRAMS += ehdr_start_test_1
|
|
|
|
ehdr_start_test_1_SOURCES = ehdr_start_test.cc
|
|
|
|
ehdr_start_test_1_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ehdr_start_test_1_CXXFLAGS =
|
|
|
|
ehdr_start_test_1_LDFLAGS = -Bgcctestdir/
|
|
|
|
ehdr_start_test_1_LDADD =
|
|
|
|
|
|
|
|
# Test that __ehdr_start is defined correctly with a weak reference.
|
|
|
|
check_PROGRAMS += ehdr_start_test_2
|
|
|
|
ehdr_start_test_2_SOURCES = ehdr_start_test.cc
|
|
|
|
ehdr_start_test_2_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ehdr_start_test_2_CXXFLAGS = -DEHDR_START_WEAK
|
|
|
|
ehdr_start_test_2_LDFLAGS = -Bgcctestdir/
|
|
|
|
ehdr_start_test_2_LDADD =
|
|
|
|
|
|
|
|
# Test that __ehdr_start is defined correctly when used with a linker script.
|
|
|
|
check_PROGRAMS += ehdr_start_test_3
|
|
|
|
ehdr_start_test_3_SOURCES = ehdr_start_test.cc
|
|
|
|
ehdr_start_test_3_DEPENDENCIES = gcctestdir/ld $(srcdir)/ehdr_start_test.t
|
|
|
|
ehdr_start_test_3_CXXFLAGS = -DEHDR_START_WEAK
|
|
|
|
ehdr_start_test_3_LDFLAGS = -Bgcctestdir/ -Wl,-T,$(srcdir)/ehdr_start_test.t
|
|
|
|
ehdr_start_test_3_LDADD =
|
|
|
|
|
|
|
|
# Test that __ehdr_start is left undefined when the text segment is not
|
|
|
|
# appropriately aligned.
|
|
|
|
check_SCRIPTS += ehdr_start_test_4.sh
|
|
|
|
check_DATA += ehdr_start_test_4.syms
|
|
|
|
MOSTLYCLEANFILES += ehdr_start_test_4
|
|
|
|
ehdr_start_test_4.syms: ehdr_start_test_4
|
|
|
|
$(TEST_NM) ehdr_start_test_4 > $@
|
|
|
|
ehdr_start_test_4: ehdr_start_test_4.o gcctestdir/ld
|
2014-05-30 19:21:27 +02:00
|
|
|
$(CXXLINK) -Bgcctestdir/ -Wl,-Ttext=0x100100 $<
|
2014-04-02 23:21:14 +02:00
|
|
|
ehdr_start_test_4.o: ehdr_start_test.cc
|
|
|
|
$(CXXCOMPILE) -c -DEHDR_START_WEAK -o $@ $<
|
|
|
|
|
|
|
|
# Test that __ehdr_start is not overridden when supplied by the user.
|
|
|
|
check_PROGRAMS += ehdr_start_test_5
|
|
|
|
ehdr_start_test_5_SOURCES = ehdr_start_test.cc ehdr_start_def.cc
|
|
|
|
ehdr_start_test_5_DEPENDENCIES = gcctestdir/ld
|
|
|
|
ehdr_start_test_5_CXXFLAGS = -DEHDR_START_USER_DEF
|
|
|
|
ehdr_start_test_5_LDFLAGS = -Bgcctestdir/
|
|
|
|
ehdr_start_test_5_LDADD =
|
|
|
|
|
Fix --defsym to copy symbol attributes.
Alan Modra committed a patch to Gnu ld to fix a problem encountered on
PPC where the --defsym option wasn't copying the st_other bits to the
newly-defined symbol.
https://sourceware.org/ml/binutils/2014-07/msg00094.html
Gold has the same problem, and additionally wasn't copying the symbol type.
This patch fixes both problems, by copying the symbol type, visibility, and
the remaining st_other bits to the new symbol for --defsym=sym1=sym2
assignments.
gold/
* expression.cc (struct Expression::Expression_eval_info): Add
new fields type_pointer, vis_pointer, and nonvis_pointer.
(Expression::eval_maybe_dot): Add type_pointer, vis_pointer, and
nonvis_pointer parameters. Adjust all calls.
(Symbol_expression::value): Update type, visibility, and nonvis bits
in caller.
* script.cc (Symbol_assignment::sized_finalize): Update type,
visibility, and remaining st_other bits for new symbol.
* script.h: (Expression::eval_maybe_dot): Add type_pointer,
vis_pointer, and nonvis_pointer parameters.
* symtab.h (Symbol::set_type): New method.
* testsuite/Makefile.am (defsym_test): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/defsym_test.c: New file.
* testsuite/defsym_test.sh: New file.
2014-07-09 07:34:27 +02:00
|
|
|
# Test that the --defsym option copies the symbol type and visibility.
|
|
|
|
check_SCRIPTS += defsym_test.sh
|
|
|
|
check_DATA += defsym_test.syms
|
2015-02-06 08:50:49 +01:00
|
|
|
MOSTLYCLEANFILES += defsym_test defsym_test.syms
|
Fix --defsym to copy symbol attributes.
Alan Modra committed a patch to Gnu ld to fix a problem encountered on
PPC where the --defsym option wasn't copying the st_other bits to the
newly-defined symbol.
https://sourceware.org/ml/binutils/2014-07/msg00094.html
Gold has the same problem, and additionally wasn't copying the symbol type.
This patch fixes both problems, by copying the symbol type, visibility, and
the remaining st_other bits to the new symbol for --defsym=sym1=sym2
assignments.
gold/
* expression.cc (struct Expression::Expression_eval_info): Add
new fields type_pointer, vis_pointer, and nonvis_pointer.
(Expression::eval_maybe_dot): Add type_pointer, vis_pointer, and
nonvis_pointer parameters. Adjust all calls.
(Symbol_expression::value): Update type, visibility, and nonvis bits
in caller.
* script.cc (Symbol_assignment::sized_finalize): Update type,
visibility, and remaining st_other bits for new symbol.
* script.h: (Expression::eval_maybe_dot): Add type_pointer,
vis_pointer, and nonvis_pointer parameters.
* symtab.h (Symbol::set_type): New method.
* testsuite/Makefile.am (defsym_test): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/defsym_test.c: New file.
* testsuite/defsym_test.sh: New file.
2014-07-09 07:34:27 +02:00
|
|
|
defsym_test.syms: defsym_test
|
|
|
|
$(TEST_READELF) -sW $< > $@
|
|
|
|
defsym_test: defsym_test.o gcctestdir/ld
|
|
|
|
$(LINK) -Bgcctestdir/ -Wl,--defsym=bar=foo defsym_test.o
|
|
|
|
defsym_test.o: defsym_test.c
|
|
|
|
$(COMPILE) -c -o $@ $<
|
|
|
|
|
2011-05-25 00:01:46 +02:00
|
|
|
# End-to-end incremental linking tests.
|
|
|
|
# Incremental linking is currently supported only on the x86_64 target.
|
|
|
|
|
|
|
|
if DEFAULT_TARGET_X86_64
|
|
|
|
|
2011-07-07 20:41:53 +02:00
|
|
|
two_file_test_1_v1_ndebug.o: two_file_test_1_v1.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
|
|
|
|
two_file_test_1_ndebug.o: two_file_test_1.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
|
|
|
|
two_file_test_1b_ndebug.o: two_file_test_1b.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
|
|
|
|
two_file_test_2_ndebug.o: two_file_test_2.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
|
|
|
|
two_file_test_main_ndebug.o: two_file_test_main.cc
|
|
|
|
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
|
|
|
|
|
2011-05-25 00:01:46 +02:00
|
|
|
check_PROGRAMS += incremental_test_2
|
2011-05-29 19:24:05 +02:00
|
|
|
MOSTLYCLEANFILES += two_file_test_tmp_2.o
|
2011-07-07 20:41:53 +02:00
|
|
|
incremental_test_2: two_file_test_1_v1_ndebug.o two_file_test_1_ndebug.o two_file_test_1b_ndebug.o \
|
|
|
|
two_file_test_2_ndebug.o two_file_test_main_ndebug.o gcctestdir/ld
|
|
|
|
cp -f two_file_test_1_v1_ndebug.o two_file_test_tmp_2.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ two_file_test_tmp_2.o two_file_test_1b_ndebug.o two_file_test_2_ndebug.o two_file_test_main_ndebug.o
|
2011-05-25 00:01:46 +02:00
|
|
|
@sleep 1
|
2011-07-07 20:41:53 +02:00
|
|
|
cp -f two_file_test_1_ndebug.o two_file_test_tmp_2.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ two_file_test_tmp_2.o two_file_test_1b_ndebug.o two_file_test_2_ndebug.o two_file_test_main_ndebug.o
|
2011-05-25 00:01:46 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += incremental_test_3
|
2011-05-29 19:24:05 +02:00
|
|
|
MOSTLYCLEANFILES += two_file_test_tmp_3.o
|
2011-05-25 00:01:46 +02:00
|
|
|
incremental_test_3: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
|
|
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
2011-05-29 19:24:05 +02:00
|
|
|
cp -f two_file_test_1b_v1.o two_file_test_tmp_3.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ two_file_test_1.o two_file_test_tmp_3.o two_file_test_2.o two_file_test_main.o
|
2011-05-25 00:01:46 +02:00
|
|
|
@sleep 1
|
2011-05-29 19:24:05 +02:00
|
|
|
cp -f two_file_test_1b.o two_file_test_tmp_3.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ two_file_test_1.o two_file_test_tmp_3.o two_file_test_2.o two_file_test_main.o
|
2011-05-25 00:01:46 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += incremental_test_4
|
2011-05-29 19:24:05 +02:00
|
|
|
MOSTLYCLEANFILES += incremental_test_4.base two_file_test_tmp_4.o
|
2011-05-25 00:01:46 +02:00
|
|
|
incremental_test_4: two_file_test_1.o two_file_test_1b.o two_file_test_2_v1.o \
|
|
|
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
2011-05-29 19:24:05 +02:00
|
|
|
cp -f two_file_test_2_v1.o two_file_test_tmp_4.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ two_file_test_1.o two_file_test_1b.o two_file_test_tmp_4.o two_file_test_main.o
|
2011-05-25 01:31:07 +02:00
|
|
|
mv -f incremental_test_4 incremental_test_4.base
|
2011-05-25 00:01:46 +02:00
|
|
|
@sleep 1
|
2011-05-29 19:24:05 +02:00
|
|
|
cp -f two_file_test_2.o two_file_test_tmp_4.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update,--incremental-base=incremental_test_4.base -Wl,-z,norelro -Bgcctestdir/ two_file_test_1.o two_file_test_1b.o two_file_test_tmp_4.o two_file_test_main.o
|
2011-05-25 00:01:46 +02:00
|
|
|
|
2011-07-07 00:07:59 +02:00
|
|
|
check_PROGRAMS += incremental_test_5
|
|
|
|
MOSTLYCLEANFILES += two_file_test_5.a
|
|
|
|
incremental_test_5: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
|
|
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
|
|
|
cp -f two_file_test_1b_v1.o two_file_test_tmp_5.o
|
|
|
|
$(TEST_AR) rc two_file_test_5.a two_file_test_1.o two_file_test_tmp_5.o two_file_test_2.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ two_file_test_main.o two_file_test_5.a
|
2011-07-07 00:07:59 +02:00
|
|
|
@sleep 1
|
|
|
|
cp -f two_file_test_1b.o two_file_test_tmp_5.o
|
|
|
|
$(TEST_AR) rc two_file_test_5.a two_file_test_1.o two_file_test_tmp_5.o two_file_test_2.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ two_file_test_main.o two_file_test_5.a
|
2011-07-07 00:07:59 +02:00
|
|
|
|
|
|
|
# Test the --incremental-unchanged flag with an archive library.
|
|
|
|
# The second link should not update the library.
|
|
|
|
check_PROGRAMS += incremental_test_6
|
|
|
|
MOSTLYCLEANFILES += two_file_test_6.a
|
|
|
|
incremental_test_6: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
|
|
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
|
|
|
cp -f two_file_test_1b.o two_file_test_tmp_6.o
|
|
|
|
$(TEST_AR) rc two_file_test_6.a two_file_test_1.o two_file_test_tmp_6.o two_file_test_2.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ two_file_test_main.o two_file_test_6.a
|
2011-07-07 00:07:59 +02:00
|
|
|
@sleep 1
|
|
|
|
cp -f two_file_test_1b_v1.o two_file_test_tmp_6.o
|
|
|
|
$(TEST_AR) rc two_file_test_6.a two_file_test_1.o two_file_test_tmp_6.o two_file_test_2.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ two_file_test_main.o -Wl,--incremental-unchanged two_file_test_6.a -Wl,--incremental-unknown
|
2011-07-07 00:07:59 +02:00
|
|
|
|
2011-06-08 06:24:59 +02:00
|
|
|
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
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
|
2011-06-08 06:24:59 +02:00
|
|
|
@sleep 1
|
|
|
|
cp -f copy_test.o copy_test_tmp.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
|
2011-06-08 06:24:59 +02:00
|
|
|
|
|
|
|
check_PROGRAMS += incremental_common_test_1
|
|
|
|
incremental_common_test_1: common_test_1_v1.o common_test_1_v2.o gcctestdir/ld
|
|
|
|
cp -f common_test_1_v1.o common_test_1_tmp.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ common_test_1_tmp.o
|
2011-06-08 06:24:59 +02:00
|
|
|
@sleep 1
|
|
|
|
cp -f common_test_1_v2.o common_test_1_tmp.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ common_test_1_tmp.o
|
2011-06-08 06:24:59 +02:00
|
|
|
|
2011-09-14 03:10:43 +02:00
|
|
|
check_PROGRAMS += incremental_comdat_test_1
|
|
|
|
incremental_comdat_test_1: incr_comdat_test_1.o incr_comdat_test_2_v1.o incr_comdat_test_2_v2.o incr_comdat_test_2_v3.o gcctestdir/ld
|
|
|
|
cp -f incr_comdat_test_2_v1.o incr_comdat_test_1_tmp.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
|
2011-09-14 03:10:43 +02:00
|
|
|
@sleep 1
|
|
|
|
cp -f incr_comdat_test_2_v2.o incr_comdat_test_1_tmp.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
|
2011-09-14 03:10:43 +02:00
|
|
|
@sleep 1
|
|
|
|
cp -f incr_comdat_test_2_v3.o incr_comdat_test_1_tmp.o
|
2015-03-12 06:07:51 +01:00
|
|
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
|
2011-09-14 03:10:43 +02:00
|
|
|
|
2011-05-25 00:01:46 +02:00
|
|
|
endif DEFAULT_TARGET_X86_64
|
|
|
|
|
2013-11-17 19:30:28 +01:00
|
|
|
if DEFAULT_TARGET_X86_64
|
|
|
|
check_PROGRAMS += exception_x86_64_bnd_test
|
|
|
|
exception_x86_64_bnd_test_SOURCES = exception_test_main.cc
|
2014-09-24 08:18:19 +02:00
|
|
|
exception_x86_64_bnd_test_DEPENDENCIES = gcctestdir/ld exception_x86_64_bnd_1.o exception_x86_64_bnd_2.o
|
2013-11-17 19:30:28 +01:00
|
|
|
exception_x86_64_bnd_test_LDFLAGS = $(exception_test_LDFLAGS)
|
2014-09-24 08:18:19 +02:00
|
|
|
exception_x86_64_bnd_test_LDADD = exception_x86_64_bnd_1.o exception_x86_64_bnd_2.o
|
2013-11-23 00:38:24 +01:00
|
|
|
exception_x86_64_bnd_1.o: exception_test_1.cc gcctestdir/as
|
2013-11-17 19:30:28 +01:00
|
|
|
$(CXXCOMPILE) -c -fpic -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
|
2013-11-23 00:38:24 +01:00
|
|
|
exception_x86_64_bnd_2.o: exception_test_2.cc gcctestdir/as
|
2013-11-17 19:30:28 +01:00
|
|
|
$(CXXCOMPILE) -c -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
|
|
|
|
endif DEFAULT_TARGET_X86_64
|
|
|
|
|
2007-12-06 18:07:24 +01:00
|
|
|
endif GCC
|
|
|
|
endif NATIVE_LINKER
|
2009-10-07 00:58:27 +02:00
|
|
|
|
2010-10-12 21:21:41 +02:00
|
|
|
# These tests work with native and cross linkers.
|
|
|
|
|
|
|
|
if NATIVE_OR_CROSS_LINKER
|
|
|
|
|
|
|
|
# Test script section order.
|
|
|
|
check_SCRIPTS += script_test_10.sh
|
|
|
|
check_DATA += script_test_10.stdout
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += script_test_10
|
2010-10-12 21:21:41 +02:00
|
|
|
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
|
2013-10-12 00:16:34 +02:00
|
|
|
gcctestdir/ld -o $@ script_test_10.o -T $(srcdir)/script_test_10.t
|
2010-10-12 21:21:41 +02:00
|
|
|
script_test_10.stdout: script_test_10
|
|
|
|
$(TEST_READELF) -SW script_test_10 > $@
|
|
|
|
|
|
|
|
# These tests work with cross linkers only.
|
2009-10-07 00:58:27 +02:00
|
|
|
|
|
|
|
if DEFAULT_TARGET_I386
|
|
|
|
|
|
|
|
check_SCRIPTS += split_i386.sh
|
|
|
|
check_DATA += split_i386_1.stdout split_i386_2.stdout \
|
|
|
|
split_i386_3.stdout split_i386_4.stdout split_i386_r.stdout
|
|
|
|
SPLIT_DEFSYMS = --defsym __morestack=0x100 --defsym __morestack_non_split=0x200
|
|
|
|
split_i386_1.o: split_i386_1.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_i386_2.o: split_i386_2.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_i386_3.o: split_i386_3.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_i386_4.o: split_i386_4.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_i386_n.o: split_i386_n.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_i386_1: split_i386_1.o split_i386_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_i386_1.o split_i386_n.o
|
|
|
|
split_i386_1.stdout: split_i386_1
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_i386_2: split_i386_2.o split_i386_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_i386_2.o split_i386_n.o
|
|
|
|
split_i386_2.stdout: split_i386_2
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_i386_3.stdout: split_i386_3.o split_i386_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o split_i386_3 split_i386_3.o split_i386_n.o > $@ 2>&1 || exit 0
|
|
|
|
split_i386_4: split_i386_4.o split_i386_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_i386_4.o split_i386_n.o
|
|
|
|
split_i386_4.stdout: split_i386_4
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_i386_r.stdout: split_i386_1.o split_i386_n.o ../ld-new
|
|
|
|
../ld-new -r split_i386_1.o split_i386_n.o -o split_i386_r > $@ 2>&1 || exit 0
|
|
|
|
MOSTLYCLEANFILES += split_i386_1 split_i386_2 split_i386_3 \
|
|
|
|
split_i386_4 split_i386_r
|
|
|
|
|
|
|
|
endif DEFAULT_TARGET_I386
|
|
|
|
|
|
|
|
if DEFAULT_TARGET_X86_64
|
|
|
|
|
|
|
|
check_SCRIPTS += split_x86_64.sh
|
|
|
|
check_DATA += split_x86_64_1.stdout split_x86_64_2.stdout \
|
|
|
|
split_x86_64_3.stdout split_x86_64_4.stdout split_x86_64_r.stdout
|
|
|
|
SPLIT_DEFSYMS = --defsym __morestack=0x100 --defsym __morestack_non_split=0x200
|
|
|
|
split_x86_64_1.o: split_x86_64_1.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x86_64_2.o: split_x86_64_2.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x86_64_3.o: split_x86_64_3.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x86_64_4.o: split_x86_64_4.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x86_64_n.o: split_x86_64_n.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x86_64_1: split_x86_64_1.o split_x86_64_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_x86_64_1.o split_x86_64_n.o
|
|
|
|
split_x86_64_1.stdout: split_x86_64_1
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_x86_64_2: split_x86_64_2.o split_x86_64_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_x86_64_2.o split_x86_64_n.o
|
|
|
|
split_x86_64_2.stdout: split_x86_64_2
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_x86_64_3.stdout: split_x86_64_3.o split_x86_64_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o split_x86_64_3 split_x86_64_3.o split_x86_64_n.o > $@ 2>&1 || exit 0
|
|
|
|
split_x86_64_4: split_x86_64_4.o split_x86_64_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_x86_64_4.o split_x86_64_n.o
|
|
|
|
split_x86_64_4.stdout: split_x86_64_4
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_x86_64_r.stdout: split_x86_64_1.o split_x86_64_n.o ../ld-new
|
|
|
|
../ld-new -r split_x86_64_1.o split_x86_64_n.o -o split_x86_64_r > $@ 2>&1 || exit 0
|
|
|
|
MOSTLYCLEANFILES += split_x86_64_1 split_x86_64_2 split_x86_64_3 \
|
|
|
|
split_x86_64_4 split_x86_64_r
|
|
|
|
|
|
|
|
endif DEFAULT_TARGET_X86_64
|
2010-02-12 06:51:32 +01:00
|
|
|
|
Handle stack split for x32
X32 uses cmp %fs:NN,%esp, lea NN(%rsp),%r10d, lea NN(%rsp),%r11d,
instead of cmp %fs:NN,%rsp, lea NN(%rsp),%r10, lea NN(%rsp),%r11.
This patch handles it.
PR gold/17729
* configure.ac (DEFAULT_TARGET_X86_64): Don't set for x32.
(DEFAULT_TARGET_X32): Set for x32.
* x86_64.cc (cmp_insn_32): New.
(lea_r10_insn_32): Likewise.
(lea_r11_insn_32): Likewise.
(cmp_insn_64): Likewise.
(lea_r10_insn_64): Likewise.
(lea_r11_insn_64): Likewise.
(Target_x86_64<size>::do_calls_non_split): Handle x32.
* testsuite/Makefile.am (check_SCRIPTS): Add split_x32.sh.
(check_DATA): Add split_x32 files.
(split_x32_[1234n].o): New targets.
(split_x32_[124]): New targets.
(split_x32_[1234r].stdout): New targets.
* testsuite/split_x32.sh: New file.
* testsuite/split_x32_1.s: Likewise.
* testsuite/split_x32_2.s: Likewise.
* testsuite/split_x32_3.s: Likewise.
* testsuite/split_x32_4.s: Likewise.
* testsuite/split_x32_n.s: Likewise.
* configure: Regenerated.
* testsuite/Makefile.in: Likewise.
2014-12-18 20:09:28 +01:00
|
|
|
if DEFAULT_TARGET_X32
|
|
|
|
|
|
|
|
check_SCRIPTS += split_x32.sh
|
|
|
|
check_DATA += split_x32_1.stdout split_x32_2.stdout \
|
|
|
|
split_x32_3.stdout split_x32_4.stdout split_x32_r.stdout
|
|
|
|
SPLIT_DEFSYMS = --defsym __morestack=0x100 --defsym __morestack_non_split=0x200
|
|
|
|
split_x32_1.o: split_x32_1.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x32_2.o: split_x32_2.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x32_3.o: split_x32_3.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x32_4.o: split_x32_4.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x32_n.o: split_x32_n.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
split_x32_1: split_x32_1.o split_x32_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_x32_1.o split_x32_n.o
|
|
|
|
split_x32_1.stdout: split_x32_1
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_x32_2: split_x32_2.o split_x32_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_x32_2.o split_x32_n.o
|
|
|
|
split_x32_2.stdout: split_x32_2
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_x32_3.stdout: split_x32_3.o split_x32_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o split_x32_3 split_x32_3.o split_x32_n.o > $@ 2>&1 || exit 0
|
|
|
|
split_x32_4: split_x32_4.o split_x32_n.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_x32_4.o split_x32_n.o
|
|
|
|
split_x32_4.stdout: split_x32_4
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_x32_r.stdout: split_x32_1.o split_x32_n.o ../ld-new
|
|
|
|
../ld-new -r split_x32_1.o split_x32_n.o -o split_x32_r > $@ 2>&1 || exit 0
|
|
|
|
MOSTLYCLEANFILES += split_x32_1 split_x32_2 split_x32_3 \
|
|
|
|
split_x32_4 split_x32_r
|
|
|
|
|
|
|
|
endif DEFAULT_TARGET_X32
|
|
|
|
|
2010-02-12 06:51:32 +01:00
|
|
|
if DEFAULT_TARGET_ARM
|
|
|
|
|
|
|
|
check_SCRIPTS += arm_abs_global.sh
|
|
|
|
check_DATA += arm_abs_global.stdout
|
|
|
|
arm_abs_lib.o: arm_abs_lib.s
|
|
|
|
$(TEST_AS) -march=armv7-a -o $@ $<
|
2010-03-03 20:31:54 +01:00
|
|
|
libarm_abs.so: arm_abs_lib.o ../ld-new
|
2010-02-12 06:51:32 +01:00
|
|
|
../ld-new -shared -o $@ arm_abs_lib.o
|
|
|
|
arm_abs_global.o: arm_abs_global.s
|
|
|
|
$(TEST_AS) -march=armv7-a -o $@ $<
|
2010-03-03 20:31:54 +01:00
|
|
|
arm_abs_global: arm_abs_global.o libarm_abs.so ../ld-new
|
2010-02-12 06:51:32 +01:00
|
|
|
../ld-new -o $@ arm_abs_global.o -L. -larm_abs
|
|
|
|
arm_abs_global.stdout: arm_abs_global
|
|
|
|
$(TEST_READELF) -r $< > $@
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_abs_global
|
|
|
|
|
2010-09-09 01:54:51 +02:00
|
|
|
check_SCRIPTS += arm_branch_in_range.sh arm_branch_out_of_range.sh
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
check_DATA += arm_bl_in_range.stdout arm_bl_out_of_range.stdout \
|
|
|
|
thumb_bl_in_range.stdout thumb_bl_out_of_range.stdout \
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
thumb2_bl_in_range.stdout thumb2_bl_out_of_range.stdout \
|
|
|
|
thumb_blx_in_range.stdout thumb_blx_out_of_range.stdout \
|
2010-09-09 01:54:51 +02:00
|
|
|
thumb2_blx_in_range.stdout thumb2_blx_out_of_range.stdout \
|
2011-06-27 19:53:32 +02:00
|
|
|
thumb_bl_out_of_range_local.stdout arm_thm_jump11.stdout \
|
|
|
|
arm_thm_jump8.stdout
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
|
|
|
arm_bl_in_range.stdout: arm_bl_in_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
arm_bl_in_range: arm_bl_in_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/arm_branch_range.t -o $@ $<
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
|
|
|
arm_bl_in_range.o: arm_bl_in_range.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_bl_out_of_range.stdout: arm_bl_out_of_range
|
|
|
|
$(TEST_OBJDUMP) -S $< > $@
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
arm_bl_out_of_range: arm_bl_out_of_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/arm_branch_range.t -o $@ $<
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
|
|
|
arm_bl_out_of_range.o: arm_bl_out_of_range.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
thumb_bl_in_range.stdout: thumb_bl_in_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
thumb_bl_in_range: thumb_bl_in_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
|
|
|
thumb_bl_in_range.o: thumb_bl_in_range.s
|
|
|
|
$(TEST_AS) -o $@ -march=armv5te $<
|
|
|
|
|
|
|
|
thumb_bl_out_of_range.stdout: thumb_bl_out_of_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
thumb_bl_out_of_range: thumb_bl_out_of_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
thumb_bl_out_of_range.o: thumb_bl_out_of_range.s
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
$(TEST_AS) -o $@ -march=armv5te $<
|
|
|
|
|
|
|
|
thumb2_bl_in_range.stdout: thumb2_bl_in_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
thumb2_bl_in_range: thumb2_bl_in_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/thumb2_branch_range.t -o $@ $<
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
|
|
|
thumb2_bl_in_range.o: thumb_bl_in_range.s
|
|
|
|
$(TEST_AS) -o $@ -march=armv7-a $<
|
|
|
|
|
|
|
|
thumb2_bl_out_of_range.stdout: thumb2_bl_out_of_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
thumb2_bl_out_of_range: thumb2_bl_out_of_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/thumb2_branch_range.t -o $@ $<
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
thumb2_bl_out_of_range.o: thumb_bl_out_of_range.s
|
|
|
|
$(TEST_AS) -o $@ -march=armv7-a $<
|
|
|
|
|
|
|
|
thumb_blx_in_range.stdout: thumb_blx_in_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
thumb_blx_in_range: thumb_blx_in_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
|
|
|
|
thumb_blx_in_range.o: thumb_blx_in_range.s
|
|
|
|
$(TEST_AS) -o $@ -march=armv5te $<
|
|
|
|
|
|
|
|
thumb_blx_out_of_range.stdout: thumb_blx_out_of_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
thumb_blx_out_of_range: thumb_blx_out_of_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
|
|
|
|
thumb_blx_out_of_range.o: thumb_blx_out_of_range.s
|
|
|
|
$(TEST_AS) -o $@ -march=armv5te $<
|
|
|
|
|
|
|
|
thumb2_blx_in_range.stdout: thumb2_blx_in_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
thumb2_blx_in_range: thumb2_blx_in_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/thumb2_branch_range.t -o $@ $<
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
|
|
|
|
thumb2_blx_in_range.o: thumb_blx_in_range.s
|
|
|
|
$(TEST_AS) -o $@ -march=armv7-a $<
|
|
|
|
|
|
|
|
thumb2_blx_out_of_range.stdout: thumb2_blx_out_of_range
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
thumb2_blx_out_of_range: thumb2_blx_out_of_range.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/thumb2_branch_range.t -o $@ $<
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
|
|
|
|
thumb2_blx_out_of_range.o: thumb_blx_out_of_range.s
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
$(TEST_AS) -o $@ -march=armv7-a $<
|
|
|
|
|
2010-09-09 01:54:51 +02:00
|
|
|
thumb_bl_out_of_range_local.stdout: thumb_bl_out_of_range_local
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
thumb_bl_out_of_range_local: thumb_bl_out_of_range_local.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
|
2010-09-09 01:54:51 +02:00
|
|
|
|
|
|
|
thumb_bl_out_of_range_local.o: thumb_bl_out_of_range_local.s
|
|
|
|
$(TEST_AS) -o $@ -march=armv5te $<
|
|
|
|
|
2011-06-27 19:53:32 +02:00
|
|
|
arm_thm_jump11.stdout: arm_thm_jump11
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_thm_jump11: arm_thm_jump11.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/arm_thm_jump11.t -o $@ $<
|
2011-06-27 19:53:32 +02:00
|
|
|
|
|
|
|
arm_thm_jump11.o: arm_thm_jump11.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_thm_jump8.stdout: arm_thm_jump8
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_thm_jump8: arm_thm_jump8.o ../ld-new
|
2013-10-12 00:16:34 +02:00
|
|
|
../ld-new -T $(srcdir)/arm_thm_jump8.t -o $@ $<
|
2011-06-27 19:53:32 +02:00
|
|
|
|
|
|
|
arm_thm_jump8.o: arm_thm_jump8.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
MOSTLYCLEANFILES += arm_bl_in_range arm_bl_out_of_range thumb_bl_in_range \
|
2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
Arm_relocate_functions::abs16): Use correct check for overflow
specified in the ARM ELF specs.
(Arm_relocate_functions): thumb_branch_common. Handle bit 1 of branch
target of a BLX instruction specially.
(Reloc_stub::stub_type_for_reloc): Ditto.
(Relocate::relocate): Use symbolic names instead of numeric relocation
codes to report error.
(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
workaround.
* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
thumb2_blx_out_of_range.stdout
(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
thumb2_blx_in_range, thumb2_blx_in_range.o,
thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
thumb2_blx_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
thumb2_blx_in_range and thumb2_blx_out_of_range.
* testsuite/Makefile.in: Regenerate.
* arm_branch_in_range.sh: Add tests for THUMB BLX.
* testsuite/thumb_blx_in_range.s: New file.
* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 23:48:05 +01:00
|
|
|
thumb_bl_out_of_range thumb2_bl_in_range thumb2_bl_out_of_range \
|
|
|
|
thumb_blx_in_range thumb_blx_out_of_range thumb2_blx_in_range \
|
2011-06-27 19:53:32 +02:00
|
|
|
thumb2_blx_out_of_range thumb_bl_out_of_range_local arm_thm_jump11 \
|
|
|
|
arm_thm_jump8
|
2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
handling of the maximum backward branch offset.
(Arm_relocate_functions::thumb_branch_common): Ditto.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
arm_bl_out_of_range.stdout, arm_bl_out_of_range,
arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
thumb_bl_out_of_range thumb_bl_out_of_range.o,
thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
thumb2_bl_out_of_range.o): New rules.
(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
thumb2_bl_out_of_range
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_bl_in_range.s: New file.
* testsuite/arm_bl_out_of_range.s: Ditto.
* testsuite/arm_branch_in_range.sh: Ditto.
* testsuite/arm_branch_range.t: Ditto.
* testsuite/thumb2_branch_range.t: Ditto.
* testsuite/thumb_bl_in_range.s: Ditto.
* testsuite/thumb_bl_out_of_range.s: Ditto.
* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 07:26:07 +01:00
|
|
|
|
2010-02-27 01:36:49 +01:00
|
|
|
check_SCRIPTS += arm_fix_v4bx.sh
|
|
|
|
check_DATA += arm_fix_v4bx.stdout arm_fix_v4bx_interworking.stdout \
|
|
|
|
arm_no_fix_v4bx.stdout
|
|
|
|
|
|
|
|
arm_fix_v4bx.stdout: arm_fix_v4bx
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
arm_fix_v4bx: arm_fix_v4bx.o ../ld-new
|
2011-11-03 04:38:34 +01:00
|
|
|
../ld-new --no-fix-arm1176 --fix-v4bx -o $@ $<
|
2010-02-27 01:36:49 +01:00
|
|
|
|
|
|
|
arm_fix_v4bx.o: arm_fix_v4bx.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_v4bx_interworking.stdout: arm_fix_v4bx_interworking
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
arm_fix_v4bx_interworking: arm_fix_v4bx.o ../ld-new
|
2011-11-03 04:38:34 +01:00
|
|
|
../ld-new --no-fix-arm1176 --fix-v4bx-interworking -o $@ $<
|
2010-02-27 01:36:49 +01:00
|
|
|
|
|
|
|
arm_no_fix_v4bx.stdout: arm_no_fix_v4bx
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
2010-03-03 20:31:54 +01:00
|
|
|
arm_no_fix_v4bx: arm_fix_v4bx.o ../ld-new
|
2011-11-03 04:38:34 +01:00
|
|
|
../ld-new --no-fix-arm1176 -o $@ $<
|
2010-02-27 01:36:49 +01:00
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_fix_v4bx arm_fix_v4bx_interworking arm_no_fix_v4bx
|
|
|
|
|
2010-05-12 Doug Kwan <dougkwan@google.com>
elfcpp/ChangeLog
* arm.h (Tag_FP_arch, Tag_ABI_align_needed, Tag_ABI_align_preserved,
Tag_FP_HP_extension, Tag_MPextension_use_legacy): Rename from
existing tags.
(Tag_undefined40, Tag_undefined41, Tag_MPextension_use,
Tag_undefined43): New tags.
(Targ_VFP_arch, Tag_ABI_align8_needed, TAG_ABI_align8_preserved,
Tag_VFP_HP_extension): Define aliases for backward compatiblity.
gold/ChangeLog
* arm.cc (Target_arm::do_finalize_sections): Create an empty
attributes section only if there no attributes section after merging.
(Target_arm::merge_object_attributes): Move value of
Tag_MPextension_use_legacy to that of Tag_MPextension_use.
Handle Tag_DIV_use and Tag_MPextension_use_legacy.
* testsuite/Makefile.am (check_SCRIPTS): Add arm_attr_merge.sh
(check_DATA): Add arm_attr_merge_6.stdout, arm_attr_merge_6r_stdout
and arm_attr_merge_7.stdout.
(arm_attr_merge_6.stdout, arm_attr_merge_6 arm_attr_merge_6a.o
arm_attr_merge_6b.o, arm_attr_merge_6r.stdout, arm_attr_merge_6r,
arm_attr_merge_7.stdout, arm_attr_merge_7, arm_attr_merge_7a.o,
arm_attr_merge_7b.o): New rules.
(MOSTLYCLEANFILES): Add arm_attr_merge_6, arm_attr_merge_6r and
arm_attr_merge_7
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_attr_merge.sh: New file.
* testsuite/arm_attr_merge_[67][ab].s: Same.
2010-05-13 04:41:15 +02:00
|
|
|
check_SCRIPTS += arm_attr_merge.sh
|
|
|
|
check_DATA += arm_attr_merge_6.stdout arm_attr_merge_6r.stdout \
|
|
|
|
arm_attr_merge_7.stdout
|
|
|
|
|
|
|
|
arm_attr_merge_6.stdout: arm_attr_merge_6
|
|
|
|
$(TEST_READELF) -A $< > $@
|
|
|
|
|
|
|
|
arm_attr_merge_6: arm_attr_merge_6a.o arm_attr_merge_6b.o
|
|
|
|
../ld-new -o $@ arm_attr_merge_6a.o arm_attr_merge_6b.o
|
|
|
|
|
|
|
|
arm_attr_merge_6a.o: arm_attr_merge_6a.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_attr_merge_6b.o: arm_attr_merge_6b.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_attr_merge_6r.stdout: arm_attr_merge_6r
|
|
|
|
$(TEST_READELF) -A $< > $@
|
|
|
|
|
|
|
|
arm_attr_merge_6r: arm_attr_merge_6b.o arm_attr_merge_6a.o
|
|
|
|
../ld-new -o $@ arm_attr_merge_6b.o arm_attr_merge_6a.o
|
|
|
|
|
|
|
|
arm_attr_merge_7.stdout: arm_attr_merge_7
|
|
|
|
$(TEST_READELF) -A $< > $@
|
|
|
|
|
|
|
|
arm_attr_merge_7: arm_attr_merge_7a.o arm_attr_merge_7b.o
|
|
|
|
../ld-new -o $@ arm_attr_merge_7a.o arm_attr_merge_7b.o
|
|
|
|
|
|
|
|
arm_attr_merge_7a.o: arm_attr_merge_7a.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_attr_merge_7b.o: arm_attr_merge_7b.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_attr_merge_6 arm_attr_merge_6r arm_attr_merge_7
|
|
|
|
|
2011-11-03 04:38:34 +01:00
|
|
|
# ARM1176 workaround test.
|
|
|
|
check_SCRIPTS += arm_fix_1176.sh
|
|
|
|
check_DATA += arm_fix_1176_default_v6z.stdout arm_fix_1176_on_v6z.stdout \
|
|
|
|
arm_fix_1176_off_v6z.stdout arm_fix_1176_default_v5te.stdout \
|
|
|
|
arm_fix_1176_default_v7a.stdout arm_fix_1176_default_1156t2f_s.stdout
|
|
|
|
|
|
|
|
arm_fix_1176_default_v6z.stdout: arm_fix_1176_default_v6z
|
|
|
|
$(TEST_OBJDUMP) -D -j.foo $< > $@
|
|
|
|
|
|
|
|
arm_fix_1176_default_v6z: arm_fix_1176_default_v6z.o ../ld-new
|
|
|
|
../ld-new --section-start=.foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_default_v6z.o: arm_fix_1176.s
|
|
|
|
$(TEST_AS) -march=armv6z -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_on_v6z.stdout: arm_fix_1176_on_v6z
|
|
|
|
$(TEST_OBJDUMP) -D -j.foo $< > $@
|
|
|
|
|
|
|
|
arm_fix_1176_on_v6z: arm_fix_1176_on_v6z.o ../ld-new
|
|
|
|
../ld-new --section-start=.foo=0x2001014 --fix-arm1176 -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_on_v6z.o: arm_fix_1176.s
|
|
|
|
$(TEST_AS) -march=armv6z -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_off_v6z.stdout: arm_fix_1176_off_v6z
|
|
|
|
$(TEST_OBJDUMP) -D -j.foo $< > $@
|
|
|
|
|
|
|
|
arm_fix_1176_off_v6z: arm_fix_1176_off_v6z.o ../ld-new
|
|
|
|
../ld-new --section-start=.foo=0x2001014 --no-fix-arm1176 -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_off_v6z.o: arm_fix_1176.s
|
|
|
|
$(TEST_AS) -march=armv6z -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_default_v5te.stdout: arm_fix_1176_default_v5te
|
|
|
|
$(TEST_OBJDUMP) -D -j.foo $< > $@
|
|
|
|
|
|
|
|
arm_fix_1176_default_v5te: arm_fix_1176_default_v5te.o ../ld-new
|
|
|
|
../ld-new --section-start=.foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_default_v5te.o: arm_fix_1176.s
|
|
|
|
$(TEST_AS) -march=armv5te -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_default_v7a.stdout: arm_fix_1176_default_v7a
|
|
|
|
$(TEST_OBJDUMP) -D -j.foo $< > $@
|
|
|
|
|
|
|
|
arm_fix_1176_default_v7a: arm_fix_1176_default_v7a.o ../ld-new
|
|
|
|
../ld-new --section-start=.foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_default_v7a.o: arm_fix_1176.s
|
|
|
|
$(TEST_AS) -march=armv7-a -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_default_1156t2f_s.stdout: arm_fix_1176_default_1156t2f_s
|
|
|
|
$(TEST_OBJDUMP) -D -j.foo $< > $@
|
|
|
|
|
|
|
|
arm_fix_1176_default_1156t2f_s: arm_fix_1176_default_1156t2f_s.o ../ld-new
|
|
|
|
../ld-new --section-start=.foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_fix_1176_default_1156t2f_s.o: arm_fix_1176.s
|
|
|
|
$(TEST_AS) -mcpu=arm1156t2f-s -o $@ $<
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_fix_1176_default_v6z arm_fix_1176_on_v6z arm_fix_1176_off_v6z \
|
|
|
|
arm_fix_1176_default_v5te arm_fix_1176_default_v7a arm_fix_1176_default_1156t2f_s
|
|
|
|
|
2010-09-09 01:54:51 +02:00
|
|
|
# Cortex-A8 workaround test.
|
|
|
|
|
|
|
|
check_SCRIPTS += arm_cortex_a8.sh
|
|
|
|
check_DATA += arm_cortex_a8_b_cond.stdout arm_cortex_a8_b.stdout \
|
|
|
|
arm_cortex_a8_bl.stdout arm_cortex_a8_blx.stdout \
|
|
|
|
arm_cortex_a8_local.stdout arm_cortex_a8_local_reloc.stdout
|
|
|
|
|
|
|
|
arm_cortex_a8_b_cond.stdout: arm_cortex_a8_b_cond
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
|
|
|
arm_cortex_a8_b_cond: arm_cortex_a8_b_cond.o ../ld-new
|
|
|
|
../ld-new -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_b_cond.o: arm_cortex_a8_b_cond.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_b.stdout: arm_cortex_a8_b
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
|
|
|
arm_cortex_a8_b: arm_cortex_a8_b.o ../ld-new
|
|
|
|
../ld-new --fix-cortex-a8 -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_b.o: arm_cortex_a8_b.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_bl.stdout: arm_cortex_a8_bl
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
|
|
|
arm_cortex_a8_bl: arm_cortex_a8_bl.o ../ld-new
|
|
|
|
../ld-new -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_bl.o: arm_cortex_a8_bl.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_blx.stdout: arm_cortex_a8_blx
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
|
|
|
arm_cortex_a8_blx: arm_cortex_a8_blx.o ../ld-new
|
|
|
|
../ld-new -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_blx.o: arm_cortex_a8_blx.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_local.stdout: arm_cortex_a8_local
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
|
|
|
arm_cortex_a8_local: arm_cortex_a8_local.o ../ld-new
|
|
|
|
../ld-new -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_local.o: arm_cortex_a8_local.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_local_reloc.stdout: arm_cortex_a8_local_reloc
|
|
|
|
$(TEST_OBJDUMP) -D -j.text $< > $@
|
|
|
|
|
|
|
|
arm_cortex_a8_local_reloc: arm_cortex_a8_local_reloc.o ../ld-new
|
|
|
|
../ld-new -o $@ $<
|
|
|
|
|
|
|
|
arm_cortex_a8_local_reloc.o: arm_cortex_a8_local_reloc.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_cortex_a8_b_cond arm_cortex_a8_b arm_cortex_a8_bl \
|
|
|
|
arm_cortex_a8_blx arm_cortex_a8_local arm_cortex_a8_local_reloc
|
|
|
|
|
2011-04-22 23:50:03 +02:00
|
|
|
check_SCRIPTS += arm_exidx_test.sh
|
|
|
|
check_DATA += arm_exidx_test.stdout
|
|
|
|
|
|
|
|
arm_exidx_test.stdout: arm_exidx_test.so
|
2012-03-20 00:54:07 +01:00
|
|
|
$(TEST_READELF) -Sr $< > $@
|
2011-04-22 23:50:03 +02:00
|
|
|
|
|
|
|
arm_exidx_test.so: arm_exidx_test.o ../ld-new
|
|
|
|
../ld-new -shared -o $@ $<
|
|
|
|
|
|
|
|
arm_exidx_test.o: arm_exidx_test.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
2011-06-01 21:59:42 +02:00
|
|
|
check_SCRIPTS += pr12826.sh
|
|
|
|
check_DATA += pr12826.stdout
|
|
|
|
|
|
|
|
pr12826.stdout: pr12826.so
|
|
|
|
$(TEST_READELF) -A $< > $@
|
|
|
|
|
|
|
|
pr12826.so: pr12826_1.o pr12826_2.o ../ld-new
|
|
|
|
../ld-new -shared -o $@ $<
|
|
|
|
|
|
|
|
pr12826_1.o: pr12826_1.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
pr12826_2.o: pr12826_2.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
2011-04-22 23:50:03 +02:00
|
|
|
|
2011-07-06 19:58:42 +02:00
|
|
|
check_SCRIPTS += arm_unaligned_reloc.sh
|
2011-11-10 01:41:53 +01:00
|
|
|
check_DATA += arm_unaligned_reloc.stdout arm_unaligned_reloc_r.stdout
|
2011-07-06 19:58:42 +02:00
|
|
|
|
|
|
|
arm_unaligned_reloc.stdout: arm_unaligned_reloc
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
2011-11-10 01:41:53 +01:00
|
|
|
arm_unaligned_reloc_r.stdout: arm_unaligned_reloc_r
|
|
|
|
$(TEST_OBJDUMP) -Dr $< > $@
|
|
|
|
|
2011-07-06 19:58:42 +02:00
|
|
|
arm_unaligned_reloc: arm_unaligned_reloc.o ../ld-new
|
|
|
|
../ld-new -o $@ $<
|
|
|
|
|
2011-11-10 01:41:53 +01:00
|
|
|
arm_unaligned_reloc_r: arm_unaligned_reloc.o ../ld-new
|
|
|
|
../ld-new -r -o $@ $<
|
|
|
|
|
2011-07-06 19:58:42 +02:00
|
|
|
arm_unaligned_reloc.o: arm_unaligned_reloc.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
2011-11-10 01:41:53 +01:00
|
|
|
MOSTLYCLEANFILES += arm_unaligned_reloc arm_unaligned_reloc_r
|
2011-07-06 19:58:42 +02:00
|
|
|
|
2011-11-02 20:11:48 +01:00
|
|
|
# Check ARM to ARM farcall veneers
|
|
|
|
|
|
|
|
check_SCRIPTS += arm_farcall_arm_arm.sh
|
|
|
|
check_DATA += arm_farcall_arm_arm.stdout
|
|
|
|
|
|
|
|
arm_farcall_arm_arm.stdout: arm_farcall_arm_arm
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
|
|
|
|
arm_farcall_arm_arm: arm_farcall_arm_arm.o ../ld-new
|
2011-11-03 04:38:34 +01:00
|
|
|
../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001020 -o $@ $<
|
2011-11-02 20:11:48 +01:00
|
|
|
|
|
|
|
arm_farcall_arm_arm.o: arm_farcall_arm_arm.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_farcall_arm_arm
|
|
|
|
|
|
|
|
# Check ARM to Thumb farcall veneers
|
|
|
|
|
|
|
|
check_SCRIPTS += arm_farcall_arm_thumb.sh
|
|
|
|
check_DATA += arm_farcall_arm_thumb.stdout arm_farcall_arm_thumb_5t.stdout
|
|
|
|
|
|
|
|
arm_farcall_arm_thumb.stdout: arm_farcall_arm_thumb
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_arm_thumb: arm_farcall_arm_thumb.o ../ld-new
|
|
|
|
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_arm_thumb.o: arm_farcall_arm_thumb.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_arm_thumb_5t.stdout: arm_farcall_arm_thumb_5t
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_arm_thumb_5t: arm_farcall_arm_thumb_5t.o ../ld-new
|
2011-11-03 04:38:34 +01:00
|
|
|
../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
|
2011-11-02 20:11:48 +01:00
|
|
|
|
|
|
|
arm_farcall_arm_thumb_5t.o: arm_farcall_arm_thumb.s
|
|
|
|
$(TEST_AS) -march=armv5t -o $@ $<
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_farcall_arm_thumb arm_farcall_arm_thumb_5t
|
|
|
|
|
|
|
|
# Check Thumb to Thumb farcall veneers
|
|
|
|
|
|
|
|
check_SCRIPTS += arm_farcall_thumb_thumb.sh
|
|
|
|
check_DATA += arm_farcall_thumb_thumb.stdout \
|
|
|
|
arm_farcall_thumb_thumb_5t.stdout \
|
|
|
|
arm_farcall_thumb_thumb_7m.stdout \
|
|
|
|
arm_farcall_thumb_thumb_6m.stdout
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb.stdout: arm_farcall_thumb_thumb
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb: arm_farcall_thumb_thumb.o ../ld-new
|
|
|
|
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb.o: arm_farcall_thumb_thumb.s
|
|
|
|
$(TEST_AS) -march=armv4t -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_5t.stdout: arm_farcall_thumb_thumb_5t
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_5t: arm_farcall_thumb_thumb_5t.o ../ld-new
|
2011-11-03 04:38:34 +01:00
|
|
|
../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
|
2011-11-02 20:11:48 +01:00
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_5t.o: arm_farcall_thumb_thumb.s
|
|
|
|
$(TEST_AS) -march=armv5t -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_7m.stdout: arm_farcall_thumb_thumb_7m
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_7m: arm_farcall_thumb_thumb_7m.o ../ld-new
|
|
|
|
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_7m.o: arm_farcall_thumb_thumb.s
|
|
|
|
$(TEST_AS) -march=armv7-m -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_6m.stdout: arm_farcall_thumb_thumb_6m
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_6m: arm_farcall_thumb_thumb_6m.o ../ld-new
|
|
|
|
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_thumb_6m.o: arm_farcall_thumb_thumb.s
|
|
|
|
$(TEST_AS) -march=armv6-m -o $@ $<
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_farcall_thumb_thumb arm_farcall_thumb_thumb_5t \
|
|
|
|
arm_farcall_thumb_thumb_7m arm_farcall_thumb_thumb_6m
|
|
|
|
|
|
|
|
# Check Thumb to ARM farcall veneers
|
|
|
|
|
|
|
|
check_SCRIPTS += arm_farcall_thumb_arm.sh
|
|
|
|
check_DATA += arm_farcall_thumb_arm.stdout \
|
|
|
|
arm_farcall_thumb_arm_5t.stdout
|
|
|
|
|
|
|
|
arm_farcall_thumb_arm.stdout: arm_farcall_thumb_arm
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_thumb_arm: arm_farcall_thumb_arm.o ../ld-new
|
|
|
|
../ld-new --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_arm.o: arm_farcall_thumb_arm.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
|
|
|
|
arm_farcall_thumb_arm_5t.stdout: arm_farcall_thumb_arm_5t
|
|
|
|
$(TEST_OBJDUMP) -D $< > $@
|
|
|
|
|
|
|
|
arm_farcall_thumb_arm_5t: arm_farcall_thumb_arm_5t.o ../ld-new
|
2011-11-03 04:38:34 +01:00
|
|
|
../ld-new --no-fix-arm1176 --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
|
2011-11-02 20:11:48 +01:00
|
|
|
|
|
|
|
arm_farcall_thumb_arm_5t.o: arm_farcall_thumb_arm.s
|
|
|
|
$(TEST_AS) -march=armv5t -o $@ $<
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += arm_farcall_thumb_arm arm_farcall_thumb_arm_5t
|
|
|
|
|
2010-02-12 06:51:32 +01:00
|
|
|
endif DEFAULT_TARGET_ARM
|
2010-10-12 21:21:41 +02:00
|
|
|
|
2016-06-29 00:43:43 +02:00
|
|
|
if DEFAULT_TARGET_AARCH64
|
|
|
|
|
|
|
|
check_SCRIPTS += aarch64_reloc_none.sh
|
|
|
|
check_DATA += aarch64_reloc_none.stdout
|
|
|
|
aarch64_reloc_none.o: aarch64_reloc_none.s
|
|
|
|
$(TEST_AS) -o $@ $<
|
|
|
|
aarch64_reloc_none: aarch64_reloc_none.o ../ld-new
|
|
|
|
../ld-new -o $@ aarch64_reloc_none.o --gc-sections
|
|
|
|
aarch64_reloc_none.stdout: aarch64_reloc_none
|
|
|
|
$(TEST_NM) $< > $@
|
|
|
|
|
|
|
|
MOSTLYCLEANFILES += aarch64_reloc_none
|
|
|
|
|
|
|
|
endif DEFAULT_TARGET_AARCH64
|
|
|
|
|
2015-12-13 02:53:09 +01:00
|
|
|
if DEFAULT_TARGET_S390
|
|
|
|
|
|
|
|
check_SCRIPTS += split_s390.sh
|
|
|
|
check_DATA += split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
|
|
|
|
split_s390_z4.stdout split_s390_n1.stdout split_s390_n2.stdout \
|
|
|
|
split_s390_a1.stdout split_s390_a2.stdout split_s390_z1_ns.stdout \
|
|
|
|
split_s390_z2_ns.stdout split_s390_z3_ns.stdout split_s390_z4_ns.stdout \
|
|
|
|
split_s390_n1_ns.stdout split_s390_n2_ns.stdout split_s390_r.stdout \
|
|
|
|
split_s390x_z1.stdout split_s390x_z2.stdout split_s390x_z3.stdout \
|
|
|
|
split_s390x_z4.stdout split_s390x_n1.stdout split_s390x_n2.stdout \
|
|
|
|
split_s390x_a1.stdout split_s390x_a2.stdout split_s390x_z1_ns.stdout \
|
|
|
|
split_s390x_z2_ns.stdout split_s390x_z3_ns.stdout \
|
|
|
|
split_s390x_z4_ns.stdout split_s390x_n1_ns.stdout \
|
|
|
|
split_s390x_n2_ns.stdout split_s390x_r.stdout
|
|
|
|
SPLIT_DEFSYMS = --defsym __morestack=0x100 --defsym __morestack_non_split=0x200
|
|
|
|
split_s390_1_z1.o: split_s390_1_z1.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_1_z2.o: split_s390_1_z2.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_1_z3.o: split_s390_1_z3.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_1_z4.o: split_s390_1_z4.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_1_n1.o: split_s390_1_n1.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_1_n2.o: split_s390_1_n2.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_1_a1.o: split_s390_1_a1.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_1_a2.o: split_s390_1_a2.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_2_s.o: split_s390_2_s.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_2_ns.o: split_s390_2_ns.s
|
|
|
|
$(TEST_AS) -m31 -o $@ $<
|
|
|
|
split_s390_z1: split_s390_1_z1.o split_s390_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z1.o split_s390_2_s.o
|
|
|
|
split_s390_z1.stdout: split_s390_z1
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_z2: split_s390_1_z2.o split_s390_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z2.o split_s390_2_s.o
|
|
|
|
split_s390_z2.stdout: split_s390_z2
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_z3: split_s390_1_z3.o split_s390_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z3.o split_s390_2_s.o
|
|
|
|
split_s390_z3.stdout: split_s390_z3
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_z4: split_s390_1_z4.o split_s390_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z4.o split_s390_2_s.o
|
|
|
|
split_s390_z4.stdout: split_s390_z4
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_n1: split_s390_1_n1.o split_s390_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_n1.o split_s390_2_s.o
|
|
|
|
split_s390_n1.stdout: split_s390_n1
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390_n2: split_s390_1_n2.o split_s390_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_n2.o split_s390_2_s.o
|
|
|
|
split_s390_n2.stdout: split_s390_n2
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390_z1_ns: split_s390_1_z1.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z1.o split_s390_2_ns.o
|
|
|
|
split_s390_z1_ns.stdout: split_s390_z1_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_z2_ns: split_s390_1_z2.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z2.o split_s390_2_ns.o
|
|
|
|
split_s390_z2_ns.stdout: split_s390_z2_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_z3_ns: split_s390_1_z3.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z3.o split_s390_2_ns.o
|
|
|
|
split_s390_z3_ns.stdout: split_s390_z3_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_z4_ns: split_s390_1_z4.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_z4.o split_s390_2_ns.o
|
|
|
|
split_s390_z4_ns.stdout: split_s390_z4_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390_n1_ns: split_s390_1_n1.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_n1.o split_s390_2_ns.o
|
|
|
|
split_s390_n1_ns.stdout: split_s390_n1_ns
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390_n2_ns.stdout: split_s390_1_n2.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o split_s390_n2 split_s390_1_n2.o split_s390_2_ns.o > $@ 2>&1 || exit 0
|
|
|
|
split_s390_a1.stdout: split_s390_1_a1.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o split_s390_a1 split_s390_1_a1.o split_s390_2_ns.o > $@ 2>&1 || exit 0
|
|
|
|
split_s390_a2: split_s390_1_a2.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390_1_a2.o split_s390_2_ns.o
|
|
|
|
split_s390_a2.stdout: split_s390_a2
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390_r.stdout: split_s390_1_z1.o split_s390_2_ns.o ../ld-new
|
|
|
|
../ld-new -r split_s390_1_z1.o split_s390_2_ns.o -o split_s390_r > $@ 2>&1 || exit 0
|
|
|
|
split_s390x_1_z1.o: split_s390x_1_z1.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_1_z2.o: split_s390x_1_z2.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_1_z3.o: split_s390x_1_z3.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_1_z4.o: split_s390x_1_z4.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_1_n1.o: split_s390x_1_n1.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_1_n2.o: split_s390x_1_n2.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_1_a1.o: split_s390x_1_a1.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_1_a2.o: split_s390x_1_a2.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_2_s.o: split_s390x_2_s.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_2_ns.o: split_s390x_2_ns.s
|
|
|
|
$(TEST_AS) -m64 -o $@ $<
|
|
|
|
split_s390x_z1: split_s390x_1_z1.o split_s390x_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z1.o split_s390x_2_s.o
|
|
|
|
split_s390x_z1.stdout: split_s390x_z1
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_z2: split_s390x_1_z2.o split_s390x_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z2.o split_s390x_2_s.o
|
|
|
|
split_s390x_z2.stdout: split_s390x_z2
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_z3: split_s390x_1_z3.o split_s390x_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z3.o split_s390x_2_s.o
|
|
|
|
split_s390x_z3.stdout: split_s390x_z3
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_z4: split_s390x_1_z4.o split_s390x_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z4.o split_s390x_2_s.o
|
|
|
|
split_s390x_z4.stdout: split_s390x_z4
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_n1: split_s390x_1_n1.o split_s390x_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_n1.o split_s390x_2_s.o
|
|
|
|
split_s390x_n1.stdout: split_s390x_n1
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390x_n2: split_s390x_1_n2.o split_s390x_2_s.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_n2.o split_s390x_2_s.o
|
|
|
|
split_s390x_n2.stdout: split_s390x_n2
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390x_z1_ns: split_s390x_1_z1.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z1.o split_s390x_2_ns.o
|
|
|
|
split_s390x_z1_ns.stdout: split_s390x_z1_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_z2_ns: split_s390x_1_z2.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z2.o split_s390x_2_ns.o
|
|
|
|
split_s390x_z2_ns.stdout: split_s390x_z2_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_z3_ns: split_s390x_1_z3.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z3.o split_s390x_2_ns.o
|
|
|
|
split_s390x_z3_ns.stdout: split_s390x_z3_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_z4_ns: split_s390x_1_z4.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_z4.o split_s390x_2_ns.o
|
|
|
|
split_s390x_z4_ns.stdout: split_s390x_z4_ns
|
|
|
|
$(TEST_OBJDUMP) -j .rodata -j .text -D $< > $@
|
|
|
|
split_s390x_n1_ns: split_s390x_1_n1.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_n1.o split_s390x_2_ns.o
|
|
|
|
split_s390x_n1_ns.stdout: split_s390x_n1_ns
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390x_n2_ns.stdout: split_s390x_1_n2.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o split_s390x_n2 split_s390x_1_n2.o split_s390x_2_ns.o > $@ 2>&1 || exit 0
|
|
|
|
split_s390x_a1.stdout: split_s390x_1_a1.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o split_s390x_a1 split_s390x_1_a1.o split_s390x_2_ns.o > $@ 2>&1 || exit 0
|
|
|
|
split_s390x_a2: split_s390x_1_a2.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new $(SPLIT_DEFSYMS) -o $@ split_s390x_1_a2.o split_s390x_2_ns.o
|
|
|
|
split_s390x_a2.stdout: split_s390x_a2
|
|
|
|
$(TEST_OBJDUMP) -d $< > $@
|
|
|
|
split_s390x_r.stdout: split_s390x_1_z1.o split_s390x_2_ns.o ../ld-new
|
|
|
|
../ld-new -r split_s390x_1_z1.o split_s390x_2_ns.o -o split_s390x_r > $@ 2>&1 || exit 0
|
|
|
|
MOSTLYCLEANFILES += split_s390_z1 split_s390_z2 split_s390_z3 \
|
|
|
|
split_s390_z4 split_s390_n1 split_s390_n2 split_s390_a1 \
|
|
|
|
split_s390_a2 split_s390_z1_ns split_s390_z2_ns split_s390_z3_ns \
|
|
|
|
split_s390_z4_ns split_s390_n1_ns split_s390_n2_ns split_s390_r \
|
|
|
|
split_s390x_z1 split_s390x_z2 split_s390x_z3 split_s390x_z4 \
|
|
|
|
split_s390x_n1 split_s390x_n2 split_s390x_a1 split_s390x_a2 \
|
|
|
|
split_s390x_z1_ns split_s390x_z2_ns split_s390x_z3_ns \
|
|
|
|
split_s390x_z4_ns split_s390x_n1_ns split_s390x_n2_ns split_s390x_r
|
|
|
|
|
|
|
|
endif DEFAULT_TARGET_S390
|
|
|
|
|
2010-10-12 21:21:41 +02:00
|
|
|
endif NATIVE_OR_CROSS_LINKER
|
|
|
|
|
2012-10-24 04:32:15 +02:00
|
|
|
# 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 $< $@
|
|
|
|
|
2013-01-14 13:56:39 +01:00
|
|
|
MOSTLYCLEANFILES += *.dwo *.dwp
|
2012-10-24 04:32:15 +02:00
|
|
|
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
|