* elf.c (_bfd_elf_link_hash_copy_indirect): Set ind refcounts to

the old dir refcount, so we indirectly set them to init_refcount.
	Short-circuit asserts when we've just verified they are true.
This commit is contained in:
Alan Modra 2001-09-30 03:03:11 +00:00
parent 7efde2a4dd
commit 3c3e9281c3
2 changed files with 20 additions and 7 deletions

View file

@ -1,3 +1,9 @@
2001-09-30 Alan Modra <amodra@bigpond.net.au>
* elf.c (_bfd_elf_link_hash_copy_indirect): Set ind refcounts to
the old dir refcount, so we indirectly set them to init_refcount.
Short-circuit asserts when we've just verified they are true.
2001-09-29 Alan Modra <amodra@bigpond.net.au>
* section.c (struct sec): Remove kept_section.

View file

@ -992,6 +992,8 @@ void
_bfd_elf_link_hash_copy_indirect (dir, ind)
struct elf_link_hash_entry *dir, *ind;
{
bfd_signed_vma tmp;
/* Copy down any references that we may have already seen to the
symbol which just became indirect. */
@ -1004,19 +1006,23 @@ _bfd_elf_link_hash_copy_indirect (dir, ind)
/* Copy over the global and procedure linkage table refcount entries.
These may have been already set up by a check_relocs routine. */
if (dir->got.refcount <= 0)
tmp = dir->got.refcount;
if (tmp <= 0)
{
dir->got.refcount = ind->got.refcount;
ind->got.refcount = 0;
ind->got.refcount = tmp;
}
BFD_ASSERT (ind->got.refcount <= 0);
else
BFD_ASSERT (ind->got.refcount <= 0);
if (dir->plt.refcount <= 0)
tmp = dir->plt.refcount;
if (tmp <= 0)
{
dir->plt.refcount = ind->plt.refcount;
ind->plt.refcount = 0;
ind->plt.refcount = tmp;
}
BFD_ASSERT (ind->plt.refcount <= 0);
else
BFD_ASSERT (ind->plt.refcount <= 0);
if (dir->dynindx == -1)
{
@ -1025,7 +1031,8 @@ _bfd_elf_link_hash_copy_indirect (dir, ind)
ind->dynindx = -1;
ind->dynstr_index = 0;
}
BFD_ASSERT (ind->dynindx == -1);
else
BFD_ASSERT (ind->dynindx == -1);
}
void