Report TRAP_BRKPT for breakpoint traps on sparc64.

Reviewed by:	marius
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D15190
This commit is contained in:
John Baldwin 2018-05-09 15:25:26 +00:00
parent 806b3bbe97
commit 485415ec47
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=333416

View File

@ -257,7 +257,7 @@ trap(struct trapframe *tf)
struct thread *td; struct thread *td;
struct proc *p; struct proc *p;
int error; int error;
int sig; int sig, ucode;
register_t addr; register_t addr;
ksiginfo_t ksi; ksiginfo_t ksi;
@ -277,6 +277,7 @@ trap(struct trapframe *tf)
td->td_pticks = 0; td->td_pticks = 0;
td->td_frame = tf; td->td_frame = tf;
addr = tf->tf_tpc; addr = tf->tf_tpc;
ucode = (int)tf->tf_type; /* XXX not POSIX */
if (td->td_cowgen != p->p_cowgen) if (td->td_cowgen != p->p_cowgen)
thread_cow_update(td); thread_cow_update(td);
@ -300,6 +301,10 @@ trap(struct trapframe *tf)
case T_CORRECTED_ECC_ERROR: case T_CORRECTED_ECC_ERROR:
sig = trap_cecc(); sig = trap_cecc();
break; break;
case T_BREAKPOINT:
sig = SIGTRAP;
ucode = TRAP_BRKPT;
break;
default: default:
if (tf->tf_type > T_MAX) if (tf->tf_type > T_MAX)
panic("trap: bad trap type %#lx (user)", panic("trap: bad trap type %#lx (user)",
@ -322,7 +327,7 @@ trap(struct trapframe *tf)
kdb_enter(KDB_WHY_TRAPSIG, "trapsig"); kdb_enter(KDB_WHY_TRAPSIG, "trapsig");
ksiginfo_init_trap(&ksi); ksiginfo_init_trap(&ksi);
ksi.ksi_signo = sig; ksi.ksi_signo = sig;
ksi.ksi_code = (int)tf->tf_type; /* XXX not POSIX */ ksi.ksi_code = ucode;
ksi.ksi_addr = (void *)addr; ksi.ksi_addr = (void *)addr;
ksi.ksi_trapno = (int)tf->tf_type; ksi.ksi_trapno = (int)tf->tf_type;
trapsignal(td, &ksi); trapsignal(td, &ksi);