]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
* config/tc-ia64.c (ia64_cons_fix_new): Handle 8 byte iplt reloc
authorRichard Henderson <rth@redhat.com>
Tue, 2 Apr 2002 00:39:01 +0000 (00:39 +0000)
committerRichard Henderson <rth@redhat.com>
Tue, 2 Apr 2002 00:39:01 +0000 (00:39 +0000)
        in 32-bit mode.

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

index 34ce586f2a6a1ce49ee73464430968b031a4bc37..7c4b4d92c6e74357ea764fbd348409566a33b6fd 100644 (file)
@@ -1,3 +1,8 @@
+2002-04-01  Jessica Han  <jessica@cup.hp.com>
+
+       * config/tc-ia64.c (ia64_cons_fix_new): Handle 8 byte iplt reloc
+       in 32-bit mode.
+
 2002-03-28  Alan Modra  <amodra@bigpond.net.au>
 
        * aclocal.m4: Regenerate.
index fbb166f0fc0e2119d0820f7ce2577cf0f49a6038..adffb06f701da3cc41d447e2e87453bd215a10e3 100644 (file)
@@ -9986,11 +9986,26 @@ ia64_cons_fix_new (f, where, nbytes, exp)
       break;
 
     case 8:
-      if (target_big_endian)
-       code = BFD_RELOC_IA64_DIR64MSB;
-      else
-       code = BFD_RELOC_IA64_DIR64LSB;
-      break;
+      /* In 32-bit mode, data8 could mean function descriptors too. */
+      if (exp->X_op == O_pseudo_fixup
+          && exp->X_op_symbol
+          && S_GET_VALUE (exp->X_op_symbol) == FUNC_IPLT_RELOC
+          && !(md.flags & EF_IA_64_ABI64))
+        {
+          if (target_big_endian)
+            code = BFD_RELOC_IA64_IPLTMSB;
+          else
+            code = BFD_RELOC_IA64_IPLTLSB;
+          exp->X_op = O_symbol;
+          break;
+        }
+       else {
+         if (target_big_endian)
+          code = BFD_RELOC_IA64_DIR64MSB;
+         else
+          code = BFD_RELOC_IA64_DIR64LSB;
+         break;
+       }
 
     case 16:
       if (exp->X_op == O_pseudo_fixup