* symbols.c (resolve_symbol_value): Always set segment, even when
authorAlan Modra <amodra@gmail.com>
Fri, 25 May 2001 10:07:43 +0000 (10:07 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 25 May 2001 10:07:43 +0000 (10:07 +0000)
not finalizing symbol value.

gas/ChangeLog
gas/symbols.c

index 8bcc652..b122f20 100644 (file)
@@ -1,5 +1,8 @@
 2001-05-25  Alan Modra  <amodra@one.net.au>
 
+       * symbols.c (resolve_symbol_value): Always set segment, even when
+       not finalizing symbol value.
+
        * config/obj-ieee.c (write_object_file): Set finalize_syms.
        * config/obj-coff.c (write_object_file): Likewise.
        * (size_section): Remove rs_space assert as fr_symbol is no longer
index b8c78d2..764217d 100644 (file)
@@ -942,7 +942,7 @@ resolve_symbol_value (symp)
            {
              if (finalize_syms)
                {
-                 S_SET_SEGMENT (symp, S_GET_SEGMENT (add_symbol));
+                 final_seg = S_GET_SEGMENT (add_symbol);
                  symp->sy_value.X_op = O_symbol;
                  symp->sy_value.X_add_symbol = add_symbol;
                  symp->sy_value.X_add_number = final_val;
@@ -1146,18 +1146,18 @@ resolve_symbol_value (symp)
     }
 
   if (finalize_syms)
-    {
-      S_SET_VALUE (symp, final_val);
+    S_SET_VALUE (symp, final_val);
 
+exit_dont_set_value:
+  /* Always set the segment, even if not finalizing the value.
+     The segment is used to determine whether a symbol is defined.  */
 #if defined (OBJ_AOUT) && ! defined (BFD_ASSEMBLER)
-      /* The old a.out backend does not handle S_SET_SEGMENT correctly
-         for a stab symbol, so we use this bad hack.  */
-      if (final_seg != S_GET_SEGMENT (symp))
+  /* The old a.out backend does not handle S_SET_SEGMENT correctly
+     for a stab symbol, so we use this bad hack.  */
+  if (final_seg != S_GET_SEGMENT (symp))
 #endif
-       S_SET_SEGMENT (symp, final_seg);
-    }
+    S_SET_SEGMENT (symp, final_seg);
 
-exit_dont_set_value:
   /* Don't worry if we can't resolve an expr_section symbol.  */
   if (finalize_syms)
     {