Fix typo
[deliverable/binutils-gdb.git] / gas / symbols.c
index c8773f1e56d51172f163f3dbaf13b2b47699484c..ebcad5bf21b564a4d837879f555c45813fa3a392 100644 (file)
@@ -17,8 +17,8 @@
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 /* #define DEBUG_SYMS / * to debug symbol list maintenance.  */
 
@@ -113,11 +113,6 @@ save_symbol_name (const char *name)
   obstack_grow (&notes, name, name_length);
   ret = obstack_finish (&notes);
 
-#ifdef STRIP_UNDERSCORE
-  if (ret[0] == '_')
-    ++ret;
-#endif
-
 #ifdef tc_canonicalize_symbol_name
   ret = tc_canonicalize_symbol_name (ret);
 #endif
@@ -202,7 +197,7 @@ static unsigned long local_symbol_conversion_count;
 
 /* Create a local symbol and insert it into the local hash table.  */
 
-struct local_symbol *
+static struct local_symbol *
 local_symbol_make (const char *name, segT section, valueT value, fragS *frag)
 {
   char *name_copy;
@@ -599,16 +594,6 @@ symbol_temp_make (void)
    Out:        NULL if the name was not in the symbol table, else the address
    of a struct symbol associated with that name.  */
 
-symbolS *
-symbol_find (const char *name)
-{
-#ifdef STRIP_UNDERSCORE
-  return (symbol_find_base (name, 1));
-#else /* STRIP_UNDERSCORE */
-  return (symbol_find_base (name, 0));
-#endif /* STRIP_UNDERSCORE */
-}
-
 symbolS *
 symbol_find_exact (const char *name)
 {
@@ -626,11 +611,8 @@ symbol_find_exact (const char *name)
 }
 
 symbolS *
-symbol_find_base (const char *name, int strip_underscore)
+symbol_find (const char *name)
 {
-  if (strip_underscore && *name == '_')
-    name++;
-
 #ifdef tc_canonicalize_symbol_name
   {
     char *copy;
@@ -812,19 +794,6 @@ verify_symbol_chain (symbolS *rootP, symbolS *lastP)
   assert (lastP == symbolP);
 }
 
-void
-verify_symbol_chain_2 (symbolS *sym)
-{
-  symbolS *p = sym, *n = sym;
-#ifdef SYMBOLS_NEED_BACKPOINTERS
-  while (symbol_previous (p))
-    p = symbol_previous (p);
-#endif
-  while (symbol_next (n))
-    n = symbol_next (n);
-  verify_symbol_chain (p, n);
-}
-
 static void
 report_op_error (symbolS *symp, symbolS *left, symbolS *right)
 {
@@ -937,6 +906,7 @@ resolve_symbol_value (symbolS *symp)
       offsetT left, right;
       segT seg_left, seg_right;
       operatorT op;
+      int move_seg_ok;
 
       symp->sy_resolving = 1;
 
@@ -1122,18 +1092,15 @@ resolve_symbol_value (symbolS *symp)
                }
            }
 
+         move_seg_ok = 1;
          /* Equality and non-equality tests are permitted on anything.
             Subtraction, and other comparison operators are permitted if
             both operands are in the same section.  Otherwise, both
             operands must be absolute.  We already handled the case of
             addition or subtraction of a constant above.  This will
             probably need to be changed for an object file format which
-            supports arbitrary expressions, such as IEEE-695.
-
-            Don't emit messages unless we're finalizing the symbol value,
-            otherwise we may get the same message multiple times.  */
-         if (finalize_syms
-             && !(seg_left == absolute_section
+            supports arbitrary expressions, such as IEEE-695.  */
+         if (!(seg_left == absolute_section
                   && seg_right == absolute_section)
              && !(op == O_eq || op == O_ne)
              && !((op == O_subtract
@@ -1141,9 +1108,21 @@ resolve_symbol_value (symbolS *symp)
                   && seg_left == seg_right
                   && (seg_left != undefined_section
                       || add_symbol == op_symbol)))
-           report_op_error (symp, add_symbol, op_symbol);
+           {
+             /* Don't emit messages unless we're finalizing the symbol value,
+                otherwise we may get the same message multiple times.  */
+             if (finalize_syms)
+               report_op_error (symp, add_symbol, op_symbol);
+             /* However do not move the symbol into the absolute section
+                if it cannot currently be resolved - this would confuse
+                other parts of the assembler into believing that the
+                expression had been evaluated to zero.  */
+             else
+               move_seg_ok = 0;
+           }
 
-         if (final_seg == expr_section || final_seg == undefined_section)
+         if (move_seg_ok
+             && (final_seg == expr_section || final_seg == undefined_section))
            final_seg = absolute_section;
 
          /* Check for division by zero.  */
@@ -1840,12 +1819,6 @@ S_IS_LOCAL (symbolS *s)
                          && name[1] == '?')))));
 }
 
-int
-S_IS_EXTERN (symbolS *s)
-{
-  return S_IS_EXTERNAL (s);
-}
-
 int
 S_IS_STABD (symbolS *s)
 {
@@ -2024,15 +1997,15 @@ symbol_set_value_expression (symbolS *s, const expressionS *exp)
 
 /* Return a pointer to the X_add_number component of a symbol.  */
 
-valueT *
+offsetT *
 symbol_X_add_number (symbolS *s)
 {
 #ifdef BFD_ASSEMBLER
   if (LOCAL_SYMBOL_CHECK (s))
-    return &((struct local_symbol *) s)->lsy_value;
+    return (offsetT *) &((struct local_symbol *) s)->lsy_value;
 #endif
 
-  return (valueT *)&s->sy_value.X_add_number;
+  return &s->sy_value.X_add_number;
 }
 
 /* Set the value of SYM to the current position in the current segment.  */
@@ -2385,7 +2358,7 @@ int indent_level;
 
 /* Maximum indent level.
    Available for modification inside a gdb session.  */
-int max_indent_level = 8;
+static int max_indent_level = 8;
 
 void
 print_symbol_value_1 (FILE *file, symbolS *sym)
@@ -2423,7 +2396,7 @@ print_symbol_value_1 (FILE *file, symbolS *sym)
        fprintf (file, " used");
       if (S_IS_LOCAL (sym))
        fprintf (file, " local");
-      if (S_IS_EXTERN (sym))
+      if (S_IS_EXTERNAL (sym))
        fprintf (file, " extern");
       if (S_IS_DEBUG (sym))
        fprintf (file, " debug");
This page took 0.024626 seconds and 4 git commands to generate.