[committed] Fix PR gas/1804
John David Anglin
dave@hiauly1.hia.nrc.ca
Mon Nov 7 18:57:00 GMT 2005
More information about the Binutils mailing list
Mon Nov 7 18:57:00 GMT 2005
- Previous message (by thread): [patch] Arm branch locations and BLX conversion
- Next message (by thread): [amodra@sourceware.org: src/gas/testsuite ChangeLog gas/i386/divide.d ...]
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
The following patch fixes the handling of double word label differences on hppa64. Tested on hppa64-hp-hpux11.11 and hpux2.0w-hp-hpux11.11. Dave -- J. David Anglin dave.anglin@nrc-cnrc.gc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6602) 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. Index: config/tc-hppa.c =================================================================== RCS file: /cvs/src/src/gas/config/tc-hppa.c,v retrieving revision 1.126 diff -u -3 -p -r1.126 tc-hppa.c --- config/tc-hppa.c 13 Oct 2005 01:06:01 -0000 1.126 +++ config/tc-hppa.c 7 Nov 2005 18:30:29 -0000 @@ -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?
- Previous message (by thread): [patch] Arm branch locations and BLX conversion
- Next message (by thread): [amodra@sourceware.org: src/gas/testsuite ChangeLog gas/i386/divide.d ...]
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list