* config/tc-frv.c (md_pcrel_from_section): Don't adjust when
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 27 Nov 2003 02:30:55 +0000 (02:30 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Thu, 27 Nov 2003 02:30:55 +0000 (02:30 +0000)
referencing symbol in a different section.

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

index 7fd7be5..a5c7f40 100644 (file)
@@ -1,3 +1,8 @@
+2003-11-27  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/tc-frv.c (md_pcrel_from_section): Don't adjust when
+       referencing symbol in a different section.
+
 2003-11-26  Christian Groessler  <chris@groessler.org>
 
        * config/tc-z8k.c (s_segm): Fix indentation.
index 4bc8aec..85503cd 100644 (file)
@@ -1265,11 +1265,18 @@ md_convert_frag (abfd, sec, fragP)
 long
 md_pcrel_from_section (fixP, sec)
      fixS * fixP;
-     segT   sec ATTRIBUTE_UNUSED;
+     segT   sec;
 {
-  /* Make no adjustment for relocations that will be written out.  */
-  if (TC_FORCE_RELOCATION (fixP))
-    return 0;
+  if (TC_FORCE_RELOCATION (fixP)
+      || (fixP->fx_addsy != (symbolS *) NULL
+         && S_GET_SEGMENT (fixP->fx_addsy) != sec))
+    {
+      /* If we can't adjust this relocation, or if it references a
+        local symbol in a different section (which
+        TC_FORCE_RELOCATION can't check), let the linker figure it
+        out.  */
+      return 0;
+    }
 
   return (fixP->fx_frag->fr_address + fixP->fx_where) & ~1;
 }