forked from Imagelibrary/binutils-gdb
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.
This commit is contained in:
@@ -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.$$ <<EOF
|
||||
.rel.plt ${RELOCATING-0} :
|
||||
{
|
||||
*(.rel.plt)
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}}
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}}
|
||||
${IREL_IN_PLT+${RELOCATING+*(.rel.iplt)}}
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}}
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}}
|
||||
}
|
||||
.rela.plt ${RELOCATING-0} :
|
||||
{
|
||||
*(.rela.plt)
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}}
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}}
|
||||
${IREL_IN_PLT+${RELOCATING+*(.rela.iplt)}}
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}}
|
||||
${IREL_IN_PLT+${RELOCATING+${CREATE_PIC-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}}
|
||||
}
|
||||
${OTHER_PLT_RELOC_SECTIONS}
|
||||
EOF
|
||||
|
||||
Reference in New Issue
Block a user