From 816881401eed1e79939dbbbd16ad5ffb5f6332e7 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 17 Aug 2004 01:25:21 +0000 Subject: [PATCH] * elf64-ppc.c (struct ppc64_elf_obj_tdata): Add "deleted_section". (adjust_opd_syms): Attach opd syms for deleted entries to one of the sections that will be discarded. --- bfd/ChangeLog | 6 ++++++ bfd/elf64-ppc.c | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4bfcd1e..8cb7a66 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2004-08-17 Alan Modra + + * elf64-ppc.c (struct ppc64_elf_obj_tdata): Add "deleted_section". + (adjust_opd_syms): Attach opd syms for deleted entries to one of + the sections that will be discarded. + 2004-08-16 Alan Modra * elflink.c (elf_section_complain_discarded): Ignore .fixup. diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index fca84ac..ccb8089 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -2333,6 +2333,10 @@ struct ppc64_elf_obj_tdata asection *got; asection *relgot; + /* Used during garbage collection. We attach global symbols defined + on removed .opd entries to this section so that the sym is removed. */ + asection *deleted_section; + /* TLS local dynamic got entry handling. Suppose for multiple GOT sections means we potentially need one of these for each input bfd. */ union { @@ -5227,8 +5231,18 @@ adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED) if (adjust == -1) { /* This entry has been deleted. */ + asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section; + if (dsec == NULL) + { + for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next) + if (elf_discarded_section (dsec)) + { + ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec; + break; + } + } eh->elf.root.u.def.value = 0; - eh->elf.root.u.def.section = &bfd_abs_section; + eh->elf.root.u.def.section = dsec; } else eh->elf.root.u.def.value += adjust; -- 2.7.4