mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
* trad-frame.c (struct trad_frame_cache): Rename next_frame to this_frame.
(trad_frame_cache_zalloc, trad_frame_alloc_saved_regs): Expect this_frame. (trad_frame_get_prev_register, trad_frame_get_register): Update signature. * trad-frame.h (trad_frame_cache_zalloc, trad_frame_get_register) (trad_frame_alloc_saved_regs, trad_frame_get_prev_register): Update signature. * tramp-frame.c (tramp_frame_cache, tramp_frame_start): Expect this_frame. (tramp_frame_this_id, tramp_frame_prev_register, tramp_frame_sniffer): Update signature. * tramp-frame.h (struct tramp_frame): Update signature of init. * Makefile.in (trad-frame.o): Update.
This commit is contained in:
@@ -1,3 +1,19 @@
|
||||
2008-04-30 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* trad-frame.c (struct trad_frame_cache): Rename next_frame to this_frame.
|
||||
(trad_frame_cache_zalloc, trad_frame_alloc_saved_regs): Expect
|
||||
this_frame.
|
||||
(trad_frame_get_prev_register, trad_frame_get_register): Update signature.
|
||||
* trad-frame.h (trad_frame_cache_zalloc, trad_frame_get_register)
|
||||
(trad_frame_alloc_saved_regs, trad_frame_get_prev_register): Update
|
||||
signature.
|
||||
* tramp-frame.c (tramp_frame_cache, tramp_frame_start): Expect
|
||||
this_frame.
|
||||
(tramp_frame_this_id, tramp_frame_prev_register, tramp_frame_sniffer):
|
||||
Update signature.
|
||||
* tramp-frame.h (struct tramp_frame): Update signature of init.
|
||||
* Makefile.in (trad-frame.o): Update.
|
||||
|
||||
2008-04-30 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* dwarf2-frame.c (read_reg): Expect this_frame in the baton.
|
||||
|
||||
@@ -2925,7 +2925,7 @@ tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(gdbtypes_h) \
|
||||
$(block_h) $(dictionary_h) $(ax_h) $(ax_gdb_h) $(readline_h) \
|
||||
$(readline_history_h)
|
||||
trad-frame.o: trad-frame.c $(defs_h) $(frame_h) $(trad_frame_h) \
|
||||
$(regcache_h)
|
||||
$(regcache_h) $(frame_unwind_h) $(value_h)
|
||||
tramp-frame.o: tramp-frame.c $(defs_h) $(tramp_frame_h) $(frame_unwind_h) \
|
||||
$(gdbcore_h) $(symtab_h) $(objfiles_h) $(target_h) $(trad_frame_h) \
|
||||
$(frame_base_h) $(gdb_assert_h)
|
||||
|
||||
@@ -21,23 +21,25 @@
|
||||
#include "frame.h"
|
||||
#include "trad-frame.h"
|
||||
#include "regcache.h"
|
||||
#include "frame-unwind.h"
|
||||
#include "value.h"
|
||||
|
||||
struct trad_frame_cache
|
||||
{
|
||||
struct frame_info *next_frame;
|
||||
struct frame_info *this_frame;
|
||||
CORE_ADDR this_base;
|
||||
struct trad_frame_saved_reg *prev_regs;
|
||||
struct frame_id this_id;
|
||||
};
|
||||
|
||||
struct trad_frame_cache *
|
||||
trad_frame_cache_zalloc (struct frame_info *next_frame)
|
||||
trad_frame_cache_zalloc (struct frame_info *this_frame)
|
||||
{
|
||||
struct trad_frame_cache *this_trad_cache;
|
||||
|
||||
this_trad_cache = FRAME_OBSTACK_ZALLOC (struct trad_frame_cache);
|
||||
this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (next_frame);
|
||||
this_trad_cache->next_frame = next_frame;
|
||||
this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (this_frame);
|
||||
this_trad_cache->this_frame = this_frame;
|
||||
return this_trad_cache;
|
||||
}
|
||||
|
||||
@@ -47,10 +49,10 @@ trad_frame_cache_zalloc (struct frame_info *next_frame)
|
||||
for all potential instruction sequences). */
|
||||
|
||||
struct trad_frame_saved_reg *
|
||||
trad_frame_alloc_saved_regs (struct frame_info *next_frame)
|
||||
trad_frame_alloc_saved_regs (struct frame_info *this_frame)
|
||||
{
|
||||
int regnum;
|
||||
struct gdbarch *gdbarch = get_frame_arch (next_frame);
|
||||
struct gdbarch *gdbarch = get_frame_arch (this_frame);
|
||||
int numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
|
||||
struct trad_frame_saved_reg *this_saved_regs
|
||||
= FRAME_OBSTACK_CALLOC (numregs, struct trad_frame_saved_reg);
|
||||
@@ -128,66 +130,34 @@ trad_frame_set_unknown (struct trad_frame_saved_reg this_saved_regs[],
|
||||
this_saved_regs[regnum].addr = -1;
|
||||
}
|
||||
|
||||
void
|
||||
trad_frame_get_prev_register (struct frame_info *next_frame,
|
||||
struct value *
|
||||
trad_frame_get_prev_register (struct frame_info *this_frame,
|
||||
struct trad_frame_saved_reg this_saved_regs[],
|
||||
int regnum, int *optimizedp,
|
||||
enum lval_type *lvalp, CORE_ADDR *addrp,
|
||||
int *realregp, gdb_byte *bufferp)
|
||||
int regnum)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_frame_arch (next_frame);
|
||||
struct gdbarch *gdbarch = get_frame_arch (this_frame);
|
||||
if (trad_frame_addr_p (this_saved_regs, regnum))
|
||||
{
|
||||
/* The register was saved in memory. */
|
||||
*optimizedp = 0;
|
||||
*lvalp = lval_memory;
|
||||
*addrp = this_saved_regs[regnum].addr;
|
||||
*realregp = -1;
|
||||
if (bufferp != NULL)
|
||||
{
|
||||
/* Read the value in from memory. */
|
||||
get_frame_memory (next_frame, this_saved_regs[regnum].addr, bufferp,
|
||||
register_size (gdbarch, regnum));
|
||||
}
|
||||
}
|
||||
/* The register was saved in memory. */
|
||||
return frame_unwind_got_memory (this_frame, regnum,
|
||||
this_saved_regs[regnum].addr);
|
||||
else if (trad_frame_realreg_p (this_saved_regs, regnum))
|
||||
{
|
||||
*optimizedp = 0;
|
||||
*lvalp = lval_register;
|
||||
*addrp = 0;
|
||||
*realregp = this_saved_regs[regnum].realreg;
|
||||
/* Ask the next frame to return the value of the register. */
|
||||
if (bufferp)
|
||||
frame_unwind_register (next_frame, (*realregp), bufferp);
|
||||
}
|
||||
return frame_unwind_got_register (this_frame, regnum,
|
||||
this_saved_regs[regnum].realreg);
|
||||
else if (trad_frame_value_p (this_saved_regs, regnum))
|
||||
{
|
||||
/* The register's value is available. */
|
||||
*optimizedp = 0;
|
||||
*lvalp = not_lval;
|
||||
*addrp = 0;
|
||||
*realregp = -1;
|
||||
if (bufferp != NULL)
|
||||
store_unsigned_integer (bufferp, register_size (gdbarch, regnum),
|
||||
this_saved_regs[regnum].addr);
|
||||
}
|
||||
/* The register's value is available. */
|
||||
return frame_unwind_got_constant (this_frame, regnum,
|
||||
this_saved_regs[regnum].addr);
|
||||
else
|
||||
{
|
||||
error (_("Register %s not available"),
|
||||
gdbarch_register_name (gdbarch, regnum));
|
||||
}
|
||||
return frame_unwind_got_optimized (this_frame, regnum);
|
||||
}
|
||||
|
||||
void
|
||||
struct value *
|
||||
trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
|
||||
struct frame_info *next_frame,
|
||||
int regnum, int *optimizedp,
|
||||
enum lval_type *lvalp, CORE_ADDR *addrp,
|
||||
int *realregp, gdb_byte *bufferp)
|
||||
struct frame_info *this_frame,
|
||||
int regnum)
|
||||
{
|
||||
trad_frame_get_prev_register (next_frame, this_trad_cache->prev_regs,
|
||||
regnum, optimizedp, lvalp, addrp, realregp,
|
||||
bufferp);
|
||||
return trad_frame_get_prev_register (this_frame, this_trad_cache->prev_regs,
|
||||
regnum);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -30,7 +30,7 @@ struct trad_frame_cache;
|
||||
The entire cache is populated in a single pass and then generic
|
||||
routines are used to extract the various cache values. */
|
||||
|
||||
struct trad_frame_cache *trad_frame_cache_zalloc (struct frame_info *next_frame);
|
||||
struct trad_frame_cache *trad_frame_cache_zalloc (struct frame_info *this_frame);
|
||||
|
||||
/* This frame's ID. */
|
||||
void trad_frame_set_id (struct trad_frame_cache *this_trad_cache,
|
||||
@@ -50,11 +50,9 @@ void trad_frame_set_reg_addr (struct trad_frame_cache *this_trad_cache,
|
||||
void trad_frame_set_reg_value (struct trad_frame_cache *this_cache,
|
||||
int regnum, LONGEST val);
|
||||
|
||||
void trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
|
||||
struct frame_info *next_frame,
|
||||
int regnum, int *optimizedp,
|
||||
enum lval_type *lvalp, CORE_ADDR *addrp,
|
||||
int *realregp, gdb_byte *bufferp);
|
||||
struct value *trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
|
||||
struct frame_info *this_frame,
|
||||
int regnum);
|
||||
|
||||
/* A traditional saved regs table, indexed by REGNUM, encoding where
|
||||
the value of REGNUM for the previous frame can be found in this
|
||||
@@ -107,14 +105,12 @@ int trad_frame_realreg_p (struct trad_frame_saved_reg this_saved_regs[],
|
||||
|
||||
|
||||
/* Return a freshly allocated (and initialized) trad_frame array. */
|
||||
struct trad_frame_saved_reg *trad_frame_alloc_saved_regs (struct frame_info *next_frame);
|
||||
struct trad_frame_saved_reg *trad_frame_alloc_saved_regs (struct frame_info *this_frame);
|
||||
|
||||
/* Given the trad_frame info, return the location of the specified
|
||||
register. */
|
||||
void trad_frame_get_prev_register (struct frame_info *next_frame,
|
||||
struct trad_frame_saved_reg this_saved_regs[],
|
||||
int regnum, int *optimizedp,
|
||||
enum lval_type *lvalp, CORE_ADDR *addrp,
|
||||
int *realregp, gdb_byte *bufferp);
|
||||
struct value *trad_frame_get_prev_register (struct frame_info *this_frame,
|
||||
struct trad_frame_saved_reg this_saved_regs[],
|
||||
int regnum);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -41,16 +41,16 @@ struct tramp_frame_cache
|
||||
};
|
||||
|
||||
static struct trad_frame_cache *
|
||||
tramp_frame_cache (struct frame_info *next_frame,
|
||||
tramp_frame_cache (struct frame_info *this_frame,
|
||||
void **this_cache)
|
||||
{
|
||||
CORE_ADDR pc = frame_pc_unwind (next_frame);
|
||||
CORE_ADDR pc = get_frame_pc (this_frame);
|
||||
struct tramp_frame_cache *tramp_cache = (*this_cache);
|
||||
if (tramp_cache->trad_cache == NULL)
|
||||
{
|
||||
tramp_cache->trad_cache = trad_frame_cache_zalloc (next_frame);
|
||||
tramp_cache->trad_cache = trad_frame_cache_zalloc (this_frame);
|
||||
tramp_cache->tramp_frame->init (tramp_cache->tramp_frame,
|
||||
next_frame,
|
||||
this_frame,
|
||||
tramp_cache->trad_cache,
|
||||
tramp_cache->func);
|
||||
}
|
||||
@@ -58,33 +58,28 @@ tramp_frame_cache (struct frame_info *next_frame,
|
||||
}
|
||||
|
||||
static void
|
||||
tramp_frame_this_id (struct frame_info *next_frame,
|
||||
tramp_frame_this_id (struct frame_info *this_frame,
|
||||
void **this_cache,
|
||||
struct frame_id *this_id)
|
||||
{
|
||||
struct trad_frame_cache *trad_cache
|
||||
= tramp_frame_cache (next_frame, this_cache);
|
||||
= tramp_frame_cache (this_frame, this_cache);
|
||||
trad_frame_get_id (trad_cache, this_id);
|
||||
}
|
||||
|
||||
static void
|
||||
tramp_frame_prev_register (struct frame_info *next_frame,
|
||||
static struct value *
|
||||
tramp_frame_prev_register (struct frame_info *this_frame,
|
||||
void **this_cache,
|
||||
int prev_regnum,
|
||||
int *optimizedp,
|
||||
enum lval_type * lvalp,
|
||||
CORE_ADDR *addrp,
|
||||
int *realnump, gdb_byte *valuep)
|
||||
int prev_regnum)
|
||||
{
|
||||
struct trad_frame_cache *trad_cache
|
||||
= tramp_frame_cache (next_frame, this_cache);
|
||||
trad_frame_get_register (trad_cache, next_frame, prev_regnum, optimizedp,
|
||||
lvalp, addrp, realnump, valuep);
|
||||
= tramp_frame_cache (this_frame, this_cache);
|
||||
return trad_frame_get_register (trad_cache, this_frame, prev_regnum);
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
tramp_frame_start (const struct tramp_frame *tramp,
|
||||
struct frame_info *next_frame, CORE_ADDR pc)
|
||||
struct frame_info *this_frame, CORE_ADDR pc)
|
||||
{
|
||||
int ti;
|
||||
/* Search through the trampoline for one that matches the
|
||||
@@ -99,7 +94,7 @@ tramp_frame_start (const struct tramp_frame *tramp,
|
||||
ULONGEST insn;
|
||||
if (tramp->insn[i].bytes == TRAMP_SENTINEL_INSN)
|
||||
return func;
|
||||
if (!safe_frame_unwind_memory (next_frame,
|
||||
if (!safe_frame_unwind_memory (this_frame,
|
||||
func + i * tramp->insn_size,
|
||||
buf, tramp->insn_size))
|
||||
break;
|
||||
@@ -114,11 +109,11 @@ tramp_frame_start (const struct tramp_frame *tramp,
|
||||
|
||||
static int
|
||||
tramp_frame_sniffer (const struct frame_unwind *self,
|
||||
struct frame_info *next_frame,
|
||||
struct frame_info *this_frame,
|
||||
void **this_cache)
|
||||
{
|
||||
const struct tramp_frame *tramp = self->unwind_data->tramp_frame;
|
||||
CORE_ADDR pc = frame_pc_unwind (next_frame);
|
||||
CORE_ADDR pc = get_frame_pc (this_frame);
|
||||
CORE_ADDR func;
|
||||
struct tramp_frame_cache *tramp_cache;
|
||||
|
||||
@@ -126,7 +121,7 @@ tramp_frame_sniffer (const struct frame_unwind *self,
|
||||
section, then this is not a trampoline. However, this assumption is
|
||||
false on HPUX which has a signal trampoline that has a name; it can
|
||||
also be false when using an alternative signal stack. */
|
||||
func = tramp_frame_start (tramp, next_frame, pc);
|
||||
func = tramp_frame_start (tramp, this_frame, pc);
|
||||
if (func == 0)
|
||||
return 0;
|
||||
tramp_cache = FRAME_OBSTACK_ZALLOC (struct tramp_frame_cache);
|
||||
|
||||
@@ -66,7 +66,7 @@ struct tramp_frame
|
||||
/* Initialize a trad-frame cache corresponding to the tramp-frame.
|
||||
FUNC is the address of the instruction TRAMP[0] in memory. */
|
||||
void (*init) (const struct tramp_frame *self,
|
||||
struct frame_info *next_frame,
|
||||
struct frame_info *this_frame,
|
||||
struct trad_frame_cache *this_cache,
|
||||
CORE_ADDR func);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user