* config/tc-ppc.c (md_apply_fix3): Allow pcrel forms of BFD_RELOC_16,
authorAlan Modra <amodra@gmail.com>
Wed, 11 May 2005 14:10:37 +0000 (14:10 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 11 May 2005 14:10:37 +0000 (14:10 +0000)
BFD_RELOC_LO16, BFD_RELOC_HI16 and BFD_RELOC_HI16_S.

gas/ChangeLog
gas/config/tc-ppc.c

index 86228db6f028443098295ef333f9b71408be66c0..41c358f8b76d1b75385b7dad277281ffac82af18 100644 (file)
@@ -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.
        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>
 
        * 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>
 
index aa45489bbfc95303bb53a328d44f8a97e2a964fc..d7eb9f690f0aff3d50cd330be67f626149ad2d85 100644 (file)
@@ -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;