bcm64: implement dtracy support
This commit is contained in:
parent
78c7cd0c01
commit
f42e53655e
|
@ -658,3 +658,16 @@ TEXT vserr(SB), 1, $-4
|
||||||
ORR $(3<<32), R0 // type
|
ORR $(3<<32), R0 // type
|
||||||
_vserrpatch:
|
_vserrpatch:
|
||||||
B _vserrpatch // branch to vtrapX() patched in
|
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
|
||||||
|
|
|
@ -65,6 +65,7 @@ LIB=\
|
||||||
/$objtype/lib/libsec.a\
|
/$objtype/lib/libsec.a\
|
||||||
/$objtype/lib/libmp.a\
|
/$objtype/lib/libmp.a\
|
||||||
/$objtype/lib/libc.a\
|
/$objtype/lib/libc.a\
|
||||||
|
/$objtype/lib/libdtracy.a\
|
||||||
|
|
||||||
9:V: $p$CONF s$p$CONF
|
9:V: $p$CONF s$p$CONF
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ dev
|
||||||
# gpio gpio
|
# gpio gpio
|
||||||
sd
|
sd
|
||||||
usb
|
usb
|
||||||
|
dtracy
|
||||||
|
|
||||||
link
|
link
|
||||||
loopbackmedium
|
loopbackmedium
|
||||||
|
@ -43,6 +44,9 @@ misc
|
||||||
dma
|
dma
|
||||||
vcore
|
vcore
|
||||||
|
|
||||||
|
dtracysys
|
||||||
|
dtracytimer
|
||||||
|
|
||||||
port
|
port
|
||||||
int cpuserver = 0;
|
int cpuserver = 0;
|
||||||
|
|
||||||
|
|
|
@ -442,13 +442,22 @@ faultarm64(Ureg *ureg)
|
||||||
insyscall = up->insyscall;
|
insyscall = up->insyscall;
|
||||||
up->insyscall = 1;
|
up->insyscall = 1;
|
||||||
|
|
||||||
if(!userureg(ureg) && waserror()){
|
if(!userureg(ureg)){
|
||||||
if(up->nerrlab == 0){
|
extern void _peekinst(void);
|
||||||
pprint("suicide: sys: %s\n", up->errstr);
|
|
||||||
pexit(up->errstr, 1);
|
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();
|
addr = getfar();
|
||||||
|
@ -486,6 +495,7 @@ faultarm64(Ureg *ureg)
|
||||||
if(!userureg(ureg))
|
if(!userureg(ureg))
|
||||||
poperror();
|
poperror();
|
||||||
|
|
||||||
|
out:
|
||||||
up->insyscall = insyscall;
|
up->insyscall = insyscall;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue