From 5f44c186d76efda9c6cef2d39b404a0b3f88036d Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 2 Apr 2002 00:32:41 +0000 Subject: [PATCH] * config/tc-ia64.c (ia64_cons_fix_new): Handle 8 byte iplt reloc in 32-bit mode. --- gas/ChangeLog | 5 +++++ gas/config/tc-ia64.c | 25 ++++++++++++++++++++----- 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 + + * config/tc-ia64.c (ia64_cons_fix_new): Handle 8 byte iplt reloc + in 32-bit mode. + 2002-03-27 Andreas Schwab * 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 -- 2.7.4