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
|
||||
_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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue