From 795e3bb7de9ce2eb1ec3de3faf8f6bc925a58c9e Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 10 Apr 2019 18:36:05 -0700 Subject: [PATCH] ld: Don't define __rel[a]_iplt_start/__rel[a]_iplt_end in PIE __rel[a]_iplt_start and __rel[a]_iplt_end are defined to handle IFUNC in static executables. For PIE, since IFUNC is handled as the part of the normal dynamic relocation processing, there is no need to define these symbols in PIE. * scripttempl/elf.sc (CREATE_PIC): New. Set for CREATE_SHLIB or CREATE_PIE. (__rel_iplt_start): Don't define for CREATE_PIC. (__rel_iplt_end): Likewise. (__rela_iplt_start): Likewise. (__rela_iplt_end): Likewise. --- ld/ChangeLog | 9 +++++++++ ld/scripttempl/elf.sc | 17 +++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index be95a21afc4..4abb467e59b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2019-04-10 H.J. Lu + + * scripttempl/elf.sc (CREATE_PIC): New. Set for CREATE_SHLIB or + CREATE_PIE. + (__rel_iplt_start): Don't define for CREATE_PIC. + (__rel_iplt_end): Likewise. + (__rela_iplt_start): Likewise. + (__rela_iplt_end): Likewise. + 2019-04-10 Alan Modra * testsuite/ld-elf/shared.exp: Don't xfail PR ld/20995 for diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc index bd7584120e8..f9f0f7d4020 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -109,6 +109,7 @@ else FILL= fi +test -n "$CREATE_SHLIB$CREATE_PIE" && CREATE_PIC=" " test -z "$RODATA_NAME" && RODATA_NAME=rodata test -z "$SDATA_NAME" && SDATA_NAME=sdata test -z "$SBSS_NAME" && SBSS_NAME=sbss @@ -160,15 +161,15 @@ REL_IFUNC=".rel.ifunc ${RELOCATING-0} : { *(.rel.ifunc) }" RELA_IFUNC=".rela.ifunc ${RELOCATING-0} : { *(.rela.ifunc) }" REL_IPLT=".rel.iplt ${RELOCATING-0} : { - ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}} + ${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}} *(.rel.iplt) - ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}} + ${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}} }" RELA_IPLT=".rela.iplt ${RELOCATING-0} : { - ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}} + ${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}} *(.rela.iplt) - ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}} + ${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}} }" DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" RODATA=".${RODATA_NAME} ${RELOCATING-0} : { *(.${RODATA_NAME}${RELOCATING+ .${RODATA_NAME}.* .gnu.linkonce.r.*}) }" @@ -463,16 +464,16 @@ cat >> ldscripts/dyntmp.$$ <