From 3c9d25f4597d5d856e6bcde889203774e82550f8 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 11 May 2005 14:10:37 +0000 Subject: [PATCH] * config/tc-ppc.c (md_apply_fix3): Allow pcrel forms of BFD_RELOC_16, BFD_RELOC_LO16, BFD_RELOC_HI16 and BFD_RELOC_HI16_S. --- gas/ChangeLog | 9 +++++++-- gas/config/tc-ppc.c | 32 ++++++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 86228db6f02..41c358f8b76 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2005-05-11 Alan Modra + + * config/tc-ppc.c (md_apply_fix3): Allow pcrel forms of BFD_RELOC_16, + BFD_RELOC_LO16, BFD_RELOC_HI16 and BFD_RELOC_HI16_S. + 2005-05-10 Michael Matz * frags.c (frag_grow): Don't be too greedy in allocating memory. @@ -521,7 +526,7 @@ so that the hash table size can be set before it is used. * hash.c: Use an unsigned long type for the size of the hash tables. - * hash.h (set_gas_hash_table_size): Update the prototype. + * hash.h (set_gas_hash_table_size): Update the prototype. 2005-04-14 Alan Modra @@ -894,7 +899,7 @@ * config/tc-w65.c: Convert to ISO-C90 and fix formatting. * config/tc-w65.h: Convert to ISO-C90 and fix formatting. * config/tc-xstormy16.c: Convert to ISO-C90 and fix formatting. - * config/tc-xstormy16.h: Convert to ISO-C90 and fix formatting. + * config/tc-xstormy16.h: Convert to ISO-C90 and fix formatting. 2005-03-23 Jim Blandy diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index aa45489bbfc..d7eb9f690f0 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -5707,8 +5707,6 @@ md_apply_fix3 (fixP, valP, seg) value, 8); break; - case BFD_RELOC_LO16: - case BFD_RELOC_16: case BFD_RELOC_GPREL16: case BFD_RELOC_16_GOT_PCREL: case BFD_RELOC_16_GOTOFF: @@ -5754,19 +5752,45 @@ md_apply_fix3 (fixP, valP, seg) value, 2); break; + case BFD_RELOC_16: + if (fixP->fx_pcrel) + fixP->fx_r_type = BFD_RELOC_16_PCREL; + /* fall through */ + + case BFD_RELOC_16_PCREL: + md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where, + value, 2); + break; + + case BFD_RELOC_LO16: + if (fixP->fx_pcrel) + fixP->fx_r_type = BFD_RELOC_LO16_PCREL; + /* fall through */ + + case BFD_RELOC_LO16_PCREL: + md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where, + value, 2); + break; + /* This case happens when you write, for example, lis %r3,(L1-L2)@ha where L1 and L2 are defined later. */ case BFD_RELOC_HI16: if (fixP->fx_pcrel) - abort (); + fixP->fx_r_type = BFD_RELOC_HI16_PCREL; + /* fall through */ + + case BFD_RELOC_HI16_PCREL: md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where, PPC_HI (value), 2); break; case BFD_RELOC_HI16_S: if (fixP->fx_pcrel) - abort (); + fixP->fx_r_type = BFD_RELOC_HI16_S_PCREL; + /* fall through */ + + case BFD_RELOC_HI16_S_PCREL: md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where, PPC_HA (value), 2); break; -- 2.30.2