diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2013-02-05 01:36:05 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2013-02-05 01:36:05 +0000 |
commit | 663fa5434e06d80efc567e2aaa130bc17deb1257 (patch) | |
tree | b9f74a999423d9c6c05f756277d29733a95eec69 /ld/emultempl/elf32.em | |
parent | 0f87a16693dc83e0cd574fbbb4bafe0587863a04 (diff) | |
download | gdb-663fa5434e06d80efc567e2aaa130bc17deb1257.zip gdb-663fa5434e06d80efc567e2aaa130bc17deb1257.tar.gz gdb-663fa5434e06d80efc567e2aaa130bc17deb1257.tar.bz2 |
Don't enable new dtags by default with -rpath
ld/
2013-02-04 H.J. Lu <hongjiu.lu@intel.com>
PR ld/15096
* emultempl/alphaelf.em (alpha_after_parse): Call
gld${EMULATION_NAME}_after_parse instead of after_parse_default.
* emultempl/cr16elf.em (cr16elf_after_parse): Likewise.
* emultempl/crxelf.em (crxelf_after_parse): Likewise.
* emultempl/hppaelf.em (hppaelf_after_parse): Likewise.
* emultempl/mipself.em (mips_after_parse): Likewise.
* emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Renamed
to ...
(gld_${EMULATION_NAME}_after_parse): This. Call
gld${EMULATION_NAME}_after_parse instead of after_parse_default.
(LDEMUL_AFTER_PARSE): Set to gld_${EMULATION_NAME}_after_parse.
* emultempl/elf32.em (new_dtags_set): New variable.
(gld${EMULATION_NAME}_before_parse): Don't set link_info.new_dtags
here.
(gld${EMULATION_NAME}_after_parse): New function.
(ld_${EMULATION_NAME}_emulation): Replace after_parse_default'
with gld${EMULATION_NAME}_after_parse.
(gld${EMULATION_NAME}_handle_option): Set new_dtags_set to TRUE
when setting link_info.new_dtags.
ld/testsuite/
2013-02-04 H.J. Lu <hongjiu.lu@intel.com>
PR ld/15096
* ld-elf/new-dtags-1.d: New test.
* ld-elf/new-dtags-2.d: Likewise.
* ld-elf/new-dtags-3.d: Likewise.
* ld-elf/new-dtags-4.d: Likewise.
* ld-elf/new-dtags-5.d: Likewise.
* ld-elf/new-dtags-6.d: Likewise.
* ld-elf/new-dtags-7.d: Likewise.
* ld-elf/new-dtags-8.d: Likewise.
Diffstat (limited to 'ld/emultempl/elf32.em')
-rw-r--r-- | ld/emultempl/elf32.em | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 13a1a41..482e9ca 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -63,6 +63,7 @@ fragment <<EOF /* Declare functions used by various EXTRA_EM_FILEs. */ static void gld${EMULATION_NAME}_before_parse (void); +static void gld${EMULATION_NAME}_after_parse (void); static void gld${EMULATION_NAME}_after_open (void); static void gld${EMULATION_NAME}_before_allocation (void); static void gld${EMULATION_NAME}_after_allocation (void); @@ -70,6 +71,15 @@ static lang_output_section_statement_type *gld${EMULATION_NAME}_place_orphan (asection *, const char *, int); EOF +if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then + fragment <<EOF + +/* TRUE if link_info.new_dtags is set. */ +static bfd_boolean new_dtags_set; + +EOF +fi + if [ "x${USE_LIBPATH}" = xyes ] ; then case ${target} in *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*) @@ -105,16 +115,35 @@ gld${EMULATION_NAME}_before_parse (void) input_flags.dynamic = ${DYNAMIC_LINK-TRUE}; config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`; config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`; +} + EOF +fi +fragment <<EOF +static void +gld${EMULATION_NAME}_after_parse (void) +{ +EOF + +if test x"$LDEMUL_AFTER_PARSE" != xgld"$EMULATION_NAME"_after_parse; then +# Enable the "new" dtags by default only for Linux target emulation if +# -rpath isn't used. case ${target} in *-*-linux-* | *-*-k*bsd*-* | *-*-gnu* | *-*-nacl*) - fragment <<EOF - link_info.new_dtags = TRUE; + case " ${EMULATION_LIBPATH} " in + *" ${EMULATION_NAME} "*) +fragment <<EOF + if (!new_dtags_set && command_line.rpath == NULL) + link_info.new_dtags = TRUE; EOF + ;; + esac ;; esac + fragment <<EOF + after_parse_default (); } EOF @@ -2227,10 +2256,12 @@ fragment <<EOF case OPTION_DISABLE_NEW_DTAGS: link_info.new_dtags = FALSE; + new_dtags_set = TRUE; break; case OPTION_ENABLE_NEW_DTAGS: link_info.new_dtags = TRUE; + new_dtags_set = TRUE; break; case OPTION_EH_FRAME_HDR: @@ -2515,7 +2546,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse}, ${LDEMUL_SYSLIB-syslib_default}, ${LDEMUL_HLL-hll_default}, - ${LDEMUL_AFTER_PARSE-after_parse_default}, + ${LDEMUL_AFTER_PARSE-gld${EMULATION_NAME}_after_parse}, ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open}, ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation}, ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default}, |