Do not producesection relative offsets for relocs that will not be based on the
authorNick Clifton <nickc@redhat.com>
Thu, 22 May 2003 08:57:32 +0000 (08:57 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 22 May 2003 08:57:32 +0000 (08:57 +0000)
section symbol.

gas/ChangeLog
gas/config/tc-xstormy16.c

index 2499af20efe9fedd0e031d59e18db4595943bdf7..af0b04900073bbef815d283896d2289f15c064bd 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-22  Nick Clifton  <nickc@redhat.com>
+
+       * config/tc-xstormy16.c (md_pcrel_from_section): Do not produce
+       section relative offsets for relocs that will not be based on the
+       section symbol.
+       (xstormy16_md_apply_fix3): Remove previous patch to this
+       function.
+
 2003-05-07  Eric Christopher  <echristo@redhat.com>
 
         * config/tc-mips.c (mips_abicalls): New variable.
index df9892091403ad7c47e12ce50a970d879e958b39..83ae94d382aa9b3f678fa444402f76fd96112098 100644 (file)
@@ -330,12 +330,13 @@ md_pcrel_from_section (fixP, sec)
 {
   if (fixP->fx_addsy != (symbolS *) NULL
       && (! S_IS_DEFINED (fixP->fx_addsy)
-         || S_GET_SEGMENT (fixP->fx_addsy) != sec))
-    {
-      /* The symbol is undefined (or is defined but not in this section).
-        Let the linker figure it out.  */
-      return 0;
-    }
+         || S_GET_SEGMENT (fixP->fx_addsy) != sec)
+          || xstormy16_force_relocation (fixP))
+    /* The symbol is undefined,
+       or it is defined but not in this section,
+       or the relocation will be relative to this symbol not the section symbol.        
+       Let the linker figure it out.  */
+    return 0;
 
   return fixP->fx_frag->fr_address + fixP->fx_where;
 }
@@ -581,12 +582,8 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
 
   /* Tuck `value' away for use by tc_gen_reloc.
      See the comment describing fx_addnumber in write.h.
-     This field is misnamed (or misused :-).
-     We do not do this for pc-relative relocs against a
-     defined symbol, since it will be done for us.  */
-  if ((! fixP->fx_pcrel)
-      || (fixP->fx_addsy && ! S_IS_DEFINED (fixP->fx_addsy)))
-    fixP->fx_addnumber += value;
+     This field is misnamed (or misused :-).  */
+  fixP->fx_addnumber += value;
 }
 
 \f