|
@@ -0,0 +1,64 @@
|
|
|
+.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
|