aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1993-05-05 22:39:23 +0000
committerStu Grossman <grossman@cygnus>1993-05-05 22:39:23 +0000
commit4b01383bcd20363075b8923d7ad2c037aff665f3 (patch)
tree2436bdd8197680a7655652da10080f20a6ccc30d /gdb
parentb227992a7642750bb84d3908db66b89422e14518 (diff)
downloadgdb-4b01383bcd20363075b8923d7ad2c037aff665f3.zip
gdb-4b01383bcd20363075b8923d7ad2c037aff665f3.tar.gz
gdb-4b01383bcd20363075b8923d7ad2c037aff665f3.tar.bz2
* Patches from Jeffrey Law <law@cs.utah.edu>.
* gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then use unwind descriptors to determine if the frame chain is valid.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog2
-rw-r--r--gdb/hppa-tdep.c25
2 files changed, 22 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 94677c1..a8b003b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,6 +1,8 @@
Wed May 5 15:16:33 1993 Stu Grossman (grossman@cygnus.com)
* Patches from Jeffrey Law <law@cs.utah.edu>.
+ * gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then
+ use unwind descriptors to determine if the frame chain is valid.
* gdb/hppa-tdep.c (find_dummy_frame_regs): Rework so that
it does not assume %r4 is the frame pointer.
* gdb/hppa-pinsn.c (print_insn): Handle 'r' and 'R' for break, rsm,
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index ca23938..2163ed5 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -437,13 +437,28 @@ frame_chain_valid (chain, thisframe)
if (!chain)
return 0;
- msym = lookup_minimal_symbol_by_pc (FRAME_SAVED_PC (thisframe));
+ if (use_unwind)
+ {
- if (msym
- && (strcmp (SYMBOL_NAME (msym), "_start") == 0))
- return 0;
+ struct unwind_table_entry *u;
+
+ u = find_unwind_entry (thisframe->pc);
+
+ if (u && (u->Save_SP || u->Total_frame_size))
+ return 1;
+ else
+ return 0;
+ }
else
- return 1;
+ {
+ msym = lookup_minimal_symbol_by_pc (FRAME_SAVED_PC (thisframe));
+
+ if (msym
+ && (strcmp (SYMBOL_NAME (msym), "_start") == 0))
+ return 0;
+ else
+ return 1;
+ }
}
/*