]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gas/config/tc-ppc.c
gas/ChangeLog:
[thirdparty/binutils-gdb.git] / gas / config / tc-ppc.c
index 1b12f57b8cb70d298792f18474ce94b56d7ec916..de13ab182c28a6c8182fbdf072d2053800cefd9f 100644 (file)
@@ -6620,6 +6620,9 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
     }
   else
     {
+      int size = 0;
+      offsetT fieldval = value;
+
       /* Handle relocs in data.  */
       switch (fixP->fx_r_type)
        {
@@ -6635,8 +6638,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
 
        case BFD_RELOC_32_PCREL:
        case BFD_RELOC_RVA:
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             value, 4);
+         size = 4;
          break;
 
        case BFD_RELOC_64:
@@ -6646,8 +6648,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
          /* fall through */
 
        case BFD_RELOC_64_PCREL:
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             value, 8);
+         size = 8;
          break;
 
        case BFD_RELOC_16:
@@ -6656,8 +6657,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
          /* fall through */
 
        case BFD_RELOC_16_PCREL:
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             value, 2);
+         size = 2;
          break;
 
        case BFD_RELOC_8:
@@ -6690,8 +6690,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
              fixP->fx_done = 1;
            }
          else
-           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                               value, 1);
+           size = 1;
          break;
 
        case BFD_RELOC_VTABLE_INHERIT:
@@ -6711,52 +6710,51 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
          if (fixP->fx_pcrel)
            fixP->fx_r_type = BFD_RELOC_LO16_PCREL;
        case BFD_RELOC_LO16_PCREL:
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             value, 2);
+         size = 2;
          break;
 
        case BFD_RELOC_HI16:
          if (fixP->fx_pcrel)
            fixP->fx_r_type = BFD_RELOC_HI16_PCREL;
        case BFD_RELOC_HI16_PCREL:
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             PPC_HI (value), 2);
+         size = 2;
+         fieldval = PPC_HI (value);
          break;
 
        case BFD_RELOC_HI16_S:
          if (fixP->fx_pcrel)
            fixP->fx_r_type = BFD_RELOC_HI16_S_PCREL;
        case BFD_RELOC_HI16_S_PCREL:
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             PPC_HA (value), 2);
+         size = 2;
+         fieldval = PPC_HA (value);
          break;
 
        case BFD_RELOC_PPC64_HIGHER:
          if (fixP->fx_pcrel)
            goto bad_pcrel;
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             PPC_HIGHER (value), 2);
+         size = 2;
+         fieldval = PPC_HIGHER (value);
          break;
 
        case BFD_RELOC_PPC64_HIGHER_S:
          if (fixP->fx_pcrel)
            goto bad_pcrel;
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             PPC_HIGHERA (value), 2);
+         size = 2;
+         fieldval = PPC_HIGHERA (value);
          break;
 
        case BFD_RELOC_PPC64_HIGHEST:
          if (fixP->fx_pcrel)
            goto bad_pcrel;
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             PPC_HIGHEST (value), 2);
+         size = 2;
+         fieldval = PPC_HIGHEST (value);
          break;
 
        case BFD_RELOC_PPC64_HIGHEST_S:
          if (fixP->fx_pcrel)
            goto bad_pcrel;
-         md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
-                             PPC_HIGHESTA (value), 2);
+         size = 2;
+         fieldval = PPC_HIGHESTA (value);
          break;
 
        case BFD_RELOC_PPC_DTPMOD:
@@ -6856,6 +6854,10 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
          fflush (stderr);
          abort ();
        }
+
+      if (size && APPLY_RELOC)
+       md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
+                           fieldval, size);
     }
 
 #ifdef OBJ_ELF