* write.c (adjust_reloc_syms): If the fixup symbol has been
authorIan Lance Taylor <ian@airs.com>
Thu, 19 Dec 1996 17:07:14 +0000 (17:07 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 19 Dec 1996 17:07:14 +0000 (17:07 +0000)
equated to an undefined symbol, convert the fixup to being against
the target symbol.  Remove obsolete code handling a special case
for i386 PIC.

gas/ChangeLog
gas/write.c

index 79133f0d2976f5c07d4e595e351807c196865d0b..85776a04913fc574cbed3625f13b3c2321dd3447 100644 (file)
@@ -1,3 +1,10 @@
+Thu Dec 19 12:06:08 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * write.c (adjust_reloc_syms): If the fixup symbol has been
+       equated to an undefined symbol, convert the fixup to being against
+       the target symbol.  Remove obsolete code handling a special case
+       for i386 PIC.
+
 start-sanitize-d10v
 Wed Dec 18 16:00:42 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>
 
index ab026f1f5a9f2e8d2a899f0bad98ee82b4802694..18ebc49086fa5d01fa6588a56ad547982846ecd2 100644 (file)
@@ -667,7 +667,6 @@ adjust_reloc_syms (abfd, sec, xxx)
 #endif
 
        sym = fixp->fx_addsy;
-       symsec = sym->bsym->section;
 
        /* All symbols should have already been resolved at this
           point.  It is possible to see unresolved expression
@@ -678,6 +677,18 @@ adjust_reloc_syms (abfd, sec, xxx)
        if (fixp->fx_subsy != NULL && ! fixp->fx_subsy->sy_resolved)
          resolve_symbol_value (fixp->fx_subsy);
 
+       /* If this symbol is equated to an undefined symbol, convert
+           the fixup to being against that symbol.  */
+       if (sym->sy_value.X_op == O_symbol
+           && (! S_IS_DEFINED (sym) || S_IS_COMMON (sym)))
+         {
+           fixp->fx_offset += sym->sy_value.X_add_number;
+           sym = sym->sy_value.X_add_symbol;
+           fixp->fx_addsy = sym;
+         }
+
+       symsec = S_GET_SEGMENT (sym);
+
        if (sym != NULL && sym->sy_mri_common)
          {
            /* These symbols are handled specially in fixup_segment.  */
@@ -781,27 +792,6 @@ adjust_reloc_syms (abfd, sec, xxx)
          }
 #endif
 
-       /* For PIC support: We may get expressions like
-          "_GLOBAL_OFFSET_TABLE_+(.-L5)" where "." and "L5" may not
-          necessarily have had a fixed difference initially.  But now
-          it should be a known constant, so we can reduce it.  Since
-          we can't easily handle a symbol value that looks like
-          someUndefinedSymbol+const, though, we convert the fixup to
-          access the undefined symbol directly, and discard the
-          intermediate symbol.  */
-       if (S_GET_SEGMENT (sym) == expr_section
-           && sym->sy_value.X_op == O_add
-           && (resolve_symbol_value (sym->sy_value.X_add_symbol),
-               S_GET_SEGMENT (sym->sy_value.X_add_symbol) == undefined_section)
-           && (resolve_symbol_value (sym->sy_value.X_op_symbol),
-               S_GET_SEGMENT (sym->sy_value.X_op_symbol) == absolute_section))
-         {
-           fixp->fx_offset += S_GET_VALUE (sym->sy_value.X_op_symbol);
-           fixp->fx_offset += sym->sy_value.X_add_number;
-           fixp->fx_addsy = sym->sy_value.X_add_symbol;
-           goto reduce_fixup;
-         }
-
        /* If the section symbol isn't going to be output, the relocs
           at least should still work.  If not, figure out what to do
           when we run into that case.
This page took 0.03148 seconds and 4 git commands to generate.