+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.
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
#include "obstack.h"
extern fragS zero_address_frag;
-extern fragS bss_address_frag;
+extern fragS predefined_address_frag;
\f
/* Initialization for frag routines. */
frag_init (void)
{
zero_address_frag.fr_type = rs_fill;
- bss_address_frag.fr_type = rs_fill;
+ predefined_address_frag.fr_type = rs_fill;
}
\f
/* Check that we're not trying to assemble into a section that can't
/* 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)
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);
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)
{
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 *);