2002-04-24 David S. Miller <davem@redhat.com>

* sparc-tdep.c (sparc_gdbarch_skip_prologue): Kill, duplicates
	sparc_skip_prologue.
	(sparc_skip_prologue): Kill frameless_p arg, and use line number
	information to find prologue when possible.
	(sparc_prologue_frameless_p): Call examine_prologue directly.
	(sparc_gdbarch_init): Update set_gdbarch_skip_prologue call.
	* config/sparc/tm-sparc.h (sparc_skip_prologue): Update for killed
	second argument.
	(SKIP_PROLOGUE): Likewise.
This commit is contained in:
David S. Miller 2002-04-26 01:56:04 +00:00
parent 15d72a927a
commit f510d44e69
3 changed files with 36 additions and 15 deletions

View file

@ -1,3 +1,15 @@
2002-04-24 David S. Miller <davem@redhat.com>
* sparc-tdep.c (sparc_gdbarch_skip_prologue): Kill, duplicates
sparc_skip_prologue.
(sparc_skip_prologue): Kill frameless_p arg, and use line number
information to find prologue when possible.
(sparc_prologue_frameless_p): Call examine_prologue directly.
(sparc_gdbarch_init): Update set_gdbarch_skip_prologue call.
* config/sparc/tm-sparc.h (sparc_skip_prologue): Update for killed
second argument.
(SKIP_PROLOGUE): Likewise.
2002-04-25 Jason Thorpe <thorpej@wasabisystems.com> 2002-04-25 Jason Thorpe <thorpej@wasabisystems.com>
* alpha-tdep.c (alpha_skip_prologue_internal): Remove * alpha-tdep.c (alpha_skip_prologue_internal): Remove

View file

@ -250,8 +250,8 @@ extern int sparc_intreg_size (void);
/* Advance PC across any function entry prologue instructions /* Advance PC across any function entry prologue instructions
to reach some "real" code. */ to reach some "real" code. */
extern CORE_ADDR sparc_skip_prologue (CORE_ADDR, int); extern CORE_ADDR sparc_skip_prologue (CORE_ADDR);
#define SKIP_PROLOGUE(PC) sparc_skip_prologue (PC, 0) #define SKIP_PROLOGUE(PC) sparc_skip_prologue (PC)
/* Immediately after a function call, return the saved pc. /* Immediately after a function call, return the saved pc.
Can't go through the frames for this because on some machines Can't go through the frames for this because on some machines

View file

@ -685,10 +685,28 @@ examine_prologue (CORE_ADDR start_pc, int frameless_p, struct frame_info *fi,
return pc; return pc;
} }
/* Advance PC across any function entry prologue instructions to reach
some "real" code. */
CORE_ADDR CORE_ADDR
sparc_skip_prologue (CORE_ADDR start_pc, int frameless_p) sparc_skip_prologue (CORE_ADDR start_pc)
{ {
return examine_prologue (start_pc, frameless_p, NULL, NULL); struct symtab_and_line sal;
CORE_ADDR func_start, func_end;
/* This is the preferred method, find the end of the prologue by
using the debugging information. */
if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
{
sal = find_pc_line (func_start, 0);
if (sal.end < func_end
&& start_pc <= sal.end)
return sal.end;
}
/* Oh well, examine the code by hand. */
return examine_prologue (start_pc, 0, NULL, NULL);
} }
/* Is the prologue at IP frameless? */ /* Is the prologue at IP frameless? */
@ -696,7 +714,7 @@ sparc_skip_prologue (CORE_ADDR start_pc, int frameless_p)
int int
sparc_prologue_frameless_p (CORE_ADDR ip) sparc_prologue_frameless_p (CORE_ADDR ip)
{ {
return ip == sparc_skip_prologue (ip, 1); return ip == examine_prologue (ip, 1, NULL, NULL);
} }
/* Check instruction at ADDR to see if it is a branch. /* Check instruction at ADDR to see if it is a branch.
@ -2784,15 +2802,6 @@ sparc64_register_byte (int regno)
return 64 * 8 + (regno - 80) * 8; return 64 * 8 + (regno - 80) * 8;
} }
/* Advance PC across any function entry prologue instructions to reach
some "real" code. */
static CORE_ADDR
sparc_gdbarch_skip_prologue (CORE_ADDR ip)
{
return examine_prologue (ip, 0, NULL, NULL);
}
/* Immediately after a function call, return the saved pc. /* Immediately after a function call, return the saved pc.
Can't go through the frames for this because on some machines Can't go through the frames for this because on some machines
the new frame is not set up until the new function executes the new frame is not set up until the new function executes
@ -2993,7 +3002,7 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_saved_pc_after_call (gdbarch, sparc_saved_pc_after_call); set_gdbarch_saved_pc_after_call (gdbarch, sparc_saved_pc_after_call);
set_gdbarch_prologue_frameless_p (gdbarch, sparc_prologue_frameless_p); set_gdbarch_prologue_frameless_p (gdbarch, sparc_prologue_frameless_p);
set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT); set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
set_gdbarch_skip_prologue (gdbarch, sparc_gdbarch_skip_prologue); set_gdbarch_skip_prologue (gdbarch, sparc_skip_prologue);
set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM);
set_gdbarch_use_generic_dummy_frames (gdbarch, 0); set_gdbarch_use_generic_dummy_frames (gdbarch, 0);
set_gdbarch_write_pc (gdbarch, generic_target_write_pc); set_gdbarch_write_pc (gdbarch, generic_target_write_pc);