diff options
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/emulparams/elf64ppc.sh | 4 | ||||
-rw-r--r-- | ld/scripttempl/elf.sc | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 1c8994c..0abce2d 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2009-12-09 Alan Modra <amodra@bigpond.net.au> + + PR ld/11012 + * emulparams/elf64ppc.sh (OTHER_GOT_RELOC_SECTIONS): Move .rela.opd .. + (INITIAL_RELOC_SECTIONS): .. to here. New define. + * scripttempl/elf.sc: Expand INITIAL_RELOC_SECTIONS. + 2009-12-04 Jie Zhang <jie.zhang@analog.com> * ld.texinfo: Make it clear that --nmagic disables linking diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh index b9631b6..c9337ea 100644 --- a/ld/emulparams/elf64ppc.sh +++ b/ld/emulparams/elf64ppc.sh @@ -28,9 +28,11 @@ else .got 0 : { *(.got) } .toc 0 : { *(.toc) }" fi +# Put .opd relocs first so ld.so will process them before any ifunc relocs. +INITIAL_RELOC_SECTIONS=" + .rela.opd ${RELOCATING-0} : { *(.rela.opd) }" OTHER_GOT_RELOC_SECTIONS=" .rela.toc ${RELOCATING-0} : { *(.rela.toc) } - .rela.opd ${RELOCATING-0} : { *(.rela.opd) } .rela.branch_lt ${RELOCATING-0} : { *(.rela.branch_lt) }" OTHER_READWRITE_SECTIONS=" .toc1 ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.toc1) } diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc index 886f578..5378afa 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -311,6 +311,7 @@ else COMBRELOCCAT="cat > $COMBRELOC" fi eval $COMBRELOCCAT <<EOF + ${INITIAL_RELOC_SECTIONS} .rel.init ${RELOCATING-0} : { *(.rel.init) } .rela.init ${RELOCATING-0} : { *(.rela.init) } .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) } |