mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
2002-11-11 Klee Dienes <kdienes@apple.com>
* h8300.h (h8_opcode): Remove 'length' field. (h8_opcodes): Mark as 'const' (both the declaration and definition). Modify initializer and initializer macros to no longer initialize the length field. 2002-11-11 Klee Dienes <kdienes@apple.com> * h8300-dis.c: Include libiberty.h (for xmalloc). (struct h8_instruction): New type, used to wrap h8_opcodes with a length field (computed at run-time). (h8_instructions): New variable. (bfd_h8_disassemble_init): Allocate the storage for h8_instructions. Fill h8_instructions with pointers to the appropriate opcode and the correct value for the length field. (bfd_h8_disassemble): Iterate through h8_instructions instead of h8_opcodes.
This commit is contained in:
@ -23,6 +23,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "opcode/h8300.h"
|
||||
#include "dis-asm.h"
|
||||
#include "opintl.h"
|
||||
#include "libiberty.h"
|
||||
|
||||
struct h8_instruction
|
||||
{
|
||||
int length;
|
||||
const struct h8_opcode *opcode;
|
||||
};
|
||||
|
||||
struct h8_instruction *h8_instructions;
|
||||
|
||||
static void bfd_h8_disassemble_init PARAMS ((void));
|
||||
static unsigned int bfd_h8_disassemble
|
||||
@ -34,9 +43,16 @@ static void
|
||||
bfd_h8_disassemble_init ()
|
||||
{
|
||||
unsigned int i;
|
||||
struct h8_opcode *p;
|
||||
unsigned int nopcodes;
|
||||
const struct h8_opcode *p;
|
||||
struct h8_instruction *pi;
|
||||
|
||||
for (p = h8_opcodes; p->name; p++)
|
||||
nopcodes = sizeof (h8_opcodes) / sizeof (struct h8_opcode);
|
||||
|
||||
h8_instructions = (struct h8_instruction *)
|
||||
xmalloc (nopcodes * sizeof (struct h8_instruction));
|
||||
|
||||
for (p = h8_opcodes, pi = h8_instructions; p->name; p++, pi++)
|
||||
{
|
||||
int n1 = 0;
|
||||
int n2 = 0;
|
||||
@ -59,8 +75,13 @@ bfd_h8_disassemble_init ()
|
||||
if (i & 1)
|
||||
abort ();
|
||||
|
||||
p->length = i / 2;
|
||||
pi->length = i / 2;
|
||||
pi->opcode = p;
|
||||
}
|
||||
|
||||
/* Add entry for the NULL vector terminator. */
|
||||
pi->length = 0;
|
||||
pi->opcode = p;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
@ -92,7 +113,7 @@ bfd_h8_disassemble (addr, info, mode)
|
||||
int bit = 0;
|
||||
int plen = 0;
|
||||
static boolean init = 0;
|
||||
struct h8_opcode *q;
|
||||
const struct h8_instruction *qi;
|
||||
char const **pregnames = mode != 0 ? lregnames : wregnames;
|
||||
int status;
|
||||
int l;
|
||||
@ -117,8 +138,9 @@ bfd_h8_disassemble (addr, info, mode)
|
||||
status = info->read_memory_func (addr + l, data + l, 2, info);
|
||||
|
||||
/* Find the exact opcode/arg combo. */
|
||||
for (q = h8_opcodes; q->name; q++)
|
||||
for (qi = h8_instructions; qi->opcode->name; qi++)
|
||||
{
|
||||
const struct h8_opcode *q = qi->opcode;
|
||||
op_type *nib = q->data.nib;
|
||||
unsigned int len = 0;
|
||||
|
||||
@ -247,7 +269,7 @@ bfd_h8_disassemble (addr, info, mode)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < q->length; i++)
|
||||
for (i = 0; i < qi->length; i++)
|
||||
fprintf (stream, "%02x ", data[i]);
|
||||
|
||||
for (; i < 6; i++)
|
||||
@ -264,7 +286,7 @@ bfd_h8_disassemble (addr, info, mode)
|
||||
high = data[3] & 0x7;
|
||||
|
||||
fprintf (stream, "@sp+,er%d-er%d", high - count, high);
|
||||
return q->length;
|
||||
return qi->length;
|
||||
}
|
||||
|
||||
if (strcmp (q->name, "stm.l") == 0)
|
||||
@ -275,7 +297,7 @@ bfd_h8_disassemble (addr, info, mode)
|
||||
low = data[3] & 0x7;
|
||||
|
||||
fprintf (stream, "er%d-er%d,@-sp", low, low + count);
|
||||
return q->length;
|
||||
return qi->length;
|
||||
}
|
||||
|
||||
/* Fill in the args. */
|
||||
@ -389,7 +411,7 @@ bfd_h8_disassemble (addr, info, mode)
|
||||
}
|
||||
}
|
||||
|
||||
return q->length;
|
||||
return qi->length;
|
||||
}
|
||||
else
|
||||
/* xgettext:c-format */
|
||||
|
Reference in New Issue
Block a user