aboutsummaryrefslogtreecommitdiff
path: root/ld/scripttempl
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2009-06-01 12:53:00 +0000
committerH.J. Lu <hjl.tools@gmail.com>2009-06-01 12:53:00 +0000
commit3aa14d16c669ca75f9fa4e995a2e2d13069dff3f (patch)
tree1a2ad94abb5b713dcbc666eef81faf0cc1efddcd /ld/scripttempl
parent64c9be2ef34670f6c5498ea1bd0b562465c8fd27 (diff)
downloadfsf-binutils-gdb-3aa14d16c669ca75f9fa4e995a2e2d13069dff3f.zip
fsf-binutils-gdb-3aa14d16c669ca75f9fa4e995a2e2d13069dff3f.tar.gz
fsf-binutils-gdb-3aa14d16c669ca75f9fa4e995a2e2d13069dff3f.tar.bz2
bfd/
2009-06-01 H.J. Lu <hongjiu.lu@intel.com> * elf-bfd.h (struct bfd_elf_section_data): Remove indirect_relocs. (_bfd_elf_make_ifunc_reloc_section): Removed. (_bfd_elf_is_ifunc_symbol): Likewise. (_bfd_elf_create_static_ifunc_sections): New. * elflink.c (_bfd_elf_adjust_dynamic_symbol): Move STT_GNU_IFUNC symbol check to ... (elf_link_add_object_symbols): Here. (_bfd_elf_link_hash_hide_symbol): Don't clean plt on STT_GNU_IFUNC symbol. (elf_link_output_extsym): Call elf_backend_finish_dynamic_symbol if a STT_GNU_IFUNC symbol is referenced in a non-shared object. (IFUNC_INFIX): Removed. (get_ifunc_reloc_section_name): Likewise. (_bfd_elf_make_ifunc_reloc_section): Likewise. (_bfd_elf_is_ifunc_symbol): Likewise. (_bfd_elf_create_static_ifunc_sections): New. ld/ 2009-06-01 H.J. Lu <hongjiu.lu@intel.com> * scripttempl/elf.sc (PLT): Add "*(.iplt)". (GOT): Add "*(.igot.plt)a" and "*(.igot)". (GOTPLT): Add "*(.igot)". (__rel_iplt_start): New. (__rel_iplt_end): Likewise. (__rela_iplt_start): Likewise. (__rela_iplt_end): Likewise.
Diffstat (limited to 'ld/scripttempl')
-rw-r--r--ld/scripttempl/elf.sc24
1 files changed, 18 insertions, 6 deletions
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
index 123a989..75efa32 100644
--- a/ld/scripttempl/elf.sc
+++ b/ld/scripttempl/elf.sc
@@ -113,15 +113,15 @@ if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
fi
if test -z "$PLT"; then
- PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+ PLT=".plt ${RELOCATING-0} : { *(.plt) *(.iplt)}"
fi
test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
if test -z "$GOT"; then
if test -z "$SEPARATE_GOTPLT"; then
- GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
+ GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }"
else
- GOT=".got ${RELOCATING-0} : { *(.got) }"
- GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
+ GOT=".got ${RELOCATING-0} : { *(.got) *(.igot) }"
+ GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) }"
fi
fi
DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
@@ -354,8 +354,20 @@ EOF
fi
cat >> ldscripts/dyntmp.$$ <<EOF
- .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
- .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
+ .rel.plt ${RELOCATING-0} :
+ {
+ *(.rel.plt)
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}
+ *(.rel.iplt)
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}
+ }
+ .rela.plt ${RELOCATING-0} :
+ {
+ *(.rela.plt)
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}
+ *(.rela.iplt)
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}
+ }
${OTHER_PLT_RELOC_SECTIONS}
EOF