Deleted Added
full compact
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 ---