+2017-01-02 Alan Modra <amodra@gmail.com>
+
+ * Makefile.am (bootstrap): Delete rule.
+ (ld-partial, ld1, ld1-full, ld2, ld3): Likewise.
+ (HOSTING_CRT0, HOSTING_SCRT0): Don't define.
+ (HOSTING_LIBS, HOSTING_SLIBS, HOSTING_EMU): Likewise.
+ * configure.ac (HOSTING_CRT0, HOSTING_SCRT0): Don't define.
+ (HOSTING_LIBS, HOSTING_SLIBS): Likewise.
+ * configure.host (HOSTING_CRT0, HOSTING_LIBS): Don't define.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * testsuite/config/default.exp (get_link_files): Delete.
+ (HOSTING_CRT0, HOSTING_SCRT0, HOSTING_LIBS, HOSTING_SLIBS): Don't
+ define.
+ (ld_simple_link): Delete.
+ * testsuite/lib/ld-lib.exp (default_ld_link): Delete
+ (default_ld_simple_link): Rename to default_ld_link.
+ (ld_simple_link_defsyms): Rename to ld_link_defsyms.
+ (run_ld_link_tests): Use ld_link, not ld_simple_link.
+ (run_cc_link_tests): Likewise.
+ (run_ld_link_exec_tests): Use $CC or $CXX to link, not $ld.
+ Don't run exe when not native, and return unsupported.
+ * testsuite/ld-bootstrap/bootstrap.exp: Create gccld1 etc. dirs.
+ Link ld1 etc. using $CC.
+ * testsuite/ld-cdtest/cdtest.exp: Link cdtest using $CC.
+ * testsuite/ld-checks/checks.exp: Use ld_link, not ld_simple_link.
+ * testsuite/ld-cygwin/exe-export.exp: Likewise.
+ * testsuite/ld-elf/binutils.exp: Likewise.
+ * testsuite/ld-elf/eh-group.exp: Likewise.
+ * testsuite/ld-elf/exclude.exp: Likewise.
+ * testsuite/ld-elf/frame.exp: Likewise.
+ * testsuite/ld-elf/sec-to-seg.exp: Likewise.
+ * testsuite/ld-elf/tls_common.exp: Likewise.
+ * testsuite/ld-elfcomm/elfcomm.exp: Likewise.
+ * testsuite/ld-fastcall/fastcall.exp: Likewise.
+ * testsuite/ld-gc/gc.exp: Likewise.
+ * testsuite/ld-ifunc/binutils.exp: Likewise.
+ * testsuite/ld-mep/mep.exp: Likewise.
+ * testsuite/ld-mips-elf/mips-elf-flags.exp: Likewise.
+ * testsuite/ld-mn10300/mn10300.exp: Likewise.
+ * testsuite/ld-nios2/nios2.exp: Likewise.
+ * testsuite/ld-pe/pe-compile.exp: Likewise.
+ * testsuite/ld-pe/pe-run.exp: Likewise.
+ * testsuite/ld-pe/pe-run2.exp: Likewise.
+ * testsuite/ld-plugin/plugin.exp: Likewise.
+ * testsuite/ld-scripts/align.exp: Likewise.
+ * testsuite/ld-scripts/alignof.exp: Likewise.
+ * testsuite/ld-scripts/assert.exp: Likewise.
+ * testsuite/ld-scripts/defined.exp: Likewise.
+ * testsuite/ld-scripts/extern.exp: Likewise.
+ * testsuite/ld-scripts/log2.exp: Likewise.
+ * testsuite/ld-scripts/map-address.exp: Likewise.
+ * testsuite/ld-scripts/phdrs.exp: Likewise.
+ * testsuite/ld-scripts/phdrs2.exp: Likewise.
+ * testsuite/ld-scripts/script.exp: Likewise.
+ * testsuite/ld-scripts/section-flags.exp: Likewise.
+ * testsuite/ld-scripts/sizeof.exp: Likewise.
+ * testsuite/ld-scripts/sysroot-prefix.exp: Likewise.
+ * testsuite/ld-scripts/weak.exp: Likewise.
+ * testsuite/ld-selective/selective.exp: Likewise.
+ * testsuite/ld-sh/sh.exp: Likewise.
+ * testsuite/ld-sh/sh64/relax.exp: Likewise.
+ * testsuite/ld-sh/sh64/relfail.exp: Likewise.
+ * testsuite/ld-srec/srec.exp: Likewise.
+ * testsuite/ld-tic6x/tic6x.exp: Likewise.
+ * testsuite/ld-undefined/weak-undef.exp: Likewise.
+ * testsuite/ld-versados/versados.exp: Likewise.
+ * testsuite/ld-x86-64/dwarfreloc.exp: Likewise.
+ * testsuite/ld-xtensa/coalesce.exp: Likewise.
+ * testsuite/ld-xtensa/diff_overflow.exp: Likewise.
+ * testsuite/ld-xtensa/lcall.exp: Likewise.
+ * testsuite/ld-elf/audit.exp: Run non-native too.
+ * testsuite/ld-elf/compress.exp: Likewise. Replace ld options with
+ gcc -Wl, options.
+ * testsuite/ld-elf/dwarf.exp: Run non-native too. Use ld_link,
+ not ld_simple_link. Add -Wl,--no-as-needed to some tests.
+ * testsuite/ld-elf/elf.exp: Run non-native too. Formatting.
+ * testsuite/ld-elf/indirect.exp: Run non-native too. Add
+ -Wl,--no-as-needed to most tests.
+ * testsuite/ld-elf/shared.exp: Run non-native too. Use braces
+ to simplify quoting. Set run_tests using [list] rather than
+ brace assignment to expand $extralibs. Add -Wl,--no-as-needed
+ to many test. Prefix ld options with -Wl,.
+ (mix_pic_and_non_pic): Don't run exe if not native.
+ * testsuite/ld-elf/wrap.exp: Run non-native too. Add
+ -Wl,--no-as-needed and prefix ld options with -Wl,.
+ * testsuite/ld-elfvers/vers.exp: Run non-native too. Use ld_link,
+ not ld_simple_link.
+ * testsuite/ld-elfvsb/elfvsb.exp: Likewise.
+ (visibility_test): Don't run exe if not native.
+ * testsuite/ld-elfweak/elfweak.exp: Run non-native too. Use ld_link,
+ not ld_simple_link.
+ (build_exec): Don't run exe if not native.
+ * testsuite/ld-ifunc/ifunc.exp: Run non-native too. Use ld_link,
+ not ld_simple_link. Link using $CC. Add -Wl,--no-as-needed
+ to some tests and prefix ld options with -Wl,. Expect GNU
+ for hppa-linux even when no ifuncs. Delete cleanup.
+ * testsuite/ld-pie/pie.exp: Run non-native too.
+ * testsuite/ld-plugin/lto.exp: Likewise.
+ * testsuite/ld-shared/shared.exp: Likewise. Use ld_link,
+ not ld_simple_link.
+ (shared_test): Don't run exe if not native.
+ * testsuite/ld-size/size.exp: Run non-native too. Add
+ -Wl,--no-as-needed to some tests. Prefix ld options with -Wl,.
+ * testsuite/ld-unique/unique.exp: Run non-native too. Use ld_link,
+ not ld_simple_link. Link using $CC. Add -Wl,--no-as-needed
+ to some tests and prefix ld options with -Wl,. Expect GNU
+ for hppa-linux even when no unique syms. Delete cleanup.
+ * testsuite/ld-x86-64/tls.exp: Add -Wl,--no-as-needed to some
+ tests and prefix ld options with -Wl,.
+ * testsuite/ld-x86-64/x86-64.exp: Use ld_link, not ld_simple_link.
+ Add -Wl,--no-as-needed to some tests. Prefix ld options with -Wl,.
+
2017-01-02 Alan Modra <amodra@gmail.com>
* emulparams/elf32metag.sh (COMMONPAGESIZE): Define.
POD2MAN = pod2man --center="GNU Development Tools" \
--release="binutils-$(VERSION)" --section=1
-#stuff for self hosting (can be overridden in config file).
-HOSTING_CRT0 = @HOSTING_CRT0@
-HOSTING_SCRT0 = @HOSTING_SCRT0@
-HOSTING_LIBS = @HOSTING_LIBS@
-HOSTING_SLIBS = @HOSTING_SLIBS@
-HOSTING_EMU = -m $(EMUL)
-
# Setup the testing framework, if you have one
EXPECT = expect
RUNTEST = runtest
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi
-# Rules for testing by relinking ld itself.
-# A similar test is in the testsuite. This target is for ease of use
-# when porting ld.
-
-ld-partial.@OBJEXT@: ld-new$(EXEEXT)
- ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.@OBJEXT@ -r $(OFILES)
-ld1$(EXEEXT): ld-partial.@OBJEXT@
- ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.@OBJEXT@ $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-ld1-full$(EXEEXT): ld-new
- ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1-full$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-ld2$(EXEEXT): ld1$(EXEEXT)
- ./ld1$(EXEEXT) $(HOSTING_EMU) -o ld2$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-ld3$(EXEEXT): ld2$(EXEEXT)
- ./ld2$(EXEEXT) $(HOSTING_EMU) -o ld3$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-bootstrap: ld3$(EXEEXT)
- cmp ld2$(EXEEXT) ld3$(EXEEXT)
-
-.PHONY: bootstrap
-
-# A test program for C++ constructors and destructors.
-# This test is now in the testsuite.
-#
-#cdtest: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
-# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \
-# cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ $(HOSTING_LIBS)
-#
-#cdtest.out: cdtest
-# ./cdtest > cdtest.tmp
-# mv cdtest.tmp cdtest.out
-#
-#cdtest-ur.@OBJEXT@: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
-# ./ld.new $(HOSTING_EMU) -o cdtest-ur.@OBJEXT@ -Ur cdtest-main.@OBJEXT@ \
-# cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@
-#
-#cdtest-ur: cdtest-ur.@OBJEXT@
-# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.@OBJEXT@ \
-# $(HOSTING_LIBS)
-#
-#cdtest-ur.out: cdtest-ur
-# ./cdtest-ur > cdtest-ur.tmp
-# mv cdtest-ur.tmp cdtest-ur.out
-#
-#check-cdtest: cdtest.out cdtest-ur.out $(srcdir)/cdtest.exp
-# diff $(srcdir)/cdtest.exp cdtest.out
-# diff $(srcdir)/cdtest.exp cdtest-ur.out
-#
-#.PHONY: check-cdtest
-
-# END OF CHECK TARGETS
-
#
# Build a dummy plugin using libtool.
#
GMSGFMT = @GMSGFMT@
GREP = @GREP@
HDEFINES = @HDEFINES@
-
-#stuff for self hosting (can be overridden in config file).
-HOSTING_CRT0 = @HOSTING_CRT0@
-HOSTING_LIBS = @HOSTING_LIBS@
-HOSTING_SCRT0 = @HOSTING_SCRT0@
-HOSTING_SLIBS = @HOSTING_SLIBS@
INCINTL = @INCINTL@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
POD2MAN = pod2man --center="GNU Development Tools" \
--release="binutils-$(VERSION)" --section=1
-HOSTING_EMU = -m $(EMUL)
# Setup the testing framework, if you have one
EXPECT = expect
ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL)
-# A test program for C++ constructors and destructors.
-# This test is now in the testsuite.
-#
-#cdtest: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
-# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \
-# cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ $(HOSTING_LIBS)
-#
-#cdtest.out: cdtest
-# ./cdtest > cdtest.tmp
-# mv cdtest.tmp cdtest.out
-#
-#cdtest-ur.@OBJEXT@: cdtest-main.@OBJEXT@ cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@ ld.new
-# ./ld.new $(HOSTING_EMU) -o cdtest-ur.@OBJEXT@ -Ur cdtest-main.@OBJEXT@ \
-# cdtest-bar.@OBJEXT@ cdtest-foo.@OBJEXT@
-#
-#cdtest-ur: cdtest-ur.@OBJEXT@
-# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.@OBJEXT@ \
-# $(HOSTING_LIBS)
-#
-#cdtest-ur.out: cdtest-ur
-# ./cdtest-ur > cdtest-ur.tmp
-# mv cdtest-ur.tmp cdtest-ur.out
-#
-#check-cdtest: cdtest.out cdtest-ur.out $(srcdir)/cdtest.exp
-# diff $(srcdir)/cdtest.exp cdtest.out
-# diff $(srcdir)/cdtest.exp cdtest-ur.out
-#
-#.PHONY: check-cdtest
-
-# END OF CHECK TARGETS
-
#
# Build a dummy plugin using libtool.
#
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
fi
-# Rules for testing by relinking ld itself.
-# A similar test is in the testsuite. This target is for ease of use
-# when porting ld.
-
-ld-partial.@OBJEXT@: ld-new$(EXEEXT)
- ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.@OBJEXT@ -r $(OFILES)
-ld1$(EXEEXT): ld-partial.@OBJEXT@
- ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.@OBJEXT@ $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-ld1-full$(EXEEXT): ld-new
- ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1-full$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-ld2$(EXEEXT): ld1$(EXEEXT)
- ./ld1$(EXEEXT) $(HOSTING_EMU) -o ld2$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-ld3$(EXEEXT): ld2$(EXEEXT)
- ./ld2$(EXEEXT) $(HOSTING_EMU) -o ld3$(EXEEXT) $(HOSTING_CRT0) $(OFILES) $(TESTBFDLIB) $(LIBIBERTY) $(HOSTING_LIBS) $(LIBS)
-
-bootstrap: ld3$(EXEEXT)
- cmp ld2$(EXEEXT) ld3$(EXEEXT)
-
-.PHONY: bootstrap
-
# DOCUMENTATION TARGETS
# Manual configuration file; not usually attached to normal configuration,
# because almost all configs use "gen" version of manual.
ENABLE_PLUGINS_FALSE
ENABLE_PLUGINS_TRUE
NATIVE_LIB_DIRS
-HOSTING_SLIBS
-HOSTING_LIBS
-HOSTING_SCRT0
-HOSTING_CRT0
HDEFINES
do_compare
GENINSRC_NEVER_FALSE
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11727 "configure"
+#line 11723 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11833 "configure"
+#line 11829 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
-
-
-
-
for ac_header in string.h strings.h stdlib.h unistd.h elf-hints.h limits.h locale.h sys/param.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
. ${srcdir}/configure.host
AC_SUBST(HDEFINES)
-AC_SUBST(HOSTING_CRT0)
-AC_SUBST(HOSTING_SCRT0)
-AC_SUBST(HOSTING_LIBS)
-AC_SUBST(HOSTING_SLIBS)
AC_SUBST(NATIVE_LIB_DIRS)
AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h elf-hints.h limits.h locale.h sys/param.h)
# This file sets the following shell variables:
# HDEFINES host specific compiler flags
-# HOSTING_CRT0 crt0.o file used for bootstrapping
-# HOSTING_LIBS libraries used for bootstrapping
HDEFINES=
-HOSTING_CRT0=/lib/crt0.o
-HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ]; then libgcc=../gcc/libgcc.a; else libgcc=\`${CC} -print-libgcc-file-name\`; fi; if [ -f ../gcc/libgcc_eh.a ]; then libgcc="$$libgcc ../gcc/libgcc_eh.a"; else libgcc_eh=\`${CC} -print-file-name=libgcc_eh.a\`; if [ x"$$libgcc_eh" != xlibgcc_eh.a ]; then libgcc="$$libgcc $$libgcc_eh"; fi; fi; if [ -f ../gcc/libunwind.a ]; then libgcc="$$libgcc ../gcc/libunwind.a"; else libunwind=\`${CC} -print-file-name=libunwind.a\`; if [ x"$$libunwind" != xlibunwind.a ]; then libgcc="$$libgcc $$libunwind"; fi; fi; echo --start-group $$libgcc -lc --end-group`'
-
-#
-# Generic configurations:
-#
case "${host}" in
-
-*-*-dragonfly*)
- HOSTING_CRT0='-dynamic-linker `[ -f \`${CC} --print-prog-name=ld-elf.so.2\` ] || echo /usr/libexec/``${CC} --print-prog-name=ld-elf.so.2` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `${CC} --print-file-name=crtbegin.o`'
- HOSTING_LIBS='-L`dirname \`${CC} --print-file-name=libc.so\`` '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
- ;;
-
-*-*-freebsd* | *-*-kfreebsd*-gnu)
- HOSTING_CRT0='-dynamic-linker `[ -f \`${CC} --print-prog-name=ld-elf.so.1\` ] || echo /usr/libexec/``${CC} --print-prog-name=ld-elf.so.1` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `${CC} --print-file-name=crtbegin.o`'
- HOSTING_LIBS='-L`dirname \`${CC} --print-file-name=libc.so\`` '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
- ;;
-
-*-*-linux*aout* | *-*-linux*oldld)
- HOSTING_CRT0=/usr/lib/crt0.o
- ;;
-
-*-*-linux*libc1*)
- HOSTING_CRT0='-dynamic-linker /lib/ld-linux.so.1 /usr/lib/crt1.o /usr/lib/crti.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; elif [ -f /usr/lib/crtbegin.o ]; then echo /usr/lib/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; elif [ -f /usr/lib/crtend.o ]; then echo /usr/lib/crtend.o; else ${CC} --print-file-name=crtend.o; fi` /usr/lib/crtn.o'
- ;;
-
-*-*-linux*)
- HOSTING_CRT0='-dynamic-linker `${CC} --help --verbose 2>&1 | egrep "ld[^ ]*\.so" | sed -e "s,.*-dynamic-linker[ ][ ]*\(.*/ld[^ ]*\.so..\).*,\1,"` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
- HOSTING_SCRT0='-dynamic-linker `${CC} --help --verbose 2>&1 | egrep "ld[^ ]*\.so" | sed -e "s,.*-dynamic-linker[ ][ ]*\(.*/ld[^ ]*\.so..\).*,\1,"` `${CC} --print-file-name=Scrt1.o` `${CC} --print-file-name=crti.o` `if [ -f ../gcc/crtbeginS.o ]; then echo ../gcc/crtbeginS.o; else ${CC} --print-file-name=crtbeginS.o; fi`'
- HOSTING_SLIBS='-L`dirname \`${CC} --print-file-name=libc.so\`` '"$HOSTING_LIBS"' `if [ -f ../gcc/crtendS.o ]; then echo ../gcc/crtendS.o; else ${CC} --print-file-name=crtendS.o; fi` `${CC} --print-file-name=crtn.o`'
- HOSTING_LIBS='-L`dirname \`${CC} --print-file-name=libc.so\`` '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
- ;;
-
-*-*-gnu*)
- # When creating static executables, we ought to use crt0.o instead of crt1.o,
- # <http://www.gnu.org/software/hurd/open_issues/binutils.html#static>,
- # but the testing infrastructure is not prepared for that. This is not
- # relevant for most tests, and the few remaining ones have been XFAILed.
- HOSTING_CRT0='-dynamic-linker `${CC} --help --verbose 2>&1 | egrep "ld[^ ]*\.so" | sed -e "s,.*-dynamic-linker[ ][ ]*\(.*/ld[^ ]*\.so[^ ]*\).*,\1,"` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS='-L`dirname \`${CC} --print-file-name=libc.so\`` '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
- ;;
-
-*-*-netbsd*)
- # Different versions of NetBSD with the ELF object format use different
- # sets of start/end files.
- HOSTING_CRT0='-dynamic-linker /usr/libexec/ld.elf_so /usr/lib/crt0.o'
- if [ -f `${CC} --print-file-name=crti.o` ]; then
- # Support for GCC's crtstuff present.
- HOSTING_CRT0="$HOSTING_CRT0 `${CC} --print-file-name=crti.o`"
- if [ -f ../gcc/crtbegin.o ]; then
- HOSTING_CRT0="$HOSTING_CRT0 ../gcc/crtbegin.o"
- else
- HOSTING_CRT0="$HOSTING_CRT0 `${CC} --print-file-name=crtbegin.o`"
- fi
- else
- # Support for GCC's crtstuff not present.
- HOSTING_CRT0="$HOSTING_CRT0 `${CC} --print-file-name=crtbegin.o`"
- fi
- if [ -f `${CC} --print-file-name=crtn.o` ]; then
- # Support for GCC's crtstuff present.
- if [ -f ../gcc/crtbegin.o ]; then
- HOSTING_LIBS="$HOSTING_LIBS ../gcc/crtend.o"
- else
- HOSTING_LIBS="$HOSTING_LIBS `${CC} --print-file-name=crtend.o`"
- fi
- HOSTING_LIBS="$HOSTING_LIBS `${CC} --print-file-name=crtn.o`"
- else
- # Support for GCC's crtstuff not present.
- HOSTING_LIBS="$HOSTING_LIBS `${CC} --print-file-name=crtend.o`"
- fi
- ;;
-
-*-*-openbsd*)
- HOSTING_CRT0="-dynamic-linker /usr/libexec/ld.so /usr/lib/crt0.o"
- HOSTING_CRT0="$HOSTING_CRT0 /usr/lib/crtbegin.o"
- HOSTING_LIBS="$HOSTING_LIBS /usr/lib/crtend.o"
- ;;
-
+ m88*-*-dgux*)
+ HDEFINES=-D__using_DGUX ;;
esac
-
-#
-# Now more specific configurations
-#
-
-case "${host}" in
-
-*-*-linux*aout* | *-*-linux*oldld | *-*-linux*libc1*)
- # No further tweaking needed
- ;;
-
-arm*-*-linux-*)
- HOSTING_CRT0='-p '"$HOSTING_CRT0"
- ;;
-
-hppa*64*-*-hpux11*)
- HOSTING_CRT0=/usr/ccs/lib/pa20_64/crt0.o
- # Even if CC is not gcc, the tests use gcc.
- HOSTING_LIBS='--start-group `if [ -f ../gcc/libgcc.a ]; then echo ../gcc/libgcc.a; else if test "$GCC" = yes; then ${CC} --print-libgcc-file-name; else gcc --print-libgcc-file-name; fi fi` -lc --end-group /usr/lib/pa20_64/milli.a'
- ;;
-
-i[3-7]86-*-bsd* | i[3-7]86-*-freebsd[12] | i[3-7]86-*-freebsd[12]\.* | i[3-7]86-*-freebsd*aout*)
- HOSTING_CRT0=/usr/lib/crt0.o
- ;;
-
-i[3-7]86-*-sysv4*)
- HOSTING_CRT0='/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` /usr/ccs/lib/crtn.o'
- ;;
-
-i[3-7]86-sequent-ptx* | i[3-7]86-sequent-sysv*)
- HOSTING_CRT0='/lib/crt0.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi`'
- ;;
-
-i[3-7]86-*-sysv*)
- HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; fi` /lib/crtn.o'
- ;;
-
-i[3-7]86-*-solaris*)
- HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else ${CC} -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else ${CC} -print-file-name=crti.o; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
- ;;
-
-i[3-7]86-*-sco* | i[3-7]86-*-isc*)
- # In some configurations gcc does not use crtbegin.o and crtend.o.
- # In that case gcc -print-file-name=crtbegin.o will simply print
- # crtbegin.o. We create dummy crtbegin.o and crtend.o files to
- # handle this.
- echo "int dummy_crtbegin () { return 0; }" > crtbegin.c
- ${CC} -c crtbegin.c -o crtbegin.o
- rm -f crtbegin.c
- echo "int dummy_crteng () { return 0; }" > crtend.c
- ${CC} -c crtend.c -o crtend.o
- rm -f crtend.c
- HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` /lib/crtn.o'
- ;;
-
-i[3-7]86-pc-interix*)
- HOSTING_CRT0='$$INTERIX_ROOT/usr/lib/crt0.o'
- HOSTING_LIBS='-L $$X/local_bin -L $$INTERIX_ROOT/usr/lib '"$HOSTING_LIBS"' -lcpsx -lc -lcpsx $$INTERIX_ROOT/usr/lib/psxdll.a $$INTERIX_ROOT/usr/lib/psxdll2.a'
- ;;
-
-i[3-7]86-*-cygwin* | x86_64-*-cygwin*)
- HOSTING_LIBS="$HOSTING_LIBS"' -lcygwin -L/usr/lib/w32api -luser32 -lkernel32 -ladvapi32 -lshell32 `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
- ;;
-
-i[3-7]86-*-mingw*)
- #We only support msvcrt.dll, crtid == 2.
- HOSTING_CRT0='/mingw/lib/crt2.o'
- HOSTING_LIBS='-L/mingw/lib -lmingw32 -lmoldname -lmingwex -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32 -lmingw32 -lmoldname -lmingwex -lmsvcrt `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
- ;;
-
-mips*-sgi-irix4* | mips*-sgi-irix5*)
- HOSTING_CRT0=/usr/lib/crt1.o
- HOSTING_LIBS="$HOSTING_LIBS"' /usr/lib/crtn.o'
- ;;
-
-mips*-sgi-irix6*)
- HOSTING_CRT0='/usr/lib32/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o ; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS='-L/usr/lib32 '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o ; else ${CC} -print-file-name=crtend.o; fi` /usr/lib32/crtn.o -init __do_global_ctors -fini __do_global_dtors'
- ;;
-
-m68*-motorola-sysv)
- HOSTING_CRT0='`if [ -f ../gcc/crt0.o ]; then echo ../gcc/crt0.o; elif [ -f \`${CC} -print-file-name=\`crt0.o ]; then echo \`${CC} -print-file-name=\`crt0.o; else echo /lib/crt0.o; fi`'
- HOSTING_LIBS=`sed -e 's,-lc,-lc881,' <<EOF
-$HOSTING_LIBS
-EOF`
- ;;
-
-m68*-sun-*)
- HOSTING_CRT0='/usr/lib/crt0.o /usr/lib/Fcrt1.o -L/usr/lib/fsoft.o'
- ;;
-
-m88*-*-dgux*)
- HDEFINES=-D__using_DGUX
- HOSTING_CRT0='/lib/crt0.o -X'
- HOSTING_LIBS=/usr/sde/m88kbcs/lib/libc.a
- ;;
-
-m88*-motorola-sysv3)
- HOSTING_CRT0='/lib/crt0.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi`'
- ;;
-
-sparc-*-solaris2*)
- HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else ${CC} -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else ${CC} -print-file-name=crti.o; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
- ;;
-
-sparc64-*-solaris2* | sparcv9-*-solaris2*)
- HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else ${CC} -print-file-name=crt1.o; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else ${CC} -print-file-name=crti.o; fi` /usr/ccs/lib/sparcv9/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} -print-file-name=crtbegin.o; fi`'
- HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
- ;;
-
-*-*-dragonfly*)
- ;;
-
-*-*-freebsd* | *-*-kfreebsd*-gnu)
- ;;
-
-*-*-linux* | *-*-gnu*)
- ;;
-
-*-*-netbsd*)
- ;;
-
-*-*-openbsd*)
- ;;
-
-alpha*-*-*)
- HOSTING_CRT0=/usr/ccs/lib/crt0.o
- ;;
-
-esac
-
-# Provide default HOSTING_SCRT0. Each host should define a proper one
-# if needed.
-if test -z "$HOSTING_SCRT0"; then
- HOSTING_SCRT0="$HOSTING_CRT0"
-fi
-
-# Provide default HOSTING_SLIBS. Each host should define a proper one
-# if needed.
-if test -z "$HOSTING_SLIBS"; then
- HOSTING_SLIBS="$HOSTING_LIBS"
-fi
# load the utility procedures
load_lib ld-lib.exp
-proc get_link_files {varname} {
- global $varname
- global target_triplet
- global srcdir
- global CC
- if ![info exists $varname] {
- #configure.host returns variables that can be substituted into
- #makefile rules, with embedded shell variable expansions.
- #make wants $$shell_var, we want $shell_var ...
- set cmd "host='$target_triplet' && . $srcdir/../configure.host && sed -e 's,\\\$\\\$,\$,g' <<EOF\n\$$varname\nEOF"
- set status [catch "exec sh -c [list $cmd]" result]
- if $status { error "Error getting native link files: $result" }
- set cmd "CC='$CC' && eval echo \"$result\""
- set status [catch "exec sh -c [list $cmd]" result]
- if $status { error "Error getting native link files: $result" }
- set $varname $result
- send_log "$varname = $result\n"
- }
-}
-
proc get_target_emul {} {
global target_triplet
global srcdir
return $result
}
-if [isnative] {
- foreach x {HOSTING_CRT0 HOSTING_SCRT0 HOSTING_LIBS HOSTING_SLIBS} {
- get_link_files $x
- }
-} else {
- foreach x {HOSTING_CRT0 HOSTING_SCRT0 HOSTING_LIBS HOSTING_SLIBS} { set $x "" }
-}
if ![info exists HOSTING_EMU] { set HOSTING_EMU "-m [get_target_emul]" }
#
default_ld_link $ld $target $objects
}
-#
-# ld_simple_link
-# link a program using ld, without including any libraries
-#
-proc ld_simple_link { ld target objects } {
- default_ld_simple_link $ld $target $objects
-}
-
#
# ld_compile
# compile an object using $cc
# order to test -r. Then link the result into an executable, ld1, to
# really test -r. Use ld1 to link a fresh ld, ld2. Use ld2 to link a
# new ld, ld3. ld2 and ld3 should be identical.
-set test_flags {"" "strip" "--static" "--traditional-format"
- "--no-keep-memory" "--relax"}
+set test_flags {"" "strip" "--static" "-Wl,--traditional-format"
+ "-Wl,--no-keep-memory" "-Wl,--relax"}
if { [istarget "powerpc-*-*"] } {
- lappend test_flags "--ppc476-workaround"
+ lappend test_flags "-Wl,--ppc476-workaround"
+}
+
+set gcc_B_opt_save $gcc_B_opt
+
+foreach ldexe {ld1 ld2 ld3} {
+ if {![file isdirectory tmpdir/gcc$ldexe]} then {
+ catch "exec mkdir tmpdir/gcc$ldexe" status
+ catch "exec ln -s ../$ldexe tmpdir/gcc$ldexe/ld" status
+ catch "exec ln -s ld tmpdir/gcc$ldexe/collect-ld" status
+ catch "exec ln -s ../../../gas/as-new tmpdir/gcc$ldexe/as" status
+ }
}
foreach flags $test_flags {
+ set gcc_B_opt $gcc_B_opt_save
set do_strip "no"
if {"$flags" == "strip"} {
set testname "bootstrap with $flags"
}}
# --static is meaningless and --relax is incompatible with -r.
- set partial_flags "$flags"
- if { "$flags" == "--static" || "$flags" == "--relax" } {
+ regsub -- "-Wl," $flags "" partial_flags
+ if { "$partial_flags" == "--static" || "$partial_flags" == "--relax" } {
set partial_flags ""
}
setup_xfail "mips*-*-irix5*"
}
- if ![ld_link $ld tmpdir/ld1 "$flags tmpdir/ld-partial.o $BFDLIB $LIBIBERTY $extralibs"] {
+ if ![ld_link $CC tmpdir/ld1 "$flags tmpdir/ld-partial.o $BFDLIB $LIBIBERTY $extralibs"] {
fail $testname
continue
}
}
}
- if ![ld_link tmpdir/ld1 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
+ regsub /tmpdir/ld/ $gcc_B_opt_save /tmpdir/gccld1/ gcc_B_opt
+ if ![ld_link $CC tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
fail $testname
continue
}
- if ![ld_link tmpdir/ld2 tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
+ regsub /tmpdir/ld/ $gcc_B_opt_save /tmpdir/gccld2/ gcc_B_opt
+ if ![ld_link $CC tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
fail $testname
continue
}
- if {"$flags" == "--static"} {
- if { [istarget ia64-*-elf*]
- || [istarget ia64-*-linux*] } {
- # On ia64, tmpdir/ld2 != tmpdir/ld3 is normal since they are
- # generated by different linkers, tmpdir/ld1 and tmpdir/ld2.
- # So we rebuild tmpdir/ld2 with tmpdir/ld3.
- if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
- fail $testname
- continue
- }
- }
- } else {
- if { [istarget mips*-*-linux*] } {
- # On Linux/mips, tmpdir/ld2 != tmpdir/ld3 is normal since
- # they are generated by different linkers, tmpdir/ld1 and
- # tmpdir/ld2. So we rebuild tmpdir/ld2 with tmpdir/ld3.
- if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
- fail $testname
- continue
- }
+ if { "$flags" == "--static" && { [istarget ia64-*-elf*] || [istarget ia64-*-linux*] }
+ || [istarget mips*-*-linux*] } {
+ # On ia64 and mips, tmpdir/ld2 != tmpdir/ld3 is normal since they are
+ # generated by different linkers, tmpdir/ld1 and tmpdir/ld2.
+ # So we rebuild tmpdir/ld2 with tmpdir/ld3.
+ regsub /tmpdir/ld/ $gcc_B_opt_save /tmpdir/gccld3/ gcc_B_opt
+ if ![ld_link $CC tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY $extralibs"] {
+ fail $testname
+ continue
}
}
}
}
+set gcc_B_opt $gcc_B_opt_save
catch "exec rm -f tmpdir/ld-partial.o tmpdir/ld1 tmpdir/ld2 tmpdir/ld3" status
catch "exec rm -f tmpdir/ld2tail tmpdir/ld3tail" status
set expected_output "$srcdir/$subdir/cdtest.dat"
-if ![ld_link $ld tmpdir/cdtest {tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
+if ![ld_link $CC tmpdir/cdtest {tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
fail $test1
} else {
send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
fail $test2
} else {
- if ![ld_link $ld tmpdir/cdtest tmpdir/cdtest.o] {
+ if ![ld_link $CC tmpdir/cdtest tmpdir/cdtest.o] {
fail $test2
} else {
send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
return
}
- if ![ld_simple_link $ld tmpdir/asm.x "$ldflags tmpdir/asm.o"] {
+ if ![ld_link $ld tmpdir/asm.x "$ldflags tmpdir/asm.o"] {
fail $test
} else {
pass $test
# script is used.
set ldflags "--check-sections -T $srcdir/$subdir/script -e foo"
- # Perform the equivalent of invoking ld_simple_link
+ # Perform the equivalent of invoking ld_link
# except that we need to massage the output further.
set exec_output [run_host_cmd "$ld" "-o tmpdir/asm.x $ldflags tmpdir/asm.o"]
}\r
\r
# ld_special_link\r
-# A copy of ld_simple_link (from ld-lib.exp) with extra\r
+# A copy of ld_link (from ld-lib.exp) with extra\r
# code to strip warnings about creating libraries.\r
#\r
proc ld_special_link { ld target objects } {\r
return
}
-# The following tests require running the executable generated by ld.
-if ![isnative] {
- return
-}
-
# Check if compiler works
if { [which $CC] == 0 } {
return
return
}
- if { ![ld_simple_link $ld tmpdir/$test "$ld_options -z stack-size=0 tmpdir/$test.o"] } {
+ if { ![ld_link $ld tmpdir/$test "$ld_options -z stack-size=0 tmpdir/$test.o"] } {
if { [string match "*not supported*" $link_output]
|| [string match "*unrecognized option*" $link_output]
|| [string match "*-z relro ignored*" $link_output] } {
return
}
-# The following tests require running the executable generated by ld.
-if ![isnative] {
- return
-}
-
# Check if compiler works
if { [which $CC] == 0 } {
return
"tmpdir/begin.o tmpdir/libfoozlib.so tmpdir/end.o" ""
{main.c} "normal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
{"Run zlibnormal with libzlibfoo.so with zlib compressed debug sections"
- "tmpdir/begin.o tmpdir/libzlibfoo.so tmpdir/end.o --compress-debug-sections=zlib" ""
+ "tmpdir/begin.o tmpdir/libzlibfoo.so tmpdir/end.o -Wl,--compress-debug-sections=zlib" ""
{main.c} "zlibnormal" "normal.out" "-Wa,--compress-debug-sections=zlib"}
{"Run zlibnormal with libfoozlib.so with zlib compressed debug sections"
- "tmpdir/begin.o tmpdir/libfoozlib.so tmpdir/end.o --compress-debug-sections=zlib" ""
+ "tmpdir/begin.o tmpdir/libfoozlib.so tmpdir/end.o -Wl,--compress-debug-sections=zlib" ""
{main.c} "zlibnormal" "normal.out" "-Wa,--compress-debug-sections=zlib"}
{"Run gnunormal with libgnufoo.so with zlib-gnu compressed debug sections"
- "tmpdir/gnubegin.o tmpdir/libgnufoo.so tmpdir/end.o --compress-debug-sections=zlib-gnu" ""
+ "tmpdir/gnubegin.o tmpdir/libgnufoo.so tmpdir/end.o -Wl,--compress-debug-sections=zlib-gnu" ""
{main.c} "gnunormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gnu"}
{"Run gnunormal with libfoozlib.so with zlib-gnu compressed debug sections"
- "tmpdir/gnubegin.o tmpdir/libfoozlib.so tmpdir/end.o --compress-debug-sections=zlib-gnu" ""
+ "tmpdir/gnubegin.o tmpdir/libfoozlib.so tmpdir/end.o -Wl,--compress-debug-sections=zlib-gnu" ""
{main.c} "gnunormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gnu"}
{"Run gabinormal with libgabifoo.so with zlib-gabi compressed debug sections"
- "tmpdir/zlibbegin.o tmpdir/libgabifoo.so tmpdir/gabiend.o --compress-debug-sections=zlib-gabi" ""
+ "tmpdir/zlibbegin.o tmpdir/libgabifoo.so tmpdir/gabiend.o -Wl,--compress-debug-sections=zlib-gabi" ""
{main.c} "gabinormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
{"Run gabinormal with libfoozlib.so with zlib-gabi compressed debug sections"
- "tmpdir/zlibbegin.o tmpdir/libfoozlib.so tmpdir/gabiend.o --compress-debug-sections=zlib-gabi" ""
+ "tmpdir/zlibbegin.o tmpdir/libfoozlib.so tmpdir/gabiend.o -Wl,--compress-debug-sections=zlib-gabi" ""
{main.c} "gabinormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
}
return
}
-# The following tests require running the executable generated by ld.
-if ![isnative] {
- return
-}
-
# Check if compiler works
if { [which $CC] == 0 } {
return
set run_tests {
{"Run with libdwarf1.so first"
- "tmpdir/libdwarf1.so" ""
+ "-Wl,--no-as-needed tmpdir/libdwarf1.so" ""
{dwarf1main.c} "dwarf1a" "dwarf1.out"
"-g -feliminate-dwarf2-dups"}
{"Run with libdwarf1.so last"
set test_name "Strip -s $test"
set prog $strip
- if ![ld_simple_link $ld tmpdir/$test "-shared tmpdir/dwarf1.o"] {
+ if ![ld_link $ld tmpdir/$test "-shared tmpdir/dwarf1.o"] {
unresolved "$test_name"
return
}
run_ld_link_tests $build_tests_ld
set testname "Link eh-group.o to eh-group"
-if [ld_simple_link $ld "tmpdir/eh-group" "-e _start tmpdir/eh-group.o"] {
+if [ld_link $ld "tmpdir/eh-group" "-e _start tmpdir/eh-group.o"] {
pass $testname
} else {
fail $testname
set LDFLAGS $old_ldflags
-# The following tests require running the executable generated by ld.
-if ![isnative] {
- return
-}
-
if [check_gc_sections_available] {
run_cc_link_tests {
{"PR ld/13195" "-Wl,--gc-sections" ""
}
set array_tests {
- {"preinit array" "" "" {preinit.c} "preinit" "preinit.out"}
- {"init array" "" "" {init.c} "init" "init.out"}
- {"fini array" "" "" {fini.c} "fini" "fini.out"}
- {"init array mixed" "" "" {init-mixed.c} "init-mixed" "init-mixed.out" "-I."}
+ {"preinit array" "" ""
+ {preinit.c} "preinit" "preinit.out"}
+ {"init array" "" ""
+ {init.c} "init" "init.out"}
+ {"fini array" "" ""
+ {fini.c} "fini" "fini.out"}
+ {"init array mixed" "" ""
+ {init-mixed.c} "init-mixed" "init-mixed.out" "-I."}
}
set array_tests_pie {
- {"PIE preinit array" "-pie" "" {preinit.c} "preinit" "preinit.out" "-fPIE" }
- {"PIE init array" "-pie" "" {init.c} "init" "init.out" "-fPIE"}
- {"PIE fini array" "-pie" "" {fini.c} "fini" "fini.out" "-fPIE"}
- {"PIE init array mixed" "-pie" "" {init-mixed.c} "init-mixed" "init-mixed.out" "-I. -fPIE"}
- {"PIE PR ld/14525" "-pie" "" {pr14525.c} "pr14525" "pr14525.out" "-fPIE"}
+ {"PIE preinit array" "-pie" ""
+ {preinit.c} "preinit" "preinit.out" "-fPIE"}
+ {"PIE init array" "-pie" ""
+ {init.c} "init" "init.out" "-fPIE"}
+ {"PIE fini array" "-pie" ""
+ {fini.c} "fini" "fini.out" "-fPIE"}
+ {"PIE init array mixed" "-pie" ""
+ {init-mixed.c} "init-mixed" "init-mixed.out" "-I. -fPIE"}
+ {"PIE PR ld/14525" "-pie" ""
+ {pr14525.c} "pr14525" "pr14525.out" "-fPIE"}
}
set array_tests_static {
- {"static preinit array" "-static" "" {preinit.c} "preinit" "preinit.out"}
- {"static init array" "-static" "" {init.c} "init" "init.out"}
- {"static fini array" "-static" "" {fini.c} "fini" "fini.out"}
- {"static init array mixed" "-static" "" {init-mixed.c} "init-mixed" "init-mixed.out" "-I."}
+ {"static preinit array" "-static" ""
+ {preinit.c} "preinit" "preinit.out"}
+ {"static init array" "-static" ""
+ {init.c} "init" "init.out"}
+ {"static fini array" "-static" ""
+ {fini.c} "fini" "fini.out"}
+ {"static init array mixed" "-static" ""
+ {init-mixed.c} "init-mixed" "init-mixed.out" "-I."}
}
# NetBSD ELF systems do not currently support the .*_array sections.
# Test that the symbol is normally exported.
-if { [ld_simple_link $ld tmpdir/exclude.so "--shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } {
+if { [ld_link $ld tmpdir/exclude.so "--shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } {
pass $test1
} else {
if [string match "*shared not supported*" $link_output] {
# Test --exclude-libs libexclude
-if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } {
+if { [ld_link $ld tmpdir/exclude.so "--exclude-libs libexclude --shared tmpdir/exclude1.o -Ltmpdir -lexclude"] } {
pass $test3
} else {
fail $test3
# Test alternate spellings of --exclude-libs
-if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+if { [ld_link $ld tmpdir/exclude.so "--exclude-libs libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
&& ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
fail $test5
}
-if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs ALL --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+if { [ld_link $ld tmpdir/exclude.so "--exclude-libs ALL --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
&& ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
fail $test6
}
-if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+if { [ld_link $ld tmpdir/exclude.so "--exclude-libs foo:libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
&& ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
fail $test7
}
-if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo,libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+if { [ld_link $ld tmpdir/exclude.so "--exclude-libs foo,libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
&& ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
fail $test8
}
-if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:bar --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
+if { [ld_link $ld tmpdir/exclude.so "--exclude-libs foo:bar --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
&& [info exists nm_output(exclude_common)]
&& [info exists nm_output(exclude_sym)] } {
return
}
-if { [ld_simple_link $ld tmpdir/frame.so "--shared tmpdir/frame.o tmpdir/tbss.o"] } {
+if { [ld_link $ld tmpdir/frame.so "--shared tmpdir/frame.o tmpdir/tbss.o"] } {
pass "$test1"
} else {
if [string match "*shared not supported*" $link_output] {
return
}
-if { [ld_simple_link $ld tmpdir/table.so "--shared tmpdir/table.o tmpdir/tbss.o"] } {
+if { [ld_link $ld tmpdir/table.so "--shared tmpdir/table.o tmpdir/tbss.o"] } {
pass "$test2"
} else {
if [string match "*shared not supported*" $link_output] {
set cmd "$ld -shared -o tmpdir/indirect2.so tmpdir/indirect2.o"
check_link_message "$cmd" [list $string2 $string] "$testname"
-# The following tests require running the executable generated by ld.
-if ![isnative] {
- return
-}
-
set run_tests {
{"Run with libindirect3c.so 1"
- "tmpdir/indirect3a.o tmpdir/indirect3b.o tmpdir/libindirect3c.so" ""
+ "-Wl,--no-as-needed tmpdir/indirect3a.o tmpdir/indirect3b.o tmpdir/libindirect3c.so" ""
{dummy.c} "indirect3a" "indirect3.out"}
{"Run with libindirect3c.so 2"
- "tmpdir/indirect3a.o tmpdir/libindirect3c.so tmpdir/indirect3b.o" ""
+ "-Wl,--no-as-needed tmpdir/indirect3a.o tmpdir/libindirect3c.so tmpdir/indirect3b.o" ""
{dummy.c} "indirect3b" "indirect3.out"}
{"Run with libindirect3c.so 3"
- "tmpdir/indirect3b.o tmpdir/libindirect3c.so tmpdir/indirect3a.o" ""
+ "-Wl,--no-as-needed tmpdir/indirect3b.o tmpdir/libindirect3c.so tmpdir/indirect3a.o" ""
{dummy.c} "indirect3c" "indirect3.out"}
{"Run with libindirect3c.so 4"
- "tmpdir/libindirect3c.so tmpdir/indirect3b.o tmpdir/indirect3a.o" ""
+ "-Wl,--no-as-needed tmpdir/libindirect3c.so tmpdir/indirect3b.o tmpdir/indirect3a.o" ""
{dummy.c} "indirect3d" "indirect3.out"}
{"Run with libindirect4c.so 1"
- "tmpdir/indirect4a.o tmpdir/indirect4b.o tmpdir/libindirect4c.so" ""
+ "-Wl,--no-as-needed tmpdir/indirect4a.o tmpdir/indirect4b.o tmpdir/libindirect4c.so" ""
{dummy.c} "indirect4a" "indirect4.out"}
{"Run with libindirect4c.so 2"
- "tmpdir/indirect4a.o tmpdir/libindirect4c.so tmpdir/indirect4b.o" ""
+ "-Wl,--no-as-needed tmpdir/indirect4a.o tmpdir/libindirect4c.so tmpdir/indirect4b.o" ""
{dummy.c} "indirect4b" "indirect4.out"}
{"Run with libindirect4c.so 3"
- "tmpdir/indirect4b.o tmpdir/libindirect4c.so tmpdir/indirect4a.o" ""
+ "-Wl,--no-as-needed tmpdir/indirect4b.o tmpdir/libindirect4c.so tmpdir/indirect4a.o" ""
{dummy.c} "indirect4c" "indirect4.out"}
{"Run with libindirect4c.so 4"
- "tmpdir/libindirect4c.so tmpdir/indirect4b.o tmpdir/indirect4a.o" ""
+ "-Wl,--no-as-needed tmpdir/libindirect4c.so tmpdir/indirect4b.o tmpdir/indirect4a.o" ""
{dummy.c} "indirect4d" "indirect4.out"}
{"Run with libpr18720c.so 1"
- "tmpdir/pr18720a.o tmpdir/pr18720b.o tmpdir/libpr18720c.so" ""
+ "-Wl,--no-as-needed tmpdir/pr18720a.o tmpdir/pr18720b.o tmpdir/libpr18720c.so" ""
{check-ptr-eq.c} "pr18720a" "pr18720.out"}
{"Run with libpr18720c.so 2"
- "tmpdir/pr18720a.o tmpdir/libpr18720c.so tmpdir/pr18720b.o" ""
+ "-Wl,--no-as-needed tmpdir/pr18720a.o tmpdir/libpr18720c.so tmpdir/pr18720b.o" ""
{check-ptr-eq.c} "pr18720b" "pr18720.out"}
{"Run with libpr18720c.so 3"
- "tmpdir/pr18720b.o tmpdir/libpr18720c.so tmpdir/pr18720a.o" ""
+ "-Wl,--no-as-needed tmpdir/pr18720b.o tmpdir/libpr18720c.so tmpdir/pr18720a.o" ""
{check-ptr-eq.c} "pr18720c" "pr18720.out"}
{"Run with libpr18720c.so 4"
- "tmpdir/libpr18720c.so tmpdir/pr18720b.o tmpdir/pr18720a.o" ""
+ "-Wl,--no-as-needed tmpdir/libpr18720c.so tmpdir/pr18720b.o tmpdir/pr18720a.o" ""
{check-ptr-eq.c} "pr18720d" "pr18720.out"}
{"Run with libpr18720c.so 5"
- "tmpdir/libpr18720c.so tmpdir/pr18720b1.o tmpdir/pr18720a.o" ""
+ "-Wl,--no-as-needed tmpdir/libpr18720c.so tmpdir/pr18720b1.o tmpdir/pr18720a.o" ""
{check-ptr-eq.c} "pr18720d" "pr18720.out"}
{"Run with libpr19553b.so"
- "tmpdir/libpr19553b.so tmpdir/libpr19553d.so -rpath-link ." ""
+ "-Wl,--no-as-needed tmpdir/libpr19553b.so tmpdir/libpr19553d.so -Wl,-rpath-link,." ""
{pr19553a.c} "pr19553b" "pr19553b.out"}
{"Run with libpr19553c.so"
- "tmpdir/libpr19553c.so tmpdir/libpr19553b.so tmpdir/libpr19553d.so" ""
+ "-Wl,--no-as-needed tmpdir/libpr19553c.so tmpdir/libpr19553b.so tmpdir/libpr19553d.so" ""
{pr19553a.c} "pr19553c" "pr19553c.out"}
{"Run with libpr19553d.so"
- "tmpdir/libpr19553d.so tmpdir/libpr19553b.so -rpath-link ." ""
+ "-Wl,--no-as-needed tmpdir/libpr19553d.so tmpdir/libpr19553b.so -Wl,-rpath-link,." ""
{pr19553a.c} "pr19553d" "pr19553d.out"}
}
global exec_output
global READELF
- if {! [ld_simple_link $ld tmpdir/sec-to-seg "-T $srcdir/$subdir/$scriptname tmpdir/sec-to-seg1.o tmpdir/sec-to-seg2.o"] } then {
+ if {! [ld_link $ld tmpdir/sec-to-seg "-T $srcdir/$subdir/$scriptname tmpdir/sec-to-seg1.o tmpdir/sec-to-seg2.o"] } then {
fail $testname
return 0
}
# Exclude non-ELF targets.
-# The following tests require running the executable generated by ld,
-# or enough of a build environment to create a fully linked executable.
-# This is not commonly available when testing a cross-built linker.
-if ![isnative] {
- return
-}
-
if ![is_elf_format] {
return
}
}
# Add -ldl to extralibs if needed
+set extralibs ""
if { ![istarget *-*-freebsd*]} {
set extralibs "-ldl"
}
{"Build warn libbar.so"
"-shared" "-fPIC"
{beginwarn.c end.c} {{readelf {-S --wide} libbarw.rd}} "libbarw.so"
- "C" "^.*\\\): warning: function foo is deprecated$"}
+ "c" {^.*\): warning: function foo is deprecated$} }
{"Build hidden libbar.so"
"-shared" "-fPIC"
{begin.c endhidden.c} {} "libbarh.so"}
run_cc_link_tests $build_tests
-set run_tests {
- {"Run normal with libfoo.so"
- "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
- {main.c} "normal" "normal.out"}
- {"Run protected with libfoo.so"
- "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endprotected.o" ""
- {main.c} "protected" "normal.out"}
- {"Run hidden with libfoo.so"
- "tmpdir/begin.o tmpdir/libfoo.so tmpdir/endhidden.o" ""
- {main.c} "hidden" "hidden.out"}
- {"Run normal with versioned libfoo.so"
- "tmpdir/begin.o tmpdir/libfoov.so tmpdir/end.o" ""
- {main.c} "normalv" "normal.out"}
- {"Run warn with versioned libfoo.so"
- "tmpdir/beginwarn.o tmpdir/libfoov.so" ""
- {main.c} "warn" "warn.out"
- "" "" "^.*\\\): warning: function foo is deprecated$"}
- {"Run protected with versioned libfoo.so"
- "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" ""
- {main.c} "protected" "normal.out"}
- {"Run hidden with versioned libfoo.so"
- "tmpdir/begin.o tmpdir/libfoov.so tmpdir/endhidden.o" ""
- {main.c} "hiddenv" "hidden.out"}
- {"Run normal libbar.so with libfoo.so"
- "tmpdir/libbarfoo.so tmpdir/libfoo.so" ""
- {main.c} "normal" "normal.out"}
- {"Run protected libbar.so with libfoo.so"
- "tmpdir/libbarpfoo.so tmpdir/libfoo.so" ""
- {main.c} "protected" "normal.out"}
- {"Run hidden libbar.so with libfoo.so"
- "tmpdir/libbarhfoo.so tmpdir/libfoo.so" ""
- {main.c} "hidden" "hidden.out"}
- {"Run normal libbar.so with versioned libfoo.so"
- "tmpdir/libbarfoov.so tmpdir/libfoov.so" ""
- {main.c} "normal" "normal.out"}
- {"Run protected libbar.so with versioned libfoo.so"
- "tmpdir/libbarpfoov.so tmpdir/libfoov.so" ""
- {main.c} "protected" "normal.out"}
- {"Run hidden libbar.so with versioned libfoo.so"
- "tmpdir/libbarhfoov.so tmpdir/libfoov.so" ""
- {main.c} "hidden" "hidden.out"}
- {"Run dl1a with --dynamic-list=dl1.list and dlopen on libdl1.so"
- "--dynamic-list=dl1.list $extralibs" ""
- {dl1main.c} "dl1a" "dl1.out"}
- {"Run dl1b with --dynamic-list-data and dlopen on libdl1.so"
- "--dynamic-list-data $extralibs" ""
- {dl1main.c} "dl1b" "dl1.out"}
- {"Run with libdl2a.so"
- "tmpdir/libdl2a.so" ""
- {dl2main.c} "dl2a" "dl2a.out"}
- {"Run with libdl2b.so"
- "tmpdir/libdl2b.so" ""
- {dl2main.c} "dl2b" "dl2b.out"}
- {"Run with libdl2c.so"
- "tmpdir/libdl2c.so" ""
- {dl2main.c} "dl2c" "dl2b.out"}
- {"Run with libdl4a.so"
- "tmpdir/libdl4a.so" ""
- {dl4main.c} "dl4a" "dl4a.out"}
- {"Run with libdl4b.so"
- "tmpdir/libdl4b.so" ""
- {dl4main.c} "dl4b" "dl4a.out"}
- {"Run with libdl4c.so"
- "tmpdir/libdl4c.so" ""
- {dl4main.c} "dl4c" "dl4b.out"}
- {"Run with libdl4d.so"
- "tmpdir/libdl4d.so" ""
- {dl4main.c} "dl4d" "dl4b.out"}
- {"Run with libdl4e.so"
- "tmpdir/libdl4e.so" ""
- {dl4main.c} "dl4e" "dl4a.out"}
- {"Run with libdl4f.so"
- "tmpdir/libdl4f.so" ""
- {dl4main.c} "dl4f" "dl4a.out"}
- {"Run dl6a1 with --dynamic-list-data and dlopen on libdl6a.so"
- "--dynamic-list-data $extralibs" ""
- {dl6amain.c} "dl6a1" "dl6a.out"}
- {"Run dl6a2 with -Bsymbolic-functions and dlopen on libdl6a.so"
- "-Bsymbolic-functions $extralibs" ""
- {dl6amain.c} "dl6a2" "dl6b.out"}
- {"Run dl6a3 with -Bsymbolic and dlopen on libdl6a.so"
- "-Bsymbolic $extralibs" ""
- {dl6amain.c} "dl6a3" "dl6b.out"}
- {"Run dl6a4 with -Bsymbolic --dynamic-list-data and dlopen on libdl6a.so"
- "-Bsymbolic --dynamic-list-data $extralibs" ""
- {dl6amain.c} "dl6a4" "dl6a.out"}
- {"Run dl6a5 with -Bsymbolic-functions --dynamic-list-cpp-new and dlopen on libdl6a.so"
- "-Bsymbolic-functions --dynamic-list-cpp-new $extralibs" ""
- {dl6amain.c} "dl6a5" "dl6b.out"}
- {"Run dl6a6 with --dynamic-list-cpp-new -Bsymbolic-functions and dlopen on libdl6a.so"
- "--dynamic-list-cpp-new -Bsymbolic-functions $extralibs" ""
- {dl6amain.c} "dl6a6" "dl6b.out"}
- {"Run dl6a7 with --dynamic-list-data -Bsymbolic and dlopen on libdl6a.so"
- "--dynamic-list-data -Bsymbolic $extralibs" ""
- {dl6amain.c} "dl6a7" "dl6a.out"}
- {"Run dl6b1 with --dynamic-list-data and dlopen on libdl6b.so"
- "--dynamic-list-data $extralibs" ""
- {dl6bmain.c} "dl6b1" "dl6a.out"}
- {"Run dl6b2 with dlopen on libdl6b.so"
- "$extralibs" ""
- {dl6bmain.c} "dl6b2" "dl6b.out"}
- {"Run dl6c1 with --dynamic-list-data and dlopen on libdl6c.so"
- "--dynamic-list-data $extralibs" ""
- {dl6cmain.c} "dl6c1" "dl6b.out"}
- {"Run dl6d1 with --dynamic-list-data and dlopen on libdl6d.so"
- "--dynamic-list-data $extralibs" ""
- {dl6dmain.c} "dl6d1" "dl6b.out"}
- {"Run with libdata1.so"
- "tmpdir/libdata1.so" ""
- {dynbss1.c} "dynbss1" "pass.out"}
- {"Run with libdata2.so"
- "tmpdir/libdata2.so" ""
- {weakdef1.c} "weakdef1" "pass.out"}
- {"Run with libfunc1.so comm1.o"
- "tmpdir/libfunc1.so tmpdir/comm1.o" ""
- {dummy.c} "comm1" "pass.out"}
- {"Run with comm1.o libfunc1.so"
- "tmpdir/comm1.o tmpdir/libfunc1.so" ""
- {dummy.c} "comm1" "pass.out"}
- {"Run with pr11138-2.c libpr11138-1.so"
- "--version-script=pr11138-2.map tmpdir/pr11138-2.o tmpdir/libpr11138-1.so" ""
- {dummy.c} "pr11138a" "pr11138.out"}
- {"Run with libpr11138-1.so pr11138-2.c"
- "--version-script=pr11138-2.map tmpdir/libpr11138-1.so tmpdir/pr11138-2.o" ""
- {dummy.c} "pr11138b" "pr11138.out"}
- {"Run with pr13250-3.c, libpr13250-1.so and libpr13250-2.so"
- "--as-needed tmpdir/pr13250-3.o tmpdir/libpr13250-1.so tmpdir/libpr13250-2.so" ""
- {dummy.c} "pr13250" "pass.out"}
- {"Run with pr14323-1.c pr14323-2.so"
- "tmpdir/libpr14323-2.so" ""
- {pr14323-1.c} "pr14323" "pass.out"}
- {"Run with pr14862-1.c libpr14862.so"
- "--as-needed tmpdir/libpr14862-1.o tmpdir/libpr14862.so" ""
- {dummy.c} "pr14862" "pr14862.out"}
- {"Link with --add-needed"
- "tmpdir/libneeded1c.o --add-needed -rpath=tmpdir -Ltmpdir -lneeded1a" ""
- {dummy.c} "needed1a" "needed1.out"}
- {"Link with --copy-dt-needed-entries"
- "tmpdir/libneeded1c.o --copy-dt-needed-entries -rpath=tmpdir -Ltmpdir -lneeded1a" ""
- {dummy.c} "needed1b" "needed1.out"}
- {"Run relmain"
- "--no-as-needed -rpath=tmpdir -Ltmpdir -lrel" ""
- {relmain.c} "relmain" "relmain.out"}
- {"Run pr2404"
- "tmpdir/pr2404b.o tmpdir/libpr2404a.so" ""
- {dummy.c} "pr2404" "pr2404.out"}
- {"Run pr18458"
- "tmpdir/libpr18458a.so tmpdir/libpr18458b.so -z now" ""
- {pr18458c.c} "pr18458" "pass.out"}
-}
+set run_tests [list \
+ [list "Run normal with libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "" \
+ {main.c} "normal" "normal.out" ] \
+ [list "Run protected with libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/endprotected.o" "" \
+ {main.c} "protected" "normal.out" ] \
+ [list "Run hidden with libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/endhidden.o" "" \
+ {main.c} "hidden" "hidden.out" ] \
+ [list "Run normal with versioned libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoov.so tmpdir/end.o" "" \
+ {main.c} "normalv" "normal.out" ] \
+ [list "Run warn with versioned libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/beginwarn.o tmpdir/libfoov.so" "" \
+ {main.c} "warn" "warn.out" \
+ "" "c" {^.*\): warning: function foo is deprecated$} ] \
+ [list "Run protected with versioned libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoov.so tmpdir/endprotected.o" "" \
+ {main.c} "protected" "normal.out" ] \
+ [list "Run hidden with versioned libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoov.so tmpdir/endhidden.o" "" \
+ {main.c} "hiddenv" "hidden.out" ] \
+ [list "Run normal libbar.so with libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/libbarfoo.so tmpdir/libfoo.so" "" \
+ {main.c} "normal" "normal.out" ] \
+ [list "Run protected libbar.so with libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/libbarpfoo.so tmpdir/libfoo.so" "" \
+ {main.c} "protected" "normal.out" ] \
+ [list "Run hidden libbar.so with libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/libbarhfoo.so tmpdir/libfoo.so" "" \
+ {main.c} "hidden" "hidden.out" ] \
+ [list "Run normal libbar.so with versioned libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/libbarfoov.so tmpdir/libfoov.so" "" \
+ {main.c} "normal" "normal.out" ] \
+ [list "Run protected libbar.so with versioned libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/libbarpfoov.so tmpdir/libfoov.so" "" \
+ {main.c} "protected" "normal.out" ] \
+ [list "Run hidden libbar.so with versioned libfoo.so" \
+ "-Wl,--no-as-needed tmpdir/libbarhfoov.so tmpdir/libfoov.so" "" \
+ {main.c} "hidden" "hidden.out" ] \
+ [list "Run dl1a with --dynamic-list=dl1.list and dlopen on libdl1.so" \
+ "-Wl,--no-as-needed,--dynamic-list=dl1.list $extralibs" "" \
+ {dl1main.c} "dl1a" "dl1.out" ] \
+ [list "Run dl1b with --dynamic-list-data and dlopen on libdl1.so" \
+ "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \
+ {dl1main.c} "dl1b" "dl1.out" ] \
+ [list "Run with libdl2a.so" \
+ "-Wl,--no-as-needed tmpdir/libdl2a.so" "" \
+ {dl2main.c} "dl2a" "dl2a.out" ] \
+ [list "Run with libdl2b.so" \
+ "-Wl,--no-as-needed tmpdir/libdl2b.so" "" \
+ {dl2main.c} "dl2b" "dl2b.out" ] \
+ [list "Run with libdl2c.so" \
+ "-Wl,--no-as-needed tmpdir/libdl2c.so" "" \
+ {dl2main.c} "dl2c" "dl2b.out" ] \
+ [list "Run with libdl4a.so" \
+ "-Wl,--no-as-needed tmpdir/libdl4a.so" "" \
+ {dl4main.c} "dl4a" "dl4a.out" ] \
+ [list "Run with libdl4b.so" \
+ "-Wl,--no-as-needed tmpdir/libdl4b.so" "" \
+ {dl4main.c} "dl4b" "dl4a.out" ] \
+ [list "Run with libdl4c.so" \
+ "-Wl,--no-as-needed tmpdir/libdl4c.so" "" \
+ {dl4main.c} "dl4c" "dl4b.out" ] \
+ [list "Run with libdl4d.so" \
+ "-Wl,--no-as-needed tmpdir/libdl4d.so" "" \
+ {dl4main.c} "dl4d" "dl4b.out" ] \
+ [list "Run with libdl4e.so" \
+ "-Wl,--no-as-needed tmpdir/libdl4e.so" "" \
+ {dl4main.c} "dl4e" "dl4a.out" ] \
+ [list "Run with libdl4f.so" \
+ "-Wl,--no-as-needed tmpdir/libdl4f.so" "" \
+ {dl4main.c} "dl4f" "dl4a.out" ] \
+ [list "Run dl6a1 with --dynamic-list-data and dlopen on libdl6a.so" \
+ "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \
+ {dl6amain.c} "dl6a1" "dl6a.out" ] \
+ [list "Run dl6a2 with -Bsymbolic-functions and dlopen on libdl6a.so" \
+ "-Wl,--no-as-needed,-Bsymbolic-functions $extralibs" "" \
+ {dl6amain.c} "dl6a2" "dl6b.out" ] \
+ [list "Run dl6a3 with -Bsymbolic and dlopen on libdl6a.so" \
+ "-Wl,--no-as-needed,-Bsymbolic $extralibs" "" \
+ {dl6amain.c} "dl6a3" "dl6b.out" ] \
+ [list "Run dl6a4 with -Bsymbolic --dynamic-list-data and dlopen on libdl6a.so" \
+ "-Wl,--no-as-needed,-Bsymbolic,--dynamic-list-data $extralibs" "" \
+ {dl6amain.c} "dl6a4" "dl6a.out" ] \
+ [list "Run dl6a5 with -Bsymbolic-functions --dynamic-list-cpp-new and dlopen on libdl6a.so" \
+ "-Wl,--no-as-needed,-Bsymbolic-functions,--dynamic-list-cpp-new $extralibs" "" \
+ {dl6amain.c} "dl6a5" "dl6b.out" ] \
+ [list "Run dl6a6 with --dynamic-list-cpp-new -Bsymbolic-functions and dlopen on libdl6a.so" \
+ "-Wl,--no-as-needed,--dynamic-list-cpp-new,-Bsymbolic-functions $extralibs" "" \
+ {dl6amain.c} "dl6a6" "dl6b.out" ] \
+ [list "Run dl6a7 with --dynamic-list-data -Bsymbolic and dlopen on libdl6a.so" \
+ "-Wl,--no-as-needed,--dynamic-list-data,-Bsymbolic $extralibs" "" \
+ {dl6amain.c} "dl6a7" "dl6a.out" ] \
+ [list "Run dl6b1 with --dynamic-list-data and dlopen on libdl6b.so" \
+ "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \
+ {dl6bmain.c} "dl6b1" "dl6a.out" ] \
+ [list "Run dl6b2 with dlopen on libdl6b.so" \
+ "-Wl,--no-as-needed $extralibs" "" \
+ {dl6bmain.c} "dl6b2" "dl6b.out" ] \
+ [list "Run dl6c1 with --dynamic-list-data and dlopen on libdl6c.so" \
+ "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \
+ {dl6cmain.c} "dl6c1" "dl6b.out" ] \
+ [list "Run dl6d1 with --dynamic-list-data and dlopen on libdl6d.so" \
+ "-Wl,--no-as-needed,--dynamic-list-data $extralibs" "" \
+ {dl6dmain.c} "dl6d1" "dl6b.out" ] \
+ [list "Run with libdata1.so" \
+ "-Wl,--no-as-needed tmpdir/libdata1.so" "" \
+ {dynbss1.c} "dynbss1" "pass.out" ] \
+ [list "Run with libdata2.so" \
+ "-Wl,--no-as-needed tmpdir/libdata2.so" "" \
+ {weakdef1.c} "weakdef1" "pass.out" ] \
+ [list "Run with libfunc1.so comm1.o" \
+ "-Wl,--no-as-needed tmpdir/libfunc1.so tmpdir/comm1.o" "" \
+ {dummy.c} "comm1" "pass.out" ] \
+ [list "Run with comm1.o libfunc1.so" \
+ "-Wl,--no-as-needed tmpdir/comm1.o tmpdir/libfunc1.so" "" \
+ {dummy.c} "comm1" "pass.out" ] \
+ [list "Run with pr11138-2.c libpr11138-1.so" \
+ "-Wl,--no-as-needed,--version-script=pr11138-2.map tmpdir/pr11138-2.o tmpdir/libpr11138-1.so" "" \
+ {dummy.c} "pr11138a" "pr11138.out" ] \
+ [list "Run with libpr11138-1.so pr11138-2.c" \
+ "-Wl,--no-as-needed,--version-script=pr11138-2.map tmpdir/libpr11138-1.so tmpdir/pr11138-2.o" "" \
+ {dummy.c} "pr11138b" "pr11138.out" ] \
+ [list "Run with pr13250-3.c, libpr13250-1.so and libpr13250-2.so" \
+ "-Wl,--as-needed tmpdir/pr13250-3.o tmpdir/libpr13250-1.so tmpdir/libpr13250-2.so" "" \
+ {dummy.c} "pr13250" "pass.out" ] \
+ [list "Run with pr14323-1.c pr14323-2.so" \
+ "-Wl,--no-as-needed tmpdir/libpr14323-2.so" "" \
+ {pr14323-1.c} "pr14323" "pass.out" ] \
+ [list "Run with pr14862-1.c libpr14862.so" \
+ "-Wl,--as-needed tmpdir/libpr14862-1.o tmpdir/libpr14862.so" "" \
+ {dummy.c} "pr14862" "pr14862.out" ] \
+ [list "Link with --add-needed" \
+ "tmpdir/libneeded1c.o -Wl,--no-as-needed,--add-needed,-rpath=tmpdir -Ltmpdir -lneeded1a" "" \
+ {dummy.c} "needed1a" "needed1.out" ] \
+ [list "Link with --copy-dt-needed-entries" \
+ "tmpdir/libneeded1c.o -Wl,--no-as-needed,--copy-dt-needed-entries,-rpath=tmpdir -Ltmpdir -lneeded1a" "" \
+ {dummy.c} "needed1b" "needed1.out" ] \
+ [list "Run relmain" \
+ "-Wl,--no-as-needed,-rpath=tmpdir -Ltmpdir -lrel" "" \
+ {relmain.c} "relmain" "relmain.out" ] \
+ [list "Run pr2404" \
+ "-Wl,--no-as-needed tmpdir/pr2404b.o tmpdir/libpr2404a.so" "" \
+ {dummy.c} "pr2404" "pr2404.out" ] \
+ [list "Run pr18458" \
+ "-Wl,--no-as-needed,-z,now tmpdir/libpr18458a.so tmpdir/libpr18458b.so" "" \
+ {pr18458c.c} "pr18458" "pass.out" ] \
+]
# NetBSD ELF systems do not currently support the .*_array sections.
run_ld_link_exec_tests $run_tests "*-*-netbsdelf*"
"-Wl,--no-as-needed tmpdir/libdl3c.so" ""
{dl3main.cc} "dl3c" "dl3a.out" "" "c++"}
{"Run with libnew1a.so"
- "tmpdir/libnew1a.so" ""
+ "-Wl,--no-as-needed tmpdir/libnew1a.so" ""
{dl5.cc} "dl5a" "dl5.out" "" "c++"}
{"Run with libnew1b.so"
- "tmpdir/libnew1b.so" ""
+ "-Wl,--no-as-needed tmpdir/libnew1b.so" ""
{dl5.cc} "dl5b" "dl5.out" "" "c++"}
}
run_ld_link_exec_tests [list \
[list \
"Run pr2404 with PIE" \
- "-pie tmpdir/pr2404b.o tmpdir/libpr2404a.so" \
+ "-pie -Wl,--no-as-needed tmpdir/pr2404b.o tmpdir/libpr2404a.so" \
"" \
{ dummy.c } \
"pr2404pie" \
] \
[list \
"Run pr19579" \
- "-pie -z text tmpdir/pr19579a.o tmpdir/libpr19579.so" \
+ "-pie -Wl,--no-as-needed,-z,text tmpdir/pr19579a.o tmpdir/libpr19579.so" \
"" \
{dummy.c} \
"pr19579" \
run_ld_link_exec_tests [list \
[list \
"Run $exe fun defined" \
- "$ldflags tmpdir/libpr19719b.o tmpdir/libpr19719.so -rpath tmpdir" \
+ "-Wl,--no-as-needed,-rpath,tmpdir $ldflags tmpdir/libpr19719b.o tmpdir/libpr19719.so" \
"" \
{ pr19719a.c pr19719c.c } \
$exe \
setup_xfail $targ
}
+ if ![isnative] {
+ unsupported "Run $exe fun undefined"
+ return
+ }
+
set exec_output [run_host_cmd "tmpdir/$exe" ""]
if {![string match "PASS" $exec_output]} {
fail "Run $exe fun undefined"
return
}
-if { ![ld_simple_link $ld tmpdir/tls_common1a.o "-r tmpdir/tls_commona.o"]
- || ![ld_simple_link $ld tmpdir/tls_common1b.o "-r tmpdir/tls_commona.o"] } {
+if { ![ld_link $ld tmpdir/tls_common1a.o "-r tmpdir/tls_commona.o"]
+ || ![ld_link $ld tmpdir/tls_common1b.o "-r tmpdir/tls_commona.o"] } {
fail "tls_common"
return
}
-if { ![ld_simple_link $ld tmpdir/tls_commona "tmpdir/tls_common1a.o"] } {
+if { ![ld_link $ld tmpdir/tls_commona "tmpdir/tls_common1a.o"] } {
if { [string match "*not supported*" $link_output]
|| [string match "*unrecognized option*" $link_output] } {
unsupported "$ld_options is not supported by this target"
return
}
-if { ![ld_simple_link $ld tmpdir/tls_commonb "tmpdir/tls_common1b.o"] } {
+if { ![ld_link $ld tmpdir/tls_commonb "tmpdir/tls_common1b.o"] } {
if { [string match "*not supported*" $link_output]
|| [string match "*unrecognized option*" $link_output] } {
unsupported "$ld_options is not supported by this target"
return
}
-# The following tests require running the executable generated by ld.
-if ![isnative] {
- return
-}
-
# Check if compiler works
if { [which $CC] == 0 } {
return
set run_tests {
{"Run with libwrap1a.so and libwrap1b.so"
- "--wrap par tmpdir/libwrap1a.so tmpdir/libwrap1b.so" ""
+ "-Wl,--no-as-needed,--wrap,par tmpdir/libwrap1a.so tmpdir/libwrap1b.so" ""
{wrap1.c} "wrap1" "wrap1.out"}
{"Run with libwrap1b.so and libwrap1a.so"
- "--wrap par tmpdir/libwrap1b.so tmpdir/libwrap1a.so" ""
+ "-Wl,--no-as-needed,--wrap,par tmpdir/libwrap1b.so tmpdir/libwrap1a.so" ""
{wrap1.c} "wrap1" "wrap1.out"}
}
return 0
}
- if { ![ld_simple_link $ld tmpdir/sort-common.dx "--sort-common=descending tmpdir/sort-common.o"] } {
+ if { ![ld_link $ld tmpdir/sort-common.dx "--sort-common=descending tmpdir/sort-common.o"] } {
fail "$test"
return 0
}
verbose "Check to see that --sort-common=ascending sorts in ascending alignment"
- if { ![ld_simple_link $ld tmpdir/sort-common.ax "--sort-common=ascending tmpdir/sort-common.o"] } {
+ if { ![ld_link $ld tmpdir/sort-common.ax "--sort-common=ascending tmpdir/sort-common.o"] } {
fail "$test"
return 0
}
set options "$options tmpdir/common1c.o"
- if { ! [ld_simple_link $ld tmpdir/common.exe $options] } {
+ if { ! [ld_link $ld tmpdir/common.exe $options] } {
unresolved $testname
return 0
}
}
}
-if { [ld_simple_link $ld tmpdir/common1.o $options] } {
+if { [ld_link $ld tmpdir/common1.o $options] } {
unresolved $test1w1
return
}
}
}
-if { [ld_simple_link $ld tmpdir/common1.o $options] } {
+if { [ld_link $ld tmpdir/common1.o $options] } {
unresolved $test1w2
return
}
#
-# This test can only be run if ld generates native executables.
-if ![isnative] then {return}
+# Check to see if the C compiler works
+if { [which $CC] == 0 } {
+ return
+}
# This test can only be run on a couple of ELF platforms.
# Square bracket expressions seem to confuse istarget.
set script_arg "$script $srcdir/$subdir/$mapfile"
}
- if {![ld_simple_link $ld $tmpdir/$libname.so "$shared $tmpdir/$libname.o $other_lib $script_arg $ldargs"]} {
+ if {![ld_link $ld $tmpdir/$libname.so "$shared $tmpdir/$libname.o $other_lib $script_arg $ldargs"]} {
fail "$test"
return
}
set script_arg "-Wl,$script $srcdir/$subdir/$mapfile"
}
- if {![ld_simple_link $CC $tmpdir/$execname "$tmpdir/$execname.o $other_lib $script_arg"]} {
+ if {![ld_link $CC $tmpdir/$execname "$tmpdir/$execname.o $other_lib $script_arg"]} {
pass "$test"
return
}
set solibname_lib $tmpdir/$solibname
}
- if {![ld_simple_link $CC $tmpdir/$execname "$flags $tmpdir/$execname.o $solibname_lib"]} {
+ if {![ld_link $CC $tmpdir/$execname "$flags $tmpdir/$execname.o $solibname_lib"]} {
fail "$test"
return
}
# Make sure that ld can generate ELF shared libraries with visibility.
+# Check to see if the C compiler works
+if { [which $CC] == 0 } {
+ return
+}
+
# This test can only be run on a couple of ELF platforms.
# Square bracket expressions seem to confuse istarget.
if { ![istarget hppa*64*-*-hpux*] \
run_dump_test [file rootname $t]
}
-# The remaining tests can only be run if ld generates native executables.
-if ![isnative] then {return}
-
set tmpdir tmpdir
set SHCFLAG ""
set shared_needs_pic "no"
|| [istarget *-*-nacl*]
|| [istarget *-*-gnu*] } {
if [ld_compile "$CC -g $CFLAGS -DPROTECTED_CHECK" $srcdir/$subdir/main.c $tmpdir/main.o] {
- if [ld_simple_link $CC $tmpdir/main "$tmpdir/main.o"] {
+ if [ld_link $CC $tmpdir/main "$tmpdir/main.o"] {
catch "exec $tmpdir/main" support_protected
}
}
if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
set shared "-bM:SRE -bE:$tmpdir/xcoff.exp"
}
- if {![ld_simple_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
+ if {![ld_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
if { [ string match $visibility "hidden_undef" ]
&& [regexp "undefined reference to \`\.?visibility\'" $link_output]
&& [regexp "undefined reference to \`visibility_var\'" $link_output] } {
if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
set rpath /lib:$tmpdir
}
- if ![ld_simple_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
+ if ![ld_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
if { [ string match $visibility "hidden" ]
&& [regexp "undefined reference to \`\.?visibility\'" $link_output]
&& [regexp "undefined reference to \`visibility_var\'" $link_output] } {
fail "$testname"
}
+ if ![isnative] {
+ unsupported "$testname"
+ return
+ }
+
# Run the resulting program
send_log "$tmpdir/$progname >$tmpdir/$progname.out\n"
verbose "$tmpdir/$progname >$tmpdir/$progname.out"
if { ![ld_compile "$CC -g $CFLAGS" $srcdir/$subdir/common.c tmpdir/common.o] } {
unresolved "common hidden symbol"
} else {
- if ![ld_simple_link $ld tmpdir/common "tmpdir/common.o"] {
+ if ![ld_link $ld tmpdir/common "tmpdir/common.o"] {
fail "common hidden symbol"
} else {
pass "common hidden symbol"
if { ![ld_compile "$CC -g $CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh3.c tmpdir/sh3.o] } {
unresolved "weak hidden symbol"
} else {
- if ![ld_simple_link $ld tmpdir/sh3.so "-shared tmpdir/sh3.o"] {
+ if ![ld_link $ld tmpdir/sh3.so "-shared tmpdir/sh3.o"] {
fail "weak hidden symbol"
} else {
- if ![ld_simple_link $ld tmpdir/weak "tmpdir/test.o tmpdir/sh3.o"] {
+ if ![ld_link $ld tmpdir/weak "tmpdir/test.o tmpdir/sh3.o"] {
fail "weak hidden symbol DSO last"
} else {
pass "weak hidden symbol DSO last"
}
- if ![ld_simple_link $ld tmpdir/weak "tmpdir/sh3.so tmpdir/test.o"] {
+ if ![ld_link $ld tmpdir/weak "tmpdir/sh3.so tmpdir/test.o"] {
fail "weak hidden symbol DSO first"
} else {
pass "weak hidden symbol DSO first"
# Eric Youngdale (eric@andante.jic.com)
#
-# This test can only be run if ld generates native executables.
-if ![isnative] then {return}
+# Check to see if the C compiler works
+if { [which $CC] == 0 } {
+ return
+}
# This test can only be run on a couple of ELF platforms.
# Square bracket expressions seem to confuse istarget.
set files "$files $tmpdir/$obj"
}
- if {![ld_simple_link $CC $tmpdir/$libname.so "$shared $files"]} {
+ if {![ld_link $CC $tmpdir/$libname.so "$shared $files"]} {
fail $test
return
}
set files "$files $tmpdir/$obj"
}
- if {![ld_simple_link $CC $tmpdir/$execname "$flags $files"]} {
+ if {![ld_link $CC $tmpdir/$execname "$flags $files"]} {
fail "$test"
return
}
}
}
+ if ![isnative] {
+ unsupported $test
+ return
+ }
# Run the resulting program
send_log "$tmpdir/$execname >$tmpdir/$execname.out\n"
verbose "$tmpdir/$execname >$tmpdir/$execname.out"
return
}
-if {![ld_simple_link $CC $tmpdir/libbar.so "$shared $tmpdir/bar.o"]} {
+if {![ld_link $CC $tmpdir/libbar.so "$shared $tmpdir/bar.o"]} {
fail "ELF weak"
return
}
return
}
-if {![ld_simple_link $CC $tmpdir/libfoo1a.so "$shared $tmpdir/foo1a.o"]} {
+if {![ld_link $CC $tmpdir/libfoo1a.so "$shared $tmpdir/foo1a.o"]} {
fail "ELF weak"
return
}
-if {![ld_simple_link $CC $tmpdir/libfoo1b.so "$shared $tmpdir/foo1b.o"]} {
+if {![ld_link $CC $tmpdir/libfoo1b.so "$shared $tmpdir/foo1b.o"]} {
fail "ELF weak"
return
}
-if {![ld_simple_link $CC $tmpdir/libbar1a.so "$shared $tmpdir/bar1a.o $tmpdir/libfoo1a.so"]} {
+if {![ld_link $CC $tmpdir/libbar1a.so "$shared $tmpdir/bar1a.o $tmpdir/libfoo1a.so"]} {
fail "ELF weak"
return
}
return
}
-if ![ld_simple_link $ld tmpdir/extern.x "$ldflags tmpdir/export.o tmpdir/import.o"] {
+if ![ld_link $ld tmpdir/extern.x "$ldflags tmpdir/export.o tmpdir/import.o"] {
fail $testname
} else {
pass $testname
set outfile "tmpdir/$filename"
set options "-L$srcdir/$subdir"
- append options " " $ldflags " " [ld_simple_link_defsyms] " " $objfile
+ append options " " $ldflags " " [ld_link_defsyms] " " $objfile
# SH64 targets needs an extra ld option for this test.
if [istarget sh64*-*-*] {
}
}
- if ![ld_simple_link $linker $outfile $options] {
+ if ![ld_link $linker $outfile $options] {
fail $testname
return
}
set gasopt "-mpic -mpid=near"
}
if {![ld_assemble_flags $as $gasopt $srcdir/$subdir/libpersonality.s tmpdir/libpersonality.o]
- || ![ld_simple_link $ld tmpdir/libpersonality.so "-shared tmpdir/libpersonality.o"] } then {
+ || ![ld_link $ld tmpdir/libpersonality.so "-shared tmpdir/libpersonality.o"] } then {
fail libpersonality
} else {
run_dump_test "personality"
|| [istarget "*-*-nacl*"]
|| [istarget "*-*-gnu*"] } {
ld_compile "$CC -fPIC $CFLAGS $cflags" $srcdir/$subdir/pr11218-1.c tmpdir/pr11218-1.o
- ld_simple_link $ld tmpdir/pr11218-1.so "-shared tmpdir/pr11218-1.o"
+ ld_link $ld tmpdir/pr11218-1.so "-shared tmpdir/pr11218-1.o"
ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/pr11218-2.c tmpdir/pr11218-2.o
run_dump_test "pr11218"
}
return
}
- if { ![ld_simple_link $ld tmpdir/$test "$ld_options tmpdir/$test.o"] } {
+ if { ![ld_link $ld tmpdir/$test "$ld_options tmpdir/$test.o"] } {
if { [string match "*not supported*" $link_output]
|| [string match "*unrecognized option*" $link_output] } {
unsupported "$ld_options is not supported by this target"
return
}
-# We need a native system. FIXME: Strictly speaking this
-# is not true, we just need to know how to create a fully
-# linked executable, including the C and Z libraries, using
-# the linker that is under test.
-if ![isnative] {
- verbose "IFUNC tests not run - not a native toolchain"
- return
-}
-
# We need a working compiler. (Strictly speaking this is
# not true, we could use target specific assembler files).
if { [which $CC] == 0 } {
return
}
-if ![ld_simple_link $ld "tmpdir/libshared_ifunc.so" "-shared tmpdir/shared_ifunc.o"] {
+if ![ld_link $ld "tmpdir/libshared_ifunc.so" "-shared tmpdir/shared_ifunc.o"] {
fail "Could not create a shared library containing an IFUNC symbol"
set fails [expr $fails + 1]
}
return
}
-if ![default_ld_link $ld "tmpdir/dynamic_prog" "-Ltmpdir tmpdir/shared_prog.o -Bdynamic -lshared_ifunc -rpath ./tmpdir"] {
+if ![ld_link $CC "tmpdir/dynamic_prog" "-Wl,--no-as-needed,-rpath=./tmpdir,-Bdynamic -Ltmpdir tmpdir/shared_prog.o -lshared_ifunc"] {
fail "Could not link a dynamic executable"
set fails [expr $fails + 1]
}
-if ![default_ld_link $ld "tmpdir/local_prog" "-Ltmpdir tmpdir/static_prog.o -lifunc"] {
+if ![ld_link $CC "tmpdir/local_prog" "-Wl,--no-as-needed,-rpath=./tmpdir -Ltmpdir tmpdir/static_prog.o -lifunc"] {
fail "Could not link a dynamic executable using local ifunc"
set fails [expr $fails + 1]
}
-if ![default_ld_link $ld "tmpdir/static_prog" "-static -Ltmpdir tmpdir/static_prog.o -lifunc"] {
+if ![ld_link $CC "tmpdir/static_prog" "-static -Ltmpdir tmpdir/static_prog.o -lifunc"] {
fail "Could not link a static executable"
set fails [expr $fails + 1]
}
-if ![ld_simple_link $ld "tmpdir/static_nonifunc_prog" "-static tmpdir/empty.o"] {
+if ![ld_link $ld "tmpdir/static_nonifunc_prog" "-static tmpdir/empty.o"] {
fail "Could not link a non-ifunc using static executable"
set fails [expr $fails + 1]
}
-if ![default_ld_link $ld "tmpdir/test-1" "tmpdir/test-1.o tmpdir/libshared_ifunc.so"] {
+if ![ld_link $CC "tmpdir/test-1" "-Wl,--no-as-needed,-rpath=./tmpdir tmpdir/test-1.o tmpdir/libshared_ifunc.so"] {
fail "Could not link test-1"
set fails [expr $fails + 1]
}
-if ![ld_simple_link $ld "tmpdir/libtest-2.so" "-shared tmpdir/test-2.o"] {
+if ![ld_link $ld "tmpdir/libtest-2.so" "-shared tmpdir/test-2.o"] {
fail "Could not link libtest-2.so"
set fails [expr $fails + 1]
}
# ifunc should have an OSABI field of GNU. The linked non-ifunc using
# executable should have an OSABI field of NONE (aka System V).
+case $target_triplet in {
+ { hppa*-*-linux* } { set expected_none {UNIX - GNU} }
+ default { set expected_none {UNIX - System V} }
+}
+
if {! [check_osabi tmpdir/libshared_ifunc.so {UNIX - GNU}]} {
fail "Shared libraries containing ifunc does not have an OS/ABI field of GNU"
set fails [expr $fails + 1]
fail "Static ifunc-using executable does not have an OS/ABI field of GNU"
set fails [expr $fails + 1]
}
-if {! [check_osabi tmpdir/dynamic_prog {UNIX - System V}]} {
- fail "Dynamic ifunc-using executable does not have an OS/ABI field of System V"
+if {! [check_osabi tmpdir/dynamic_prog $expected_none]} {
+ fail "Dynamic ifunc-using executable does not have an OS/ABI field of $expected_none"
set fails [expr $fails + 1]
}
-if {! [check_osabi tmpdir/static_nonifunc_prog {UNIX - System V}]} {
- fail "Static non-ifunc-using executable does not have an OS/ABI field of System V"
+if {! [check_osabi tmpdir/static_nonifunc_prog $expected_none]} {
+ fail "Static non-ifunc-using executable does not have an OS/ABI field of $expected_none"
set fails [expr $fails + 1]
}
pass "Checking ifunc binaries"
}
-# Clean up, unless we are being verbose, in which case we leave the files available.
-if { $verbose < 1 } {
- remote_file host delete "tmpdir/shared_prog.o"
- remote_file host delete "tmpdir/static_prog.o"
- remote_file host delete "tmpdir/shared_ifunc.o"
- remote_file host delete "tmpdir/static_ifunc.o"
- remote_file host delete "tmpdir/static_noifunc.o"
- remote_file host delete "tmpdir/libshared_ifunc.so"
- remote_file host delete "tmpdir/libifunc.a"
- remote_file host delete "tmpdir/dynamic_prog"
- remote_file host delete "tmpdir/local_prog"
- remote_file host delete "tmpdir/static_prog"
- remote_file host delete "tmpdir/static_nonifunc_prog"
-}
-
run_cc_link_tests [list \
[list \
"Build libpr16467a.so" \
run_ld_link_exec_tests [list \
[list \
"Run pr16467" \
- "tmpdir/pr16467c.o tmpdir/libpr16467b.so tmpdir/libpr16467a.so" \
+ "-Wl,--no-as-needed tmpdir/pr16467c.o tmpdir/libpr16467b.so tmpdir/libpr16467a.so" \
"" \
{ dummy.c } \
"pr16467" \
] \
[list \
"Run ifunc-main" \
- "tmpdir/libifunc-lib.so" \
+ "-Wl,--no-as-needed tmpdir/libifunc-lib.so" \
"" \
{ ifunc-main.c } \
"ifunc-main" \
] \
[list \
"Run ifunc-main with -fpic" \
- "tmpdir/libifunc-lib.so" \
+ "-Wl,--no-as-needed tmpdir/libifunc-lib.so" \
"" \
{ ifunc-main.c } \
"ifunc-main" \
run_ld_link_exec_tests [list \
[list \
"Run pr18808" \
- "tmpdir/pr18808a.o tmpdir/libpr18808.so" \
+ "-Wl,--no-as-needed tmpdir/pr18808a.o tmpdir/libpr18808.so" \
"" \
{ dummy.c } \
"pr18808" \
] \
[list \
"Run pr18841 with libpr18841b.so" \
- "tmpdir/pr18841a.o tmpdir/libpr18841b.so" \
+ "-Wl,--no-as-needed tmpdir/pr18841a.o tmpdir/libpr18841b.so" \
"" \
{ dummy.c } \
"pr18841b" \
] \
[list \
"Run pr18841 with libpr18841c.so" \
- "--as-needed tmpdir/pr18841a.o tmpdir/libpr18841c.so" \
+ "-Wl,--as-needed tmpdir/pr18841a.o tmpdir/libpr18841c.so" \
"" \
{ dummy.c } \
"pr18841c" \
if ![ld_assemble $as "$srcdir/$subdir/mep1.s" tmpdir/mep1.o] {
unresolved $testbsrweak
-} else { if ![ld_simple_link $ld tmpdir/mep1 "-T$srcdir/$subdir/mep1.ld tmpdir/mep1.o"] {
+} else { if ![ld_link $ld tmpdir/mep1 "-T$srcdir/$subdir/mep1.ld tmpdir/mep1.o"] {
fail $testbsrweak
} else {
pass $testbsrweak
if {$objs == ""} {
unresolved $testname
- } elseif {![ld_simple_link "$ld $ldemul" $finalobj "-r $objs"]} {
+ } elseif {![ld_link "$ld $ldemul" $finalobj "-r $objs"]} {
fail $testname
} else {
catch "exec $READELF --headers $finalobj" output
if {$objs == ""} {
unresolved $testname
- } elseif {[ld_simple_link "$ld $ldemul" $finalobj "-r $objs"]
+ } elseif {[ld_link "$ld $ldemul" $finalobj "-r $objs"]
|| [string first $message $link_output] < 0} {
fail $testname
} else {
return
}
- if { ![ld_simple_link $ld $tmpdir/i126256-1.so "-shared $tmpdir/i126256-1.o -e 0"]} {
+ if { ![ld_link $ld $tmpdir/i126256-1.so "-shared $tmpdir/i126256-1.o -e 0"]} {
unresolved $testname
return
}
- if { ![ld_simple_link $ld $tmpdir/i126256-2.so "--relax -shared $tmpdir/i126256-2.o $tmpdir/i126256-1.so -e 0"]} {
+ if { ![ld_link $ld $tmpdir/i126256-2.so "--relax -shared $tmpdir/i126256-2.o $tmpdir/i126256-1.so -e 0"]} {
fail $testname
return
}
return
}
-if { ![ld_simple_link $ld tmpdir/$test "tmpdir/${test}a.o tmpdir/${test}b.o"] } {
+if { ![ld_link $ld tmpdir/$test "tmpdir/${test}a.o tmpdir/${test}b.o"] } {
if [string match "*architecture * is incompatible*" $link_output] {
pass "$test_name"
} {
global subdir
global verbose
- if ![ld_simple_link "$LD -e start \
+ if ![ld_link "$LD -e start \
--base-file=tmpdir/$testname.base \
--export-all-symbols" tmpdir/$testname.dll \
"tmpdir/basefile1.o"] {
global subdir
global verbose
- if ![ld_simple_link "$CC -shared \
+ if ![ld_link "$CC -shared \
-Wl,--version-script,$srcdir/$subdir/$testname.ver \
-Wl,--output-def,tmpdir/$testname.def" tmpdir/$testname.dll \
"tmpdir/vers-script-dll.o"] {
# Compile the dll.
if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct_dll.c $tmpdir/direct_dll.o ] {
fail "compiling shared lib"
- } elseif ![ld_simple_link "$CC -shared" $tmpdir/direct_dll.dll "$tmpdir/direct_dll.o" ] {
+ } elseif ![ld_link "$CC -shared" $tmpdir/direct_dll.dll "$tmpdir/direct_dll.o" ] {
fail "linking shared lib (.dll)"
- } elseif ![ld_simple_link "$CC -shared" $tmpdir/direct_dll.sl "$tmpdir/direct_dll.o" ] {
+ } elseif ![ld_link "$CC -shared" $tmpdir/direct_dll.sl "$tmpdir/direct_dll.o" ] {
fail "linking shared lib (.sl)"
} else {
# Compile and link the client program.
} else {
# Check linking directly to direct_dll.dll.
set msg "linking client (.dll)"
- if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_dll.exe \
+ if [ld_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_dll.exe \
"$tmpdir/direct_client.o $tmpdir/direct_dll.dll" ] {
pass $msg
} else {
# Check linking directly to direct_dll.sl.
set msg "linking client (.sl)"
- if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_sl.exe \
+ if [ld_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_sl.exe \
"$tmpdir/direct_client.o $tmpdir/direct_dll.sl" ] {
pass $msg
} else {
# Create symbolic link.
catch "exec ln -fs direct_dll.dll $tmpdir/libdirect_dll.dll.a" ln_catch
set msg "linking client (symlink -> .dll)"
- if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_symlink_dll.exe \
+ if [ld_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_symlink_dll.exe \
"$tmpdir/direct_client.o $tmpdir/libdirect_dll.dll.a" ] {
pass $msg
} else {
# Create symbolic link.
catch "exec ln -fs direct_dll.sl $tmpdir/libdirect_sl.dll.a" ln_catch
set msg "linking client (symlink -> .sl)"
- if [ld_simple_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_symlink_sl.exe \
+ if [ld_link "$CC -Wl,--enable-auto-import" $tmpdir/direct_client_symlink_sl.exe \
"$tmpdir/direct_client.o $tmpdir/libdirect_sl.dll.a" ] {
pass $msg
} else {
# Compile the dll.
if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct2_dll.c $tmpdir/direct2_dll.o ] {
fail "compiling shared lib fastcall/stdcall"
- } elseif ![ld_simple_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.dll "$tmpdir/direct2_dll.o" ] {
+ } elseif ![ld_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.dll "$tmpdir/direct2_dll.o" ] {
fail "linking shared lib (.dll) fastcall/stdcall"
- } elseif ![ld_simple_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.sl "$tmpdir/direct2_dll.o" ] {
+ } elseif ![ld_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.sl "$tmpdir/direct2_dll.o" ] {
fail "linking shared lib (.sl) fastcall/stdcall"
} else {
# Compile and link the client program.
} else {
# Check linking directly to direct2_dll.dll.
set msg "linking client (.dll) fastcall/stdcall"
- if [ld_simple_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_dll.exe \
+ if [ld_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_dll.exe \
"$tmpdir/direct2_client.o $tmpdir/direct2_dll.dll" ] {
pass $msg
} else {
# Check linking directly to direct2_dll.sl.
set msg "linking client (.sl) fastcall/stdcall"
- if [ld_simple_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_sl.exe \
+ if [ld_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_sl.exe \
"$tmpdir/direct2_client.o $tmpdir/direct2_dll.sl" ] {
pass $msg
} else {
# Create symbolic link.
catch "exec ln -fs direct2_dll.dll $tmpdir/libdirect2_dll.dll.a" ln_catch
set msg "linking client (symlink -> .dll) fastcall/stdcall"
- if [ld_simple_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_dll.exe \
+ if [ld_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_dll.exe \
"$tmpdir/direct2_client.o $tmpdir/libdirect2_dll.dll.a" ] {
pass $msg
} else {
# Create symbolic link.
catch "exec ln -fs direct2_dll.sl $tmpdir/libdirect2_sl.dll.a" ln_catch
set msg "linking client (symlink -> .sl) fastcall/stdcall"
- if [ld_simple_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_sl.exe \
+ if [ld_link "$CC $CFLAGS -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_sl.exe \
"$tmpdir/direct2_client.o $tmpdir/libdirect2_sl.dll.a" ] {
pass $msg
} else {
# MA 02110-1301, USA.
#
-# This test can only be run if ld generates native executables.
-if ![isnative] then {return}
-
if { ![istarget *-*-linux*]
&& ![istarget *-*-nacl*]
&& ![istarget *-*-gnu*] } {
}
set array_tests {
- {"weak undefined" "-pie" "" {weakundef.c} "weakundef" "weakundef.out" "-fPIC"}
- {"weak undefined data" "-pie" "" {weakundef-data.c} "weakundef-data" "weakundef.out" "-fPIC"}
+ {"weak undefined" "-pie" ""
+ {weakundef.c} "weakundef" "weakundef.out" "-fPIC"}
+ {"weak undefined data" "-pie" ""
+ {weakundef-data.c} "weakundef-data" "weakundef.out" "-fPIC"}
}
run_ld_link_exec_tests $array_tests
{dummy.s} {} "pr19317-r.o"] \
]
-# The following tests require running the executable generated by ld.
-if ![isnative] {
- return
-}
-
run_ld_link_exec_tests $lto_run_tests
if { [is_elf_format] } {
set testsrcfiles_notext "tmpdir/main.o $srcdir/$subdir/func.c"
# Rather than having libs we just define dummy values for anything
# we may need to link a target exe; we aren't going to run it anyway.
-set libs "[ld_simple_link_defsyms] --defsym ${_}printf=${_}main --defsym ${_}puts=${_}main"
+set libs "[ld_link_defsyms] --defsym ${_}printf=${_}main --defsym ${_}puts=${_}main"
if { $dotsym } {
append libs " --defsym .printf=.main --defsym .puts=.main"
}
set LDFLAGS "$LDFLAGS --image-base 0"
}
-if ![ld_simple_link $ld tmpdir/align "$LDFLAGS -T $srcdir/$subdir/align.t tmpdir/align.o"] {
+if ![ld_link $ld tmpdir/align "$LDFLAGS -T $srcdir/$subdir/align.t tmpdir/align.o"] {
fail $testname
} else {
pass $testname
return
}
-if ![ld_simple_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t tmpdir/alignof.o"] {
+if ![ld_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t tmpdir/alignof.o"] {
fail $testname
return
}
return
}
-if ![ld_simple_link $ld tmpdir/assert "-T $srcdir/$subdir/assert.t tmpdir/assert.o"] {
+if ![ld_link $ld tmpdir/assert "-T $srcdir/$subdir/assert.t tmpdir/assert.o"] {
fail $testname
} else {
pass $testname
set LDFLAGS "$LDFLAGS --image-base 0"
}
-if ![ld_simple_link $ld tmpdir/def "$LDFLAGS -T $srcdir/$subdir/defined.t tmpdir/def.o"] {
+if ![ld_link $ld tmpdir/def "$LDFLAGS -T $srcdir/$subdir/defined.t tmpdir/def.o"] {
fail $testname
} else {
if ![ld_nm $nm "" tmpdir/def] {
return
}
-if ![ld_simple_link $ld tmpdir/extern "-T $srcdir/$subdir/extern.t tmpdir/extern.o"] {
+if ![ld_link $ld tmpdir/extern "-T $srcdir/$subdir/extern.t tmpdir/extern.o"] {
fail $testname
}
return
}
-if {![ld_simple_link $ld tmpdir/log2 "-T $srcdir/$subdir/log2.t tmpdir/log2.o"]} {
+if {![ld_link $ld tmpdir/log2 "-T $srcdir/$subdir/log2.t tmpdir/log2.o"]} {
fail $testname
} else {
pass $testname
return
}
-if {![ld_simple_link $ld tmpdir/map-address \
+if {![ld_link $ld tmpdir/map-address \
"-T $srcdir/$subdir/map-address.t \
tmpdir/map-address.o \
-Map tmpdir/map-address.map"]} {
}
set ldopt "$ldopt -T $srcdir/$subdir/phdrs.t tmpdir/phdrs.o"
-if ![ld_simple_link $ld tmpdir/phdrs $ldopt] {
+if ![ld_link $ld tmpdir/phdrs $ldopt] {
fail $testname
} else {
if {![is_remote host] && [which $objdump] == 0} {
".*Program Header:.*LOAD *off *0x00\[0-9a-f\]* *vaddr *0x00*800000 *paddr *0x00*800000.*filesz *0x0\[0-9a-f\]* *memsz *0x0\[0-9a-f\]*.*LOAD *off *0x00\[0-9a-f\]* *vaddr *0x00*800004 *paddr *0x00*800004.*filesz *0x00*\[0-9a-f\]* *memsz *0x0\[0-9a-f\]* *flags rw.*"
set ldopt "$ldopt -T $srcdir/$subdir/phdrs2.t tmpdir/phdrs2.o"
-if ![ld_simple_link $ld tmpdir/phdrs2 $ldopt] {
+if ![ld_link $ld tmpdir/phdrs2 $ldopt] {
fail $testname
} else {
if {![is_remote host] && [which $objdump] == 0} {
set flags "--image-base 0"
}
-if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o"] {
+if ![ld_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o"] {
fail $testname
} else {
check_script
set testname "MRI script"
-if ![ld_simple_link $ld tmpdir/script "$flags -c $srcdir/$subdir/scriptm.t"] {
+if ![ld_link $ld tmpdir/script "$flags -c $srcdir/$subdir/scriptm.t"] {
fail $testname
} else {
check_script
set testname "MEMORY"
-if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/memory.t tmpdir/script.o"] {
+if ![ld_link $ld tmpdir/script "$flags -T $srcdir/$subdir/memory.t tmpdir/script.o"] {
fail $testname
} else {
check_script
}
set testname "MEMORY with symbols"
-if ![ld_simple_link $ld tmpdir/script "$flags -defsym DATA_ORIGIN=0x1000 -defsym DATA_LENGTH=0x10000 -T $srcdir/$subdir/memory_sym.t tmpdir/script.o"] {
+if ![ld_link $ld tmpdir/script "$flags -defsym DATA_ORIGIN=0x1000 -defsym DATA_LENGTH=0x10000 -T $srcdir/$subdir/memory_sym.t tmpdir/script.o"] {
fail $testname
untested "extract symbols"
} else {
if ![ld_assemble $as $srcdir/$subdir/$test.s tmpdir/$test.o] {
unresolved $test
} else {
- if ![ld_simple_link $ldcmd tmpdir/$test \
+ if ![ld_link $ldcmd tmpdir/$test \
"-T $srcdir/$subdir/$test.t tmpdir/$test.o"] {
fail $test
} else {
return
}
-if ![ld_simple_link $ld tmpdir/sizeof "-T $srcdir/$subdir/sizeof.t tmpdir/sizeof.o"] {
+if ![ld_link $ld tmpdir/sizeof "-T $srcdir/$subdir/sizeof.t tmpdir/sizeof.o"] {
fail $testname
return
}
close $ofd
verbose -log "script: $finalscript"
- set res [ld_simple_link $ld tmpdir/output "$ldopt tmpdir/main.o -Ltmpdir -lsysroottest"]
+ set res [ld_link $ld tmpdir/output "$ldopt tmpdir/main.o -Ltmpdir -lsysroottest"]
set ld_output "$exec_output"
set expect_success [expr [string length $errstr] == 0]
set weak_regexp_little \
".*Contents of section .text:.*1000 08100000 0c200000 12121212 34343434.*Contents of section .data:.*2000 08100000 0c200000 56565656 78787878.*"
-if {! [ld_simple_link $ld tmpdir/weak "$flags -T $srcdir/$subdir/weak.t tmpdir/weak1.o tmpdir/weak2.o"] } then {
+if {! [ld_link $ld tmpdir/weak "$flags -T $srcdir/$subdir/weak.t tmpdir/weak1.o tmpdir/weak2.o"] } then {
fail $testname
} else {
if {![is_remote host] && [which $objdump] == 0} then {
set objfile "$objfile --defsym _.d2=0"
}
- if ![ld_simple_link $ld $ldfile "$ldflags [join $ldargs] $objfile"] {
+ if ![ld_link $ld $ldfile "$ldflags [join $ldargs] $objfile"] {
fail $testname
continue
}
if ![ld_assemble $as "-relax $srcdir/$subdir/sh1.s" tmpdir/sh1.o] {
unresolved $testsimple
-} else { if ![ld_simple_link $ld tmpdir/sh1 "-relax tmpdir/sh1.o"] {
+} else { if ![ld_link $ld tmpdir/sh1 "-relax tmpdir/sh1.o"] {
fail $testsimple
} else {
if ![ld_nm $nm "" tmpdir/sh1] {
} else {
set srec_relax_arg "-relax --oformat srec tmpdir/sh1.o"
}
-if ![ld_simple_link $ld tmpdir/sh1.s1 $srec_relax_arg ] {
+if ![ld_link $ld tmpdir/sh1.s1 $srec_relax_arg ] {
fail $testsrec
} else {
# The file name is embedded in the S-records, so create both
if ![ld_assemble $as "-relax $srcdir/$subdir/adjsw8.s" tmpdir/adjsw8.o] {
unresolved $testadjsw8
} else {
- if ![ld_simple_link $ld tmpdir/adjsw8 "-relax tmpdir/adjsw8.o"] {
+ if ![ld_link $ld tmpdir/adjsw8 "-relax tmpdir/adjsw8.o"] {
fail $testadjsw8
} else {
send_log "exec $objdump -s tmpdir/adjsw8\n"
return
}
-if ![ld_simple_link $ld tmpdir/sh2 "-relax tmpdir/start.o tmpdir/sh2.o"] {
+if ![ld_link $ld tmpdir/sh2 "-relax tmpdir/start.o tmpdir/sh2.o"] {
fail $testlink
unresolved $testjsr
unresolved $testrun
# disabled. Hence the lax checking here.
file delete $binfile
- set result [ld_simple_link $ld $binfile " --no-warn-mismatch $ld_options $objfiles"]
+ set result [ld_link $ld $binfile " --no-warn-mismatch $ld_options $objfiles"]
if ![file exists $binfile] {
if {$expect_relaxed == -1} {
file delete $binfile
set objects "tmpdir/relfail-$testindex.o $baseobj"
- set result [ld_simple_link $ld $binfile "--no-warn-mismatch $ld_options $objects"]
+ set result [ld_link $ld $binfile "--no-warn-mismatch $ld_options $objects"]
set exists [file exists $binfile]
if {$exists && $expect_fail == ""} {
# Note that linking against ELF shared libraries is tested by the
# bootstrap test.
-# This test can only be run if ld generates native executables.
-if ![isnative] then {return}
+# Check to see if the C compiler works
+if { [which $CC] == 0 } {
+ return
+}
# This test can only be run on a couple of ELF platforms.
# Square bracket expressions seem to confuse istarget.
if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
set shared "-bM:SRE -bE:$tmpdir/xcoff.exp"
}
- if {![ld_simple_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
+ if {![ld_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
fail "$testname"
return
}
if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
set rpath /lib:$tmpdir
}
- if ![ld_simple_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
+ if ![ld_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
fail "$testname"
return
}
+ if ![isnative] {
+ unsupported $testname
+ return
+ }
+
# Run the resulting program
send_log "$tmpdir/$progname >$tmpdir/$progname.out\n"
verbose "$tmpdir/$progname >$tmpdir/$progname.out"
run_dump_test [file rootname $t]
}
-# We need a native system.
-if ![isnative] {
- verbose "Native size relocation tests not run - not a native toolchain"
- return
-}
-
# We need a working compiler.
if { [which $CC] == 0 } {
verbose "Native size relocation tests not run - no compiler available"
run_ld_link_exec_tests [list \
[list \
"Run size-1" \
- "tmpdir/libsize-1.so" \
+ "-Wl,--no-as-needed tmpdir/libsize-1.so" \
"" \
{size-1.c} \
"size-1" \
] \
[list \
"Run size-2" \
- "tmpdir/libsize-2.so" \
+ "-Wl,--no-as-needed tmpdir/libsize-2.so" \
"" \
{size-2.c} \
"size-2" \
] \
[list \
"Run size-3b" \
- "tmpdir/libsize-3a.so" \
+ "-Wl,--no-as-needed tmpdir/libsize-3a.so" \
"" \
{size-3.c} \
"size-3b" \
] \
[list \
"Run size-3d (1)" \
- "tmpdir/libsize-3b.so" \
+ "-Wl,--no-as-needed tmpdir/libsize-3b.so" \
"" \
{size-3.c} \
"size-3d1" \
] \
[list \
{"Run size-3e"
- "tmpdir/libsize-3c.so" ""
+ "-Wl,--no-as-needed tmpdir/libsize-3c.so" ""
{size-3.c} "size-3e" "size-3.out"}
] \
[list \
] \
[list \
"Run size-6" \
- "tmpdir/libsize-6b.so" \
+ "-Wl,--no-as-needed tmpdir/libsize-6b.so" \
"" \
{size-6a.c} \
"size-6" \
] \
[list \
"Run size-8" \
- "tmpdir/libsize-8.so --hash-styl=gnu" \
+ "-Wl,--no-as-needed,--hash-styl=gnu tmpdir/libsize-8.so" \
"" \
{size-8a.c} \
"size-8" \
] \
[list \
"Run size-9" \
- "tmpdir/libsize-9.so" \
+ "-Wl,--no-as-needed tmpdir/libsize-9.so" \
"" \
{size-9a.c} \
"size-9" \
] \
[list \
"Run size-10" \
- "tmpdir/libsize-10.so" \
+ "-Wl,--no-as-needed tmpdir/libsize-10.so" \
"" \
{size-10a.c} \
"size-10" \
# Tell the ELF linker to not do anything clever with .eh_frame,
# not to put anything in small data, and define various symbols.
set flags "--traditional-format -G 0 "
- append flags [ld_simple_link_defsyms]
+ append flags [ld_link_defsyms]
# If the linker script uses SIZEOF_HEADERS, use a -Ttext argument
# to force both the normal link and the S-record link to be put in
set flags "$flags -no-relax"
}
- if { ![ld_simple_link $ld tmpdir/sr1 "$flags $objs"] \
- || ![ld_simple_link $ld tmpdir/sr2.sr "$flags --oformat srec $objs"] } {
+ if { ![ld_link $ld tmpdir/sr1 "$flags $objs"] \
+ || ![ld_link $ld tmpdir/sr2.sr "$flags --oformat srec $objs"] } {
fail $test
return
}
|| ![ld_assemble_flags $as "-mpic -mpid=near -mbig-endian" $srcdir/$subdir/shlib-1.s tmpdir/shlib-1b.o]
|| ![ld_assemble_flags $as "-mpic -mpid=near -mbig-endian" $srcdir/$subdir/shlib-2.s tmpdir/shlib-2b.o]
|| ![ld_assemble_flags $as -mbig-endian $srcdir/$subdir/shlib-app-1.s tmpdir/shlib-app-1b.o]
- || ![ld_simple_link $ld tmpdir/libtest.so "-shared tmpdir/shlib-1.o tmpdir/shlib-2.o"]
- || ![ld_simple_link $ld tmpdir/libtestb.so "-shared -EB tmpdir/shlib-1b.o tmpdir/shlib-2b.o"]
- || ![ld_simple_link $ld tmpdir/shlib.o "-r tmpdir/shlib-1.o tmpdir/shlib-2.o"]
- || ![ld_simple_link $ld tmpdir/shlibb.o "-r -EB tmpdir/shlib-1b.o tmpdir/shlib-2b.o"]
- || ![ld_simple_link $ld tmpdir/dynapp-1 "tmpdir/libtest.so tmpdir/shlib-app-1.o"]
- || ![ld_simple_link $ld tmpdir/dynapp-1b "-EB tmpdir/libtestb.so tmpdir/shlib-app-1b.o"] } {
+ || ![ld_link $ld tmpdir/libtest.so "-shared tmpdir/shlib-1.o tmpdir/shlib-2.o"]
+ || ![ld_link $ld tmpdir/libtestb.so "-shared -EB tmpdir/shlib-1b.o tmpdir/shlib-2b.o"]
+ || ![ld_link $ld tmpdir/shlib.o "-r tmpdir/shlib-1.o tmpdir/shlib-2.o"]
+ || ![ld_link $ld tmpdir/shlibb.o "-r -EB tmpdir/shlib-1b.o tmpdir/shlib-2b.o"]
+ || ![ld_link $ld tmpdir/dynapp-1 "tmpdir/libtest.so tmpdir/shlib-app-1.o"]
+ || ![ld_link $ld tmpdir/dynapp-1b "-EB tmpdir/libtestb.so tmpdir/shlib-app-1b.o"] } {
unresolved "TIC6X OSABI tests"
return
}
tmpdir/weak-undef.o]} then {
# It's OK if .weak doesn't work on this target.
unresolved $testname
-} elseif {![ld_simple_link $ld tmpdir/weak-undef \
+} elseif {![ld_link $ld tmpdir/weak-undef \
"tmpdir/weak-undef.o -T $srcdir/$subdir/weak-undef.t"]} then {
# Weak symbols are broken for non-i386 PE targets.
if {! [istarget i?86-*-*]} {
} elseif {![ld_assemble $as "$asflags $srcdir/$subdir/weak-fundef.s" \
tmpdir/weak-fundef.o]} then {
fail $testname
-} elseif {![ld_simple_link $ld tmpdir/weak-fundef.so \
+} elseif {![ld_link $ld tmpdir/weak-fundef.so \
"--shared tmpdir/weak-fundef.o"]} then {
fail $testname
} elseif {![is_remote host] && [which $nm] == 0} then {
# When linking a dynamic executable, weak undefined symbols become dynamic.
set testname "weak undefined function symbols in dynamic exe"
- if {![ld_simple_link $ld tmpdir/weak-fundef \
+ if {![ld_link $ld tmpdir/weak-fundef \
"--no-as-needed tmpdir/weak-fundef.o tmpdir/weak-fundef.so"]} then {
fail $testname
} else {
run_dump_test "unique"
-# We need a native system. FIXME: Strictly speaking this
-# is not true, we just need to know how to create a fully
-# linked executable, including the C and Z libraries, using
-# the linker that is under test.
-if ![isnative] {
- verbose "UNIQUE compiled tests not run - not a native toolchain"
- return
-}
-
# We need a working compiler. (Strictly speaking this is
# not true, we could use target specific assembler files).
if { [which $CC] == 0 } {
}
# Create executable containing unique symbol.
-if ![default_ld_link $ld "tmpdir/unique_prog" "tmpdir/unique.o"] {
+if ![ld_link $CC "tmpdir/unique_prog" "tmpdir/unique.o"] {
fail "Could not link a unique executable"
set fails [expr $fails + 1]
}
# Create shared library containing unique symbol.
-if ![ld_simple_link $ld "tmpdir/libunique_shared.so" "-shared tmpdir/unique_shared.o"] {
+if ![ld_link $ld "tmpdir/libunique_shared.so" "-shared tmpdir/unique_shared.o"] {
fail "Could not create a shared library containing an unique symbol"
set fails [expr $fails + 1]
}
# Create executable NOT containing unique symbol linked against library.
-if ![default_ld_link $ld "tmpdir/unique_shared_prog" "-Ltmpdir tmpdir/unique_empty.o -Bdynamic -lunique_shared -rpath ./tmpdir"] {
+if ![ld_link $CC "tmpdir/unique_shared_prog" "-Ltmpdir tmpdir/unique_empty.o -Wl,-Bdynamic,-rpath=./tmpdir -lunique_shared"] {
fail "Could not link a dynamic executable"
set fails [expr $fails + 1]
}
# Create shared library containing unique symbol with reference.
-if ![ld_simple_link $ld "tmpdir/libunique_shared_ref.so" "-shared tmpdir/unique_shared.o tmpdir/unique_empty.o"] {
+if ![ld_link $ld "tmpdir/libunique_shared_ref.so" "-shared tmpdir/unique_shared.o tmpdir/unique_empty.o"] {
fail "Could not create a shared library containing an unique symbol with reference"
set fails [expr $fails + 1]
}
}
# Check the empty object file.
-if {! [check_osabi tmpdir/unique_empty.o {UNIX - System V}]} {
- fail "Object NOT containing unique does not have an OS/ABI field of System V"
+case $target_triplet in {
+ { hppa*-*-linux* } { set expected_none {UNIX - GNU} }
+ default { set expected_none {UNIX - System V} }
+}
+if {! [check_osabi tmpdir/unique_empty.o $expected_none]} {
+ fail "Object NOT containing unique does not have an OS/ABI field of $expected_none"
set fails [expr $fails + 1]
}
}
# Check the empty executable linked against unique shared library.
-if {! [check_osabi tmpdir/unique_shared_prog {UNIX - System V}]} {
- fail "Executable NOT containing unique does not have an OS/ABI field of System V"
+if {! [check_osabi tmpdir/unique_shared_prog $expected_none]} {
+ fail "Executable NOT containing unique does not have an OS/ABI field of $expected_none"
set fails [expr $fails + 1]
}
if { $fails == 0 } {
pass "Checking shared empty executable"
}
-
-# Clean up, unless we are being verbose, in which case we leave the files available.
-if { $verbose < 1 } {
- remote_file host delete "tmpdir/unique_empty.o"
- remote_file host delete "tmpdir/unique.o"
- remote_file host delete "tmpdir/unique_shared.o"
- remote_file host delete "tmpdir/libunique_shared.so"
- remote_file host delete "tmpdir/libunique_shared_ref.so"
- remote_file host delete "tmpdir/unique_prog"
- remote_file host delete "tmpdir/unique_shared_prog"
-}
return 1
}
-if ![ld_simple_link $ld tmpdir/t1.out \
+if ![ld_link $ld tmpdir/t1.out \
" -T $srcdir/$subdir/t1.ld $srcdir/$subdir/t1-1.ro $srcdir/$subdir/t1-2.ro"] {
fail $testname
return
}
-if ![ld_simple_link $ld tmpdir/t2.out \
+if ![ld_link $ld tmpdir/t2.out \
" -T $srcdir/$subdir/t2.ld $srcdir/$subdir/t2-2.ro \
$srcdir/$subdir/t2-1.ro $srcdir/$subdir/t2-3.ro"] {
fail $testname
run_ld_link_tests $build_tests_ld
set testname "Link dwarfreloc1xa.o and dwarfreloc2xa.o to dwarfreloca.o"
-if [ld_simple_link $ld "tmpdir/dwarfreloca.o" "-r tmpdir/dwarfreloc1xa.o tmpdir/dwarfreloc2xa.o"] {
+if [ld_link $ld "tmpdir/dwarfreloca.o" "-r tmpdir/dwarfreloc1xa.o tmpdir/dwarfreloc2xa.o"] {
pass $testname
} else {
fail $testname
}
set testname "Link dwarfreloc1xb.o and dwarfreloc2xb.o to dwarfrelocb.o"
-if [ld_simple_link $ld "tmpdir/dwarfrelocb.o" "-r tmpdir/dwarfreloc1xb.o tmpdir/dwarfreloc2xb.o"] {
+if [ld_link $ld "tmpdir/dwarfrelocb.o" "-r tmpdir/dwarfreloc1xb.o tmpdir/dwarfreloc2xb.o"] {
pass $testname
} else {
fail $testname
] \
[list \
"TLS GD/LD -> IE transition without PLT" \
- "tmpdir/tls-main1.o tmpdir/tls-gd1.o tmpdir/tls-ld1.o \
- tmpdir/libtls-1a.so -R tmpdir" \
+ "-Wl,--no-as-needed,-R,tmpdir tmpdir/tls-main1.o \
+ tmpdir/tls-gd1.o tmpdir/tls-ld1.o tmpdir/libtls-1a.so" \
"" \
{ dummy.s } \
"tls-1d" \
] \
[list \
"TLS without PLT (1)" \
- "tmpdir/tls-main1.o \
- tmpdir/libtls-1a.so tmpdir/libtls-1b.so -R tmpdir" \
+ "-Wl,--no-as-needed,-R,tmpdir tmpdir/tls-main1.o \
+ tmpdir/libtls-1a.so tmpdir/libtls-1b.so" \
"" \
{ dummy.s } \
"tls-1e" \
] \
[list \
"TLS without PLT (2)" \
- "tmpdir/tls-main1.o tmpdir/tls-def1.o \
- tmpdir/libtls-1b.so -R tmpdir" \
+ "-Wl,--no-as-needed,-R,tmpdir tmpdir/tls-main1.o \
+ tmpdir/tls-def1.o tmpdir/libtls-1b.so" \
"" \
{ dummy.s } \
"tls-1f" \
set test_name "Mixed x86_64 and i386 input test 1"
set test mixed1
-if { ![ld_simple_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
+if { ![ld_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
pass "$test_name"
} {
set test_name "Mixed x86_64 and i386 input test 2"
set test mixed2
-if { ![ld_simple_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
+if { ![ld_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
pass "$test_name"
} {
}
if { [ regexp "\-fPIE" $cflags]
- && ![ regexp "\-z nodynamic-undefined-weak" $ldflags] } {
+ && ![ regexp "nodynamic-undefined-weak" $ldflags] } {
set weak_symbol "Weak defined"
} else {
set weak_symbol "Weak undefined"
run_ld_link_exec_tests [list \
[list \
"Run pr19704" \
- "$ldflags tmpdir/libpr19704.so -R tmpdir" \
+ "-Wl,--no-as-needed,-R,tmpdir $ldflags tmpdir/libpr19704.so" \
"" \
{ pr19704a.c } \
"pr19704" \
run_ld_link_exec_tests [list \
[list \
"Run plt-main" \
- "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
- tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
+ "-Wl,--no-as-needed tmpdir/plt-main1.o tmpdir/plt-main2.o \
+ tmpdir/plt-main3.o tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
"" \
{ plt-main5.c } \
"plt-main" \
] \
[list \
"Run plt-main with PIE" \
- "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
- tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
+ "-Wl,--no-as-needed -pie tmpdir/plt-main1.o tmpdir/plt-main2.o \
+ tmpdir/plt-main3.o tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
"" \
{ plt-main5.c } \
"plt-main-pie" \
] \
[list \
"Run copyreloc-main with PIE without -fPIE" \
- "--as-needed tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
+ "-Wl,--as-needed -pie tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so" \
"" \
{ dummy.s } \
"copyreloc-main" \
] \
[list \
"Run pr17689 with PIE without -fPIE" \
- "tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
+ "-Wl,--no-as-needed -pie tmpdir/pr17689b.o tmpdir/pr17689.so" \
"" \
{ dummy.s } \
"pr17689" \
] \
[list \
"Run pr17689 with PIE -z now without -fPIE" \
- "--as-needed tmpdir/pr17689b.o tmpdir/pr17689.so -pie -z now" \
+ "-Wl,--as-needed,-z,now -pie tmpdir/pr17689b.o tmpdir/pr17689.so" \
"" \
{ dummy.s } \
"pr17689now" \
] \
[list \
"Run pr18900" \
- "tmpdir/pr18900.o tmpdir/pr18900.so" \
+ "-Wl,--no-as-needed tmpdir/pr18900.o tmpdir/pr18900.so" \
"" \
{ dummy.s } \
"pr18900" \
] \
[list \
"Run pr19031" \
- "tmpdir/pr19031.so" \
+ "-Wl,--no-as-needed tmpdir/pr19031.so" \
"" \
{ pr19031b.S pr19031c.c } \
"pr19031" \
] \
[list \
"Run gotpcrel1" \
- "tmpdir/gotpcrel1d.so" \
+ "-Wl,--no-as-needed tmpdir/gotpcrel1d.so" \
"" \
{ gotpcrel1a.S gotpcrel1b.c gotpcrel1c.c } \
"gotpcrel1" \
run_ld_link_exec_tests [list \
[list \
"Run pr19784a" \
- "tmpdir/pr19784a.o tmpdir/libpr19784a.so" \
+ "-Wl,--no-as-needed tmpdir/pr19784a.o tmpdir/libpr19784a.so" \
"" \
{ dummy.s } \
"pr19784a" \
] \
[list \
"Run pr19784b" \
- "--as-needed tmpdir/pr19784a.o tmpdir/libpr19784b.so" \
+ "-Wl,--as-needed tmpdir/pr19784a.o tmpdir/libpr19784b.so" \
"" \
{ dummy.s } \
"pr19784b" \
run_ld_link_exec_tests [list \
[list \
"Run plt-main with -z bndplt" \
- "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
- tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt" \
+ "-Wl,--no-as-needed,-z,bndplt tmpdir/plt-main1.o \
+ tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
"" \
{ plt-main5.c } \
"plt-main-bnd" \
] \
[list \
"Run plt-main with PIE and -z bndplt" \
- "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
- tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -pie" \
+ "-Wl,--no-as-needed,-z,bndplt -pie tmpdir/plt-main1.o \
+ tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
"" \
{ plt-main5.c } \
"plt-main-pie-bnd" \
] \
[list \
"Run pr20800" \
- "-pie -z now" \
+ "-Wl,-z,now -pie" \
"" \
{ pr20800a.S pr20800b.S } \
"pr20800" \
undefined_weak "" ""
undefined_weak "-fPIE" ""
undefined_weak "-fPIE" "-pie"
- undefined_weak "-fPIE" "-z nodynamic-undefined-weak"
- undefined_weak "-fPIE" "-pie -z nodynamic-undefined-weak"
+ undefined_weak "-fPIE" "-Wl,-z,nodynamic-undefined-weak"
+ undefined_weak "-fPIE" "-pie -Wl,-z,nodynamic-undefined-weak"
}
if { ![istarget "x86_64-*-linux*"]} {
set object "tmpdir/coalesce"
set outputfile "$object.txt"
-if ![ld_simple_link $ld $object "-T $srcdir/$subdir/coalesce.t tmpdir/coalesce1.o tmpdir/coalesce2.o"] {
+if ![ld_link $ld $object "-T $srcdir/$subdir/coalesce.t tmpdir/coalesce1.o tmpdir/coalesce2.o"] {
verbose -log "failure in ld"
fail $testname
return
set object "tmpdir/diff_overflow"
-if ![ld_simple_link $ld $object "tmpdir/diff_overflow1.o tmpdir/diff_overflow2.o"] {
+if ![ld_link $ld $object "tmpdir/diff_overflow1.o tmpdir/diff_overflow2.o"] {
verbose -log "failure in ld"
fail $testname
return
set object "tmpdir/lcall"
set outputfile "$object.txt"
-if ![ld_simple_link $ld $object "-T $srcdir/$subdir/lcall.t tmpdir/lcall1.o tmpdir/lcall2.o"] {
+if ![ld_link $ld $object "-T $srcdir/$subdir/lcall.t tmpdir/lcall1.o tmpdir/lcall2.o"] {
verbose -log "failure in ld"
fail $testname
return
return $flags
}
-# Link a program using ld.
+# Link a program using ld
#
proc default_ld_link { ld target objects } {
- global HOSTING_EMU
- global HOSTING_CRT0
- global HOSTING_SCRT0
- global HOSTING_LIBS
- global HOSTING_SLIBS
- global LIBS
- global host_triplet
- global link_output
- global exec_output
-
- if { [ string match "* -pie *" $objects ] } {
- set objs "$HOSTING_SCRT0 $objects"
- set libs "$LIBS $HOSTING_SLIBS"
- } else {
- set objs "$HOSTING_CRT0 $objects"
- set libs "$LIBS $HOSTING_LIBS"
- }
-
- if [is_endian_output_format $objects] then {
- set flags [big_or_little_endian]
- } else {
- set flags ""
- }
-
- remote_file host delete $target
-
- return [run_host_cmd_yesno "$ld" "$HOSTING_EMU $flags -o $target $objs $libs"]
-}
-
-# Link a program using ld, without including any libraries.
-#
-proc default_ld_simple_link { ld target objects } {
global host_triplet
global exec_output
# Define various symbols needed when not linking against all
# target libs.
-proc ld_simple_link_defsyms {} {
+proc ld_link_defsyms {} {
set flags "--defsym __stack_chk_fail=0"
if { ![ar_simple_create $ar $ld_options $binfile "$objfiles $ld_after"] } {
set failed 1
}
- } elseif { ![ld_simple_link $ld $binfile "$ld_extra_opt -L$srcdir/$subdir $ld_options $objfiles $ld_after"] } {
+ } elseif { ![ld_link $ld $binfile "$ld_extra_opt -L$srcdir/$subdir $ld_options $objfiles $ld_after"] } {
set maybe_failed 1
set ld_output "$exec_output"
}
}
}
- # We have to use $CC to build PIE and shared library.
- if { [ string match "c" $lang ] } {
- set link_proc ld_simple_link
- set link_cmd $CC
- } elseif { [ string match "c++" $lang ] } {
- set link_proc ld_simple_link
+ if { [ string match "c++" $lang ] } {
+ set link_proc ld_link
set link_cmd $CXX
- } elseif { [ string match "-shared" $ld_options ] \
- || [ string match "-pie" $ld_options ] } {
- set link_proc ld_simple_link
- set link_cmd $CC
} else {
set link_proc ld_link
- set link_cmd $ld
+ set link_cmd $CC
}
if { $binfile eq "tmpdir/" } {
}
}
- if { $failed == 0 } {
+ if { $failed == 0 && [isnative] } {
send_log "Running: $binfile > $binfile.out\n"
verbose "Running: $binfile > $binfile.out"
catch "exec $binfile > $binfile.out" exec_output
if { $failed != 0 } {
fail $testname
+ } elseif ![isnative] {
+ unsupported $testname
} else {
set errcnt 0
pass $testname
set failed 1
}
} else {
- if { ![ld_simple_link $cc_cmd $binfile "$board_cflags -L$srcdir/$subdir $ldflags $objfiles"] } {
+ if { ![ld_link $cc_cmd $binfile "$board_cflags -L$srcdir/$subdir $ldflags $objfiles"] } {
set failed 1
}