mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-12-14 07:38:41 +00:00
* config/tc-v850.c (md_apply_fix3): Use little endian get/put
routines to fetch/store the updated instruction from/to memory. (v850_insert_operand): If the operand has a specialized insert routine, call it. Getting fixups closer. At least br <target> works now.
This commit is contained in:
parent
7ab4a84a3a
commit
74dd0c0786
@ -1,4 +1,11 @@
|
||||
start-sanitize-v850
|
||||
Fri Aug 30 23:50:08 1996 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* config/tc-v850.c (md_apply_fix3): Use little endian get/put
|
||||
routines to fetch/store the updated instruction from/to memory.
|
||||
(v850_insert_operand): If the operand has a specialized insert
|
||||
routine, call it.
|
||||
|
||||
Fri Aug 30 18:35:26 1996 J.T. Conklin <jtc@hippo.cygnus.com>
|
||||
|
||||
* config/tc-v850.c (reg_name_search): Align calling convention to
|
||||
|
@ -883,12 +883,16 @@ md_apply_fix3 (fixp, valuep, seg)
|
||||
operand = &v850_operands[opindex];
|
||||
|
||||
/* Fetch the instruction, insert the fully resolved operand
|
||||
value, and stuff the instruction back again. */
|
||||
value, and stuff the instruction back again.
|
||||
|
||||
Note the instruction has been stored in little endian
|
||||
format! */
|
||||
where = fixp->fx_frag->fr_literal + fixp->fx_where;
|
||||
insn = bfd_getb32((unsigned char *) where);
|
||||
|
||||
insn = bfd_getl32((unsigned char *) where);
|
||||
insn = v850_insert_operand (insn, operand, (offsetT) value,
|
||||
fixp->fx_file, fixp->fx_line);
|
||||
bfd_putb32((bfd_vma) insn, (unsigned char *) where);
|
||||
bfd_putl32((bfd_vma) insn, (unsigned char *) where);
|
||||
|
||||
if (fixp->fx_done)
|
||||
{
|
||||
@ -971,6 +975,19 @@ v850_insert_operand (insn, operand, val, file, line)
|
||||
}
|
||||
}
|
||||
|
||||
insn |= (((long) val & ((1 << operand->bits) - 1)) << operand->shift);
|
||||
if (operand->insert)
|
||||
{
|
||||
const char *message = NULL;
|
||||
insn = (operand->insert) (insn, val, &message);
|
||||
if (message != NULL)
|
||||
{
|
||||
if (file == (char *) NULL)
|
||||
as_warn (message);
|
||||
else
|
||||
as_warn_where (file, line, message);
|
||||
}
|
||||
}
|
||||
else
|
||||
insn |= (((long) val & ((1 << operand->bits) - 1)) << operand->shift);
|
||||
return insn;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user