aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/rs6000-tdep.c8
-rw-r--r--gdb/tm-rs6000.h77
2 files changed, 45 insertions, 40 deletions
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index 5bee145..45d6af4 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -39,12 +39,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <sys/core.h>
#include <sys/ldr.h>
+
+extern struct obstack frame_cache_obstack;
+
extern int errno;
/* Nonzero if we just simulated a single step break. */
int one_stepped;
-
/* Breakpoint shadows for the single step instructions will be kept here. */
static struct sstep_breaks {
@@ -399,7 +401,7 @@ FIXME: This whole concept is broken. You should be able to detect
a dummy stack frame *on the user's stack itself*. When you do,
then you know the format of that stack frame -- including its
saved SP register! There should *not* be a separate stack in the
-GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92 */
+GDB process that keeps track of these dummy frames! -- gnu@cygnus.com Aug92
*/
pop_dummy_frame ()
@@ -546,7 +548,7 @@ fix_call_dummy(dummyname, pc, fun, nargs, type)
*/
void
function_frame_info (pc, fdata)
- int pc;
+ CORE_ADDR pc;
struct aix_framedata *fdata;
{
unsigned int tmp;
diff --git a/gdb/tm-rs6000.h b/gdb/tm-rs6000.h
index 34d2606..1adcc86 100644
--- a/gdb/tm-rs6000.h
+++ b/gdb/tm-rs6000.h
@@ -98,6 +98,8 @@ struct aix_framedata {
char frameless; /* true if frameless functions. */
};
+void
+function_frame_info PARAMS ((CORE_ADDR, struct aix_framedata *));
/* Define the byte order of the machine. */
@@ -491,43 +493,44 @@ extern unsigned int rs6000_struct_return_address;
#define FRAME_FIND_SAVED_REGS(FRAME_INFO, FRAME_SAVED_REGS) \
{ \
- int ii, frame_addr, func_start; \
- struct aix_framedata fdata; \
- \
- /* find the start of the function and collect info about its frame. */ \
- \
- func_start = get_pc_function_start ((FRAME_INFO)->pc) + FUNCTION_START_OFFSET;\
- function_frame_info (func_start, &fdata); \
- bzero (&(FRAME_SAVED_REGS), sizeof (FRAME_SAVED_REGS)); \
- \
- /* if there were any saved registers, figure out parent's stack pointer. */ \
- frame_addr = 0; \
- /* the following is true only if the frame doesn't have a call to alloca(), \
- FIXME. */ \
- if (fdata.saved_fpr >= 0 || fdata.saved_gpr >= 0) { \
- if ((FRAME_INFO)->prev && (FRAME_INFO)->prev->frame) \
- frame_addr = (FRAME_INFO)->prev->frame; \
- else \
- frame_addr = read_memory_integer ((FRAME_INFO)->frame, 4); \
- } \
- \
- /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr. All fpr's \
- from saved_fpr to fp31 are saved right underneath caller stack pointer, \
- starting from fp31 first. */ \
- \
- if (fdata.saved_fpr >= 0) { \
- for (ii=31; ii >= fdata.saved_fpr; --ii) \
- (FRAME_SAVED_REGS).regs [FP0_REGNUM + ii] = frame_addr - ((32 - ii) * 8); \
- frame_addr -= (32 - fdata.saved_fpr) * 8; \
- } \
- \
- /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr. All gpr's \
- from saved_gpr to gpr31 are saved right under saved fprs, starting \
- from r31 first. */ \
- \
- if (fdata.saved_gpr >= 0) \
- for (ii=31; ii >= fdata.saved_gpr; --ii) \
- (FRAME_SAVED_REGS).regs [ii] = frame_addr - ((32 - ii) * 4); \
+ int ii; \
+ CORE_ADDR frame_addr, func_start; \
+ struct aix_framedata fdata; \
+ \
+ /* find the start of the function and collect info about its frame. */\
+ \
+ func_start = get_pc_function_start ((FRAME_INFO)->pc) + FUNCTION_START_OFFSET; \
+ function_frame_info (func_start, &fdata); \
+ bzero (&(FRAME_SAVED_REGS), sizeof (FRAME_SAVED_REGS)); \
+ \
+ /* if there were any saved registers, figure out parent's stack pointer. */ \
+ frame_addr = 0; \
+ /* the following is true only if the frame doesn't have a call to alloca(), \
+ FIXME. */ \
+ if (fdata.saved_fpr >= 0 || fdata.saved_gpr >= 0) { \
+ if ((FRAME_INFO)->prev && (FRAME_INFO)->prev->frame) \
+ frame_addr = (FRAME_INFO)->prev->frame; \
+ else \
+ frame_addr = read_memory_integer ((FRAME_INFO)->frame, 4); \
+ } \
+ \
+ /* if != -1, fdata.saved_fpr is the smallest number of saved_fpr. All fpr's \
+ from saved_fpr to fp31 are saved right underneath caller stack pointer, \
+ starting from fp31 first. */ \
+ \
+ if (fdata.saved_fpr >= 0) { \
+ for (ii=31; ii >= fdata.saved_fpr; --ii) \
+ (FRAME_SAVED_REGS).regs [FP0_REGNUM + ii] = frame_addr - ((32 - ii) * 8); \
+ frame_addr -= (32 - fdata.saved_fpr) * 8; \
+ } \
+ \
+ /* if != -1, fdata.saved_gpr is the smallest number of saved_gpr. All gpr's \
+ from saved_gpr to gpr31 are saved right under saved fprs, starting \
+ from r31 first. */ \
+ \
+ if (fdata.saved_gpr >= 0) \
+ for (ii=31; ii >= fdata.saved_gpr; --ii) \
+ (FRAME_SAVED_REGS).regs [ii] = frame_addr - ((32 - ii) * 4); \
}