* config/tc-mips.c (md_parse_option): When debugging, set
[deliverable/binutils-gdb.git] / gas / write.c
index 7f2b74d4cc26044e3275017080a97a6d6f6e1320..a67b34aee8a88b3ba06b83dc0ab7941d76c81f46 100644 (file)
@@ -874,7 +874,17 @@ write_relocs (abfd, sec, xxx)
       sym = fixp->fx_addsy;
       while (sym->sy_value.X_op == O_symbol
             && (! S_IS_DEFINED (sym) || S_IS_COMMON (sym)))
-       sym = sym->sy_value.X_add_symbol;
+       {
+         symbolS *n;
+
+         /* We must avoid looping, as that can occur with a badly
+            written program.  */
+         n = sym->sy_value.X_add_symbol;
+         if (n == sym)
+           break;
+         fixp->fx_offset += sym->sy_value.X_add_number;
+         sym = n;
+       }
       fixp->fx_addsy = sym;
 
       reloc = tc_gen_reloc (sec, fixp);
@@ -2202,8 +2212,11 @@ relax_segment (segment_frag_root, segment)
                if (symbolP)
                  {
                    growth = S_GET_VALUE (symbolP);
-                   if (symbolP->sy_frag != &zero_address_frag)
-                     as_bad (".space specifies non-absolute value");
+                   if (symbolP->sy_frag != &zero_address_frag
+                       || S_IS_COMMON (symbolP)
+                       || ! S_IS_DEFINED (symbolP))
+                     as_bad_where (fragP->fr_file, fragP->fr_line,
+                                   ".space specifies non-absolute value");
                    fragP->fr_symbol = 0;
                    if (growth < 0)
                      {
This page took 0.023028 seconds and 4 git commands to generate.