PR gas/1804
authorDave Anglin <dave.anglin@nrc.ca>
Mon, 7 Nov 2005 18:53:10 +0000 (18:53 +0000)
committerDave Anglin <dave.anglin@nrc.ca>
Mon, 7 Nov 2005 18:53:10 +0000 (18:53 +0000)
* config/tc-hppa.c (md_apply_fix): Use number_to_chars_bigendian to
output constant data.

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

index 010cd72f7c5650118d44e6d1b01ae7ae116f12bf..f9789637a1caff02f1f924ee7b6ac67a826534ce 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-07  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR gas/1804
+       * config/tc-hppa.c (md_apply_fix): Use number_to_chars_bigendian to
+       output constant data.
+
 2005-11-07  Mark Mitchell  <mark@codesourcery.com>
 
        * doc/Makefile.am (asconfig.texi): Set top_srcdir.
index f02e4756f8ab62010a51c2287b0b463563bd0706..3886cb8e1094376eca800897c64fc396dda9f3a2 100644 (file)
@@ -4436,7 +4436,7 @@ md_apply_fix (fixP, valP, seg)
      valueT *valP;
      segT seg ATTRIBUTE_UNUSED;
 {
-  unsigned char *buf;
+  char *fixpos;
   struct hppa_fix_struct *hppa_fixP;
   offsetT new_val;
   int insn, val, fmt;
@@ -4470,8 +4470,7 @@ md_apply_fix (fixP, valP, seg)
   if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0)
     fixP->fx_done = 1;
 
-  /* There should have been an HPPA specific fixup associated
-     with the GAS fixup.  */
+  /* There should be a HPPA specific fixup associated with the GAS fixup.  */
   hppa_fixP = (struct hppa_fix_struct *) fixP->tc_fix_data;
   if (hppa_fixP == NULL)
     {
@@ -4481,8 +4480,16 @@ md_apply_fix (fixP, valP, seg)
       return;
     }
 
-  buf = (unsigned char *) (fixP->fx_frag->fr_literal + fixP->fx_where);
-  insn = bfd_get_32 (stdoutput, buf);
+  fixpos = fixP->fx_frag->fr_literal + fixP->fx_where;
+
+  if (fixP->fx_size != 4 || hppa_fixP->fx_r_format == 32)
+    {
+      /* Handle constant output. */
+      number_to_chars_bigendian (fixpos, *valP, fixP->fx_size);
+      return;
+    }
+
+  insn = bfd_get_32 (stdoutput, fixpos);
   fmt = bfd_hppa_insn2fmt (stdoutput, insn);
 
   /* If there is a symbol associated with this fixup, then it's something
@@ -4652,7 +4659,7 @@ md_apply_fix (fixP, valP, seg)
     }
 
   /* Insert the relocation.  */
-  bfd_put_32 (stdoutput, insn, buf);
+  bfd_put_32 (stdoutput, insn, fixpos);
 }
 
 /* Exactly what point is a PC-relative offset relative TO?