From 5e2f4e2d6f024e3e47a50aa9d1b1895af88615ec Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 21 Jun 1995 04:20:15 +0000 Subject: [PATCH] * config/pa/tm-hppa.h (PSW_*): Define processor status word masks. (INSTRUCTION_NULLIFIED): Allow specific targets to override. * config/pa/tm-hppao.h (INSTRUCTION_NULLIFIED): Define to work around losing mach kernel behavior. --- gdb/ChangeLog | 7 +++++++ gdb/config/pa/tm-hppao.h | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e72ec9d1806..d2e073e8f64 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +Tue Jun 20 22:17:44 1995 Jeff Law (law@snake.cs.utah.edu) + + * config/pa/tm-hppa.h (PSW_*): Define processor status word masks. + (INSTRUCTION_NULLIFIED): Allow specific targets to override. + * config/pa/tm-hppao.h (INSTRUCTION_NULLIFIED): Define to work + around losing mach kernel behavior. + Tue Jun 20 12:03:36 1995 Stan Shebs * monitor.c (monitor_wait): Don't use the watchdog timeout diff --git a/gdb/config/pa/tm-hppao.h b/gdb/config/pa/tm-hppao.h index aab7274276e..7df42474744 100644 --- a/gdb/config/pa/tm-hppao.h +++ b/gdb/config/pa/tm-hppao.h @@ -69,5 +69,28 @@ /* OSF1 does not need the pc space queue restored. */ #define NO_PC_SPACE_QUEUE_RESTORE +/* The mach kernel uses the recovery counter to implement single + stepping. While this greatly simplifies the kernel support + necessary for single stepping, it unfortunately does the wrong + thing in the presense of a nullified instruction (gives control + back two insns after the nullifed insn). This is an artifact + of the HP architecture (recovery counter doesn't tick for + nullified insns). + + Do our best to avoid losing in such situations. */ +#define INSTRUCTION_NULLIFIED \ +(({ \ + int ipsw = (int)read_register(IPSW_REGNUM); \ + if (ipsw & PSW_N) \ + { \ + int pcoqt = (int)read_register(PCOQ_TAIL_REGNUM); \ + write_register(PCOQ_HEAD_REGNUM, pcoqt); \ + write_register(PCOQ_TAIL_REGNUM, pcoqt + 0x4); \ + write_register(IPSW_REGNUM, ipsw & ~(PSW_N | PSW_B | PSW_X)); \ + stop_pc = pcoqt; \ + } \ + }), 0) + /* It's mostly just the common stuff. */ + #include "pa/tm-hppa.h" -- 2.30.2