* as.c (main): Define .gasversion. rather than __GAS_VERSION__.
* frags.h (bss_address_frag): Delete (predefined_address_frag): New. * frags.c (frag_init): Init predefined_address_frag. Delete ref to bss_addres_frag. * symbols.c (S_CAN_BE_REDEFINED): New function. * symbols.h (S_CAN_BE_REDEFINED): Declare. * read.c (assign_symbol): Use S_CAN_BE_REDEFINED.
This commit is contained in:
parent
adabb602f9
commit
6885131b49
7 changed files with 28 additions and 8 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2011-10-13 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* as.c (main): Define .gasversion. rather than __GAS_VERSION__.
|
||||||
|
* frags.h (bss_address_frag): Delete
|
||||||
|
(predefined_address_frag): New.
|
||||||
|
* frags.c (frag_init): Init predefined_address_frag. Delete ref
|
||||||
|
to bss_addres_frag.
|
||||||
|
* symbols.c (S_CAN_BE_REDEFINED): New function.
|
||||||
|
* symbols.h (S_CAN_BE_REDEFINED): Declare.
|
||||||
|
* read.c (assign_symbol): Use S_CAN_BE_REDEFINED.
|
||||||
|
|
||||||
2011-10-12 Alan Modra <amodra@gmail.com>
|
2011-10-12 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* symbols.c (local_symbol_make): Make global.
|
* symbols.c (local_symbol_make): Make global.
|
||||||
|
|
4
gas/as.c
4
gas/as.c
|
@ -1206,8 +1206,8 @@ main (int argc, char ** argv)
|
||||||
|
|
||||||
dwarf2_init ();
|
dwarf2_init ();
|
||||||
|
|
||||||
local_symbol_make ("__GAS_VERSION__", absolute_section,
|
local_symbol_make (".gasversion.", absolute_section,
|
||||||
BFD_VERSION / 10000UL, &zero_address_frag);
|
BFD_VERSION / 10000UL, &predefined_address_frag);
|
||||||
|
|
||||||
/* Now that we have fully initialized, and have created the output
|
/* Now that we have fully initialized, and have created the output
|
||||||
file, define any symbols requested by --defsym command line
|
file, define any symbols requested by --defsym command line
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include "obstack.h"
|
#include "obstack.h"
|
||||||
|
|
||||||
extern fragS zero_address_frag;
|
extern fragS zero_address_frag;
|
||||||
extern fragS bss_address_frag;
|
extern fragS predefined_address_frag;
|
||||||
|
|
||||||
/* Initialization for frag routines. */
|
/* Initialization for frag routines. */
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ void
|
||||||
frag_init (void)
|
frag_init (void)
|
||||||
{
|
{
|
||||||
zero_address_frag.fr_type = rs_fill;
|
zero_address_frag.fr_type = rs_fill;
|
||||||
bss_address_frag.fr_type = rs_fill;
|
predefined_address_frag.fr_type = rs_fill;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check that we're not trying to assemble into a section that can't
|
/* Check that we're not trying to assemble into a section that can't
|
||||||
|
|
|
@ -118,8 +118,7 @@ extern addressT frag_now_fix_octets (void);
|
||||||
|
|
||||||
/* For foreign-segment symbol fixups. */
|
/* For foreign-segment symbol fixups. */
|
||||||
COMMON fragS zero_address_frag;
|
COMMON fragS zero_address_frag;
|
||||||
/* For local common (N_BSS segment) fixups. */
|
COMMON fragS predefined_address_frag;
|
||||||
COMMON fragS bss_address_frag;
|
|
||||||
|
|
||||||
extern void frag_append_1_char (int);
|
extern void frag_append_1_char (int);
|
||||||
#define FRAG_APPEND_1_CHAR(X) frag_append_1_char (X)
|
#define FRAG_APPEND_1_CHAR(X) frag_append_1_char (X)
|
||||||
|
|
|
@ -3091,9 +3091,8 @@ assign_symbol (char *name, int mode)
|
||||||
|
|
||||||
if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
|
if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
|
||||||
{
|
{
|
||||||
/* Permit register names to be redefined. */
|
|
||||||
if ((mode != 0 || !S_IS_VOLATILE (symbolP))
|
if ((mode != 0 || !S_IS_VOLATILE (symbolP))
|
||||||
&& S_GET_SEGMENT (symbolP) != reg_section)
|
&& !S_CAN_BE_REDEFINED (symbolP))
|
||||||
{
|
{
|
||||||
as_bad (_("symbol `%s' is already defined"), name);
|
as_bad (_("symbol `%s' is already defined"), name);
|
||||||
symbolP = symbol_clone (symbolP, 0);
|
symbolP = symbol_clone (symbolP, 0);
|
||||||
|
|
|
@ -2136,6 +2136,16 @@ S_IS_STABD (symbolS *s)
|
||||||
return S_GET_NAME (s) == 0;
|
return S_GET_NAME (s) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
S_CAN_BE_REDEFINED (const symbolS *s)
|
||||||
|
{
|
||||||
|
if (LOCAL_SYMBOL_CHECK (s))
|
||||||
|
return (local_symbol_get_frag ((struct local_symbol *) s)
|
||||||
|
== &predefined_address_frag);
|
||||||
|
/* Permit register names to be redefined. */
|
||||||
|
return s->bsym->section == reg_section;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
S_IS_VOLATILE (const symbolS *s)
|
S_IS_VOLATILE (const symbolS *s)
|
||||||
{
|
{
|
||||||
|
|
|
@ -100,6 +100,7 @@ extern int S_FORCE_RELOC (symbolS *, int);
|
||||||
extern int S_IS_DEBUG (symbolS *);
|
extern int S_IS_DEBUG (symbolS *);
|
||||||
extern int S_IS_LOCAL (symbolS *);
|
extern int S_IS_LOCAL (symbolS *);
|
||||||
extern int S_IS_STABD (symbolS *);
|
extern int S_IS_STABD (symbolS *);
|
||||||
|
extern int S_CAN_BE_REDEFINED (const symbolS *);
|
||||||
extern int S_IS_VOLATILE (const symbolS *);
|
extern int S_IS_VOLATILE (const symbolS *);
|
||||||
extern int S_IS_FORWARD_REF (const symbolS *);
|
extern int S_IS_FORWARD_REF (const symbolS *);
|
||||||
extern const char *S_GET_NAME (symbolS *);
|
extern const char *S_GET_NAME (symbolS *);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue