aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2005-05-11 14:10:37 +0000
committerAlan Modra <amodra@gmail.com>2005-05-11 14:10:37 +0000
commit3c9d25f4597d5d856e6bcde889203774e82550f8 (patch)
treecac68c0af51c32476f37b0fe0405d17072ce6be3
parent0cf7d72c50cd48896b66849604286cc73d838161 (diff)
downloadgdb-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.
-rw-r--r--gas/ChangeLog9
-rw-r--r--gas/config/tc-ppc.c32
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;