aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-04-02 00:32:41 +0000
committerRichard Henderson <rth@redhat.com>2002-04-02 00:32:41 +0000
commit5f44c186d76efda9c6cef2d39b404a0b3f88036d (patch)
tree2c6693975ebee99a0a5abb51c2fa3062e82c2f1b
parentd24bbf066646ab18c0c00e72ca36d04d286459aa (diff)
downloadfsf-binutils-gdb-5f44c186d76efda9c6cef2d39b404a0b3f88036d.zip
fsf-binutils-gdb-5f44c186d76efda9c6cef2d39b404a0b3f88036d.tar.gz
fsf-binutils-gdb-5f44c186d76efda9c6cef2d39b404a0b3f88036d.tar.bz2
* config/tc-ia64.c (ia64_cons_fix_new): Handle 8 byte iplt reloc
in 32-bit mode.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-ia64.c25
2 files changed, 25 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 190d0ac..15d070e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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-27 Andreas Schwab <schwab@suse.de>
* config/tc-i386.c (output_jump): Set fx_pcrel_adjust to size of
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index fbb166f..adffb06 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -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