Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/powerpc/trap.c
Show First 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | static struct powerpc_exception powerpc_exceptions[] = { | ||||
{ EXC_SMI, "system management" }, | { EXC_SMI, "system management" }, | ||||
{ EXC_VECAST_G4, "altivec assist" }, | { EXC_VECAST_G4, "altivec assist" }, | ||||
{ EXC_THRM, "thermal management" }, | { EXC_THRM, "thermal management" }, | ||||
{ EXC_RUNMODETRC, "run mode/trace" }, | { EXC_RUNMODETRC, "run mode/trace" }, | ||||
{ EXC_SOFT_PATCH, "soft patch exception" }, | { EXC_SOFT_PATCH, "soft patch exception" }, | ||||
{ EXC_LAST, NULL } | { EXC_LAST, NULL } | ||||
}; | }; | ||||
static int uprintf_signal; | |||||
SYSCTL_INT(_machdep, OID_AUTO, uprintf_signal, CTLFLAG_RWTUN, | |||||
&uprintf_signal, 0, | |||||
"Print debugging information on trap signal to ctty"); | |||||
#define ESR_BITMASK \ | #define ESR_BITMASK \ | ||||
"\20" \ | "\20" \ | ||||
"\040b0\037b1\036b2\035b3\034PIL\033PRR\032PTR\031FP" \ | "\040b0\037b1\036b2\035b3\034PIL\033PRR\032PTR\031FP" \ | ||||
"\030ST\027b9\026DLK\025ILK\024b12\023b13\022BO\021PIE" \ | "\030ST\027b9\026DLK\025ILK\024b12\023b13\022BO\021PIE" \ | ||||
"\020b16\017b17\016b18\015b19\014b20\013b21\012b22\011b23" \ | "\020b16\017b17\016b18\015b19\014b20\013b21\012b22\011b23" \ | ||||
"\010SPE\007EPID\006b26\005b27\004b28\003b29\002b30\001b31" | "\010SPE\007EPID\006b26\005b27\004b28\003b29\002b30\001b31" | ||||
#define MCSR_BITMASK \ | #define MCSR_BITMASK \ | ||||
"\20" \ | "\20" \ | ||||
▲ Show 20 Lines • Show All 321 Lines • ▼ Show 20 Lines | #endif | ||||
if (sig != 0) { | if (sig != 0) { | ||||
if (p->p_sysent->sv_transtrap != NULL) | if (p->p_sysent->sv_transtrap != NULL) | ||||
sig = (p->p_sysent->sv_transtrap)(sig, type); | sig = (p->p_sysent->sv_transtrap)(sig, type); | ||||
ksiginfo_init_trap(&ksi); | ksiginfo_init_trap(&ksi); | ||||
ksi.ksi_signo = sig; | ksi.ksi_signo = sig; | ||||
ksi.ksi_code = (int) ucode; /* XXX, not POSIX */ | ksi.ksi_code = (int) ucode; /* XXX, not POSIX */ | ||||
ksi.ksi_addr = (void *)addr; | ksi.ksi_addr = (void *)addr; | ||||
ksi.ksi_trapno = type; | ksi.ksi_trapno = type; | ||||
if (uprintf_signal) { | |||||
uprintf("pid %d comm %s: signal %d code %d type %d " | |||||
"addr 0x%lx r1 0x%lx srr0 0x%lx srr1 0x%lx\n", | |||||
bdragon: This will fail to build on ppc32.
```
Building /usr/obj/usr/src/powerpc. | |||||
p->p_pid, p->p_comm, sig, ucode, type, | |||||
(u_long)addr, (u_long)frame->fixreg[1], | |||||
(u_long)frame->srr0, (u_long)frame->srr1); | |||||
} | |||||
Done Inline ActionsExtra newline. bdragon: Extra newline. | |||||
trapsignal(td, &ksi); | trapsignal(td, &ksi); | ||||
} | } | ||||
userret(td, frame); | userret(td, frame); | ||||
} | } | ||||
static void | static void | ||||
trap_fatal(struct trapframe *frame) | trap_fatal(struct trapframe *frame) | ||||
▲ Show 20 Lines • Show All 495 Lines • Show Last 20 Lines |
This will fail to build on ppc32.
Need to cast the registers to unsigned long.