diff options
Diffstat (limited to 'gdb/config/pa')
-rw-r--r-- | gdb/config/pa/tm-hppa.h | 3 | ||||
-rw-r--r-- | gdb/config/pa/tm-hppah.h | 50 |
2 files changed, 14 insertions, 39 deletions
diff --git a/gdb/config/pa/tm-hppa.h b/gdb/config/pa/tm-hppa.h index ce35906d2bd..baed537b803 100644 --- a/gdb/config/pa/tm-hppa.h +++ b/gdb/config/pa/tm-hppa.h @@ -240,7 +240,8 @@ extern int hppa_instruction_nullified (void); for register N. On the PA-RISC, all regs are 4 bytes, including the FP registers (they're accessed as two 4 byte halves). */ -#define REGISTER_RAW_SIZE(N) 4 +extern int hppa_register_raw_size (int reg_nr); +#define REGISTER_RAW_SIZE(N) hppa_register_raw_size (N) /* Total amount of space needed to store our copies of the machine's register state, the array `registers'. */ diff --git a/gdb/config/pa/tm-hppah.h b/gdb/config/pa/tm-hppah.h index d94b381434c..4e68de992f1 100644 --- a/gdb/config/pa/tm-hppah.h +++ b/gdb/config/pa/tm-hppah.h @@ -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) */ |