This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: _bfd_elf_merge_symbol tidy
- From: Alan Modra <amodra at gmail dot com>
- To: binutils at sourceware dot org
- Date: Mon, 25 Mar 2013 16:34:13 +1030
- Subject: Re: _bfd_elf_merge_symbol tidy
- References: <20130325055926 dot GY18331 at bubble dot grove dot modra dot org>
We don't change *sym_hash after the first assignment in
_bfd_elf_merge_symbol, so may as well use the value we load early on.
* elflink.c (_bfd_elf_merge_symbol): Use local var holding value
of *sym_hash.
Index: bfd/elflink.c
===================================================================
RCS file: /cvs/src/src/bfd/elflink.c,v
retrieving revision 1.479
diff -u -p -r1.479 elflink.c
--- bfd/elflink.c 25 Mar 2013 06:02:28 -0000 1.479
+++ bfd/elflink.c 25 Mar 2013 06:02:45 -0000
@@ -1185,7 +1185,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
/* If the new symbol with non-default visibility comes from a
relocatable file and the old definition comes from a dynamic
object, we remove the old definition. */
- if ((*sym_hash)->root.type == bfd_link_hash_indirect)
+ if (hi->root.type == bfd_link_hash_indirect)
{
/* Handle the case where the old dynamic definition is
default versioned. We need to copy the symbol info from
@@ -1193,13 +1193,11 @@ _bfd_elf_merge_symbol (bfd *abfd,
was referenced before. */
if (h->ref_regular)
{
- struct elf_link_hash_entry *vh = *sym_hash;
-
- vh->root.type = h->root.type;
+ hi->root.type = h->root.type;
h->root.type = bfd_link_hash_indirect;
- (*bed->elf_backend_copy_indirect_symbol) (info, vh, h);
+ (*bed->elf_backend_copy_indirect_symbol) (info, hi, h);
- h->root.u.i.link = (struct bfd_link_hash_entry *) vh;
+ h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
{
/* If the new symbol is hidden or internal, completely undo
@@ -1216,10 +1214,10 @@ _bfd_elf_merge_symbol (bfd *abfd,
h->size = 0;
h->type = 0;
- h = vh;
+ h = hi;
}
else
- h = *sym_hash;
+ h = hi;
}
/* If the old symbol was undefined before, then it will still be
@@ -1496,8 +1494,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
*type_change_ok = TRUE;
}
- if ((*sym_hash)->root.type == bfd_link_hash_indirect)
- flip = *sym_hash;
+ if (hi->root.type == bfd_link_hash_indirect)
+ flip = hi;
else
/* This union may have been set to be non-NULL when this symbol
was seen in a dynamic object. We must force the union to be
@@ -1542,8 +1540,8 @@ _bfd_elf_merge_symbol (bfd *abfd,
*size_change_ok = TRUE;
*type_change_ok = TRUE;
- if ((*sym_hash)->root.type == bfd_link_hash_indirect)
- flip = *sym_hash;
+ if (hi->root.type == bfd_link_hash_indirect)
+ flip = hi;
else
h->verinfo.vertree = NULL;
}
--
Alan Modra
Australia Development Lab, IBM