* config/tc-ppc.c (md_apply_fix3): Generate ADDR16 relocs.
authorAlan Modra <amodra@gmail.com>
Tue, 8 Apr 2003 23:01:47 +0000 (23:01 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 8 Apr 2003 23:01:47 +0000 (23:01 +0000)
gas/ChangeLog
gas/config/tc-ppc.c

index 9918fc5577926576ffa7817fe79932651b48dfcb..cf54e8501f323a841be74e5fca4993e2e1bb9af5 100644 (file)
@@ -1,3 +1,7 @@
+2003-04-09  Alan Modra  <amodra@bigpond.net.au>
+
+       * config/tc-ppc.c (md_apply_fix3): Generate ADDR16 relocs.
+
 2003-04-08  Nick Clifton  <nickc@redhat.com>
 
        * as.c (perform_an_assembly_pass): If using cgen, call
index 293627e3d847c87dadc56dba8a66411adb6f1c3d..7436fbdd379fa0c09b5504da9088cd5292a929c9 100644 (file)
@@ -5522,15 +5522,26 @@ md_apply_fix3 (fixP, valP, seg)
 #if defined (OBJ_XCOFF) || defined (OBJ_ELF)
       else if ((operand->flags & PPC_OPERAND_PARENS) != 0
               && operand->bits == 16
-              && operand->shift == 0
-              && ppc_is_toc_sym (fixP->fx_addsy))
+              && operand->shift == 0)
        {
-         fixP->fx_r_type = BFD_RELOC_PPC_TOC16;
+         if (ppc_is_toc_sym (fixP->fx_addsy))
+           {
+             fixP->fx_r_type = BFD_RELOC_PPC_TOC16;
 #ifdef OBJ_ELF
-         if (ppc_obj64
-             && (operand->flags & PPC_OPERAND_DS) != 0)
-           fixP->fx_r_type = BFD_RELOC_PPC64_TOC16_DS;
+             if (ppc_obj64
+                 && (operand->flags & PPC_OPERAND_DS) != 0)
+               fixP->fx_r_type = BFD_RELOC_PPC64_TOC16_DS;
+#endif
+           }
+         else
+           {
+             fixP->fx_r_type = BFD_RELOC_16;
+#ifdef OBJ_ELF
+             if (ppc_obj64
+                 && (operand->flags & PPC_OPERAND_DS) != 0)
+               fixP->fx_r_type = BFD_RELOC_PPC64_ADDR16_DS;
 #endif
+           }
          fixP->fx_size = 2;
          if (target_big_endian)
            fixP->fx_where += 2;