bcm64: implement dtracy support

This commit is contained in:
cinap_lenrek 2019-06-14 10:28:30 +02:00
parent 78c7cd0c01
commit f42e53655e
4 changed files with 34 additions and 6 deletions

View file

@ -658,3 +658,16 @@ TEXT vserr(SB), 1, $-4
ORR $(3<<32), R0 // type
_vserrpatch:
B _vserrpatch // branch to vtrapX() patched in
/* fault-proof memcpy */
TEXT peek(SB), 1, $-4
MOV R0, R1
MOV dst+8(FP), R2
MOVWU len+16(FP), R0
TEXT _peekinst(SB), 1, $-4
_peekloop:
MOVBU (R1)1!, R3
MOVBU R3, (R2)1!
SUBS $1, R0
BNE _peekloop
RETURN

View file

@ -65,6 +65,7 @@ LIB=\
/$objtype/lib/libsec.a\
/$objtype/lib/libmp.a\
/$objtype/lib/libc.a\
/$objtype/lib/libdtracy.a\
9:V: $p$CONF s$p$CONF

View file

@ -21,6 +21,7 @@ dev
# gpio gpio
sd
usb
dtracy
link
loopbackmedium
@ -43,6 +44,9 @@ misc
dma
vcore
dtracysys
dtracytimer
port
int cpuserver = 0;

View file

@ -442,13 +442,22 @@ faultarm64(Ureg *ureg)
insyscall = up->insyscall;
up->insyscall = 1;
if(!userureg(ureg) && waserror()){
if(up->nerrlab == 0){
pprint("suicide: sys: %s\n", up->errstr);
pexit(up->errstr, 1);
if(!userureg(ureg)){
extern void _peekinst(void);
if(ureg->pc == (uintptr)_peekinst){
ureg->pc = ureg->link;
goto out;
}
if(waserror()){
if(up->nerrlab == 0){
pprint("suicide: sys: %s\n", up->errstr);
pexit(up->errstr, 1);
}
up->insyscall = insyscall;
nexterror();
}
up->insyscall = insyscall;
nexterror();
}
addr = getfar();
@ -486,6 +495,7 @@ faultarm64(Ureg *ureg)
if(!userureg(ureg))
poperror();
out:
up->insyscall = insyscall;
}