aboutsummaryrefslogtreecommitdiff
path: root/gdb/config/rs6000
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1993-07-07 20:29:56 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1993-07-07 20:29:56 +0000
commit23a8e2915cfa83f8cac60e61e1b414a7aeab198e (patch)
tree5ebb4da63b33de2d086d84e2cea8479d650a5ff7 /gdb/config/rs6000
parente154ecf4ab067beccde639b61a166eb9ebc7c0c3 (diff)
downloadgdb-23a8e2915cfa83f8cac60e61e1b414a7aeab198e.zip
gdb-23a8e2915cfa83f8cac60e61e1b414a7aeab198e.tar.gz
gdb-23a8e2915cfa83f8cac60e61e1b414a7aeab198e.tar.bz2
* frame.h, blockframe.c, stack.c, a29k-tdep.c,
config/gould/tmp-{pn,np1}.h, config/{sparc/tm-sparc.h,pyr/tm-pyr.h,vax/tm-vax.h}: Remove field next_frame from struct frame_info. It has no purpose beyond ->next->frame and is an artifact from GDB 2.8.
Diffstat (limited to 'gdb/config/rs6000')
-rw-r--r--gdb/config/rs6000/tm-rs6000.h78
1 files changed, 36 insertions, 42 deletions
diff --git a/gdb/config/rs6000/tm-rs6000.h b/gdb/config/rs6000/tm-rs6000.h
index 81ed15c..6350254 100644
--- a/gdb/config/rs6000/tm-rs6000.h
+++ b/gdb/config/rs6000/tm-rs6000.h
@@ -18,21 +18,10 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-extern int symtab_relocated;
-
/* Minimum possible text address in AIX */
#define TEXT_SEGMENT_BASE 0x10000000
-
-/* text addresses in a core file does not necessarily match to symbol table,
- if symbol table relocation wasn't done yet. */
-
-#define CORE_NEEDS_RELOCATION(PC) \
- if (!symtab_relocated && !inferior_pid) \
- xcoff_relocate_core ();
-extern void xcoff_relocate_core PARAMS ((void));
-
/* Load segment of a given pc value. */
#define PC_LOAD_SEGMENT(PC) pc_load_segment_name(PC)
@@ -42,20 +31,16 @@ extern void xcoff_relocate_core PARAMS ((void));
#define BELIEVE_PCC_PROMOTION 1
/* return true if a given `pc' value is in `call dummy' function. */
-
+/* FIXME: This just checks for the end of the stack, which is broken
+ for things like stepping through gcc nested function stubs. */
#define PC_IN_CALL_DUMMY(STOP_PC, STOP_SP, STOP_FRAME_ADDR) \
(STOP_SP < STOP_PC && STOP_PC < STACK_END_ADDR)
-/* For each symtab, we keep track of which BFD it came from. */
-#define EXTRA_SYMTAB_INFO \
- unsigned nonreloc:1; /* TRUE if non relocatable */
-
-#define INIT_EXTRA_SYMTAB_INFO(symtab) \
- symtab->nonreloc = 0; \
-
+#if 0
extern unsigned int text_start, data_start;
-extern int inferior_pid;
extern char *corefile;
+#endif
+extern int inferior_pid;
/* setpgrp() messes up controling terminal. The other version of it
requires libbsd.a. */
@@ -114,17 +99,12 @@ function_frame_info PARAMS ((CORE_ADDR, struct aix_framedata *));
/* When a child process is just starting, we sneak in and relocate
the symbol table (and other stuff) after the dynamic linker has
- figured out where they go. But we want to do this relocation just
- once. */
-
-extern int loadinfotextindex;
+ figured out where they go. */
#define SOLIB_CREATE_INFERIOR_HOOK(PID) \
do { \
- if (loadinfotextindex == 0) \
- xcoff_relocate_symtab (PID); \
+ xcoff_relocate_symtab (PID); \
} while (0)
-
/* Number of trap signals we need to skip over, once the inferior process
starts running. */
@@ -155,15 +135,17 @@ extern int loadinfotextindex;
#define PROCESS_LINENUMBER_HOOK() aix_process_linenos ()
-
/* When a target process or core-file has been attached, we sneak in
- and figure out where the shared libraries have got to. In case there
- is no inferior_process exists (e.g. bringing up a core file), we can't
- attemtp to relocate symbol table, since we don't have information about
- load segments. */
+ and figure out where the shared libraries have got to. */
#define SOLIB_ADD(a, b, c) \
- if (inferior_pid) xcoff_relocate_symtab (inferior_pid)
+ if (inferior_pid) \
+ /* Attach to process. */ \
+ xcoff_relocate_symtab (inferior_pid); \
+ else \
+ /* Core file. */ \
+ xcoff_relocate_core ();
+extern void xcoff_relocate_core PARAMS ((void));
/* Immediately after a function call, return the saved pc.
Can't go through the frames for this because on some machines
@@ -401,10 +383,11 @@ extern unsigned int rs6000_struct_return_address;
/* In the case of the RS6000, the frame's nominal address
is the address of a 4-byte word containing the calling frame's address. */
-#define FRAME_CHAIN(thisframe) \
- (!inside_entry_file ((thisframe)->pc) ? \
- read_memory_integer ((thisframe)->frame, 4) :\
- 0)
+#define FRAME_CHAIN(thisframe) rs6000_frame_chain (thisframe)
+#ifdef __STDC__
+struct frame_info;
+#endif
+CORE_ADDR rs6000_frame_chain PARAMS ((struct frame_info *));
/* Define other aspects of the stack frame. */
@@ -426,19 +409,30 @@ extern unsigned int rs6000_struct_return_address;
CORE_ADDR initial_sp; /* initial stack pointer. */ \
struct frame_saved_regs *cache_fsr; /* saved registers */
+#define INIT_FRAME_PC_FIRST(fromleaf, prev) \
+ prev->pc = (fromleaf ? SAVED_PC_AFTER_CALL (prev->next) : \
+ prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
+#define INIT_FRAME_PC(fromleaf, prev) /* nothing */
+#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) \
+ fi->initial_sp = 0; \
+ fi->cache_fsr = 0; \
+ if (fi->next != (CORE_ADDR)0 \
+ && read_memory_integer (fi->frame, 4) == 0 \
+ && fi->pc < TEXT_SEGMENT_BASE) \
+ /* We're in get_prev_frame_info */ \
+ /* and this is a special signal frame. */ \
+ /* (fi->pc will be something like 0x3f88 or 0x2790). */ \
+ fi->signal_handler_caller = 1;
+
/* Frameless function invocation in IBM RS/6000 is sometimes
half-done. It perfectly sets up a new frame, e.g. a new frame (in
fact stack) pointer, etc, but it doesn't save the %pc. We call
frameless_function_invocation to tell us how to get the %pc. */
-#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) \
- fi->initial_sp = 0; \
- fi->cache_fsr = 0;
-
#define FRAME_SAVED_PC(FRAME) \
(frameless_function_invocation (FRAME, 1) \
? SAVED_PC_AFTER_CALL (FRAME) \
- : read_memory_integer (read_memory_integer ((FRAME)->frame, 4)+8, 4))
+ : read_memory_integer (rs6000_frame_chain (FRAME)+8, 4))
#define FRAME_ARGS_ADDRESS(FI) \
(((struct frame_info*)(FI))->initial_sp ? \