2005-10-27  Jan Beulich  <jbeulich@novell.com>

	* read.c (assign_symbol): Also consider equates already defined.
	* symbols.c (symbol_clone): Also clone the underlying BFD symbol.
	* config/obj-coff.h (obj_symbol_clone_hook): New.
	(coff_obj_symbol_clone_hook): Declare.
	* config/obj-coff.c (coff_obj_symbol_clone_hook): New.

gas/testsuite/
2005-10-27  Jan Beulich  <jbeulich@novell.com>

	* gas/all/gas.exp: Don't xfail equiv1 test anymore.
This commit is contained in:
Jan Beulich
2005-10-27 07:40:07 +00:00
parent 95560129db
commit 6a2b6326c2
7 changed files with 47 additions and 3 deletions

View File

@ -542,6 +542,7 @@ symbolS *
symbol_clone (symbolS *orgsymP, int replace)
{
symbolS *newsymP;
asymbol *bsymorg, *bsymnew;
/* Running local_symbol_convert on a clone that's not the one currently
in local_hash would incorrectly replace the hash entry. Thus the
@ -549,11 +550,30 @@ symbol_clone (symbolS *orgsymP, int replace)
depends on not encountering an unconverted symbol. */
if (LOCAL_SYMBOL_CHECK (orgsymP))
orgsymP = local_symbol_convert ((struct local_symbol *) orgsymP);
bsymorg = orgsymP->bsym;
know (S_IS_DEFINED (orgsymP));
newsymP = obstack_alloc (&notes, sizeof (*newsymP));
*newsymP = *orgsymP;
bsymnew = bfd_make_empty_symbol (bfd_asymbol_bfd (bsymorg));
if (bsymnew == NULL)
as_perror ("%s", "bfd_make_empty_symbol");
newsymP->bsym = bsymnew;
bsymnew->name = bsymorg->name;
bsymnew->flags = bsymorg->flags;
bsymnew->section = bsymorg->section;
bsymnew->udata.p = (PTR) newsymP;
bfd_copy_private_symbol_data (bfd_asymbol_bfd (bsymorg), bsymorg,
bfd_asymbol_bfd (bsymnew), bsymnew);
#ifdef obj_symbol_clone_hook
obj_symbol_clone_hook (newsymP, orgsymP);
#endif
#ifdef tc_symbol_clone_hook
tc_symbol_clone_hook (newsymP, orgsymP);
#endif
if (replace)
{