* elflink.c (elf_link_add_object_symbols): Save and restore
	warning sym's linked sym.
This commit is contained in:
Alan Modra
2006-03-17 03:19:56 +00:00
parent cb4c78d64a
commit 2de922512d
2 changed files with 31 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2006-03-17 Alan Modra <amodra@bigpond.net.au>
PR 2434
* elflink.c (elf_link_add_object_symbols): Save and restore
warning sym's linked sym.
2006-03-16 Alan Modra <amodra@bigpond.net.au>
PR 2434

View File

@ -3457,9 +3457,15 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
for (entsize = 0, i = 0; i < htab->root.table.size; i++)
{
struct bfd_hash_entry *p;
struct elf_link_hash_entry *h;
for (p = htab->root.table.table[i]; p != NULL; p = p->next)
{
h = (struct elf_link_hash_entry *) p;
entsize += htab->root.table.entsize;
if (h->root.type == bfd_link_hash_warning)
entsize += htab->root.table.entsize;
}
}
tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
@ -3487,11 +3493,18 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
for (i = 0; i < htab->root.table.size; i++)
{
struct bfd_hash_entry *p;
struct elf_link_hash_entry *h;
for (p = htab->root.table.table[i]; p != NULL; p = p->next)
{
memcpy (old_ent, p, htab->root.table.entsize);
old_ent = (char *) old_ent + htab->root.table.entsize;
h = (struct elf_link_hash_entry *) p;
if (h->root.type == bfd_link_hash_warning)
{
memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
old_ent = (char *) old_ent + htab->root.table.entsize;
}
}
}
}
@ -4124,10 +4137,19 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
for (p = htab->root.table.table[i]; p != NULL; p = p->next)
{
h = (struct elf_link_hash_entry *) p;
if (h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
if (h->dynindx >= old_dynsymcount)
_bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index);
memcpy (p, old_ent, htab->root.table.entsize);
old_ent = (char *) old_ent + htab->root.table.entsize;
h = (struct elf_link_hash_entry *) p;
if (h->root.type == bfd_link_hash_warning)
{
memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
old_ent = (char *) old_ent + htab->root.table.entsize;
}
}
}