static __inline int data_abort_fixup(trapframe_t *tf, u_int fsr, u_int far, struct thread *td, struct ksig *ksig) { #ifdef CPU_ABORT_FIXUP_REQUIRED int error; /* Call the cpu specific data abort fixup routine */ error = cpu_dataabt_fixup(tf); if (__predict_true(error != ABORT_FIXUP_FAILED)) return (error); /* * Oops, couldn't fix up the instruction */ printf("data_abort_fixup: fixup for %s mode data abort failed.\n", TRAP_USERMODE(tf) ? "user" : "kernel"); printf("pc = 0x%08x, opcode 0x%08x, insn = ", tf->tf_pc, *((u_int *)tf->tf_pc)); disassemble(tf->tf_pc); /* Die now if this happened in kernel mode */ if (!TRAP_USERMODE(tf)) dab_fatal(tf, fsr, far, td, NULL, ksig); return (error); #else return (ABORT_FIXUP_OK); #endif /* CPU_ABORT_FIXUP_REQUIRED */ }
static inline int data_abort_fixup(trapframe_t *tf, u_int fsr, u_int far, struct lwp *l) { #ifdef CPU_ABORT_FIXUP_REQUIRED int error; /* Call the CPU specific data abort fixup routine */ error = cpu_dataabt_fixup(tf); if (__predict_true(error != ABORT_FIXUP_FAILED)) return (error); /* * Oops, couldn't fix up the instruction */ printf("%s: fixup for %s mode data abort failed.\n", __func__, TRAP_USERMODE(tf) ? "user" : "kernel"); #ifdef THUMB_CODE if (tf->tf_spsr & PSR_T_bit) { printf("pc = 0x%08x, opcode 0x%04x, 0x%04x, insn = ", tf->tf_pc, *((uint16 *)(tf->tf_pc & ~1)), *((uint16 *)((tf->tf_pc + 2) & ~1))); } else #endif { printf("pc = 0x%08x, opcode 0x%08x, insn = ", tf->tf_pc, *((u_int *)tf->tf_pc)); } disassemble(tf->tf_pc); /* Die now if this happened in kernel mode */ if (!TRAP_USERMODE(tf)) dab_fatal(tf, fsr, far, l, NULL); return (error); #else return (ABORT_FIXUP_OK); #endif /* CPU_ABORT_FIXUP_REQUIRED */ }