From 5aac166f583ebdcd3d5c62e9d53927e1212c74b3 Mon Sep 17 00:00:00 2001 From: Randolph Chung Date: Fri, 12 Nov 2004 18:38:34 +0000 Subject: [PATCH] 2004-11-12 Randolph Chung * hppa-tdep.c (hppa_skip_permanent_breakpoint): Move definition ... * hppa-hpux-tdep.c (hppa_skip_permanent_breakpoint): ... to here. * config/pa/tm-hppa.h (SKIP_PERMANENT_BREAKPOINT): Move definition ... * config/pa/tm-hppah.h (SKIP_PERMANENT_BREAKPOINT): ... to here. --- gdb/ChangeLog | 7 +++++++ gdb/config/pa/tm-hppa.h | 4 ---- gdb/config/pa/tm-hppah.h | 4 ++++ gdb/hppa-hpux-tdep.c | 23 +++++++++++++++++++++++ gdb/hppa-tdep.c | 24 ------------------------ 5 files changed, 34 insertions(+), 28 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 40c15fc5e66..665c87904d0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2004-11-12 Randolph Chung + + * hppa-tdep.c (hppa_skip_permanent_breakpoint): Move definition ... + * hppa-hpux-tdep.c (hppa_skip_permanent_breakpoint): ... to here. + * config/pa/tm-hppa.h (SKIP_PERMANENT_BREAKPOINT): Move definition ... + * config/pa/tm-hppah.h (SKIP_PERMANENT_BREAKPOINT): ... to here. + 2004-11-12 Mark Kettenis * tui/tui-io.c: Don't include "terminal.h". diff --git a/gdb/config/pa/tm-hppa.h b/gdb/config/pa/tm-hppa.h index efcf99764da..6a1cffdc703 100644 --- a/gdb/config/pa/tm-hppa.h +++ b/gdb/config/pa/tm-hppa.h @@ -35,10 +35,6 @@ extern int hppa_instruction_nullified (void); #define INSTRUCTION_NULLIFIED hppa_instruction_nullified () #endif -/* Here's how to step off a permanent breakpoint. */ -#define SKIP_PERMANENT_BREAKPOINT (hppa_skip_permanent_breakpoint) -extern void hppa_skip_permanent_breakpoint (void); - /* On HP-UX, certain system routines (millicode) have names beginning with $ or $$, e.g. $$dyncall, which handles inter-space procedure calls on PA-RISC. Tell the expression parser to check for those diff --git a/gdb/config/pa/tm-hppah.h b/gdb/config/pa/tm-hppah.h index d330d46f1c3..43f447cc01c 100644 --- a/gdb/config/pa/tm-hppah.h +++ b/gdb/config/pa/tm-hppah.h @@ -41,5 +41,9 @@ struct frame_info; #define CHILD_ENABLE_EXCEPTION_CALLBACK #define CHILD_GET_CURRENT_EXCEPTION_EVENT +/* Here's how to step off a permanent breakpoint. */ +#define SKIP_PERMANENT_BREAKPOINT (hppa_skip_permanent_breakpoint) +extern void hppa_skip_permanent_breakpoint (void); + /* Mostly it's common to all HPPA's. */ #include "pa/tm-hppa.h" diff --git a/gdb/hppa-hpux-tdep.c b/gdb/hppa-hpux-tdep.c index 9623abeb759..08c2ecedf60 100644 --- a/gdb/hppa-hpux-tdep.c +++ b/gdb/hppa-hpux-tdep.c @@ -505,6 +505,29 @@ hppa_hpux_skip_trampoline_code (CORE_ADDR pc) } } +void +hppa_skip_permanent_breakpoint (void) +{ + /* To step over a breakpoint instruction on the PA takes some + fiddling with the instruction address queue. + + When we stop at a breakpoint, the IA queue front (the instruction + we're executing now) points at the breakpoint instruction, and + the IA queue back (the next instruction to execute) points to + whatever instruction we would execute after the breakpoint, if it + were an ordinary instruction. This is the case even if the + breakpoint is in the delay slot of a branch instruction. + + Clearly, to step past the breakpoint, we need to set the queue + front to the back. But what do we put in the back? What + instruction comes after that one? Because of the branch delay + slot, the next insn is always at the back + 4. */ + write_register (HPPA_PCOQ_HEAD_REGNUM, read_register (HPPA_PCOQ_TAIL_REGNUM)); + write_register (HPPA_PCSQ_HEAD_REGNUM, read_register (HPPA_PCSQ_TAIL_REGNUM)); + + write_register (HPPA_PCOQ_TAIL_REGNUM, read_register (HPPA_PCOQ_TAIL_REGNUM) + 4); + /* We can leave the tail's space the same, since there's no jump. */ +} /* Exception handling support for the HP-UX ANSI C++ compiler. The compiler (aCC) provides a callback for exception events; diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index 8e863678c72..94319254a26 100644 --- a/gdb/hppa-tdep.c +++ b/gdb/hppa-tdep.c @@ -2264,30 +2264,6 @@ unwind_command (char *exp, int from_tty) pin (Total_frame_size); } -void -hppa_skip_permanent_breakpoint (void) -{ - /* To step over a breakpoint instruction on the PA takes some - fiddling with the instruction address queue. - - When we stop at a breakpoint, the IA queue front (the instruction - we're executing now) points at the breakpoint instruction, and - the IA queue back (the next instruction to execute) points to - whatever instruction we would execute after the breakpoint, if it - were an ordinary instruction. This is the case even if the - breakpoint is in the delay slot of a branch instruction. - - Clearly, to step past the breakpoint, we need to set the queue - front to the back. But what do we put in the back? What - instruction comes after that one? Because of the branch delay - slot, the next insn is always at the back + 4. */ - write_register (HPPA_PCOQ_HEAD_REGNUM, read_register (HPPA_PCOQ_TAIL_REGNUM)); - write_register (HPPA_PCSQ_HEAD_REGNUM, read_register (HPPA_PCSQ_TAIL_REGNUM)); - - write_register (HPPA_PCOQ_TAIL_REGNUM, read_register (HPPA_PCOQ_TAIL_REGNUM) + 4); - /* We can leave the tail's space the same, since there's no jump. */ -} - int hppa_pc_requires_run_before_use (CORE_ADDR pc) { -- 2.30.2