2004-02-17 Andrew Cagney <cagney@redhat.com>
* symtab.c (skip_prologue_using_sal): New function. * symtab.h (skip_prologue_using_sal): Declare. * frv-tdep.c: Include "symtab.h". (skip_prologue_using_sal): Delete function. * mips-tdep.c (skip_prologue_using_sal): Delete function. * rs6000-tdep.c (refine_prologue_limit): Mention skip_prologue_using_sal. * ia64-tdep.c (refine_prologue_limit): Ditto. * Makefile.in: Update dependencies.
This commit is contained in:
parent
6c74ac8bb4
commit
634aa483dd
8 changed files with 78 additions and 114 deletions
|
@ -1,4 +1,16 @@
|
|||
2004-02-09 Andrew Cagney <cagney@redhat.com>
|
||||
2004-02-17 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* symtab.c (skip_prologue_using_sal): New function.
|
||||
* symtab.h (skip_prologue_using_sal): Declare.
|
||||
* frv-tdep.c: Include "symtab.h".
|
||||
(skip_prologue_using_sal): Delete function.
|
||||
* mips-tdep.c (skip_prologue_using_sal): Delete function.
|
||||
* rs6000-tdep.c (refine_prologue_limit): Mention
|
||||
skip_prologue_using_sal.
|
||||
* ia64-tdep.c (refine_prologue_limit): Ditto.
|
||||
* Makefile.in: Update dependencies.
|
||||
|
||||
2004-02-16 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* config/alpha/tm-nbsd.h: Update copyright, delete #undef
|
||||
START_INFERIOR_TRAPS_EXPECTED.
|
||||
|
|
|
@ -1703,7 +1703,7 @@ frame-unwind.o: frame-unwind.c $(defs_h) $(frame_h) $(frame_unwind_h) \
|
|||
frv-tdep.o: frv-tdep.c $(defs_h) $(gdb_string_h) $(inferior_h) $(gdbcore_h) \
|
||||
$(arch_utils_h) $(regcache_h) $(frame_h) $(frame_unwind_h) \
|
||||
$(frame_base_h) $(trad_frame_h) $(dis_asm_h) $(gdb_assert_h) \
|
||||
$(sim_regno_h) $(gdb_sim_frv_h) $(opcodes_frv_desc_h)
|
||||
$(sim_regno_h) $(gdb_sim_frv_h) $(opcodes_frv_desc_h) $(symtab_h)
|
||||
f-typeprint.o: f-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \
|
||||
$(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) $(target_h) \
|
||||
$(f_lang_h) $(gdb_string_h)
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "sim-regno.h"
|
||||
#include "gdb/sim-frv.h"
|
||||
#include "opcodes/frv-desc.h" /* for the H_SPR_... enums */
|
||||
#include "symtab.h"
|
||||
|
||||
extern void _initialize_frv_tdep (void);
|
||||
|
||||
|
@ -413,62 +414,6 @@ is_argument_reg (int reg)
|
|||
return (8 <= reg && reg <= 13);
|
||||
}
|
||||
|
||||
/* Given PC at the function's start address, attempt to find the
|
||||
prologue end using SAL information. Return zero if the skip fails.
|
||||
|
||||
A non-optimized prologue traditionally has one SAL for the function
|
||||
and a second for the function body. A single line function has
|
||||
them both pointing at the same line.
|
||||
|
||||
An optimized prologue is similar but the prologue may contain
|
||||
instructions (SALs) from the instruction body. Need to skip those
|
||||
while not getting into the function body.
|
||||
|
||||
The functions end point and an increasing SAL line are used as
|
||||
indicators of the prologue's endpoint.
|
||||
|
||||
This code is based on the function refine_prologue_limit (versions
|
||||
found in both ia64 and ppc). */
|
||||
|
||||
static CORE_ADDR
|
||||
skip_prologue_using_sal (CORE_ADDR func_addr)
|
||||
{
|
||||
struct symtab_and_line prologue_sal;
|
||||
CORE_ADDR start_pc;
|
||||
CORE_ADDR end_pc;
|
||||
|
||||
/* Get an initial range for the function. */
|
||||
find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc);
|
||||
start_pc += FUNCTION_START_OFFSET;
|
||||
|
||||
prologue_sal = find_pc_line (start_pc, 0);
|
||||
if (prologue_sal.line != 0)
|
||||
{
|
||||
while (prologue_sal.end < end_pc)
|
||||
{
|
||||
struct symtab_and_line sal;
|
||||
|
||||
sal = find_pc_line (prologue_sal.end, 0);
|
||||
if (sal.line == 0)
|
||||
break;
|
||||
/* Assume that a consecutive SAL for the same (or larger)
|
||||
line mark the prologue -> body transition. */
|
||||
if (sal.line >= prologue_sal.line)
|
||||
break;
|
||||
/* The case in which compiler's optimizer/scheduler has
|
||||
moved instructions into the prologue. We look ahead in
|
||||
the function looking for address ranges whose
|
||||
corresponding line number is less the first one that we
|
||||
found for the function. This is more conservative then
|
||||
refine_prologue_limit which scans a large number of SALs
|
||||
looking for any in the prologue */
|
||||
prologue_sal = sal;
|
||||
}
|
||||
}
|
||||
return prologue_sal.end;
|
||||
}
|
||||
|
||||
|
||||
/* Scan an FR-V prologue, starting at PC, until frame->PC.
|
||||
If FRAME is non-zero, fill in its saved_regs with appropriate addresses.
|
||||
We assume FRAME's saved_regs array has already been allocated and cleared.
|
||||
|
|
|
@ -930,6 +930,9 @@ static int max_skip_non_prologue_insns = 40;
|
|||
used with no further scanning in the event that the function is
|
||||
frameless. */
|
||||
|
||||
/* FIXME: cagney/2004-02-14: This function and logic have largely been
|
||||
superseded by skip_prologue_using_sal. */
|
||||
|
||||
static CORE_ADDR
|
||||
refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc, int *trust_limit)
|
||||
{
|
||||
|
|
|
@ -4564,62 +4564,6 @@ mips_step_skips_delay (CORE_ADDR pc)
|
|||
extract_unsigned_integer (buf, MIPS_INSTLEN));
|
||||
}
|
||||
|
||||
|
||||
/* Given PC at the function's start address, attempt to find the
|
||||
prologue end using SAL information. Return zero if the skip fails.
|
||||
|
||||
A non-optimized prologue traditionally has one SAL for the function
|
||||
and a second for the function body. A single line function has
|
||||
them both pointing at the same line.
|
||||
|
||||
An optimized prologue is similar but the prologue may contain
|
||||
instructions (SALs) from the instruction body. Need to skip those
|
||||
while not getting into the function body.
|
||||
|
||||
The functions end point and an increasing SAL line are used as
|
||||
indicators of the prologue's endpoint.
|
||||
|
||||
This code is based on the function refine_prologue_limit (versions
|
||||
found in both ia64 and ppc). */
|
||||
|
||||
static CORE_ADDR
|
||||
skip_prologue_using_sal (CORE_ADDR func_addr)
|
||||
{
|
||||
struct symtab_and_line prologue_sal;
|
||||
CORE_ADDR start_pc;
|
||||
CORE_ADDR end_pc;
|
||||
|
||||
/* Get an initial range for the function. */
|
||||
find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc);
|
||||
start_pc += FUNCTION_START_OFFSET;
|
||||
|
||||
prologue_sal = find_pc_line (start_pc, 0);
|
||||
if (prologue_sal.line != 0)
|
||||
{
|
||||
while (prologue_sal.end < end_pc)
|
||||
{
|
||||
struct symtab_and_line sal;
|
||||
|
||||
sal = find_pc_line (prologue_sal.end, 0);
|
||||
if (sal.line == 0)
|
||||
break;
|
||||
/* Assume that a consecutive SAL for the same (or larger)
|
||||
line mark the prologue -> body transition. */
|
||||
if (sal.line >= prologue_sal.line)
|
||||
break;
|
||||
/* The case in which compiler's optimizer/scheduler has
|
||||
moved instructions into the prologue. We look ahead in
|
||||
the function looking for address ranges whose
|
||||
corresponding line number is less the first one that we
|
||||
found for the function. This is more conservative then
|
||||
refine_prologue_limit which scans a large number of SALs
|
||||
looking for any in the prologue */
|
||||
prologue_sal = sal;
|
||||
}
|
||||
}
|
||||
return prologue_sal.end;
|
||||
}
|
||||
|
||||
/* Skip the PC past function prologue instructions (32-bit version).
|
||||
This is a helper function for mips_skip_prologue. */
|
||||
|
||||
|
|
|
@ -425,6 +425,10 @@ static int max_skip_non_prologue_insns = 10;
|
|||
the line data in the symbol table. If successful, a better guess
|
||||
on where the prologue ends is returned, otherwise the previous
|
||||
value of lim_pc is returned. */
|
||||
|
||||
/* FIXME: cagney/2004-02-14: This function and logic have largely been
|
||||
superseded by skip_prologue_using_sal. */
|
||||
|
||||
static CORE_ADDR
|
||||
refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc)
|
||||
{
|
||||
|
|
54
gdb/symtab.c
54
gdb/symtab.c
|
@ -3860,6 +3860,60 @@ in_prologue (CORE_ADDR pc, CORE_ADDR func_start)
|
|||
return func_addr <= pc && pc < sal.end;
|
||||
}
|
||||
|
||||
/* Given PC at the function's start address, attempt to find the
|
||||
prologue end using SAL information. Return zero if the skip fails.
|
||||
|
||||
A non-optimized prologue traditionally has one SAL for the function
|
||||
and a second for the function body. A single line function has
|
||||
them both pointing at the same line.
|
||||
|
||||
An optimized prologue is similar but the prologue may contain
|
||||
instructions (SALs) from the instruction body. Need to skip those
|
||||
while not getting into the function body.
|
||||
|
||||
The functions end point and an increasing SAL line are used as
|
||||
indicators of the prologue's endpoint.
|
||||
|
||||
This code is based on the function refine_prologue_limit (versions
|
||||
found in both ia64 and ppc). */
|
||||
|
||||
CORE_ADDR
|
||||
skip_prologue_using_sal (CORE_ADDR func_addr)
|
||||
{
|
||||
struct symtab_and_line prologue_sal;
|
||||
CORE_ADDR start_pc;
|
||||
CORE_ADDR end_pc;
|
||||
|
||||
/* Get an initial range for the function. */
|
||||
find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc);
|
||||
start_pc += FUNCTION_START_OFFSET;
|
||||
|
||||
prologue_sal = find_pc_line (start_pc, 0);
|
||||
if (prologue_sal.line != 0)
|
||||
{
|
||||
while (prologue_sal.end < end_pc)
|
||||
{
|
||||
struct symtab_and_line sal;
|
||||
|
||||
sal = find_pc_line (prologue_sal.end, 0);
|
||||
if (sal.line == 0)
|
||||
break;
|
||||
/* Assume that a consecutive SAL for the same (or larger)
|
||||
line mark the prologue -> body transition. */
|
||||
if (sal.line >= prologue_sal.line)
|
||||
break;
|
||||
/* The case in which compiler's optimizer/scheduler has
|
||||
moved instructions into the prologue. We look ahead in
|
||||
the function looking for address ranges whose
|
||||
corresponding line number is less the first one that we
|
||||
found for the function. This is more conservative then
|
||||
refine_prologue_limit which scans a large number of SALs
|
||||
looking for any in the prologue */
|
||||
prologue_sal = sal;
|
||||
}
|
||||
}
|
||||
return prologue_sal.end;
|
||||
}
|
||||
|
||||
struct symtabs_and_lines
|
||||
decode_line_spec (char *string, int funfirstline)
|
||||
|
|
|
@ -1318,6 +1318,8 @@ extern enum language deduce_language_from_filename (char *);
|
|||
|
||||
extern int in_prologue (CORE_ADDR pc, CORE_ADDR func_start);
|
||||
|
||||
extern CORE_ADDR skip_prologue_using_sal (CORE_ADDR func_addr);
|
||||
|
||||
extern struct symbol *fixup_symbol_section (struct symbol *,
|
||||
struct objfile *);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue