The branch stable/12 has been updated by mhorne:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=6a45b9926f2ecd90b1948ae469652a0a42071e86

commit 6a45b9926f2ecd90b1948ae469652a0a42071e86
Author:     Mitchell Horne <[email protected]>
AuthorDate: 2020-12-23 19:36:17 +0000
Commit:     Mitchell Horne <[email protected]>
CommitDate: 2021-01-04 21:01:09 +0000

    gdb(4) fix x86 signal reporting
    
    The existing values correspond to x86 exception vector numbers, but the
    trap numbers used in the kernel do not match these 1-to-1. Prefer the
    definitions from x86/trap.h, as they are what actually get passed to
    kdb_trap(). This is of little consequence, as gdb_cpu_signal() only
    reports the trap reason (signal number) to the gdb client.
    
    This is limited to the subset of trap values for which kdb_trap() is
    reachable.
    
    Sponsored by:   NetApp, Inc.
    Sponsored by:   Klara, Inc.
    
    (cherry picked from commit 962c06c5a32deb9357851d5aca060defc79e6e90)
---
 sys/amd64/amd64/gdb_machdep.c | 27 ++++++++++++---------------
 sys/i386/i386/gdb_machdep.c   | 27 ++++++++++++---------------
 2 files changed, 24 insertions(+), 30 deletions(-)

diff --git a/sys/amd64/amd64/gdb_machdep.c b/sys/amd64/amd64/gdb_machdep.c
index 73022bee7674..8b391bb63dcf 100644
--- a/sys/amd64/amd64/gdb_machdep.c
+++ b/sys/amd64/amd64/gdb_machdep.c
@@ -136,21 +136,18 @@ gdb_cpu_signal(int type, int code)
 {
 
        switch (type & ~T_USER) {
-       case 0: return (SIGFPE);        /* Divide by zero. */
-       case 1: return (SIGTRAP);       /* Debug exception. */
-       case 3: return (SIGTRAP);       /* Breakpoint. */
-       case 4: return (SIGSEGV);       /* into instr. (overflow). */
-       case 5: return (SIGURG);        /* bound instruction. */
-       case 6: return (SIGILL);        /* Invalid opcode. */
-       case 7: return (SIGFPE);        /* Coprocessor not present. */
-       case 8: return (SIGEMT);        /* Double fault. */
-       case 9: return (SIGSEGV);       /* Coprocessor segment overrun. */
-       case 10: return (SIGTRAP);      /* Invalid TSS (also single-step). */
-       case 11: return (SIGSEGV);      /* Segment not present. */
-       case 12: return (SIGSEGV);      /* Stack exception. */
-       case 13: return (SIGSEGV);      /* General protection. */
-       case 14: return (SIGSEGV);      /* Page fault. */
-       case 16: return (SIGEMT);       /* Coprocessor error. */
+       case T_BPTFLT: return (SIGTRAP);
+       case T_ARITHTRAP: return (SIGFPE);
+       case T_PROTFLT: return (SIGSEGV);
+       case T_TRCTRAP: return (SIGTRAP);
+       case T_PAGEFLT: return (SIGSEGV);
+       case T_DIVIDE: return (SIGFPE);
+       case T_NMI: return (SIGTRAP);
+       case T_FPOPFLT: return (SIGILL);
+       case T_TSSFLT: return (SIGSEGV);
+       case T_SEGNPFLT: return (SIGSEGV);
+       case T_STKFLT: return (SIGSEGV);
+       case T_XMMFLT: return (SIGFPE);
        }
        return (SIGEMT);
 }
diff --git a/sys/i386/i386/gdb_machdep.c b/sys/i386/i386/gdb_machdep.c
index d501b847fda9..fd522309dbb2 100644
--- a/sys/i386/i386/gdb_machdep.c
+++ b/sys/i386/i386/gdb_machdep.c
@@ -99,21 +99,18 @@ gdb_cpu_signal(int type, int code)
 {
 
        switch (type & ~T_USER) {
-       case 0: return (SIGFPE);        /* Divide by zero. */
-       case 1: return (SIGTRAP);       /* Debug exception. */
-       case 3: return (SIGTRAP);       /* Breakpoint. */
-       case 4: return (SIGURG);        /* into instr. (overflow). */
-       case 5: return (SIGURG);        /* bound instruction. */
-       case 6: return (SIGILL);        /* Invalid opcode. */
-       case 7: return (SIGFPE);        /* Coprocessor not present. */
-       case 8: return (SIGEMT);        /* Double fault. */
-       case 9: return (SIGSEGV);       /* Coprocessor segment overrun. */
-       case 10: return (SIGTRAP);      /* Invalid TSS (also single-step). */
-       case 11: return (SIGSEGV);      /* Segment not present. */
-       case 12: return (SIGSEGV);      /* Stack exception. */
-       case 13: return (SIGSEGV);      /* General protection. */
-       case 14: return (SIGSEGV);      /* Page fault. */
-       case 16: return (SIGEMT);       /* Coprocessor error. */
+       case T_BPTFLT: return (SIGTRAP);
+       case T_ARITHTRAP: return (SIGFPE);
+       case T_PROTFLT: return (SIGSEGV);
+       case T_TRCTRAP: return (SIGTRAP);
+       case T_PAGEFLT: return (SIGSEGV);
+       case T_DIVIDE: return (SIGFPE);
+       case T_NMI: return (SIGTRAP);
+       case T_FPOPFLT: return (SIGILL);
+       case T_TSSFLT: return (SIGSEGV);
+       case T_SEGNPFLT: return (SIGSEGV);
+       case T_STKFLT: return (SIGSEGV);
+       case T_XMMFLT: return (SIGFPE);
        }
        return (SIGEMT);
 }
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to