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. Reviewed by: kib Discussed with: jhb MFC after: 1 week Sponsored by: NetApp, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D27645
This commit is contained in:
parent
3f3cc995a3
commit
962c06c5a3
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user