summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2004-02-17 15:21:22 +0000
committerAndrew Cagney <cagney@redhat.com>2004-02-17 15:21:22 +0000
commit3cbac9fa0a1bbf7a20cb4cbb88910e31d06df30c (patch)
tree89a5bf50cfef92ba3b629d8ab46436c50a676694
parent3037ab4711424baadf540be2085fedcc5490ace6 (diff)
downloadgdb-3cbac9fa0a1bbf7a20cb4cbb88910e31d06df30c.tar.gz
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.
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/Makefile.in2
-rw-r--r--gdb/frv-tdep.c57
-rw-r--r--gdb/ia64-tdep.c3
-rw-r--r--gdb/mips-tdep.c56
-rw-r--r--gdb/rs6000-tdep.c4
-rw-r--r--gdb/symtab.c54
-rw-r--r--gdb/symtab.h2
8 files changed, 78 insertions, 114 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b7a112cb824..c2767d0b81e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index f600575c164..c9235197b6e 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -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)
diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c
index 621848e4d46..b7936e7e454 100644
--- a/gdb/frv-tdep.c
+++ b/gdb/frv-tdep.c
@@ -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.
diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index 2b293f2325e..f871533c9df 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -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)
{
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index fb80964e6ed..9638b0862f4 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -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. */
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index 32cedc048fe..5eef8959115 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -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)
{
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 622e27788ca..99f138a3063 100644
--- a/gdb/symtab.c
+++ b/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)
diff --git a/gdb/symtab.h b/gdb/symtab.h
index b5d9ffd65b4..5a6c3984bd1 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -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 *);