From b27caf75c311991772b316fe7c0eecfd5788eeaf Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 26 Nov 2013 11:17:08 -0800 Subject: [PATCH] Add HOSTING_SLIBS and use it for -pie ld/ PR ld/16259 * Makefile.am (HOSTING_SLIBS): New. * configure.host (HOSTING_SLIBS): New. Used for PIE. * configure.in (HOSTING_SLIBS): New AC_SUBST. * Makefile.in: Regenerated. * configure: Likewise. ld/testsuite/ PR ld/16259 * config/default.exp (get_target_emul): Also set HOSTING_SLIBS. * lib/ld-lib.exp (default_ld_link): Use HOSTING_SLIBS for -pie. --- ld/ChangeLog | 9 +++++++++ ld/Makefile.am | 1 + ld/Makefile.in | 1 + ld/configure | 6 ++++-- ld/configure.host | 7 +++++++ ld/configure.in | 1 + ld/testsuite/ChangeLog | 6 ++++++ ld/testsuite/config/default.exp | 4 ++-- ld/testsuite/lib/ld-lib.exp | 4 +++- 9 files changed, 34 insertions(+), 5 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 4582adb1a4e..310006b6530 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2013-11-26 H.J. Lu + + PR ld/16259 + * Makefile.am (HOSTING_SLIBS): New. + * configure.host (HOSTING_SLIBS): New. Used for PIE. + * configure.in (HOSTING_SLIBS): New AC_SUBST. + * Makefile.in: Regenerated. + * configure: Likewise. + 2013-11-22 Cory Fields * pe-dll.c (fill_edata): Only use a real timestamp if diff --git a/ld/Makefile.am b/ld/Makefile.am index b2b2a6ebe36..9b3d00fa7d0 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -88,6 +88,7 @@ POD2MAN = pod2man --center="GNU Development Tools" \ 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 diff --git a/ld/Makefile.in b/ld/Makefile.in index b95a3d103de..abb5adda725 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -231,6 +231,7 @@ HDEFINES = @HDEFINES@ HOSTING_CRT0 = @HOSTING_CRT0@ HOSTING_LIBS = @HOSTING_LIBS@ HOSTING_SCRT0 = @HOSTING_SCRT0@ +HOSTING_SLIBS = @HOSTING_SLIBS@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ diff --git a/ld/configure b/ld/configure index 63d17e27be5..8452a138765 100755 --- a/ld/configure +++ b/ld/configure @@ -613,6 +613,7 @@ enable_initfini_array ENABLE_PLUGINS_FALSE ENABLE_PLUGINS_TRUE NATIVE_LIB_DIRS +HOSTING_SLIBS HOSTING_LIBS HOSTING_SCRT0 HOSTING_CRT0 @@ -12192,7 +12193,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12195 "configure" +#line 12196 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12298,7 +12299,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12301 "configure" +#line 12302 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -16208,6 +16209,7 @@ do_compare="$gcc_cv_prog_cmp_skip" + 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` diff --git a/ld/configure.host b/ld/configure.host index c56f67debeb..71f695d80aa 100644 --- a/ld/configure.host +++ b/ld/configure.host @@ -57,6 +57,7 @@ case "${host}" in *-*-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`' ;; @@ -249,3 +250,9 @@ esac 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_SLIBS" +fi diff --git a/ld/configure.in b/ld/configure.in index 2af3dfc2fd5..619c15161cf 100644 --- a/ld/configure.in +++ b/ld/configure.in @@ -187,6 +187,7 @@ 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) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index bbd8eb35be0..3ccefaf19a2 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2013-11-26 H.J. Lu + + PR ld/16259 + * config/default.exp (get_target_emul): Also set HOSTING_SLIBS. + * lib/ld-lib.exp (default_ld_link): Use HOSTING_SLIBS for -pie. + 2013-11-26 Will Newton * ld-aarch64/aarch64-elf.exp: Add ifunc-22. diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp index d540f1992a7..1d3ce6a03f1 100644 --- a/ld/testsuite/config/default.exp +++ b/ld/testsuite/config/default.exp @@ -139,11 +139,11 @@ proc get_target_emul {} { } if [isnative] { - foreach x {HOSTING_CRT0 HOSTING_SCRT0 HOSTING_LIBS} { + foreach x {HOSTING_CRT0 HOSTING_SCRT0 HOSTING_LIBS HOSTING_SLIBS} { get_link_files $x } } else { - foreach x {HOSTING_CRT0 HOSTING_SCRT0 HOSTING_LIBS} { set $x "" } + foreach x {HOSTING_CRT0 HOSTING_SCRT0 HOSTING_LIBS HOSTING_SLIBS} { set $x "" } } if ![info exists HOSTING_EMU] { set HOSTING_EMU "-m [get_target_emul]" } diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index 67c429ffec5..8df42ae85ed 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -179,6 +179,7 @@ proc default_ld_link { ld target objects } { global HOSTING_CRT0 global HOSTING_SCRT0 global HOSTING_LIBS + global HOSTING_SLIBS global LIBS global host_triplet global link_output @@ -186,10 +187,11 @@ proc default_ld_link { ld target objects } { 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" } - set libs "$LIBS $HOSTING_LIBS" if [is_endian_output_format $objects] then { set flags [big_or_little_endian] -- 2.30.2