This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: mn10300 GAS: remove a gross, disgusting hack :-)
- To: Alexandre Oliva <aoliva at redhat dot com>
- Subject: Re: mn10300 GAS: remove a gross, disgusting hack :-)
- From: Eric Christopher <echristo at redhat dot com>
- Date: Thu, 12 Apr 2001 15:30:51 -0700
- CC: binutils at sources dot redhat dot com
- References: <orzodlbyjg.fsf@guarana.lsd.ic.unicamp.br>
Alexandre Oliva wrote:
>
> Ok to install?
>
Yep.
-eric
> ------------------------------------------------------------------------
> Index: gas/ChangeLog
> from Alexandre Oliva <aoliva@redhat.com>
> * config/tc-mn10300.c (md_assemble): Simplify offset adjustment of
> pc-relative relocations not placed at the end of the instruction.
>
> Index: gas/config/tc-mn10300.c
> ===================================================================
> RCS file: /cvs/src/src/gas/config/tc-mn10300.c,v
> retrieving revision 1.20
> diff -u -p -r1.20 tc-mn10300.c
> --- gas/config/tc-mn10300.c 2001/04/06 07:50:48 1.20
> +++ gas/config/tc-mn10300.c 2001/04/12 21:22:03
> @@ -937,7 +937,7 @@ md_assemble (str)
> struct mn10300_opcode *next_opcode;
> const unsigned char *opindex_ptr;
> int next_opindex, relaxable;
> - unsigned long insn, extension, size = 0, real_size;
> + unsigned long insn, extension, size = 0;
> char *f;
> int i;
> int match;
> @@ -1513,8 +1513,6 @@ keep_going:
> if (opcode->format == FMT_D4)
> size = 6;
>
> - real_size = size;
> -
> if (relaxable && fc > 0)
> {
> int type;
> @@ -1729,25 +1727,14 @@ keep_going:
> /* Is the reloc pc-relative? */
> pcrel = (operand->flags & MN10300_OPERAND_PCREL) != 0;
>
> - /* Gross. This disgusting hack is to make sure we
> - get the right offset for the 16/32 bit reloc in
> - "call" instructions. Basically they're a pain
> - because the reloc isn't at the end of the instruction. */
> - if ((size == 5 || size == 7)
> - && (((insn >> 24) & 0xff) == 0xcd
> - || ((insn >> 24) & 0xff) == 0xdd))
> - size -= 2;
> -
> - /* Similarly for certain bit instructions which don't
> - hav their 32bit reloc at the tail of the instruction. */
> - if (size == 7
> - && (((insn >> 16) & 0xffff) == 0xfe00
> - || ((insn >> 16) & 0xffff) == 0xfe01
> - || ((insn >> 16) & 0xffff) == 0xfe02))
> - size -= 1;
> -
> offset = size - reloc_size / 8;
>
> + /* If the pcrel relocation isn't at the end of the insn,
> + we have to adjust the offset for the relocation to be
> + correct. */
> + if (pcrel)
> + offset -= operand->shift / 8;
> +
> /* Choose a proper BFD relocation type. */
> if (pcrel)
> {
> @@ -1791,7 +1778,7 @@ keep_going:
> }
> }
>
> - dwarf2_emit_insn (real_size);
> + dwarf2_emit_insn (size);
> }
>
> /* If while processing a fixup, a reloc really needs to be created
>
> ------------------------------------------------------------------------
>
> --
> Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
> Red Hat GCC Developer aoliva@{cygnus.com, redhat.com}
> CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org}
> Free Software Evangelist *Please* write to mailing lists, not to me
--
I will not dissect things unless instructed