mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-21 07:23:38 +08:00
gas/
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:
parent
95560129db
commit
6a2b6326c2
@ -1,3 +1,11 @@
|
||||
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.
|
||||
|
||||
2005-10-26 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* config/tc-m32c.c (md_relax_table, subtype_mappings,
|
||||
|
@ -329,6 +329,18 @@ coff_obj_symbol_new_hook (symbolS *symbolP)
|
||||
SF_SET_LOCAL (symbolP);
|
||||
}
|
||||
|
||||
void
|
||||
coff_obj_symbol_clone_hook (symbolS *newsymP, symbolS *orgsymP)
|
||||
{
|
||||
long sz = (OBJ_COFF_MAX_AUXENTRIES + 1) * sizeof (combined_entry_type);
|
||||
combined_entry_type * s = xmalloc (sz);
|
||||
|
||||
memcpy (s, coffsymbol (symbol_get_bfdsym (orgsymP))->native, sz);
|
||||
coffsymbol (symbol_get_bfdsym (newsymP))->native = s;
|
||||
|
||||
SF_SET (newsymP, SF_GET (orgsymP));
|
||||
}
|
||||
|
||||
|
||||
/* Handle .ln directives. */
|
||||
|
||||
|
@ -172,6 +172,7 @@
|
||||
#endif
|
||||
|
||||
#define obj_symbol_new_hook coff_obj_symbol_new_hook
|
||||
#define obj_symbol_clone_hook coff_obj_symbol_clone_hook
|
||||
#define obj_read_begin_hook coff_obj_read_begin_hook
|
||||
|
||||
#include "bfd/libcoff.h"
|
||||
@ -391,6 +392,7 @@ extern void coff_frob_section (segT);
|
||||
extern void coff_adjust_section_syms (bfd *, asection *, void *);
|
||||
extern void coff_frob_file_after_relocs (void);
|
||||
extern void coff_obj_symbol_new_hook (symbolS *);
|
||||
extern void coff_obj_symbol_clone_hook (symbolS *, symbolS *);
|
||||
extern void coff_obj_read_begin_hook (void);
|
||||
#ifdef TE_PE
|
||||
extern void pecoff_obj_set_weak_hook (symbolS *);
|
||||
|
@ -2794,7 +2794,7 @@ assign_symbol (char *name, int mode)
|
||||
#endif
|
||||
}
|
||||
|
||||
if (S_IS_DEFINED (symbolP))
|
||||
if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
|
||||
{
|
||||
/* Permit register names to be redefined. */
|
||||
if ((mode != 0 || !S_IS_VOLATILE (symbolP))
|
||||
|
@ -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 (¬es, 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)
|
||||
{
|
||||
|
@ -1,3 +1,7 @@
|
||||
2005-10-27 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* gas/all/gas.exp: Don't xfail equiv1 test anymore.
|
||||
|
||||
2005-10-26 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* gas/arm/archv6.d: Adjust expected output.
|
||||
|
@ -35,8 +35,6 @@ if ![istarget hppa*-*-*] then {
|
||||
gas_test_error "diff1.s" "" "difference of two undefined symbols"
|
||||
}
|
||||
|
||||
# PR/1387
|
||||
setup_xfail "*-*-*"
|
||||
gas_test_error "equiv1.s" "" ".equiv for symbol already set to another one"
|
||||
gas_test_error "equiv2.s" "" ".equiv for symbol already set to an expression"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user