projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* corelow.c (core_open): Check for core_gdbarch before calling
[deliverable/binutils-gdb.git]
/
gdb
/
sparc64-tdep.c
diff --git
a/gdb/sparc64-tdep.c
b/gdb/sparc64-tdep.c
index 1d3a712b7c6f3c373696f0d613f430f713c09d03..ba51aabb548be25803da6b1ea38c7bf4b2670eee 100644
(file)
--- a/
gdb/sparc64-tdep.c
+++ b/
gdb/sparc64-tdep.c
@@
-1,6
+1,7
@@
/* Target-dependent code for UltraSPARC.
/* Target-dependent code for UltraSPARC.
- Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-225,7
+226,7
@@
static const char *sparc64_pseudo_register_names[] =
/* Return the name of register REGNUM. */
static const char *
/* Return the name of register REGNUM. */
static const char *
-sparc64_register_name (int regnum)
+sparc64_register_name (
struct gdbarch *gdbarch,
int regnum)
{
if (regnum >= 0 && regnum < SPARC64_NUM_REGS)
return sparc64_register_names[regnum];
{
if (regnum >= 0 && regnum < SPARC64_NUM_REGS)
return sparc64_register_names[regnum];
@@
-246,15
+247,15
@@
sparc64_register_type (struct gdbarch *gdbarch, int regnum)
/* Raw registers. */
if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
/* Raw registers. */
if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
- return builtin_type
_void
_data_ptr;
+ return builtin_type
(gdbarch)->builtin
_data_ptr;
if (regnum >= SPARC_G0_REGNUM && regnum <= SPARC_I7_REGNUM)
return builtin_type_int64;
if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
if (regnum >= SPARC_G0_REGNUM && regnum <= SPARC_I7_REGNUM)
return builtin_type_int64;
if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
- return builtin_type_float;
+ return builtin_type
(gdbarch)->builtin
_float;
if (regnum >= SPARC64_F32_REGNUM && regnum <= SPARC64_F62_REGNUM)
if (regnum >= SPARC64_F32_REGNUM && regnum <= SPARC64_F62_REGNUM)
- return builtin_type_double;
+ return builtin_type
(gdbarch)->builtin
_double;
if (regnum == SPARC64_PC_REGNUM || regnum == SPARC64_NPC_REGNUM)
if (regnum == SPARC64_PC_REGNUM || regnum == SPARC64_NPC_REGNUM)
- return builtin_type
_void
_func_ptr;
+ return builtin_type
(gdbarch)->builtin
_func_ptr;
/* This raw register contains the contents of %cwp, %pstate, %asi
and %ccr as laid out in a %tstate register. */
if (regnum == SPARC64_STATE_REGNUM)
/* This raw register contains the contents of %cwp, %pstate, %asi
and %ccr as laid out in a %tstate register. */
if (regnum == SPARC64_STATE_REGNUM)
@@
-279,9
+280,9
@@
sparc64_register_type (struct gdbarch *gdbarch, int regnum)
if (regnum == SPARC64_CCR_REGNUM)
return builtin_type_int64;
if (regnum >= SPARC64_D0_REGNUM && regnum <= SPARC64_D62_REGNUM)
if (regnum == SPARC64_CCR_REGNUM)
return builtin_type_int64;
if (regnum >= SPARC64_D0_REGNUM && regnum <= SPARC64_D62_REGNUM)
- return builtin_type_double;
+ return builtin_type
(gdbarch)->builtin
_double;
if (regnum >= SPARC64_Q0_REGNUM && regnum <= SPARC64_Q60_REGNUM)
if (regnum >= SPARC64_Q0_REGNUM && regnum <= SPARC64_Q60_REGNUM)
- return builtin_type_long_double;
+ return builtin_type
(gdbarch)->builtin
_long_double;
internal_error (__FILE__, __LINE__, _("invalid regnum"));
}
internal_error (__FILE__, __LINE__, _("invalid regnum"));
}
@@
-410,7
+411,7
@@
sparc64_pseudo_register_write (struct gdbarch *gdbarch,
START_PC. */
static CORE_ADDR
START_PC. */
static CORE_ADDR
-sparc64_skip_prologue (CORE_ADDR start_pc)
+sparc64_skip_prologue (
struct gdbarch *gdbarch,
CORE_ADDR start_pc)
{
struct symtab_and_line sal;
CORE_ADDR func_start, func_end;
{
struct symtab_and_line sal;
CORE_ADDR func_start, func_end;
@@
-427,23
+428,24
@@
sparc64_skip_prologue (CORE_ADDR start_pc)
return sal.end;
}
return sal.end;
}
- return sparc_analyze_prologue (start_pc, 0xffffffffffffffffULL, &cache);
+ return sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffffffffffULL,
+ &cache);
}
/* Normal frames. */
static struct sparc_frame_cache *
}
/* Normal frames. */
static struct sparc_frame_cache *
-sparc64_frame_cache (struct frame_info *
next
_frame, void **this_cache)
+sparc64_frame_cache (struct frame_info *
this
_frame, void **this_cache)
{
{
- return sparc_frame_cache (
next
_frame, this_cache);
+ return sparc_frame_cache (
this
_frame, this_cache);
}
static void
}
static void
-sparc64_frame_this_id (struct frame_info *
next
_frame, void **this_cache,
+sparc64_frame_this_id (struct frame_info *
this
_frame, void **this_cache,
struct frame_id *this_id)
{
struct sparc_frame_cache *cache =
struct frame_id *this_id)
{
struct sparc_frame_cache *cache =
- sparc64_frame_cache (
next
_frame, this_cache);
+ sparc64_frame_cache (
this
_frame, this_cache);
/* This marks the outermost frame. */
if (cache->base == 0)
/* This marks the outermost frame. */
if (cache->base == 0)
@@
-452,30
+454,20
@@
sparc64_frame_this_id (struct frame_info *next_frame, void **this_cache,
(*this_id) = frame_id_build (cache->base, cache->pc);
}
(*this_id) = frame_id_build (cache->base, cache->pc);
}
-static void
-sparc64_frame_prev_register (struct frame_info *next_frame, void **this_cache,
- int regnum, int *optimizedp,
- enum lval_type *lvalp, CORE_ADDR *addrp,
- int *realnump, gdb_byte *valuep)
+static struct value *
+sparc64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
+ int regnum)
{
struct sparc_frame_cache *cache =
{
struct sparc_frame_cache *cache =
- sparc64_frame_cache (
next
_frame, this_cache);
+ sparc64_frame_cache (
this
_frame, this_cache);
if (regnum == SPARC64_PC_REGNUM || regnum == SPARC64_NPC_REGNUM)
{
if (regnum == SPARC64_PC_REGNUM || regnum == SPARC64_NPC_REGNUM)
{
- *optimizedp = 0;
- *lvalp = not_lval;
- *addrp = 0;
- *realnump = -1;
- if (valuep)
- {
- CORE_ADDR pc = (regnum == SPARC64_NPC_REGNUM) ? 4 : 0;
+ CORE_ADDR pc = (regnum == SPARC64_NPC_REGNUM) ? 4 : 0;
- regnum = cache->frameless_p ? SPARC_O7_REGNUM : SPARC_I7_REGNUM;
- pc += frame_unwind_register_unsigned (next_frame, regnum) + 8;
- store_unsigned_integer (valuep, 8, pc);
- }
- return;
+ regnum = cache->frameless_p ? SPARC_O7_REGNUM : SPARC_I7_REGNUM;
+ pc += get_frame_register_unsigned (this_frame, regnum) + 8;
+ return frame_unwind_got_constant (this_frame, regnum, pc);
}
/* Handle StackGhost. */
}
/* Handle StackGhost. */
@@
-484,20
+476,12
@@
sparc64_frame_prev_register (struct frame_info *next_frame, void **this_cache,
if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
{
if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
{
- *optimizedp = 0;
- *lvalp = not_lval;
- *addrp = 0;
- *realnump = -1;
- if (valuep)
- {
- CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 8;
- ULONGEST i7;
-
- /* Read the value in from memory. */
- i7 = get_frame_memory_unsigned (next_frame, addr, 8);
- store_unsigned_integer (valuep, 8, i7 ^ wcookie);
- }
- return;
+ CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 8;
+ ULONGEST i7;
+
+ /* Read the value in from memory. */
+ i7 = get_frame_memory_unsigned (this_frame, addr, 8);
+ return frame_unwind_got_constant (this_frame, regnum, i7 ^ wcookie);
}
}
}
}
@@
-506,18
+490,9
@@
sparc64_frame_prev_register (struct frame_info *next_frame, void **this_cache,
if (!cache->frameless_p
&& regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM)
{
if (!cache->frameless_p
&& regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM)
{
- *optimizedp = 0;
- *lvalp = lval_memory;
- *addrp = cache->base + (regnum - SPARC_L0_REGNUM) * 8;
- *realnump = -1;
- if (valuep)
- {
- struct gdbarch *gdbarch = get_frame_arch (next_frame);
+ CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 8;
- /* Read the value in from memory. */
- read_memory (*addrp, valuep, register_size (gdbarch, regnum));
- }
- return;
+ return frame_unwind_got_memory (this_frame, regnum, addr);
}
/* The previous frame's `out' registers are accessable as the
}
/* The previous frame's `out' registers are accessable as the
@@
-526,33
+501,24
@@
sparc64_frame_prev_register (struct frame_info *next_frame, void **this_cache,
&& regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM)
regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
&& regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM)
regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
- *optimizedp = 0;
- *lvalp = lval_register;
- *addrp = 0;
- *realnump = regnum;
- if (valuep)
- frame_unwind_register (next_frame, regnum, valuep);
+ return frame_unwind_got_register (this_frame, regnum, regnum);
}
static const struct frame_unwind sparc64_frame_unwind =
{
NORMAL_FRAME,
sparc64_frame_this_id,
}
static const struct frame_unwind sparc64_frame_unwind =
{
NORMAL_FRAME,
sparc64_frame_this_id,
- sparc64_frame_prev_register
+ sparc64_frame_prev_register,
+ NULL,
+ default_frame_sniffer
};
};
-
-static const struct frame_unwind *
-sparc64_frame_sniffer (struct frame_info *next_frame)
-{
- return &sparc64_frame_unwind;
-}
\f
static CORE_ADDR
\f
static CORE_ADDR
-sparc64_frame_base_address (struct frame_info *
next
_frame, void **this_cache)
+sparc64_frame_base_address (struct frame_info *
this
_frame, void **this_cache)
{
struct sparc_frame_cache *cache =
{
struct sparc_frame_cache *cache =
- sparc64_frame_cache (
next
_frame, this_cache);
+ sparc64_frame_cache (
this
_frame, this_cache);
return cache->base;
}
return cache->base;
}
@@
-1065,9
+1031,9
@@
sparc64_store_return_value (struct type *type, struct regcache *regcache,
}
static enum return_value_convention
}
static enum return_value_convention
-sparc64_return_value (struct gdbarch *gdbarch, struct type *type,
- struct
regcache *regcache, gdb_byte *readbuf
,
- const gdb_byte *writebuf)
+sparc64_return_value (struct gdbarch *gdbarch, struct type *
func_
type,
+ struct
type *type, struct regcache *regcache
,
+
gdb_byte *readbuf,
const gdb_byte *writebuf)
{
if (TYPE_LENGTH (type) > 32)
return RETURN_VALUE_STRUCT_CONVENTION;
{
if (TYPE_LENGTH (type) > 32)
return RETURN_VALUE_STRUCT_CONVENTION;
@@
-1084,7
+1050,7
@@
sparc64_return_value (struct gdbarch *gdbarch, struct type *type,
static void
sparc64_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
struct dwarf2_frame_state_reg *reg,
static void
sparc64_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
struct dwarf2_frame_state_reg *reg,
- struct frame_info *
next
_frame)
+ struct frame_info *
this
_frame)
{
switch (regnum)
{
{
switch (regnum)
{
@@
-1147,7
+1113,7
@@
sparc64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
/* FIXME: kettenis/20050423: Don't enable the unwinder until the
StackGhost issues have been resolved. */
/* FIXME: kettenis/20050423: Don't enable the unwinder until the
StackGhost issues have been resolved. */
- frame_unwind_append_
sniffer (gdbarch, sparc64_frame_sniffer
);
+ frame_unwind_append_
unwinder (gdbarch, &sparc64_frame_unwind
);
frame_base_set_default (gdbarch, &sparc64_frame_base);
}
\f
frame_base_set_default (gdbarch, &sparc64_frame_base);
}
\f
@@
-1170,7
+1136,7
@@
sparc64_supply_gregset (const struct sparc_gregset *gregset,
struct regcache *regcache,
int regnum, const void *gregs)
{
struct regcache *regcache,
int regnum, const void *gregs)
{
- int sparc32 = (gdbarch_ptr_bit (
current_gdbarch
) == 32);
+ int sparc32 = (gdbarch_ptr_bit (
get_regcache_arch (regcache)
) == 32);
const gdb_byte *regs = gregs;
int i;
const gdb_byte *regs = gregs;
int i;
@@
-1284,7
+1250,7
@@
sparc64_collect_gregset (const struct sparc_gregset *gregset,
const struct regcache *regcache,
int regnum, void *gregs)
{
const struct regcache *regcache,
int regnum, void *gregs)
{
- int sparc32 = (gdbarch_ptr_bit (
current_gdbarch
) == 32);
+ int sparc32 = (gdbarch_ptr_bit (
get_regcache_arch (regcache)
) == 32);
gdb_byte *regs = gregs;
int i;
gdb_byte *regs = gregs;
int i;
@@
-1391,7
+1357,7
@@
void
sparc64_supply_fpregset (struct regcache *regcache,
int regnum, const void *fpregs)
{
sparc64_supply_fpregset (struct regcache *regcache,
int regnum, const void *fpregs)
{
- int sparc32 = (gdbarch_ptr_bit (
current_gdbarch
) == 32);
+ int sparc32 = (gdbarch_ptr_bit (
get_regcache_arch (regcache)
) == 32);
const gdb_byte *regs = fpregs;
int i;
const gdb_byte *regs = fpregs;
int i;
@@
-1426,7
+1392,7
@@
void
sparc64_collect_fpregset (const struct regcache *regcache,
int regnum, void *fpregs)
{
sparc64_collect_fpregset (const struct regcache *regcache,
int regnum, void *fpregs)
{
- int sparc32 = (gdbarch_ptr_bit (
current_gdbarch
) == 32);
+ int sparc32 = (gdbarch_ptr_bit (
get_regcache_arch (regcache)
) == 32);
gdb_byte *regs = fpregs;
int i;
gdb_byte *regs = fpregs;
int i;
This page took
0.027934 seconds
and
4
git commands to generate.