* 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:
Alan Modra 2011-10-12 21:07:07 +00:00
parent adabb602f9
commit 6885131b49
7 changed files with 28 additions and 8 deletions

View File

@ -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>
* symbols.c (local_symbol_make): Make global.

View File

@ -1206,8 +1206,8 @@ main (int argc, char ** argv)
dwarf2_init ();
local_symbol_make ("__GAS_VERSION__", absolute_section,
BFD_VERSION / 10000UL, &zero_address_frag);
local_symbol_make (".gasversion.", absolute_section,
BFD_VERSION / 10000UL, &predefined_address_frag);
/* Now that we have fully initialized, and have created the output
file, define any symbols requested by --defsym command line

View File

@ -25,7 +25,7 @@
#include "obstack.h"
extern fragS zero_address_frag;
extern fragS bss_address_frag;
extern fragS predefined_address_frag;
/* Initialization for frag routines. */
@ -33,7 +33,7 @@ void
frag_init (void)
{
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

View File

@ -118,8 +118,7 @@ extern addressT frag_now_fix_octets (void);
/* For foreign-segment symbol fixups. */
COMMON fragS zero_address_frag;
/* For local common (N_BSS segment) fixups. */
COMMON fragS bss_address_frag;
COMMON fragS predefined_address_frag;
extern void frag_append_1_char (int);
#define FRAG_APPEND_1_CHAR(X) frag_append_1_char (X)

View File

@ -3091,9 +3091,8 @@ assign_symbol (char *name, int mode)
if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
{
/* Permit register names to be redefined. */
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);
symbolP = symbol_clone (symbolP, 0);

View File

@ -2136,6 +2136,16 @@ S_IS_STABD (symbolS *s)
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
S_IS_VOLATILE (const symbolS *s)
{

View File

@ -100,6 +100,7 @@ extern int S_FORCE_RELOC (symbolS *, int);
extern int S_IS_DEBUG (symbolS *);
extern int S_IS_LOCAL (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_FORWARD_REF (const symbolS *);
extern const char *S_GET_NAME (symbolS *);