]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2011-10-13 Alan Modra <amodra@gmail.com>
authorAlan Modra <amodra@gmail.com>
Tue, 25 Oct 2011 03:06:33 +0000 (03:06 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 25 Oct 2011 03:06:33 +0000 (03:06 +0000)
* 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_address_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.
* symbols.h (local_symbol_make): Declare.
* as.c (main): Define __GAS_VERSION__.

gas/ChangeLog
gas/as.c
gas/frags.c
gas/frags.h
gas/read.c
gas/symbols.c
gas/symbols.h

index 4d0d622fde64fdbd131bce697b6cf9cd7850ac2d..50f9de8be6c0377f313b3c2ace8b96fab5a5ca76 100644 (file)
@@ -1,3 +1,21 @@
+2011-10-25  Alan Modra  <amodra@gmail.com>
+
+       Apply mainline patches
+       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_address_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.
+       * symbols.h (local_symbol_make): Declare.
+       * as.c (main): Define __GAS_VERSION__.
+
 2011-09-22  Tristan Gingold  <gingold@adacore.com>
 
        * NEWS: Add marker for 2.22.
index e58d861c83d6bec27da38ae20addb75b64ccdaa3..b99ea1e8be67032a98ea58aef8be1682968d5956 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
@@ -1206,6 +1206,9 @@ main (int argc, char ** argv)
 
   dwarf2_init ();
 
+  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
      arguments.  */
index fb3c02d3b5d4af868f83ab7f7351d8d8b8cd1294..fe3e78f574437068bb80c7c1d460ba1770ea6095 100644 (file)
@@ -25,7 +25,7 @@
 #include "obstack.h"
 
 extern fragS zero_address_frag;
-extern fragS bss_address_frag;
+extern fragS predefined_address_frag;
 \f
 /* 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;
 }
 \f
 /* Check that we're not trying to assemble into a section that can't
index 650ea5ed6a5617a12d99e012aed4763c7419bbdd..dd247f9c535accacd61b55723080ea9ef0431ed6 100644 (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)
index 2ab58ecbc308c2e8e4298431951326b2a283414e..445caa1489dbbf7a8a8ffeab1e53284b97219119 100644 (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);
index fc475caec0e9d06ce27236d8421f66b6f4dbc186..086e01d6a5b6105268f546d33663bda717ee7222 100644 (file)
 /* #define DEBUG_SYMS / * to debug symbol list maintenance.  */
 
 #include "as.h"
-
 #include "safe-ctype.h"
 #include "obstack.h"           /* For "symbols.h" */
 #include "subsegs.h"
-
 #include "struc-symbol.h"
 
 /* This is non-zero if symbols are case sensitive, which is the
@@ -191,7 +189,7 @@ static unsigned long local_symbol_conversion_count;
 
 /* Create a local symbol and insert it into the local hash table.  */
 
-static struct local_symbol *
+struct local_symbol *
 local_symbol_make (const char *name, segT section, valueT val, fragS *frag)
 {
   char *name_copy;
@@ -2138,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)
 {
index 1d5b2a3ca63b7f3f6892871b556dde95fda1c08b..a3a31f765bc233a7545f8cca91fd813a3f39bcee 100644 (file)
@@ -50,6 +50,8 @@ symbolS *symbol_new (const char *name, segT segment, valueT value,
                     fragS * frag);
 symbolS *symbol_create (const char *name, segT segment, valueT value,
                        fragS * frag);
+struct local_symbol *local_symbol_make (const char *name, segT section,
+                                       valueT val, fragS *frag);
 symbolS *symbol_clone (symbolS *, int);
 #undef symbol_clone_if_forward_ref
 symbolS *symbol_clone_if_forward_ref (symbolS *, int);
@@ -98,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 *);