65 lines
901 B
ArmAsm
65 lines
901 B
ArmAsm
|
.globl ___Get_PC, ___Set_PC
|
||
|
|
||
|
! $Header$
|
||
|
|
||
|
! This is the machine-dependant part of the ACK debugger support.
|
||
|
! ___Get_PC takes a frame pointer (local base) argument and returns the
|
||
|
! return address from this frame.
|
||
|
! ___Set_PC takes a frame pointer (local base) argument plus a return
|
||
|
! address and sets the return address of this frame to the
|
||
|
! return address supplied.
|
||
|
|
||
|
___Get_PC:
|
||
|
ld [%l0],%o0
|
||
|
tst %o0
|
||
|
beq 3f
|
||
|
nop
|
||
|
cmp %o0,%l1
|
||
|
bne 1f
|
||
|
nop
|
||
|
add %i7, 8, %o0
|
||
|
3:
|
||
|
retl
|
||
|
nop
|
||
|
1:
|
||
|
ta 3
|
||
|
add %l1,%g0,%o1
|
||
|
2: add %o1,7,%o2
|
||
|
andn %o2,7,%o2
|
||
|
ld [%o2+4],%o1
|
||
|
cmp %o0,%o1
|
||
|
bne 2b
|
||
|
nop
|
||
|
ld [%o2+0x3c],%o0
|
||
|
inc 8,%o0
|
||
|
retl
|
||
|
nop
|
||
|
|
||
|
___Set_PC:
|
||
|
ld [%l0],%o0
|
||
|
tst %o0
|
||
|
beq 3f
|
||
|
nop
|
||
|
cmp %o0,%l1
|
||
|
bne 1f
|
||
|
nop
|
||
|
ld [%l0+4],%i7
|
||
|
dec 8,%i7
|
||
|
3:
|
||
|
retl
|
||
|
nop
|
||
|
1:
|
||
|
ta 3
|
||
|
add %l1,%g0,%o1
|
||
|
2: add %o1,7,%o2
|
||
|
andn %o2,7,%o2
|
||
|
ld [%o2+4],%o1
|
||
|
cmp %o0,%o1
|
||
|
bne 2b
|
||
|
nop
|
||
|
ld [%l0+4],%o0
|
||
|
dec 8,%o0
|
||
|
st %o0,[%o2+0x3c]
|
||
|
retl
|
||
|
nop
|