summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authoriedowse <iedowse@FreeBSD.org>2001-10-09 19:54:52 +0000
committeriedowse <iedowse@FreeBSD.org>2001-10-09 19:54:52 +0000
commit478926021cd002b82ec79025079ea1f70b890534 (patch)
treecad4d7a6717602ee2648b1e931f37e2c9f3104ad /gnu
parentffdeb5e0d78f9082409a5fc26f40eb5cf3344d60 (diff)
downloadFreeBSD-src-478926021cd002b82ec79025079ea1f70b890534.zip
FreeBSD-src-478926021cd002b82ec79025079ea1f70b890534.tar.gz
Remove the Xresume* labels from the i386 interrupt handlers; the
code in ipl.s and icu_ipl.s that used them was removed when the interrupt thread system was committed. Debuggers also knew about Xresume* because these labels hide the real names of the interrupt handlers (Xintr*), and debuggers need to special-case interrupt handlers to get the interrupt frame. Both gdb and ddb will now use the Xintr* and Xfastintr* symbols to detect interrupt frames. Fast interrupt frames were never identified correctly before, so this fixes the problem of the running stack frame getting lost in a ddb or gdb trace generated from a fast interrupt - e.g. when debugging a simple infinite loop in the kernel using a serial console, the frame containing the loop would never appear in a gdb or ddb trace. Reviewed by: jhb, bde
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c7
-rw-r--r--gnu/usr.bin/binutils/gdb/kvm-fbsd.c7
2 files changed, 10 insertions, 4 deletions
diff --git a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
index f2815bb..209732e 100644
--- a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
+++ b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
@@ -125,7 +125,8 @@ static CORE_ADDR pcpu;
* Symbol names of kernel entry points. Use special frames.
*/
#define KSYM_TRAP "calltrap"
-#define KSYM_INTERRUPT "Xresume"
+#define KSYM_INTR "Xintr"
+#define KSYM_FASTINTR "Xfastintr"
#define KSYM_SYSCALL "Xsyscall"
/*
@@ -160,7 +161,9 @@ struct frame_info *fr;
if (sym != NULL) {
if (strcmp (SYMBOL_NAME(sym), KSYM_TRAP) == 0)
frametype = tf_trap;
- else if (strncmp (SYMBOL_NAME(sym), KSYM_INTERRUPT, 7) == 0)
+ else if (strncmp (SYMBOL_NAME(sym), KSYM_INTR,
+ strlen(KSYM_INTR)) == 0 || strncmp (SYMBOL_NAME(sym),
+ KSYM_FASTINTR, strlen(KSYM_FASTINTR)) == 0)
frametype = tf_interrupt;
else if (strcmp (SYMBOL_NAME(sym), KSYM_SYSCALL) == 0)
frametype = tf_syscall;
diff --git a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
index f2815bb..209732e 100644
--- a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
+++ b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
@@ -125,7 +125,8 @@ static CORE_ADDR pcpu;
* Symbol names of kernel entry points. Use special frames.
*/
#define KSYM_TRAP "calltrap"
-#define KSYM_INTERRUPT "Xresume"
+#define KSYM_INTR "Xintr"
+#define KSYM_FASTINTR "Xfastintr"
#define KSYM_SYSCALL "Xsyscall"
/*
@@ -160,7 +161,9 @@ struct frame_info *fr;
if (sym != NULL) {
if (strcmp (SYMBOL_NAME(sym), KSYM_TRAP) == 0)
frametype = tf_trap;
- else if (strncmp (SYMBOL_NAME(sym), KSYM_INTERRUPT, 7) == 0)
+ else if (strncmp (SYMBOL_NAME(sym), KSYM_INTR,
+ strlen(KSYM_INTR)) == 0 || strncmp (SYMBOL_NAME(sym),
+ KSYM_FASTINTR, strlen(KSYM_FASTINTR)) == 0)
frametype = tf_interrupt;
else if (strcmp (SYMBOL_NAME(sym), KSYM_SYSCALL) == 0)
frametype = tf_syscall;
OpenPOWER on IntegriCloud