* config/tc-sh.c (md_pcrel_from_section): Transformed from
authorHans-Peter Nilsson <hp@axis.com>
Mon, 1 Oct 2001 00:06:58 +0000 (00:06 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Mon, 1 Oct 2001 00:06:58 +0000 (00:06 +0000)
md_pcrel_from.  Handle pc-relativeness against link-time
symbol.  Handle relativeness to elsewhere than the fixup.

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

index 250b8ee64dc190f5fb09285eaeb7ea5dd1aa53e0..a31a459df1f377e66aeb6db2e0e28bdac92e1625 100644 (file)
@@ -1,3 +1,9 @@
+2001-09-17  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * config/tc-sh.c (md_pcrel_from_section): Transformed from
+       md_pcrel_from.  Handle pc-relativeness against link-time
+       symbol.  Handle relativeness to elsewhere than the fixup.
+
 2001-09-30  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * Makefile.am: Update dependencies with "make dep-am".
index b574e68ccf1f48ec5e27231fd77f7b9a89184526..46eafddff57094e7980cd03676217c09a892eb8a 100644 (file)
@@ -3108,9 +3108,23 @@ md_number_to_chars (ptr, use, nbytes)
 }
 
 long
-md_pcrel_from (fixP)
+md_pcrel_from_section (fixP, sec)
      fixS *fixP;
+     segT sec;
 {
+  if (fixP->fx_addsy != (symbolS *) NULL
+      && (! S_IS_DEFINED (fixP->fx_addsy)
+         || S_IS_EXTERN (fixP->fx_addsy)
+         || S_IS_WEAK (fixP->fx_addsy)
+         || S_GET_SEGMENT (fixP->fx_addsy) != sec))
+    {
+      /* The symbol is undefined (or is defined but not in this section,
+        or we're not sure about it being the final definition).  Let the
+        linker figure it out.  We need to adjust the subtraction of a
+        symbol to the position of the relocated data, though.  */
+      return fixP->fx_subsy ? fixP->fx_where + fixP->fx_frag->fr_address : 0;
+    }
+
   return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address + 2;
 }