diff options
author | andrew <andrew@FreeBSD.org> | 2015-08-23 13:18:56 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-08-23 13:18:56 +0000 |
commit | cbbb7c2fa08fbfb0e0c9f7394461fe02699d81ba (patch) | |
tree | 8227818c98c3fb5c97687c0e9cb902ab9b2c9960 /sys/arm64 | |
parent | 790cec3cb6ea4528fae1765be8cfc6458e05c64f (diff) | |
download | FreeBSD-src-cbbb7c2fa08fbfb0e0c9f7394461fe02699d81ba.zip FreeBSD-src-cbbb7c2fa08fbfb0e0c9f7394461fe02699d81ba.tar.gz |
Handle the breakpoint instruction in userland by sending a SIGTRAP signal.
Diffstat (limited to 'sys/arm64')
-rw-r--r-- | sys/arm64/arm64/trap.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c index 412dc98..5802151 100644 --- a/sys/arm64/arm64/trap.c +++ b/sys/arm64/arm64/trap.c @@ -327,6 +327,7 @@ el0_excp_unknown(struct trapframe *frame) void do_el0_sync(struct trapframe *frame) { + struct thread *td; uint32_t exception; uint64_t esr; @@ -368,6 +369,11 @@ do_el0_sync(struct trapframe *frame) case EXCP_UNKNOWN: el0_excp_unknown(frame); break; + case EXCP_BRK: + td = curthread; + call_trapsignal(td, SIGTRAP, TRAP_BRKPT, (void *)frame->tf_elr); + userret(td, frame); + break; default: print_registers(frame); panic("Unknown userland exception %x esr_el1 %lx\n", exception, |