xref: /netbsd-src/lib/libc/arch/powerpc/sys/ptrace.S (revision 4d12bfcd155352508213ace5ccc59ce930ea2974)
1*4d12bfcdSjoerg/*	$NetBSD: ptrace.S,v 1.7 2013/09/12 15:36:15 joerg Exp $	*/
25ef4bdf6Sthorpej
35ef4bdf6Sthorpej#include "SYS.h"
4cf88c389Smatt#include "assym.h"
5cf88c389Smatt
6cf88c389Smatt#if defined(LIBC_SCCS) && !defined(lint)
7*4d12bfcdSjoerg__RCSID("$NetBSD: ptrace.S,v 1.7 2013/09/12 15:36:15 joerg Exp $")
8cf88c389Smatt#endif /* LIBC_SCCS && !lint */
9cf88c389Smatt
10b79441d4Smatt#define	XCALLFRAMELEN		((((2+5)*SZREG) + CALLFRAMELEN - 1) & -CALLFRAMELEN)
11cf88c389Smatt#define	XCALLFRAME_DATA		(XCALLFRAMELEN - 1*SZREG)
12cf88c389Smatt#define	XCALLFRAME_ADDR		(XCALLFRAMELEN - 2*SZREG)
13cf88c389Smatt#define	XCALLFRAME_PID		(XCALLFRAMELEN - 3*SZREG)
14cf88c389Smatt#define	XCALLFRAME_REQUEST	(XCALLFRAMELEN - 4*SZREG)
15b79441d4Smatt#define	XCALLFRAME_R30		(XCALLFRAMELEN - 5*SZREG)
165ef4bdf6Sthorpej
17a3790819SkleinkENTRY(ptrace)
18a3790819Skleink#ifdef _REENTRANT
191cddd41eSmatt	mflr	%r0
20cf88c389Smatt	stw	%r0,CALLFRAME_LR(%r1)
21cf88c389Smatt	stwu	%r1,-XCALLFRAMELEN(%r1)
22cf88c389Smatt	stw	%r3,XCALLFRAME_REQUEST(%r1)
23cf88c389Smatt	stw	%r4,XCALLFRAME_PID(%r1)
24cf88c389Smatt	stw	%r5,XCALLFRAME_ADDR(%r1)
25cf88c389Smatt	stw	%r6,XCALLFRAME_DATA(%r1)
26*4d12bfcdSjoerg#ifdef __PIC__
27b79441d4Smatt	stw	%r30,XCALLFRAME_R30(%r1)
28b79441d4Smatt	PIC_TOCSETUP(ptrace, %r30)
29b79441d4Smatt#endif
30a3790819Skleink
31a3790819Skleink	bl	PIC_PLT(_C_LABEL(__errno))
321cddd41eSmatt	li	%r7,0
331cddd41eSmatt	stw	%r7,0(%r3)
34a3790819Skleink
35*4d12bfcdSjoerg#ifdef __PIC__
36b79441d4Smatt	lwz	%r30,XCALLFRAME_R30(%r1)
37b79441d4Smatt#endif
38cf88c389Smatt	lwz	%r6,XCALLFRAME_DATA(%r1)
39cf88c389Smatt	lwz	%r4,XCALLFRAME_PID(%r1)
40cf88c389Smatt	lwz	%r5,XCALLFRAME_ADDR(%r1)
41cf88c389Smatt	lwz	%r3,XCALLFRAME_REQUEST(%r1)
42cf88c389Smatt	addi	%r1,%r1,XCALLFRAMELEN
43cf88c389Smatt	lwz	%r0,CALLFRAME_LR(%r1)
441cddd41eSmatt	mtlr	%r0
45a3790819Skleink#else
46*4d12bfcdSjoerg#ifdef __PIC__
471cddd41eSmatt	mflr	%r0
48b79441d4Smatt	PIC_GOTSETUP(%r7)
491cddd41eSmatt	lwz	%r7,_C_LABEL(errno)@got(%r7)
501cddd41eSmatt	li	%r8,0
511cddd41eSmatt	stw	%r8,0(%r7)
52a3790819Skleink	mtlr	0
53a3790819Skleink#else
541cddd41eSmatt	lis	%r7,_C_LABEL(errno)@ha
551cddd41eSmatt	li	%r8,0
561cddd41eSmatt	stw	%r8,_C_LABEL(errno)@l(%r7)
57*4d12bfcdSjoerg#endif /* __PIC__ */
58a3790819Skleink#endif /* _REENTRANT */
59cf88c389Smatt	_DOSYSCALL(ptrace)
60b79441d4Smatt	bnslr
61cf88c389Smatt	b	_C_LABEL(__cerror)
62