remove more uses of trap_conversion to get more meaningful trap messages
add a printf for when we fault on the direct area (should never happen)
This commit is contained in:
parent
267271f602
commit
160dc4ccc8
@ -280,7 +280,7 @@ trap(struct trapframe *tf, int64_t type, uint64_t data)
|
|||||||
td = PCPU_GET(curthread);
|
td = PCPU_GET(curthread);
|
||||||
|
|
||||||
CTR4(KTR_TRAP, "trap: %p type=%s (%s) pil=%#lx", td,
|
CTR4(KTR_TRAP, "trap: %p type=%s (%s) pil=%#lx", td,
|
||||||
trap_msg[trap_conversion[trapno]],
|
trap_msg[trapno],
|
||||||
(TRAPF_USERMODE(tf) ? "user" : "kernel"), rdpr(pil));
|
(TRAPF_USERMODE(tf) ? "user" : "kernel"), rdpr(pil));
|
||||||
|
|
||||||
PCPU_LAZY_INC(cnt.v_trap);
|
PCPU_LAZY_INC(cnt.v_trap);
|
||||||
@ -344,7 +344,7 @@ trap(struct trapframe *tf, int64_t type, uint64_t data)
|
|||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
if (sig == 4 || sig == 10 || sig == 11)
|
if (sig == 4 || sig == 10 || sig == 11)
|
||||||
printf("trap: %ld:%s: 0x%lx at 0x%lx on cpu=%d sig=%d\n", trapno,
|
printf("trap: %ld:%s: 0x%lx at 0x%lx on cpu=%d sig=%d\n", trapno,
|
||||||
trap_msg[trap_conversion[trapno]], data, tf->tf_tpc, curcpu, sig);
|
trap_msg[trapno], data, tf->tf_tpc, curcpu, sig);
|
||||||
#endif
|
#endif
|
||||||
/* XXX I've renumbered the traps to largely reflect what the hardware uses
|
/* XXX I've renumbered the traps to largely reflect what the hardware uses
|
||||||
* so this will need to be re-visited
|
* so this will need to be re-visited
|
||||||
@ -361,7 +361,8 @@ trap(struct trapframe *tf, int64_t type, uint64_t data)
|
|||||||
mtx_assert(&Giant, MA_NOTOWNED);
|
mtx_assert(&Giant, MA_NOTOWNED);
|
||||||
} else {
|
} else {
|
||||||
KASSERT((type & T_KERNEL) != 0,
|
KASSERT((type & T_KERNEL) != 0,
|
||||||
("trap: kernel trap isn't"));
|
("trap: kernel trap isn't - trap: %ld:%s: 0x%lx at 0x%lx on cpu=%d\n",
|
||||||
|
trapno, trap_msg[trapno], data, tf->tf_tpc, curcpu));
|
||||||
|
|
||||||
#ifdef KDB
|
#ifdef KDB
|
||||||
if (kdb_active) {
|
if (kdb_active) {
|
||||||
@ -386,7 +387,7 @@ trap(struct trapframe *tf, int64_t type, uint64_t data)
|
|||||||
case T_DATA_EXCEPTION:
|
case T_DATA_EXCEPTION:
|
||||||
printf("data exception on 0x%lx at 0x%lx\n", data, tf->tf_tpc);
|
printf("data exception on 0x%lx at 0x%lx\n", data, tf->tf_tpc);
|
||||||
printf("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx\n", trapno,
|
printf("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx\n", trapno,
|
||||||
trap_msg[trap_conversion[trapno]], data, tf->tf_tpc, tf->tf_tnpc);
|
trap_msg[trapno], data, tf->tf_tpc, tf->tf_tnpc);
|
||||||
case T_ILLEGAL_INSTRUCTION:
|
case T_ILLEGAL_INSTRUCTION:
|
||||||
if (tf->tf_tpc > KERNBASE) {
|
if (tf->tf_tpc > KERNBASE) {
|
||||||
printf("illinstr: 0x%lx\n", tf->tf_tpc);
|
printf("illinstr: 0x%lx\n", tf->tf_tpc);
|
||||||
@ -423,7 +424,7 @@ trap(struct trapframe *tf, int64_t type, uint64_t data)
|
|||||||
|
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
panic("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx error=%d asi=0x%lx",
|
panic("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx error=%d asi=0x%lx",
|
||||||
trapno, trap_msg[trap_conversion[trapno]], data, tf->tf_tpc,
|
trapno, trap_msg[trapno], data, tf->tf_tpc,
|
||||||
tf->tf_tnpc, error, tf->tf_asi);
|
tf->tf_tnpc, error, tf->tf_asi);
|
||||||
}
|
}
|
||||||
CTR1(KTR_TRAP, "trap: td=%p return", td);
|
CTR1(KTR_TRAP, "trap: td=%p return", td);
|
||||||
@ -443,9 +444,6 @@ trap_pfault(struct thread *td, struct trapframe *tf, int64_t type, uint64_t data
|
|||||||
|
|
||||||
if (td == NULL)
|
if (td == NULL)
|
||||||
return (-1);
|
return (-1);
|
||||||
KASSERT(td->td_pcb != NULL, ("trap_pfault: pcb NULL"));
|
|
||||||
KASSERT(td->td_proc != NULL, ("trap_pfault: curproc NULL"));
|
|
||||||
KASSERT(td->td_proc->p_vmspace != NULL, ("trap_pfault: vmspace NULL"));
|
|
||||||
|
|
||||||
p = td->td_proc;
|
p = td->td_proc;
|
||||||
|
|
||||||
@ -455,13 +453,18 @@ trap_pfault(struct thread *td, struct trapframe *tf, int64_t type, uint64_t data
|
|||||||
type = type & ~T_KERNEL;
|
type = type & ~T_KERNEL;
|
||||||
va = TLB_TAR_VA(data);
|
va = TLB_TAR_VA(data);
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
|
if (data > VM_MIN_DIRECT_ADDRESS)
|
||||||
printf("trap_pfault(type=%ld, data=0x%lx, tpc=0x%lx, ctx=0x%lx)\n",
|
printf("trap_pfault(type=%ld, data=0x%lx, tpc=0x%lx, ctx=0x%lx)\n",
|
||||||
type, data, tf->tf_tpc, ctx);
|
type, data, tf->tf_tpc, ctx);
|
||||||
|
|
||||||
CTR4(KTR_TRAP, "trap_pfault: td=%p pm_ctx=%#lx va=%#lx ctx=%#lx",
|
CTR4(KTR_TRAP, "trap_pfault: td=%p pm_ctx=%#lx va=%#lx ctx=%#lx",
|
||||||
td, p->p_vmspace->vm_pmap.pm_context[PCPU_GET(cpuid)], va, ctx);
|
td, p->p_vmspace->vm_pmap.pm_context[PCPU_GET(cpuid)], va, ctx);
|
||||||
#endif
|
#endif
|
||||||
|
KASSERT(td->td_pcb != NULL, ("trap_pfault: pcb NULL"));
|
||||||
|
KASSERT(td->td_proc != NULL, ("trap_pfault: curproc NULL"));
|
||||||
|
KASSERT(td->td_proc->p_vmspace != NULL, ("trap_pfault: vmspace NULL"));
|
||||||
|
|
||||||
|
|
||||||
if (type == T_DATA_PROTECTION) {
|
if (type == T_DATA_PROTECTION) {
|
||||||
prot = VM_PROT_WRITE;
|
prot = VM_PROT_WRITE;
|
||||||
|
Loading…
Reference in New Issue
Block a user