diff options
author | Jeff Law <law@redhat.com> | 1995-06-21 04:20:15 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1995-06-21 04:20:15 +0000 |
commit | 5e2f4e2d6f024e3e47a50aa9d1b1895af88615ec (patch) | |
tree | 80406fc3414c8b7041c30671e2ec180661644e18 | |
parent | 0283d893cb0a4ff786416c0ddec181d818a6e9d1 (diff) | |
download | gdb-5e2f4e2d6f024e3e47a50aa9d1b1895af88615ec.zip gdb-5e2f4e2d6f024e3e47a50aa9d1b1895af88615ec.tar.gz gdb-5e2f4e2d6f024e3e47a50aa9d1b1895af88615ec.tar.bz2 |
* 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.
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/config/pa/tm-hppao.h | 23 |
2 files changed, 30 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e72ec9d..d2e073e 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 <shebs@andros.cygnus.com> * 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 aab7274..7df4247 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" |