Continuing work to convert the hppa targets to multiarch partial.

* hppa-tdep.c: (hppa_register_raw_size): New function replacing
       the body of macro REGISTER_RAW_SIZE.
       * hppa-hpux-tdep.c: Add new functions replacing macro bodies from
       config/pa/tm-hppah.h. These functions will be used to initialize
       the gdbarch structure.
       (hppa_hpux_pc_in_sigtramp): New function.
       (hppa_hpux_frame_saved_pc_in_sigtramp): New function.
       (hppa_hpux_frame_base_before_sigtramp): New function.
       (hppa_hpux_frame_find_saved_regs_in_sigtramp): New function.
       Add gdbcore.h #include.
       * config/pa/tm-hppa.h (REGISTER_RAW_SIZE): Change the definition
       of this gdbarch-eligible macro to a call to the new associated
       function.
       * config/pa/tm-hppah.h (PC_IN_SIGTRAMP): Likewise.
       (FRAME_SAVED_PC_IN_SIGTRAMP): Change the definition of this macro
       into a call to the new associated function.
       (FRAME_BASE_BEFORE_SIGTRAMP): Likewise.
       (FRAME_FIND_SAVED_REGS_IN_SIGTRAMP): Likewise.
       * Makefile.in (hppa-hpux-tdep.o): Add dependency on gdbcore.h.
This commit is contained in:
Joel Brobecker
2002-12-26 09:36:43 +00:00
parent a7df09ae3c
commit 60e1ff2716
6 changed files with 116 additions and 40 deletions

View File

@@ -33,50 +33,24 @@
#include "somsolib.h"
#endif
/* Actually, for a PA running HPUX the kernel calls the signal handler
without an intermediate trampoline. Luckily the kernel always sets
the return pointer for the signal handler to point to _sigreturn. */
#define PC_IN_SIGTRAMP(pc, name) (name && STREQ ("_sigreturn", name))
/* For HPUX:
The signal context structure pointer is always saved at the base
of the frame which "calls" the signal handler. We only want to find
the hardware save state structure, which lives 10 32bit words into
sigcontext structure.
Within the hardware save state structure, registers are found in the
same order as the register numbers in GDB.
At one time we peeked at %r31 rather than the PC queues to determine
what instruction took the fault. This was done on purpose, but I don't
remember why. Looking at the PC queues is really the right way, and
I don't remember why that didn't work when this code was originally
written. */
extern int hppa_hpux_pc_in_sigtramp (CORE_ADDR pc, char *name);
#define PC_IN_SIGTRAMP(pc, name) hppa_hpux_pc_in_sigtramp (pc, name)
extern void hppa_hpux_frame_saved_pc_in_sigtramp (struct frame_info *fi,
CORE_ADDR *tmp);
#define FRAME_SAVED_PC_IN_SIGTRAMP(FRAME, TMP) \
{ \
*(TMP) = read_memory_integer ((FRAME)->frame + (43 * 4) , 4); \
}
hppa_hpux_frame_saved_pc_in_sigtramp (FRAME, TMP)
extern void hppa_hpux_frame_base_before_sigtramp (struct frame_info *fi,
CORE_ADDR *tmp);
#define FRAME_BASE_BEFORE_SIGTRAMP(FRAME, TMP) \
{ \
*(TMP) = read_memory_integer ((FRAME)->frame + (40 * 4), 4); \
}
hppa_hpux_frame_base_before_sigtramp (FRAME, TMP)
struct frame_saved_regs;
extern void hppa_hpux_frame_find_saved_regs_in_sigtramp
(struct frame_info *fi, struct frame_saved_regs *fsr);
#define FRAME_FIND_SAVED_REGS_IN_SIGTRAMP(FRAME, FSR) \
{ \
int i; \
CORE_ADDR TMP; \
TMP = (FRAME)->frame + (10 * 4); \
for (i = 0; i < NUM_REGS; i++) \
{ \
if (i == SP_REGNUM) \
(FSR)->regs[SP_REGNUM] = read_memory_integer (TMP + SP_REGNUM * 4, 4); \
else \
(FSR)->regs[i] = TMP + i * 4; \
} \
}
hppa_hpux_frame_find_saved_regs_in_sigtramp (FRAME, FSR)
/* For HP-UX on PA-RISC we have an implementation
for the exception handling target op (in hppa-tdep.c) */