2002-11-19 Andrew Cagney <ac131313@redhat.com>
* frame.h (FRAME_FP): Delete macro. (get_frame_base): New function declaration. * frame.c (get_frame_base): New function. (get_frame_id): Use ->frame. (frame_find_by_id): Rewrite to use get_frame_id. * blockframe.c: Use get_frame_base instead of FRAME_FP. * cris-tdep.c, d10v-tdep.c, findvar.c, h8500-tdep.c: Ditto. * hppa-tdep.c, i386-tdep.c, infcmd.c, infrun.c: Ditto. * m68hc11-tdep.c, m68k-tdep.c, mcore-tdep.c, mips-tdep.c: Ditto. * mn10200-tdep.c, mn10300-tdep.c, rs6000-tdep.c: Ditto. * sh-tdep.c, sparc-tdep.c, stack.c, tracepoint.c: Ditto. * v850-tdep.c, valops.c, z8k-tdep.c: Ditto.
This commit is contained in:
parent
e5d2af146b
commit
c193f6ac9c
25 changed files with 128 additions and 73 deletions
|
@ -1,3 +1,18 @@
|
||||||
|
2002-11-19 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
|
* frame.h (FRAME_FP): Delete macro.
|
||||||
|
(get_frame_base): New function declaration.
|
||||||
|
* frame.c (get_frame_base): New function.
|
||||||
|
(get_frame_id): Use ->frame.
|
||||||
|
(frame_find_by_id): Rewrite to use get_frame_id.
|
||||||
|
* blockframe.c: Use get_frame_base instead of FRAME_FP.
|
||||||
|
* cris-tdep.c, d10v-tdep.c, findvar.c, h8500-tdep.c: Ditto.
|
||||||
|
* hppa-tdep.c, i386-tdep.c, infcmd.c, infrun.c: Ditto.
|
||||||
|
* m68hc11-tdep.c, m68k-tdep.c, mcore-tdep.c, mips-tdep.c: Ditto.
|
||||||
|
* mn10200-tdep.c, mn10300-tdep.c, rs6000-tdep.c: Ditto.
|
||||||
|
* sh-tdep.c, sparc-tdep.c, stack.c, tracepoint.c: Ditto.
|
||||||
|
* v850-tdep.c, valops.c, z8k-tdep.c: Ditto.
|
||||||
|
|
||||||
2002-11-24 Andrew Cagney <ac131313@redhat.com>
|
2002-11-24 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
* arm-tdep.c (arm_gdbarch_init): Do not set get_saved_register.
|
* arm-tdep.c (arm_gdbarch_init): Do not set get_saved_register.
|
||||||
|
|
|
@ -681,29 +681,29 @@ cris_examine (CORE_ADDR ip, CORE_ADDR limit, struct frame_info *fi,
|
||||||
|
|
||||||
if (have_fp)
|
if (have_fp)
|
||||||
{
|
{
|
||||||
fi->saved_regs[FP_REGNUM] = FRAME_FP (fi);
|
fi->saved_regs[FP_REGNUM] = get_frame_base (fi);
|
||||||
|
|
||||||
/* Calculate the addresses. */
|
/* Calculate the addresses. */
|
||||||
for (regno = regsave; regno >= 0; regno--)
|
for (regno = regsave; regno >= 0; regno--)
|
||||||
{
|
{
|
||||||
fi->saved_regs[regno] = FRAME_FP (fi) - val;
|
fi->saved_regs[regno] = get_frame_base (fi) - val;
|
||||||
val -= 4;
|
val -= 4;
|
||||||
}
|
}
|
||||||
if (fi->extra_info->leaf_function)
|
if (fi->extra_info->leaf_function)
|
||||||
{
|
{
|
||||||
/* Set the register SP to contain the stack pointer of
|
/* Set the register SP to contain the stack pointer of
|
||||||
the caller. */
|
the caller. */
|
||||||
fi->saved_regs[SP_REGNUM] = FRAME_FP (fi) + 4;
|
fi->saved_regs[SP_REGNUM] = get_frame_base (fi) + 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Set the register SP to contain the stack pointer of
|
/* Set the register SP to contain the stack pointer of
|
||||||
the caller. */
|
the caller. */
|
||||||
fi->saved_regs[SP_REGNUM] = FRAME_FP (fi) + 8;
|
fi->saved_regs[SP_REGNUM] = get_frame_base (fi) + 8;
|
||||||
|
|
||||||
/* Set the register SRP to contain the return address of
|
/* Set the register SRP to contain the return address of
|
||||||
the caller. */
|
the caller. */
|
||||||
fi->saved_regs[SRP_REGNUM] = FRAME_FP (fi) + 4;
|
fi->saved_regs[SRP_REGNUM] = get_frame_base (fi) + 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ip;
|
return ip;
|
||||||
|
@ -1260,7 +1260,7 @@ cris_frame_chain (struct frame_info *fi)
|
||||||
}
|
}
|
||||||
else if (!inside_entry_file (fi->pc))
|
else if (!inside_entry_file (fi->pc))
|
||||||
{
|
{
|
||||||
return read_memory_unsigned_integer (FRAME_FP (fi), 4);
|
return read_memory_unsigned_integer (get_frame_base (fi), 4);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -547,7 +547,7 @@ do_d10v_pop_frame (struct frame_info *fi)
|
||||||
int regnum;
|
int regnum;
|
||||||
char raw_buffer[8];
|
char raw_buffer[8];
|
||||||
|
|
||||||
fp = FRAME_FP (fi);
|
fp = get_frame_base (fi);
|
||||||
/* fill out fsr with the address of where each */
|
/* fill out fsr with the address of where each */
|
||||||
/* register was stored in the frame */
|
/* register was stored in the frame */
|
||||||
d10v_frame_init_saved_regs (fi);
|
d10v_frame_init_saved_regs (fi);
|
||||||
|
|
|
@ -786,7 +786,7 @@ value_from_register (struct type *type, int regnum, struct frame_info *frame)
|
||||||
for some good purpose. */
|
for some good purpose. */
|
||||||
{
|
{
|
||||||
VALUE_LVAL (v) = lval_reg_frame_relative;
|
VALUE_LVAL (v) = lval_reg_frame_relative;
|
||||||
VALUE_FRAME (v) = FRAME_FP (frame);
|
VALUE_FRAME (v) = get_frame_base (frame);
|
||||||
VALUE_FRAME_REGNUM (v) = regnum;
|
VALUE_FRAME_REGNUM (v) = regnum;
|
||||||
}
|
}
|
||||||
else if (mem_stor)
|
else if (mem_stor)
|
||||||
|
|
26
gdb/frame.c
26
gdb/frame.c
|
@ -47,7 +47,7 @@ get_frame_id (struct frame_info *fi, struct frame_id *id)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
id->base = FRAME_FP (fi);
|
id->base = fi->frame;
|
||||||
id->pc = fi->pc;
|
id->pc = fi->pc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,19 +66,21 @@ frame_find_by_id (struct frame_id id)
|
||||||
frame != NULL;
|
frame != NULL;
|
||||||
frame = get_prev_frame (frame))
|
frame = get_prev_frame (frame))
|
||||||
{
|
{
|
||||||
if (INNER_THAN (FRAME_FP (frame), id.base))
|
struct frame_id this;
|
||||||
|
get_frame_id (frame, &this);
|
||||||
|
if (INNER_THAN (this.base, id.base))
|
||||||
/* ``inner/current < frame < id.base''. Keep looking along
|
/* ``inner/current < frame < id.base''. Keep looking along
|
||||||
the frame chain. */
|
the frame chain. */
|
||||||
continue;
|
continue;
|
||||||
if (INNER_THAN (id.base, FRAME_FP (frame)))
|
if (INNER_THAN (id.base, this.base))
|
||||||
/* ``inner/current < id.base < frame''. Oops, gone past it.
|
/* ``inner/current < id.base < frame''. Oops, gone past it.
|
||||||
Just give up. */
|
Just give up. */
|
||||||
return NULL;
|
return NULL;
|
||||||
/* FIXME: cagney/2002-04-21: This isn't sufficient. It should
|
/* FIXME: cagney/2002-04-21: This isn't sufficient. It should
|
||||||
use id.pc to check that the two frames belong to the same
|
use id.pc / this.pc to check that the two frames belong to
|
||||||
function. Otherwise we'll do things like match dummy frames
|
the same function. Otherwise we'll do things like match
|
||||||
or mis-match frameless functions. However, until someone
|
dummy frames or mis-match frameless functions. However,
|
||||||
notices, stick with the existing behavour. */
|
until someone notices, stick with the existing behavour. */
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -826,7 +828,7 @@ get_prev_frame (struct frame_info *next_frame)
|
||||||
/* FIXME: 2002-11-09: There isn't any reason to special case this
|
/* FIXME: 2002-11-09: There isn't any reason to special case this
|
||||||
edge condition. Instead the per-architecture code should hande
|
edge condition. Instead the per-architecture code should hande
|
||||||
it locally. */
|
it locally. */
|
||||||
address = FRAME_FP (next_frame);
|
address = get_frame_base (next_frame);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Two macros defined in tm.h specify the machine-dependent
|
/* Two macros defined in tm.h specify the machine-dependent
|
||||||
|
@ -1018,6 +1020,14 @@ get_frame_pc (struct frame_info *frame)
|
||||||
return frame->pc;
|
return frame->pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Per "frame.h", return the ``address'' of the frame. Code should
|
||||||
|
really be using get_frame_id(). */
|
||||||
|
CORE_ADDR
|
||||||
|
get_frame_base (struct frame_info *fi)
|
||||||
|
{
|
||||||
|
return fi->frame;
|
||||||
|
}
|
||||||
|
|
||||||
/* Level of the selected frame: 0 for innermost, 1 for its caller, ...
|
/* Level of the selected frame: 0 for innermost, 1 for its caller, ...
|
||||||
or -1 for a NULL frame. */
|
or -1 for a NULL frame. */
|
||||||
|
|
||||||
|
|
64
gdb/frame.h
64
gdb/frame.h
|
@ -85,6 +85,49 @@ extern struct frame_info *frame_find_by_id (struct frame_id id);
|
||||||
this frame. */
|
this frame. */
|
||||||
extern CORE_ADDR get_frame_pc (struct frame_info *);
|
extern CORE_ADDR get_frame_pc (struct frame_info *);
|
||||||
|
|
||||||
|
/* Return the frame address from FI. Except in the machine-dependent
|
||||||
|
*FRAME* macros, a frame address has no defined meaning other than
|
||||||
|
as a magic cookie which identifies a frame over calls to the
|
||||||
|
inferior (um, SEE NOTE BELOW). The only known exception is
|
||||||
|
inferior.h (PC_IN_CALL_DUMMY) [ON_STACK]; see comments there. You
|
||||||
|
cannot assume that a frame address contains enough information to
|
||||||
|
reconstruct the frame; if you want more than just to identify the
|
||||||
|
frame (e.g. be able to fetch variables relative to that frame),
|
||||||
|
then save the whole struct frame_info (and the next struct
|
||||||
|
frame_info, since the latter is used for fetching variables on some
|
||||||
|
machines) (um, again SEE NOTE BELOW).
|
||||||
|
|
||||||
|
NOTE: cagney/2002-11-18: Actually, the frame address isn't
|
||||||
|
sufficient for identifying a frame, and the counter examples are
|
||||||
|
wrong!
|
||||||
|
|
||||||
|
Code that needs to (re)identify a frame must use get_frame_id() and
|
||||||
|
frame_find_by_id() (and in the future, a frame_compare() function
|
||||||
|
instead of INNER_THAN()). Two reasons: an architecture (e.g.,
|
||||||
|
ia64) can have more than one frame address (due to multiple stack
|
||||||
|
pointers) (frame ID is going to be expanded to accomodate this);
|
||||||
|
successive frameless function calls can only be differientated by
|
||||||
|
comparing both the frame's base and the frame's enclosing function
|
||||||
|
(frame_find_by_id() is going to be modified to perform this test).
|
||||||
|
|
||||||
|
The generic dummy frame version of PC_IN_CALL_DUMMY() is able to
|
||||||
|
identify a dummy frame using only the PC value. So the frame
|
||||||
|
address is not needed. In fact, most PC_IN_CALL_DUMMY() calls now
|
||||||
|
pass zero as the frame/sp values as the caller knows that those
|
||||||
|
values won't be used. Once all architectures are using generic
|
||||||
|
dummy frames, PC_IN_CALL_DUMMY() can drop the sp/frame parameters.
|
||||||
|
When it comes to finding a dummy frame, the next frame's frame ID
|
||||||
|
(with out duing an unwind) can be used (ok, could if it wasn't for
|
||||||
|
the need to change the way the PPC defined frame base in a strange
|
||||||
|
way).
|
||||||
|
|
||||||
|
Modern architectures should be using something like dwarf2's
|
||||||
|
location expression to describe where a variable lives. Such
|
||||||
|
expressions specify their own debug info centric frame address.
|
||||||
|
Consequently, a generic frame address is pretty meaningless. */
|
||||||
|
|
||||||
|
extern CORE_ADDR get_frame_base (struct frame_info *);
|
||||||
|
|
||||||
/* Return the per-frame unique identifer. Can be used to relocate a
|
/* Return the per-frame unique identifer. Can be used to relocate a
|
||||||
frame after a frame cache flush (and other similar operations). */
|
frame after a frame cache flush (and other similar operations). */
|
||||||
extern void get_frame_id (struct frame_info *fi, struct frame_id *id);
|
extern void get_frame_id (struct frame_info *fi, struct frame_id *id);
|
||||||
|
@ -235,9 +278,10 @@ struct frame_saved_regs
|
||||||
|
|
||||||
struct frame_info
|
struct frame_info
|
||||||
{
|
{
|
||||||
/* Nominal address of the frame described. See comments at FRAME_FP
|
/* Nominal address of the frame described. See comments at
|
||||||
about what this means outside the *FRAME* macros; in the *FRAME*
|
get_frame_base() about what this means outside the *FRAME*
|
||||||
macros, it can mean whatever makes most sense for this machine. */
|
macros; in the *FRAME* macros, it can mean whatever makes most
|
||||||
|
sense for this machine. */
|
||||||
CORE_ADDR frame;
|
CORE_ADDR frame;
|
||||||
|
|
||||||
/* Address at which execution is occurring in this frame.
|
/* Address at which execution is occurring in this frame.
|
||||||
|
@ -334,20 +378,6 @@ enum print_what
|
||||||
extern void *frame_obstack_alloc (unsigned long size);
|
extern void *frame_obstack_alloc (unsigned long size);
|
||||||
extern void frame_saved_regs_zalloc (struct frame_info *);
|
extern void frame_saved_regs_zalloc (struct frame_info *);
|
||||||
|
|
||||||
/* Return the frame address from FI. Except in the machine-dependent
|
|
||||||
*FRAME* macros, a frame address has no defined meaning other than
|
|
||||||
as a magic cookie which identifies a frame over calls to the
|
|
||||||
inferior. The only known exception is inferior.h
|
|
||||||
(PC_IN_CALL_DUMMY) [ON_STACK]; see comments there. You cannot
|
|
||||||
assume that a frame address contains enough information to
|
|
||||||
reconstruct the frame; if you want more than just to identify the
|
|
||||||
frame (e.g. be able to fetch variables relative to that frame),
|
|
||||||
then save the whole struct frame_info (and the next struct
|
|
||||||
frame_info, since the latter is used for fetching variables on some
|
|
||||||
machines). */
|
|
||||||
|
|
||||||
#define FRAME_FP(fi) ((fi)->frame)
|
|
||||||
|
|
||||||
/* Define a default FRAME_CHAIN_VALID, in the form that is suitable for most
|
/* Define a default FRAME_CHAIN_VALID, in the form that is suitable for most
|
||||||
targets. If FRAME_CHAIN_VALID returns zero it means that the given frame
|
targets. If FRAME_CHAIN_VALID returns zero it means that the given frame
|
||||||
is the outermost one and has no caller.
|
is the outermost one and has no caller.
|
||||||
|
|
|
@ -117,7 +117,7 @@ CORE_ADDR
|
||||||
h8500_frame_chain (struct frame_info *thisframe)
|
h8500_frame_chain (struct frame_info *thisframe)
|
||||||
{
|
{
|
||||||
if (!inside_entry_file (thisframe->pc))
|
if (!inside_entry_file (thisframe->pc))
|
||||||
return (read_memory_integer (FRAME_FP (thisframe), PTR_SIZE));
|
return (read_memory_integer (get_frame_base (thisframe), PTR_SIZE));
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ NEXT_PROLOGUE_INSN (CORE_ADDR addr, CORE_ADDR lim, char *pword1)
|
||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
frame_saved_pc (struct frame_info *frame)
|
frame_saved_pc (struct frame_info *frame)
|
||||||
{
|
{
|
||||||
return read_memory_integer (FRAME_FP (frame) + 2, PTR_SIZE);
|
return read_memory_integer (get_frame_base (frame) + 2, PTR_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -1532,7 +1532,7 @@ hppa_pop_frame (void)
|
||||||
struct frame_saved_regs fsr;
|
struct frame_saved_regs fsr;
|
||||||
double freg_buffer;
|
double freg_buffer;
|
||||||
|
|
||||||
fp = FRAME_FP (frame);
|
fp = get_frame_base (frame);
|
||||||
get_frame_saved_regs (frame, &fsr);
|
get_frame_saved_regs (frame, &fsr);
|
||||||
|
|
||||||
#ifndef NO_PC_SPACE_QUEUE_RESTORE
|
#ifndef NO_PC_SPACE_QUEUE_RESTORE
|
||||||
|
|
|
@ -860,7 +860,7 @@ i386_do_pop_frame (struct frame_info *frame)
|
||||||
int regnum;
|
int regnum;
|
||||||
char regbuf[I386_MAX_REGISTER_SIZE];
|
char regbuf[I386_MAX_REGISTER_SIZE];
|
||||||
|
|
||||||
fp = FRAME_FP (frame);
|
fp = get_frame_base (frame);
|
||||||
i386_frame_init_saved_regs (frame);
|
i386_frame_init_saved_regs (frame);
|
||||||
|
|
||||||
for (regnum = 0; regnum < NUM_REGS; regnum++)
|
for (regnum = 0; regnum < NUM_REGS; regnum++)
|
||||||
|
|
|
@ -618,7 +618,7 @@ step_1 (int skip_subroutines, int single_inst, char *count_string)
|
||||||
frame = get_current_frame ();
|
frame = get_current_frame ();
|
||||||
if (!frame) /* Avoid coredump here. Why tho? */
|
if (!frame) /* Avoid coredump here. Why tho? */
|
||||||
error ("No current frame");
|
error ("No current frame");
|
||||||
step_frame_address = FRAME_FP (frame);
|
step_frame_address = get_frame_base (frame);
|
||||||
step_sp = read_sp ();
|
step_sp = read_sp ();
|
||||||
|
|
||||||
if (!single_inst)
|
if (!single_inst)
|
||||||
|
@ -733,7 +733,7 @@ step_once (int skip_subroutines, int single_inst, int count)
|
||||||
frame = get_current_frame ();
|
frame = get_current_frame ();
|
||||||
if (!frame) /* Avoid coredump here. Why tho? */
|
if (!frame) /* Avoid coredump here. Why tho? */
|
||||||
error ("No current frame");
|
error ("No current frame");
|
||||||
step_frame_address = FRAME_FP (frame);
|
step_frame_address = get_frame_base (frame);
|
||||||
step_sp = read_sp ();
|
step_sp = read_sp ();
|
||||||
|
|
||||||
if (!single_inst)
|
if (!single_inst)
|
||||||
|
@ -1096,7 +1096,7 @@ until_next_command (int from_tty)
|
||||||
}
|
}
|
||||||
|
|
||||||
step_over_calls = STEP_OVER_ALL;
|
step_over_calls = STEP_OVER_ALL;
|
||||||
step_frame_address = FRAME_FP (frame);
|
step_frame_address = get_frame_base (frame);
|
||||||
step_sp = read_sp ();
|
step_sp = read_sp ();
|
||||||
|
|
||||||
step_multi = 0; /* Only one call to proceed */
|
step_multi = 0; /* Only one call to proceed */
|
||||||
|
|
16
gdb/infrun.c
16
gdb/infrun.c
|
@ -2053,7 +2053,7 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
|| trap_expected
|
|| trap_expected
|
||||||
|| (!CALL_DUMMY_BREAKPOINT_OFFSET_P
|
|| (!CALL_DUMMY_BREAKPOINT_OFFSET_P
|
||||||
&& PC_IN_CALL_DUMMY (stop_pc, read_sp (),
|
&& PC_IN_CALL_DUMMY (stop_pc, read_sp (),
|
||||||
FRAME_FP (get_current_frame ())))
|
get_frame_base (get_current_frame ())))
|
||||||
|| (step_range_end && step_resume_breakpoint == NULL));
|
|| (step_range_end && step_resume_breakpoint == NULL));
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -2064,7 +2064,7 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
check here as well as above. */
|
check here as well as above. */
|
||||||
|| (!CALL_DUMMY_BREAKPOINT_OFFSET_P
|
|| (!CALL_DUMMY_BREAKPOINT_OFFSET_P
|
||||||
&& PC_IN_CALL_DUMMY (stop_pc, read_sp (),
|
&& PC_IN_CALL_DUMMY (stop_pc, read_sp (),
|
||||||
FRAME_FP
|
get_frame_base
|
||||||
(get_current_frame
|
(get_current_frame
|
||||||
()))));
|
()))));
|
||||||
if (!ecs->random_signal)
|
if (!ecs->random_signal)
|
||||||
|
@ -2255,7 +2255,7 @@ process_event_stop_test:
|
||||||
#if 0
|
#if 0
|
||||||
/* FIXME - Need to implement nested temporary breakpoints */
|
/* FIXME - Need to implement nested temporary breakpoints */
|
||||||
if (step_over_calls
|
if (step_over_calls
|
||||||
&& (INNER_THAN (FRAME_FP (get_current_frame ()),
|
&& (INNER_THAN (get_frame_base (get_current_frame ()),
|
||||||
step_frame_address)))
|
step_frame_address)))
|
||||||
{
|
{
|
||||||
ecs->another_trap = 1;
|
ecs->another_trap = 1;
|
||||||
|
@ -2466,7 +2466,7 @@ process_event_stop_test:
|
||||||
case she'd better know what she's doing. */
|
case she'd better know what she's doing. */
|
||||||
|
|
||||||
if (CALL_DUMMY_HAS_COMPLETED (stop_pc, read_sp (),
|
if (CALL_DUMMY_HAS_COMPLETED (stop_pc, read_sp (),
|
||||||
FRAME_FP (get_current_frame ()))
|
get_frame_base (get_current_frame ()))
|
||||||
&& !step_range_end)
|
&& !step_range_end)
|
||||||
{
|
{
|
||||||
stop_print_frame = 0;
|
stop_print_frame = 0;
|
||||||
|
@ -2567,7 +2567,7 @@ process_event_stop_test:
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
CORE_ADDR current_frame = FRAME_FP (get_current_frame ());
|
CORE_ADDR current_frame = get_frame_base (get_current_frame ());
|
||||||
|
|
||||||
if (INNER_THAN (current_frame, step_frame_address))
|
if (INNER_THAN (current_frame, step_frame_address))
|
||||||
{
|
{
|
||||||
|
@ -2838,7 +2838,7 @@ process_event_stop_test:
|
||||||
}
|
}
|
||||||
step_range_start = ecs->sal.pc;
|
step_range_start = ecs->sal.pc;
|
||||||
step_range_end = ecs->sal.end;
|
step_range_end = ecs->sal.end;
|
||||||
step_frame_address = FRAME_FP (get_current_frame ());
|
step_frame_address = get_frame_base (get_current_frame ());
|
||||||
ecs->current_line = ecs->sal.line;
|
ecs->current_line = ecs->sal.line;
|
||||||
ecs->current_symtab = ecs->sal.symtab;
|
ecs->current_symtab = ecs->sal.symtab;
|
||||||
|
|
||||||
|
@ -2846,7 +2846,7 @@ process_event_stop_test:
|
||||||
of a line of the caller, continue stepping, but step_frame_address
|
of a line of the caller, continue stepping, but step_frame_address
|
||||||
must be modified to current frame */
|
must be modified to current frame */
|
||||||
{
|
{
|
||||||
CORE_ADDR current_frame = FRAME_FP (get_current_frame ());
|
CORE_ADDR current_frame = get_frame_base (get_current_frame ());
|
||||||
if (!(INNER_THAN (current_frame, step_frame_address)))
|
if (!(INNER_THAN (current_frame, step_frame_address)))
|
||||||
step_frame_address = current_frame;
|
step_frame_address = current_frame;
|
||||||
}
|
}
|
||||||
|
@ -3353,7 +3353,7 @@ normal_stop (void)
|
||||||
{
|
{
|
||||||
case PRINT_UNKNOWN:
|
case PRINT_UNKNOWN:
|
||||||
if (stop_step
|
if (stop_step
|
||||||
&& step_frame_address == FRAME_FP (get_current_frame ())
|
&& step_frame_address == get_frame_base (get_current_frame ())
|
||||||
&& step_start_function == find_pc_function (stop_pc))
|
&& step_start_function == find_pc_function (stop_pc))
|
||||||
source_flag = SRC_LINE; /* finished step, just print source line */
|
source_flag = SRC_LINE; /* finished step, just print source line */
|
||||||
else
|
else
|
||||||
|
|
|
@ -438,7 +438,7 @@ m68hc11_pop_frame (void)
|
||||||
generic_pop_dummy_frame ();
|
generic_pop_dummy_frame ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fp = FRAME_FP (frame);
|
fp = get_frame_base (frame);
|
||||||
FRAME_INIT_SAVED_REGS (frame);
|
FRAME_INIT_SAVED_REGS (frame);
|
||||||
|
|
||||||
/* Copy regs from where they were saved in the frame. */
|
/* Copy regs from where they were saved in the frame. */
|
||||||
|
|
|
@ -472,7 +472,7 @@ m68k_pop_frame (void)
|
||||||
register int regnum;
|
register int regnum;
|
||||||
char raw_buffer[12];
|
char raw_buffer[12];
|
||||||
|
|
||||||
fp = FRAME_FP (frame);
|
fp = get_frame_base (frame);
|
||||||
m68k_frame_init_saved_regs (frame);
|
m68k_frame_init_saved_regs (frame);
|
||||||
for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--)
|
for (regnum = FP0_REGNUM + 7; regnum >= FP0_REGNUM; regnum--)
|
||||||
{
|
{
|
||||||
|
|
|
@ -810,7 +810,7 @@ mcore_pop_frame (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Actually cut back the stack. */
|
/* Actually cut back the stack. */
|
||||||
write_register (SP_REGNUM, FRAME_FP (fi));
|
write_register (SP_REGNUM, get_frame_base (fi));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finally, throw away any cached frame information. */
|
/* Finally, throw away any cached frame information. */
|
||||||
|
|
|
@ -3813,7 +3813,7 @@ mips_pop_frame (void)
|
||||||
{
|
{
|
||||||
register int regnum;
|
register int regnum;
|
||||||
struct frame_info *frame = get_current_frame ();
|
struct frame_info *frame = get_current_frame ();
|
||||||
CORE_ADDR new_sp = FRAME_FP (frame);
|
CORE_ADDR new_sp = get_frame_base (frame);
|
||||||
mips_extra_func_info_t proc_desc = frame->extra_info->proc_desc;
|
mips_extra_func_info_t proc_desc = frame->extra_info->proc_desc;
|
||||||
|
|
||||||
if (USE_GENERIC_DUMMY_FRAMES
|
if (USE_GENERIC_DUMMY_FRAMES
|
||||||
|
|
|
@ -703,7 +703,7 @@ mn10200_pop_frame (struct frame_info *frame)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Actually cut back the stack. */
|
/* Actually cut back the stack. */
|
||||||
write_register (SP_REGNUM, FRAME_FP (frame));
|
write_register (SP_REGNUM, get_frame_base (frame));
|
||||||
|
|
||||||
/* Don't we need to set the PC?!? XXX FIXME. */
|
/* Don't we need to set the PC?!? XXX FIXME. */
|
||||||
}
|
}
|
||||||
|
|
|
@ -738,7 +738,7 @@ mn10300_pop_frame_regular (struct frame_info *frame)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Actually cut back the stack. */
|
/* Actually cut back the stack. */
|
||||||
write_register (SP_REGNUM, FRAME_FP (frame));
|
write_register (SP_REGNUM, get_frame_base (frame));
|
||||||
|
|
||||||
/* Don't we need to set the PC?!? XXX FIXME. */
|
/* Don't we need to set the PC?!? XXX FIXME. */
|
||||||
}
|
}
|
||||||
|
|
|
@ -956,7 +956,7 @@ rs6000_pop_frame (void)
|
||||||
int ii, wordsize;
|
int ii, wordsize;
|
||||||
|
|
||||||
pc = read_pc ();
|
pc = read_pc ();
|
||||||
sp = FRAME_FP (frame);
|
sp = get_frame_base (frame);
|
||||||
|
|
||||||
if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
|
if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
|
||||||
{
|
{
|
||||||
|
@ -1761,7 +1761,7 @@ rs6000_frame_chain (struct frame_info *thisframe)
|
||||||
&& FRAMELESS_FUNCTION_INVOCATION (thisframe))
|
&& FRAMELESS_FUNCTION_INVOCATION (thisframe))
|
||||||
/* A frameless function interrupted by a signal did not change the
|
/* A frameless function interrupted by a signal did not change the
|
||||||
frame pointer. */
|
frame pointer. */
|
||||||
fp = FRAME_FP (thisframe);
|
fp = get_frame_base (thisframe);
|
||||||
else
|
else
|
||||||
fp = read_memory_addr ((thisframe)->frame, wordsize);
|
fp = read_memory_addr ((thisframe)->frame, wordsize);
|
||||||
return fp;
|
return fp;
|
||||||
|
|
|
@ -930,7 +930,7 @@ sh_frame_chain (struct frame_info *frame)
|
||||||
if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
|
if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
|
||||||
return frame->frame; /* dummy frame same as caller's frame */
|
return frame->frame; /* dummy frame same as caller's frame */
|
||||||
if (frame->pc && !inside_entry_file (frame->pc))
|
if (frame->pc && !inside_entry_file (frame->pc))
|
||||||
return read_memory_integer (FRAME_FP (frame) + frame->extra_info->f_offset, 4);
|
return read_memory_integer (get_frame_base (frame) + frame->extra_info->f_offset, 4);
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -975,7 +975,7 @@ sh64_frame_chain (struct frame_info *frame)
|
||||||
size = 4;
|
size = 4;
|
||||||
else
|
else
|
||||||
size = REGISTER_RAW_SIZE (translate_insn_rn (FP_REGNUM, media_mode));
|
size = REGISTER_RAW_SIZE (translate_insn_rn (FP_REGNUM, media_mode));
|
||||||
return read_memory_integer (FRAME_FP (frame) + frame->extra_info->f_offset, size);
|
return read_memory_integer (get_frame_base (frame) + frame->extra_info->f_offset, size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1912,7 +1912,7 @@ sh_pop_frame (void)
|
||||||
generic_pop_dummy_frame ();
|
generic_pop_dummy_frame ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fp = FRAME_FP (frame);
|
fp = get_frame_base (frame);
|
||||||
FRAME_INIT_SAVED_REGS (frame);
|
FRAME_INIT_SAVED_REGS (frame);
|
||||||
|
|
||||||
/* Copy regs from where they were saved in the frame */
|
/* Copy regs from where they were saved in the frame */
|
||||||
|
@ -1942,7 +1942,7 @@ sh64_pop_frame (void)
|
||||||
generic_pop_dummy_frame ();
|
generic_pop_dummy_frame ();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fp = FRAME_FP (frame);
|
fp = get_frame_base (frame);
|
||||||
FRAME_INIT_SAVED_REGS (frame);
|
FRAME_INIT_SAVED_REGS (frame);
|
||||||
|
|
||||||
/* Copy regs from where they were saved in the frame */
|
/* Copy regs from where they were saved in the frame */
|
||||||
|
|
|
@ -320,7 +320,7 @@ sparc_init_extra_frame_info (int fromleaf, struct frame_info *fi)
|
||||||
{
|
{
|
||||||
/* A frameless function interrupted by a signal did not change
|
/* A frameless function interrupted by a signal did not change
|
||||||
the frame pointer, fix up frame pointer accordingly. */
|
the frame pointer, fix up frame pointer accordingly. */
|
||||||
fi->frame = FRAME_FP (fi->next);
|
fi->frame = get_frame_base (fi->next);
|
||||||
fi->extra_info->bottom = fi->next->extra_info->bottom;
|
fi->extra_info->bottom = fi->next->extra_info->bottom;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -848,7 +848,7 @@ sparc_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
|
||||||
|
|
||||||
if (frame1->pc >= (frame1->extra_info->bottom ?
|
if (frame1->pc >= (frame1->extra_info->bottom ?
|
||||||
frame1->extra_info->bottom : read_sp ())
|
frame1->extra_info->bottom : read_sp ())
|
||||||
&& frame1->pc <= FRAME_FP (frame1))
|
&& frame1->pc <= get_frame_base (frame1))
|
||||||
{
|
{
|
||||||
/* Dummy frame. All but the window regs are in there somewhere.
|
/* Dummy frame. All but the window regs are in there somewhere.
|
||||||
The window registers are saved on the stack, just like in a
|
The window registers are saved on the stack, just like in a
|
||||||
|
@ -1112,7 +1112,7 @@ static void
|
||||||
sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
|
sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
|
||||||
{
|
{
|
||||||
register int regnum;
|
register int regnum;
|
||||||
CORE_ADDR frame_addr = FRAME_FP (fi);
|
CORE_ADDR frame_addr = get_frame_base (fi);
|
||||||
|
|
||||||
if (!fi)
|
if (!fi)
|
||||||
internal_error (__FILE__, __LINE__,
|
internal_error (__FILE__, __LINE__,
|
||||||
|
@ -1122,7 +1122,7 @@ sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
|
||||||
|
|
||||||
if (fi->pc >= (fi->extra_info->bottom ?
|
if (fi->pc >= (fi->extra_info->bottom ?
|
||||||
fi->extra_info->bottom : read_sp ())
|
fi->extra_info->bottom : read_sp ())
|
||||||
&& fi->pc <= FRAME_FP (fi))
|
&& fi->pc <= get_frame_base (fi))
|
||||||
{
|
{
|
||||||
/* Dummy frame. All but the window regs are in there somewhere. */
|
/* Dummy frame. All but the window regs are in there somewhere. */
|
||||||
for (regnum = G1_REGNUM; regnum < G1_REGNUM + 7; regnum++)
|
for (regnum = G1_REGNUM; regnum < G1_REGNUM + 7; regnum++)
|
||||||
|
@ -1205,7 +1205,7 @@ sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
|
||||||
}
|
}
|
||||||
/* Otherwise, whatever we would get from ptrace(GETREGS) is accurate */
|
/* Otherwise, whatever we would get from ptrace(GETREGS) is accurate */
|
||||||
/* FIXME -- should this adjust for the sparc64 offset? */
|
/* FIXME -- should this adjust for the sparc64 offset? */
|
||||||
saved_regs_addr[SP_REGNUM] = FRAME_FP (fi);
|
saved_regs_addr[SP_REGNUM] = get_frame_base (fi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Discard from the stack the innermost frame, restoring all saved registers.
|
/* Discard from the stack the innermost frame, restoring all saved registers.
|
||||||
|
|
|
@ -1737,7 +1737,7 @@ return_command (char *retval_exp, int from_tty)
|
||||||
if (selected_frame == NULL)
|
if (selected_frame == NULL)
|
||||||
error ("No selected frame.");
|
error ("No selected frame.");
|
||||||
thisfun = get_frame_function (selected_frame);
|
thisfun = get_frame_function (selected_frame);
|
||||||
selected_frame_addr = FRAME_FP (selected_frame);
|
selected_frame_addr = get_frame_base (selected_frame);
|
||||||
selected_frame_pc = selected_frame->pc;
|
selected_frame_pc = selected_frame->pc;
|
||||||
|
|
||||||
/* Compute the return value (if any -- possibly getting errors here). */
|
/* Compute the return value (if any -- possibly getting errors here). */
|
||||||
|
@ -1799,7 +1799,7 @@ return_command (char *retval_exp, int from_tty)
|
||||||
/* If we are at the end of a call dummy now, pop the dummy frame too. */
|
/* If we are at the end of a call dummy now, pop the dummy frame too. */
|
||||||
|
|
||||||
if (CALL_DUMMY_HAS_COMPLETED (read_pc(), read_sp (),
|
if (CALL_DUMMY_HAS_COMPLETED (read_pc(), read_sp (),
|
||||||
FRAME_FP (get_current_frame ())))
|
get_frame_base (get_current_frame ())))
|
||||||
POP_FRAME;
|
POP_FRAME;
|
||||||
|
|
||||||
/* If interactive, print the frame that is now current. */
|
/* If interactive, print the frame that is now current. */
|
||||||
|
|
|
@ -1862,7 +1862,7 @@ finish_tfind_command (char *msg,
|
||||||
struct symbol *old_func;
|
struct symbol *old_func;
|
||||||
char *reply;
|
char *reply;
|
||||||
|
|
||||||
old_frame_addr = FRAME_FP (get_current_frame ());
|
old_frame_addr = get_frame_base (get_current_frame ());
|
||||||
old_func = find_pc_function (read_pc ());
|
old_func = find_pc_function (read_pc ());
|
||||||
|
|
||||||
putpkt (msg);
|
putpkt (msg);
|
||||||
|
@ -1948,8 +1948,8 @@ finish_tfind_command (char *msg,
|
||||||
|
|
||||||
if (old_func == find_pc_function (read_pc ()) &&
|
if (old_func == find_pc_function (read_pc ()) &&
|
||||||
(old_frame_addr == 0 ||
|
(old_frame_addr == 0 ||
|
||||||
FRAME_FP (get_current_frame ()) == 0 ||
|
get_frame_base (get_current_frame ()) == 0 ||
|
||||||
old_frame_addr == FRAME_FP (get_current_frame ())))
|
old_frame_addr == get_frame_base (get_current_frame ())))
|
||||||
source_only = -1;
|
source_only = -1;
|
||||||
else
|
else
|
||||||
source_only = 1;
|
source_only = 1;
|
||||||
|
|
|
@ -895,7 +895,7 @@ v850_pop_frame (void)
|
||||||
read_memory_unsigned_integer (frame->saved_regs[regnum],
|
read_memory_unsigned_integer (frame->saved_regs[regnum],
|
||||||
v850_register_raw_size (regnum)));
|
v850_register_raw_size (regnum)));
|
||||||
|
|
||||||
write_register (E_SP_REGNUM, FRAME_FP (frame));
|
write_register (E_SP_REGNUM, get_frame_base (frame));
|
||||||
}
|
}
|
||||||
|
|
||||||
flush_cached_frames ();
|
flush_cached_frames ();
|
||||||
|
|
|
@ -660,7 +660,7 @@ value_assign (struct value *toval, struct value *fromval)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (frame = get_current_frame ();
|
for (frame = get_current_frame ();
|
||||||
frame && FRAME_FP (frame) != VALUE_FRAME (toval);
|
frame && get_frame_base (frame) != VALUE_FRAME (toval);
|
||||||
frame = get_prev_frame (frame))
|
frame = get_prev_frame (frame))
|
||||||
;
|
;
|
||||||
value_reg = VALUE_FRAME_REGNUM (toval);
|
value_reg = VALUE_FRAME_REGNUM (toval);
|
||||||
|
|
|
@ -249,7 +249,7 @@ frame_find_saved_regs (struct frame_info *fip, struct frame_saved_regs *fsrp)
|
||||||
pc = skip_adjust (get_pc_function_start (fip->pc), &locals);
|
pc = skip_adjust (get_pc_function_start (fip->pc), &locals);
|
||||||
|
|
||||||
{
|
{
|
||||||
adr = FRAME_FP (fip) - locals;
|
adr = get_frame_base (fip) - locals;
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
int word = read_memory_short (pc);
|
int word = read_memory_short (pc);
|
||||||
|
|
Loading…
Add table
Reference in a new issue