diff options
author | Alan Modra <amodra@gmail.com> | 2005-05-11 14:10:37 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-05-11 14:10:37 +0000 |
commit | 3c9d25f4597d5d856e6bcde889203774e82550f8 (patch) | |
tree | cac68c0af51c32476f37b0fe0405d17072ce6be3 /gas | |
parent | 0cf7d72c50cd48896b66849604286cc73d838161 (diff) | |
download | gdb-3c9d25f4597d5d856e6bcde889203774e82550f8.zip gdb-3c9d25f4597d5d856e6bcde889203774e82550f8.tar.gz gdb-3c9d25f4597d5d856e6bcde889203774e82550f8.tar.bz2 |
* 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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 9 | ||||
-rw-r--r-- | gas/config/tc-ppc.c | 32 |
2 files changed, 35 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 86228db..41c358f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2005-05-11 Alan Modra <amodra@bigpond.net.au> + + * 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 <matz@suse.de> * 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 <amodra@bigpond.net.au> @@ -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 <jimb@redhat.com> diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index aa45489..d7eb9f6 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; |