From a87c93b7166a62849b57bbfa35beda45c98edef4 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Tue, 29 Mar 1994 18:36:48 +0000 Subject: [PATCH] Put back include to tm-hppa.h mistakenly taken out during a recent checkin. --- gdb/config/pa/tm-hppah.h | 50 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/gdb/config/pa/tm-hppah.h b/gdb/config/pa/tm-hppah.h index a5177db5c3..5c35f7de0f 100644 --- a/gdb/config/pa/tm-hppah.h +++ b/gdb/config/pa/tm-hppah.h @@ -20,14 +20,56 @@ 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. */ -/* Mostly it's common to all HPPA's. */ -#include "pa/tm-hppa.h" -/* Saved PC's are different, since there is millicode. */ -extern CORE_ADDR millicode_start, millicode_end; +/* 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 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. + + The kernel apparently sets %r31 in the saved state structure to point + to the active instruction when the signal was taken. Everything + else looks fairly reasonable. (I assume the kernel fixes %r31 from + within _sigreturn?. */ + +#define FRAME_SAVED_PC_IN_SIGTRAMP(FRAME, TMP) \ +{ \ + *(TMP) = read_memory_integer ((FRAME)->frame + (41 * 4) , 4); \ +} + +#define FRAME_BASE_BEFORE_SIGTRAMP(FRAME, TMP) \ +{ \ + *(TMP) = read_memory_integer ((FRAME)->frame + (40 * 4), 4); \ +} + +#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; \ + } \ +} /* We need to figure out where the text region is so that we use the appropriate ptrace operator to manipulate text. Simply reading/writing user space will crap out HPUX. */ #define NEED_TEXT_START_END + +/* Mostly it's common to all HPPA's. */ +#include "pa/tm-hppa.h"