This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
mn10300 GAS: remove a gross, disgusting hack :-)
- To: binutils at sources dot redhat dot com
- Subject: mn10300 GAS: remove a gross, disgusting hack :-)
- From: Alexandre Oliva <aoliva at redhat dot com>
- Date: 12 Apr 2001 18:25:55 -0300
- Organization: GCC Team, Red Hat
Ok to install?
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