From 60e1ff2716f2ef348d75b0d9b1dc2cb9206469f8 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Thu, 26 Dec 2002 09:36:43 +0000 Subject: 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. --- gdb/config/pa/tm-hppa.h | 3 ++- gdb/config/pa/tm-hppah.h | 50 ++++++++++++------------------------------------ 2 files changed, 14 insertions(+), 39 deletions(-) (limited to 'gdb/config') diff --git a/gdb/config/pa/tm-hppa.h b/gdb/config/pa/tm-hppa.h index ce35906..baed537 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 d94b381..4e68de9 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) */ -- cgit v1.1