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); |