| Index: gdb/m68hc11-tdep.c
|
| diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c
|
| index 79629ef897bfb22815a0032e9cb7b9555d01a557..6cb4e3af5a491ca91018c8f982c4b2baa55c4d98 100644
|
| --- a/gdb/m68hc11-tdep.c
|
| +++ b/gdb/m68hc11-tdep.c
|
| @@ -1,6 +1,6 @@
|
| /* Target-dependent code for Motorola 68HC11 & 68HC12
|
|
|
| - Copyright (C) 1999-2005, 2007-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 1999-2013 Free Software Foundation, Inc.
|
|
|
| Contributed by Stephane Carrez, stcarrez@nerim.fr
|
|
|
| @@ -30,7 +30,7 @@
|
| #include "gdbtypes.h"
|
| #include "gdbcmd.h"
|
| #include "gdbcore.h"
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
| #include "value.h"
|
| #include "inferior.h"
|
| #include "dis-asm.h"
|
| @@ -247,7 +247,7 @@ m68hc11_initialize_register_info (void)
|
| {
|
| char buf[10];
|
|
|
| - sprintf (buf, "_.d%d", i - SOFT_D1_REGNUM + 1);
|
| + xsnprintf (buf, sizeof (buf), "_.d%d", i - SOFT_D1_REGNUM + 1);
|
| m68hc11_get_register_info (&soft_regs[i], buf);
|
| }
|
|
|
| @@ -338,7 +338,7 @@ m68hc11_pseudo_register_write (struct gdbarch *gdbarch,
|
| if (regno == M68HC12_HARD_PC_REGNUM)
|
| {
|
| const int regsize = 4;
|
| - char *tmp = alloca (regsize);
|
| + gdb_byte *tmp = alloca (regsize);
|
| CORE_ADDR pc;
|
|
|
| memcpy (tmp, buf, regsize);
|
| @@ -363,7 +363,7 @@ m68hc11_pseudo_register_write (struct gdbarch *gdbarch,
|
| if (soft_regs[regno].name)
|
| {
|
| const int regsize = 2;
|
| - char *tmp = alloca (regsize);
|
| + gdb_byte *tmp = alloca (regsize);
|
| memcpy (tmp, buf, regsize);
|
| target_write_memory (soft_regs[regno].addr, tmp, regsize);
|
| }
|
| @@ -587,18 +587,18 @@ m68hc11_analyze_instruction (struct gdbarch *gdbarch,
|
| static enum insn_return_kind
|
| m68hc11_get_return_insn (CORE_ADDR pc)
|
| {
|
| - struct minimal_symbol *sym;
|
| + struct bound_minimal_symbol sym;
|
|
|
| /* A flag indicating that this is a STO_M68HC12_FAR or STO_M68HC12_INTERRUPT
|
| function is stored by elfread.c in the high bit of the info field.
|
| Use this to decide which instruction the function uses to return. */
|
| sym = lookup_minimal_symbol_by_pc (pc);
|
| - if (sym == 0)
|
| + if (sym.minsym == 0)
|
| return RETURN_RTS;
|
|
|
| - if (MSYMBOL_IS_RTC (sym))
|
| + if (MSYMBOL_IS_RTC (sym.minsym))
|
| return RETURN_RTC;
|
| - else if (MSYMBOL_IS_RTI (sym))
|
| + else if (MSYMBOL_IS_RTI (sym.minsym))
|
| return RETURN_RTI;
|
| else
|
| return RETURN_RTS;
|
| @@ -1173,9 +1173,8 @@ m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
| int argnum;
|
| int first_stack_argnum;
|
| struct type *type;
|
| - char *val;
|
| - int len;
|
| - char buf[2];
|
| + const gdb_byte *val;
|
| + gdb_byte buf[2];
|
|
|
| first_stack_argnum = 0;
|
| if (struct_return)
|
| @@ -1185,19 +1184,18 @@ m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
| else if (nargs > 0)
|
| {
|
| type = value_type (args[0]);
|
| - len = TYPE_LENGTH (type);
|
|
|
| /* First argument is passed in D and X registers. */
|
| - if (len <= 4)
|
| + if (TYPE_LENGTH (type) <= 4)
|
| {
|
| ULONGEST v;
|
|
|
| v = extract_unsigned_integer (value_contents (args[0]),
|
| - len, byte_order);
|
| + TYPE_LENGTH (type), byte_order);
|
| first_stack_argnum = 1;
|
|
|
| regcache_cooked_write_unsigned (regcache, HARD_D_REGNUM, v);
|
| - if (len > 2)
|
| + if (TYPE_LENGTH (type) > 2)
|
| {
|
| v >>= 16;
|
| regcache_cooked_write_unsigned (regcache, HARD_X_REGNUM, v);
|
| @@ -1208,18 +1206,17 @@ m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
| for (argnum = nargs - 1; argnum >= first_stack_argnum; argnum--)
|
| {
|
| type = value_type (args[argnum]);
|
| - len = TYPE_LENGTH (type);
|
|
|
| - if (len & 1)
|
| + if (TYPE_LENGTH (type) & 1)
|
| {
|
| - static char zero = 0;
|
| + static gdb_byte zero = 0;
|
|
|
| sp--;
|
| write_memory (sp, &zero, 1);
|
| }
|
| - val = (char*) value_contents (args[argnum]);
|
| - sp -= len;
|
| - write_memory (sp, val, len);
|
| + val = value_contents (args[argnum]);
|
| + sp -= TYPE_LENGTH (type);
|
| + write_memory (sp, val, TYPE_LENGTH (type));
|
| }
|
|
|
| /* Store return address. */
|
| @@ -1264,7 +1261,7 @@ m68hc11_register_type (struct gdbarch *gdbarch, int reg_nr)
|
|
|
| static void
|
| m68hc11_store_return_value (struct type *type, struct regcache *regcache,
|
| - const void *valbuf)
|
| + const gdb_byte *valbuf)
|
| {
|
| int len;
|
|
|
| @@ -1277,7 +1274,7 @@ m68hc11_store_return_value (struct type *type, struct regcache *regcache,
|
| {
|
| regcache_raw_write_part (regcache, HARD_X_REGNUM, 4 - len,
|
| len - 2, valbuf);
|
| - regcache_raw_write (regcache, HARD_D_REGNUM, (char*) valbuf + (len - 2));
|
| + regcache_raw_write (regcache, HARD_D_REGNUM, valbuf + (len - 2));
|
| }
|
| else
|
| error (_("return of value > 4 is not supported."));
|
| @@ -1291,11 +1288,10 @@ static void
|
| m68hc11_extract_return_value (struct type *type, struct regcache *regcache,
|
| void *valbuf)
|
| {
|
| - int len = TYPE_LENGTH (type);
|
| - char buf[M68HC11_REG_SIZE];
|
| + gdb_byte buf[M68HC11_REG_SIZE];
|
|
|
| regcache_raw_read (regcache, HARD_D_REGNUM, buf);
|
| - switch (len)
|
| + switch (TYPE_LENGTH (type))
|
| {
|
| case 1:
|
| memcpy (valbuf, buf + 1, 1);
|
| @@ -1498,7 +1494,16 @@ m68hc11_gdbarch_init (struct gdbarch_info info,
|
| set_gdbarch_short_bit (gdbarch, 16);
|
| set_gdbarch_int_bit (gdbarch, elf_flags & E_M68HC11_I32 ? 32 : 16);
|
| set_gdbarch_float_bit (gdbarch, 32);
|
| - set_gdbarch_double_bit (gdbarch, elf_flags & E_M68HC11_F64 ? 64 : 32);
|
| + if (elf_flags & E_M68HC11_F64)
|
| + {
|
| + set_gdbarch_double_bit (gdbarch, 64);
|
| + set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
|
| + }
|
| + else
|
| + {
|
| + set_gdbarch_double_bit (gdbarch, 32);
|
| + set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
|
| + }
|
| set_gdbarch_long_double_bit (gdbarch, 64);
|
| set_gdbarch_long_bit (gdbarch, 32);
|
| set_gdbarch_ptr_bit (gdbarch, 16);
|
|
|