From: Alan Modra Date: Wed, 18 Aug 2004 10:11:02 +0000 (+0000) Subject: * elf64-ppc.c (func_desc_adjust): Give undefined dot-symbols a value X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=1a814dc696af5a33d4de1c0afa8c2e15c0eaf39c;p=pf3gnuchains%2Fpf3gnuchains3x.git * elf64-ppc.c (func_desc_adjust): Give undefined dot-symbols a value if we can look up their function descriptor in a regular file. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f9f11261d5..ed6e667bde 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2004-08-18 Alan Modra + + * elf64-ppc.c (func_desc_adjust): Give undefined dot-symbols a value + if we can look up their function descriptor in a regular file. + 2004-08-18 Nick Clifton PR 324 diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index ed679c2826..33ffd3906c 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -5061,6 +5061,24 @@ func_desc_adjust (struct elf_link_hash_entry *h, void *inf) info = inf; htab = ppc_hash_table (info); + /* Resolve undefined references to dot-symbols as the value + in the function descriptor, if we have one in a regular object. + This is to satisfy cases like ".quad .foo". Calls to functions + in dynamic objects are handled elsewhere. */ + if (fh->elf.root.type == bfd_link_hash_undefweak + && fh->was_undefined + && (fh->oh->elf.root.type == bfd_link_hash_defined + || fh->oh->elf.root.type == bfd_link_hash_defweak) + && get_opd_info (fh->oh->elf.root.u.def.section) != NULL + && opd_entry_value (fh->oh->elf.root.u.def.section, + fh->oh->elf.root.u.def.value, + &fh->elf.root.u.def.section, + &fh->elf.root.u.def.value) != (bfd_vma) -1) + { + fh->elf.root.type = fh->oh->elf.root.type; + fh->elf.elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL; + } + /* If this is a function code symbol, transfer dynamic linking information to the function descriptor symbol. */ if (!fh->is_func)