From 55936540a78cd6b3480e5e72437b90328d3a5d98 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Wed, 19 Nov 2003 01:06:13 +0000 Subject: [PATCH] Fix -pie core dump with .rela.opd section. bfd/ChangeLog * elfxx-ia64.c (get_fptr): For fptr_rel, use dynobj not abfd. (elfNN_ia64_size_dynamic_sections): When stripping sections, check for ia64_info->rel_fptr_sec. ld/ChangeLog * emulparams/elf64_ia64.sh (OTHER_PLT_RELOC_SECTIONS): Include .rela.opd if -pie. --- bfd/ChangeLog | 6 ++++++ bfd/elfxx-ia64.c | 13 +++++++++++-- ld/ChangeLog | 5 +++++ ld/emulparams/elf64_ia64.sh | 2 ++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 9ff2c3b8706..11f75b2cf80 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2003-11-18 James E Wilson + + * elfxx-ia64.c (get_fptr): For fptr_rel, use dynobj not abfd. + (elfNN_ia64_size_dynamic_sections): When stripping sections, check + for ia64_info->rel_fptr_sec. + 2003-11-18 Alan Modra * elf64-ppc.c (toc_adjusting_stub_needed): Exit early if section diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index db4b8aca150..5ff5740515b 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -1993,9 +1993,9 @@ get_fptr (abfd, info, ia64_info) if (info->pie) { asection *fptr_rel; - fptr_rel = bfd_make_section(abfd, ".rela.opd"); + fptr_rel = bfd_make_section(dynobj, ".rela.opd"); if (fptr_rel == NULL - || !bfd_set_section_flags (abfd, fptr_rel, + || !bfd_set_section_flags (dynobj, fptr_rel, (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY @@ -2928,6 +2928,15 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info) if (strip) ia64_info->fptr_sec = NULL; } + else if (sec == ia64_info->rel_fptr_sec) + { + if (strip) + ia64_info->rel_fptr_sec = NULL; + else + /* We use the reloc_count field as a counter if we need to + copy relocs into the output file. */ + sec->reloc_count = 0; + } else if (sec == ia64_info->plt_sec) { if (strip) diff --git a/ld/ChangeLog b/ld/ChangeLog index d0d747f0397..6bcd346c3fe 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2003-11-18 James E Wilson + + * emulparams/elf64_ia64.sh (OTHER_PLT_RELOC_SECTIONS): Include + .rela.opd if -pie. + 2003-11-10 Jonathan Wilson * scripttempl/pe.sc: Add support for TLS sections. diff --git a/ld/emulparams/elf64_ia64.sh b/ld/emulparams/elf64_ia64.sh index 858cd10cbbd..100aca1ac02 100644 --- a/ld/emulparams/elf64_ia64.sh +++ b/ld/emulparams/elf64_ia64.sh @@ -28,6 +28,8 @@ test -z "$CREATE_PIE" && OTHER_READONLY_SECTIONS=" .opd ${RELOCATING-0} : { *(.opd) }" test -n "$CREATE_PIE" && OTHER_READWRITE_SECTIONS=" .opd ${RELOCATING-0} : { *(.opd) }" +test -n "$CREATE_PIE" && OTHER_PLT_RELOC_SECTIONS="${OTHER_PLT_RELOC_SECTIONS} + .rela.opd ${RELOCATING-0} : { *(.rela.opd) }" OTHER_READONLY_SECTIONS="${OTHER_READONLY_SECTIONS} .IA_64.unwind_info ${RELOCATING-0} : { *(.IA_64.unwind_info${RELOCATING+* .gnu.linkonce.ia64unwi.*}) } .IA_64.unwind ${RELOCATING-0} : { *(.IA_64.unwind${RELOCATING+* .gnu.linkonce.ia64unw.*}) }" -- 2.30.2