Deleted Added
full compact
trap.c (295882) trap.c (295893)
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 295882 2016-02-22 09:08:04Z skra $");
36__FBSDID("$FreeBSD: head/sys/riscv/riscv/trap.c 295893 2016-02-22 14:54:50Z 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>

--- 220 unchanged lines hidden (view full) ---

265 curthread, frame->tf_sepc, frame);
266
267 switch(exception) {
268 case EXCP_LOAD_ACCESS_FAULT:
269 case EXCP_STORE_ACCESS_FAULT:
270 case EXCP_INSTR_ACCESS_FAULT:
271 data_abort(frame, 0);
272 break;
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>

--- 220 unchanged lines hidden (view full) ---

265 curthread, frame->tf_sepc, frame);
266
267 switch(exception) {
268 case EXCP_LOAD_ACCESS_FAULT:
269 case EXCP_STORE_ACCESS_FAULT:
270 case EXCP_INSTR_ACCESS_FAULT:
271 data_abort(frame, 0);
272 break;
273 case EXCP_INSTR_BREAKPOINT:
274#ifdef KDB
275 kdb_trap(exception, 0, frame);
276#else
277 dump_regs(frame);
278 panic("No debugger in kernel.\n");
279#endif
280 case EXCP_INSTR_ILLEGAL:
281 dump_regs(frame);
282 panic("Illegal instruction at %x\n", frame->tf_sepc);
283 break;
273 default:
274 dump_regs(frame);
275 panic("Unknown kernel exception %x badaddr %lx\n",
276 exception, frame->tf_sbadaddr);
277 }
278}
279
280void
281do_trap_user(struct trapframe *frame)
282{
283 uint64_t exception;
284 default:
285 dump_regs(frame);
286 panic("Unknown kernel exception %x badaddr %lx\n",
287 exception, frame->tf_sbadaddr);
288 }
289}
290
291void
292do_trap_user(struct trapframe *frame)
293{
294 uint64_t exception;
295 struct thread *td;
284
296
297 td = curthread;
298 td->td_frame = frame;
299
285 exception = (frame->tf_scause & EXCP_MASK);
286 if (frame->tf_scause & EXCP_INTR) {
287 /* Interrupt */
288 riscv_cpu_intr(frame);
289 return;
290 }
291
292 CTR3(KTR_TRAP, "do_trap_user: curthread: %p, sepc: %lx, frame: %p",

--- 4 unchanged lines hidden (view full) ---

297 case EXCP_STORE_ACCESS_FAULT:
298 case EXCP_INSTR_ACCESS_FAULT:
299 data_abort(frame, 1);
300 break;
301 case EXCP_UMODE_ENV_CALL:
302 frame->tf_sepc += 4; /* Next instruction */
303 svc_handler(frame);
304 break;
300 exception = (frame->tf_scause & EXCP_MASK);
301 if (frame->tf_scause & EXCP_INTR) {
302 /* Interrupt */
303 riscv_cpu_intr(frame);
304 return;
305 }
306
307 CTR3(KTR_TRAP, "do_trap_user: curthread: %p, sepc: %lx, frame: %p",

--- 4 unchanged lines hidden (view full) ---

312 case EXCP_STORE_ACCESS_FAULT:
313 case EXCP_INSTR_ACCESS_FAULT:
314 data_abort(frame, 1);
315 break;
316 case EXCP_UMODE_ENV_CALL:
317 frame->tf_sepc += 4; /* Next instruction */
318 svc_handler(frame);
319 break;
320 case EXCP_INSTR_ILLEGAL:
321 call_trapsignal(td, SIGILL, ILL_ILLTRP, (void *)frame->tf_sepc);
322 userret(td, frame);
323 break;
324 case EXCP_INSTR_BREAKPOINT:
325 call_trapsignal(td, SIGTRAP, TRAP_BRKPT, (void *)frame->tf_sepc);
326 userret(td, frame);
327 break;
305 default:
306 dump_regs(frame);
307 panic("Unknown userland exception %x badaddr %lx\n",
308 exception, frame->tf_sbadaddr);
309 }
310}
328 default:
329 dump_regs(frame);
330 panic("Unknown userland exception %x badaddr %lx\n",
331 exception, frame->tf_sbadaddr);
332 }
333}