summaryrefslogtreecommitdiffstats
path: root/sys/arm64
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2015-08-23 13:18:56 +0000
committerandrew <andrew@FreeBSD.org>2015-08-23 13:18:56 +0000
commitcbbb7c2fa08fbfb0e0c9f7394461fe02699d81ba (patch)
tree8227818c98c3fb5c97687c0e9cb902ab9b2c9960 /sys/arm64
parent790cec3cb6ea4528fae1765be8cfc6458e05c64f (diff)
downloadFreeBSD-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.c6
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,
OpenPOWER on IntegriCloud