Index: gdb/cris-tdep.c |
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c |
index 67390379f9862b006e6ad15cb4a3e92dc2886a81..b320c514d8eff61ecc4cd04e490d437b18ceb973 100644 |
--- a/gdb/cris-tdep.c |
+++ b/gdb/cris-tdep.c |
@@ -1,6 +1,6 @@ |
/* Target dependent code for CRIS, for GDB, the GNU debugger. |
- Copyright (C) 2001-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2001-2013 Free Software Foundation, Inc. |
Contributed by Axis Communications AB. |
Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg. |
@@ -34,6 +34,7 @@ |
#include "target.h" |
#include "value.h" |
#include "opcode/cris.h" |
+#include "osabi.h" |
#include "arch-utils.h" |
#include "regcache.h" |
#include "gdb_assert.h" |
@@ -42,9 +43,11 @@ |
#include "solib.h" /* Support for shared libraries. */ |
#include "solib-svr4.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#include "dis-asm.h" |
+#include "cris-tdep.h" |
+ |
enum cris_num_regs |
{ |
/* There are no floating point registers. Used in gdbserver low-linux.c. */ |
@@ -144,7 +147,7 @@ extern const struct cris_spec_reg cris_spec_regs[]; |
/* CRIS version, set via the user command 'set cris-version'. Affects |
register names and sizes. */ |
-static int usr_cmd_cris_version; |
+static unsigned int usr_cmd_cris_version; |
/* Indicates whether to trust the above variable. */ |
static int usr_cmd_cris_version_valid = 0; |
@@ -164,14 +167,6 @@ static const char *usr_cmd_cris_mode = cris_mode_normal; |
/* Whether to make use of Dwarf-2 CFI (default on). */ |
static int usr_cmd_cris_dwarf2_cfi = 1; |
-/* CRIS architecture specific information. */ |
-struct gdbarch_tdep |
-{ |
- int cris_version; |
- const char *cris_mode; |
- int cris_dwarf2_cfi; |
-}; |
- |
/* Sigtramp identification code copied from i386-linux-tdep.c. */ |
#define SIGTRAMP_INSN0 0x9c5f /* movu.w 0xXX, $r9 */ |
@@ -261,7 +256,7 @@ cris_sigcontext_addr (struct frame_info *this_frame) |
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
CORE_ADDR pc; |
CORE_ADDR sp; |
- char buf[4]; |
+ gdb_byte buf[4]; |
get_frame_register (this_frame, gdbarch_sp_regnum (gdbarch), buf); |
sp = extract_unsigned_integer (buf, 4, byte_order); |
@@ -323,7 +318,7 @@ cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame, |
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
struct cris_unwind_cache *info; |
CORE_ADDR addr; |
- char buf[4]; |
+ gdb_byte buf[4]; |
int i; |
if ((*this_cache)) |
@@ -676,7 +671,7 @@ struct stack_item |
}; |
static struct stack_item * |
-push_stack_item (struct stack_item *prev, void *contents, int len) |
+push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len) |
{ |
struct stack_item *si; |
si = xmalloc (sizeof (struct stack_item)); |
@@ -850,12 +845,12 @@ cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function, |
for (argnum = 0; argnum < nargs; argnum++) |
{ |
int len; |
- char *val; |
+ const gdb_byte *val; |
int reg_demand; |
int i; |
len = TYPE_LENGTH (value_type (args[argnum])); |
- val = (char *) value_contents (args[argnum]); |
+ val = value_contents (args[argnum]); |
/* How may registers worth of storage do we need for this argument? */ |
reg_demand = (len / 4) + (len % 4 != 0 ? 1 : 0); |
@@ -1439,7 +1434,7 @@ cris_spec_reg_applicable (struct gdbarch *gdbarch, |
struct cris_spec_reg spec_reg) |
{ |
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); |
- int version = tdep->cris_version; |
+ unsigned int version = tdep->cris_version; |
switch (spec_reg.applicable_version) |
{ |
@@ -1657,7 +1652,7 @@ crisv32_register_type (struct gdbarch *gdbarch, int regno) |
static void |
cris_store_return_value (struct type *type, struct regcache *regcache, |
- const void *valbuf) |
+ const gdb_byte *valbuf) |
{ |
struct gdbarch *gdbarch = get_regcache_arch (regcache); |
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
@@ -1675,7 +1670,7 @@ cris_store_return_value (struct type *type, struct regcache *regcache, |
/* Put the return value in R10 and R11. */ |
val = extract_unsigned_integer (valbuf, 4, byte_order); |
regcache_cooked_write_unsigned (regcache, ARG1_REGNUM, val); |
- val = extract_unsigned_integer ((char *)valbuf + 4, len - 4, byte_order); |
+ val = extract_unsigned_integer (valbuf + 4, len - 4, byte_order); |
regcache_cooked_write_unsigned (regcache, ARG2_REGNUM, val); |
} |
else |
@@ -1828,7 +1823,7 @@ cris_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum, |
static void |
cris_extract_return_value (struct type *type, struct regcache *regcache, |
- void *valbuf) |
+ gdb_byte *valbuf) |
{ |
struct gdbarch *gdbarch = get_regcache_arch (regcache); |
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); |
@@ -1847,7 +1842,7 @@ cris_extract_return_value (struct type *type, struct regcache *regcache, |
regcache_cooked_read_unsigned (regcache, ARG1_REGNUM, &val); |
store_unsigned_integer (valbuf, 4, byte_order, val); |
regcache_cooked_read_unsigned (regcache, ARG2_REGNUM, &val); |
- store_unsigned_integer ((char *)valbuf + 4, len - 4, byte_order, val); |
+ store_unsigned_integer (valbuf + 4, len - 4, byte_order, val); |
} |
else |
error (_("cris_extract_return_value: type length too large")); |
@@ -1879,13 +1874,13 @@ cris_return_value (struct gdbarch *gdbarch, struct value *function, |
instruction. It stems from cris_constraint, found in cris-dis.c. */ |
static int |
-constraint (unsigned int insn, const signed char *inst_args, |
+constraint (unsigned int insn, const char *inst_args, |
inst_env_type *inst_env) |
{ |
int retval = 0; |
int tmp, i; |
- const char *s = inst_args; |
+ const gdb_byte *s = (const gdb_byte *) inst_args; |
for (; *s; s++) |
switch (*s) |
@@ -3819,25 +3814,25 @@ cris_delayed_get_disassembler (bfd_vma addr, struct disassemble_info *info) |
return print_insn (addr, info); |
} |
-/* Copied from <asm/elf.h>. */ |
-typedef unsigned long elf_greg_t; |
+/* Originally from <asm/elf.h>. */ |
+typedef unsigned char cris_elf_greg_t[4]; |
/* Same as user_regs_struct struct in <asm/user.h>. */ |
#define CRISV10_ELF_NGREG 35 |
-typedef elf_greg_t elf_gregset_t[CRISV10_ELF_NGREG]; |
+typedef cris_elf_greg_t cris_elf_gregset_t[CRISV10_ELF_NGREG]; |
#define CRISV32_ELF_NGREG 32 |
-typedef elf_greg_t crisv32_elf_gregset_t[CRISV32_ELF_NGREG]; |
+typedef cris_elf_greg_t crisv32_elf_gregset_t[CRISV32_ELF_NGREG]; |
-/* Unpack an elf_gregset_t into GDB's register cache. */ |
+/* Unpack a cris_elf_gregset_t into GDB's register cache. */ |
static void |
-cris_supply_gregset (struct regcache *regcache, elf_gregset_t *gregsetp) |
+cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp) |
{ |
struct gdbarch *gdbarch = get_regcache_arch (regcache); |
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); |
int i; |
- elf_greg_t *regp = *gregsetp; |
+ cris_elf_greg_t *regp = *gregsetp; |
static char zerobuf[4] = {0}; |
/* The kernel dumps all 32 registers as unsigned longs, but supply_register |
@@ -3868,12 +3863,12 @@ fetch_core_registers (struct regcache *regcache, |
char *core_reg_sect, unsigned core_reg_size, |
int which, CORE_ADDR reg_addr) |
{ |
- elf_gregset_t gregset; |
+ cris_elf_gregset_t gregset; |
switch (which) |
{ |
case 0: |
- if (core_reg_size != sizeof (elf_gregset_t) |
+ if (core_reg_size != sizeof (cris_elf_gregset_t) |
&& core_reg_size != sizeof (crisv32_elf_gregset_t)) |
{ |
warning (_("wrong size gregset struct in core file")); |
@@ -3914,17 +3909,17 @@ _initialize_cris_tdep (void) |
gdbarch_register (bfd_arch_cris, cris_gdbarch_init, cris_dump_tdep); |
/* CRIS-specific user-commands. */ |
- add_setshow_uinteger_cmd ("cris-version", class_support, |
- &usr_cmd_cris_version, |
- _("Set the current CRIS version."), |
- _("Show the current CRIS version."), |
- _("\ |
+ add_setshow_zuinteger_cmd ("cris-version", class_support, |
+ &usr_cmd_cris_version, |
+ _("Set the current CRIS version."), |
+ _("Show the current CRIS version."), |
+ _("\ |
Set to 10 for CRISv10 or 32 for CRISv32 if autodetection fails.\n\ |
Defaults to 10. "), |
- set_cris_version, |
- NULL, /* FIXME: i18n: Current CRIS version |
- is %s. */ |
- &setlist, &showlist); |
+ set_cris_version, |
+ NULL, /* FIXME: i18n: Current CRIS version |
+ is %s. */ |
+ &setlist, &showlist); |
add_setshow_enum_cmd ("cris-mode", class_support, |
cris_modes, &usr_cmd_cris_mode, |
@@ -4013,7 +4008,7 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
{ |
struct gdbarch *gdbarch; |
struct gdbarch_tdep *tdep; |
- int cris_version; |
+ unsigned int cris_version; |
if (usr_cmd_cris_version_valid) |
{ |
@@ -4176,9 +4171,9 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
frame_unwind_append_unwinder (gdbarch, &cris_frame_unwind); |
frame_base_set_default (gdbarch, &cris_frame_base); |
- set_solib_svr4_fetch_link_map_offsets |
- (gdbarch, svr4_ilp32_fetch_link_map_offsets); |
- |
+ /* Hook in ABI-specific overrides, if they have been registered. */ |
+ gdbarch_init_osabi (info, gdbarch); |
+ |
/* FIXME: cagney/2003-08-27: It should be possible to select a CRIS |
disassembler, even when there is no BFD. Does something like |
"gdb; target remote; disassmeble *0x123" work? */ |