trap.c (296614) | trap.c (300618) |
---|---|
1/*- 2 * Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com> 3 * All rights reserved. 4 * 5 * Portions of this software were developed by SRI International and the 6 * University of Cambridge Computer Laboratory under DARPA/AFRL contract 7 * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme. 8 * --- 19 unchanged lines hidden (view full) --- 28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com> 3 * All rights reserved. 4 * 5 * Portions of this software were developed by SRI International and the 6 * University of Cambridge Computer Laboratory under DARPA/AFRL contract 7 * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme. 8 * --- 19 unchanged lines hidden (view full) --- 28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35#include <sys/cdefs.h> |
36__FBSDID("$FreeBSD: head/sys/riscv/riscv/trap.c 296614 2016-03-10 15:51:43Z br $"); | 36__FBSDID("$FreeBSD: head/sys/riscv/riscv/trap.c 300618 2016-05-24 16:41:37Z br $"); |
37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/kernel.h> 41#include <sys/lock.h> 42#include <sys/mutex.h> 43#include <sys/pioctl.h> 44#include <sys/bus.h> --- 14 unchanged lines hidden (view full) --- 59 60#include <machine/frame.h> 61#include <machine/pcb.h> 62#include <machine/pcpu.h> 63 64#include <machine/resource.h> 65#include <machine/intr.h> 66 | 37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/kernel.h> 41#include <sys/lock.h> 42#include <sys/mutex.h> 43#include <sys/pioctl.h> 44#include <sys/bus.h> --- 14 unchanged lines hidden (view full) --- 59 60#include <machine/frame.h> 61#include <machine/pcb.h> 62#include <machine/pcpu.h> 63 64#include <machine/resource.h> 65#include <machine/intr.h> 66 |
67#ifdef KDTRACE_HOOKS 68#include <sys/dtrace_bsd.h> 69#endif 70 71int (*dtrace_invop_jump_addr)(struct trapframe *); 72 |
|
67extern register_t fsu_intr_fault; 68 69/* Called from exception.S */ 70void do_trap_supervisor(struct trapframe *); 71void do_trap_user(struct trapframe *); 72 73static __inline void 74call_trapsignal(struct thread *td, int sig, int code, void *addr) --- 191 unchanged lines hidden (view full) --- 266 267 exception = (frame->tf_scause & EXCP_MASK); 268 if (frame->tf_scause & EXCP_INTR) { 269 /* Interrupt */ 270 riscv_cpu_intr(frame); 271 return; 272 } 273 | 73extern register_t fsu_intr_fault; 74 75/* Called from exception.S */ 76void do_trap_supervisor(struct trapframe *); 77void do_trap_user(struct trapframe *); 78 79static __inline void 80call_trapsignal(struct thread *td, int sig, int code, void *addr) --- 191 unchanged lines hidden (view full) --- 272 273 exception = (frame->tf_scause & EXCP_MASK); 274 if (frame->tf_scause & EXCP_INTR) { 275 /* Interrupt */ 276 riscv_cpu_intr(frame); 277 return; 278 } 279 |
280#ifdef KDTRACE_HOOKS 281 if (dtrace_trap_func != NULL && (*dtrace_trap_func)(frame, exception)) 282 return; 283#endif 284 |
|
274 CTR3(KTR_TRAP, "do_trap_supervisor: curthread: %p, sepc: %lx, frame: %p", 275 curthread, frame->tf_sepc, frame); 276 277 switch(exception) { 278 case EXCP_LOAD_ACCESS_FAULT: 279 case EXCP_STORE_ACCESS_FAULT: 280 case EXCP_INSTR_ACCESS_FAULT: 281 data_abort(frame, 0); 282 break; 283 case EXCP_INSTR_BREAKPOINT: | 285 CTR3(KTR_TRAP, "do_trap_supervisor: curthread: %p, sepc: %lx, frame: %p", 286 curthread, frame->tf_sepc, frame); 287 288 switch(exception) { 289 case EXCP_LOAD_ACCESS_FAULT: 290 case EXCP_STORE_ACCESS_FAULT: 291 case EXCP_INSTR_ACCESS_FAULT: 292 data_abort(frame, 0); 293 break; 294 case EXCP_INSTR_BREAKPOINT: |
295#ifdef KDTRACE_HOOKS 296 if (dtrace_invop_jump_addr != 0) { 297 dtrace_invop_jump_addr(frame); 298 break; 299 } 300#endif |
|
284#ifdef KDB 285 kdb_trap(exception, 0, frame); 286#else 287 dump_regs(frame); 288 panic("No debugger in kernel.\n"); 289#endif 290 break; 291 case EXCP_INSTR_ILLEGAL: 292 dump_regs(frame); | 301#ifdef KDB 302 kdb_trap(exception, 0, frame); 303#else 304 dump_regs(frame); 305 panic("No debugger in kernel.\n"); 306#endif 307 break; 308 case EXCP_INSTR_ILLEGAL: 309 dump_regs(frame); |
293 panic("Illegal instruction at %x\n", frame->tf_sepc); | 310 panic("Illegal instruction at 0x%016lx\n", frame->tf_sepc); |
294 break; 295 default: 296 dump_regs(frame); 297 panic("Unknown kernel exception %x badaddr %lx\n", 298 exception, frame->tf_sbadaddr); 299 } 300} 301 --- 43 unchanged lines hidden --- | 311 break; 312 default: 313 dump_regs(frame); 314 panic("Unknown kernel exception %x badaddr %lx\n", 315 exception, frame->tf_sbadaddr); 316 } 317} 318 --- 43 unchanged lines hidden --- |