xref: /minix3/lib/libc/arch/powerpc/sys/ptrace.S (revision 84d9c625bfea59e274550651111ae9edfdc40fbd)
1*84d9c625SLionel Sambuc/*	$NetBSD: ptrace.S,v 1.7 2013/09/12 15:36:15 joerg Exp $	*/
22fe8fb19SBen Gras
32fe8fb19SBen Gras#include "SYS.h"
42fe8fb19SBen Gras#include "assym.h"
52fe8fb19SBen Gras
62fe8fb19SBen Gras#if defined(LIBC_SCCS) && !defined(lint)
7*84d9c625SLionel Sambuc__RCSID("$NetBSD: ptrace.S,v 1.7 2013/09/12 15:36:15 joerg Exp $")
82fe8fb19SBen Gras#endif /* LIBC_SCCS && !lint */
92fe8fb19SBen Gras
102fe8fb19SBen Gras#define	XCALLFRAMELEN		((((2+5)*SZREG) + CALLFRAMELEN - 1) & -CALLFRAMELEN)
112fe8fb19SBen Gras#define	XCALLFRAME_DATA		(XCALLFRAMELEN - 1*SZREG)
122fe8fb19SBen Gras#define	XCALLFRAME_ADDR		(XCALLFRAMELEN - 2*SZREG)
132fe8fb19SBen Gras#define	XCALLFRAME_PID		(XCALLFRAMELEN - 3*SZREG)
142fe8fb19SBen Gras#define	XCALLFRAME_REQUEST	(XCALLFRAMELEN - 4*SZREG)
152fe8fb19SBen Gras#define	XCALLFRAME_R30		(XCALLFRAMELEN - 5*SZREG)
162fe8fb19SBen Gras
172fe8fb19SBen GrasENTRY(ptrace)
182fe8fb19SBen Gras#ifdef _REENTRANT
192fe8fb19SBen Gras	mflr	%r0
202fe8fb19SBen Gras	stw	%r0,CALLFRAME_LR(%r1)
212fe8fb19SBen Gras	stwu	%r1,-XCALLFRAMELEN(%r1)
222fe8fb19SBen Gras	stw	%r3,XCALLFRAME_REQUEST(%r1)
232fe8fb19SBen Gras	stw	%r4,XCALLFRAME_PID(%r1)
242fe8fb19SBen Gras	stw	%r5,XCALLFRAME_ADDR(%r1)
252fe8fb19SBen Gras	stw	%r6,XCALLFRAME_DATA(%r1)
26*84d9c625SLionel Sambuc#ifdef __PIC__
272fe8fb19SBen Gras	stw	%r30,XCALLFRAME_R30(%r1)
282fe8fb19SBen Gras	PIC_TOCSETUP(ptrace, %r30)
292fe8fb19SBen Gras#endif
302fe8fb19SBen Gras
312fe8fb19SBen Gras	bl	PIC_PLT(_C_LABEL(__errno))
322fe8fb19SBen Gras	li	%r7,0
332fe8fb19SBen Gras	stw	%r7,0(%r3)
342fe8fb19SBen Gras
35*84d9c625SLionel Sambuc#ifdef __PIC__
362fe8fb19SBen Gras	lwz	%r30,XCALLFRAME_R30(%r1)
372fe8fb19SBen Gras#endif
382fe8fb19SBen Gras	lwz	%r6,XCALLFRAME_DATA(%r1)
392fe8fb19SBen Gras	lwz	%r4,XCALLFRAME_PID(%r1)
402fe8fb19SBen Gras	lwz	%r5,XCALLFRAME_ADDR(%r1)
412fe8fb19SBen Gras	lwz	%r3,XCALLFRAME_REQUEST(%r1)
422fe8fb19SBen Gras	addi	%r1,%r1,XCALLFRAMELEN
432fe8fb19SBen Gras	lwz	%r0,CALLFRAME_LR(%r1)
442fe8fb19SBen Gras	mtlr	%r0
452fe8fb19SBen Gras#else
46*84d9c625SLionel Sambuc#ifdef __PIC__
472fe8fb19SBen Gras	mflr	%r0
482fe8fb19SBen Gras	PIC_GOTSETUP(%r7)
492fe8fb19SBen Gras	lwz	%r7,_C_LABEL(errno)@got(%r7)
502fe8fb19SBen Gras	li	%r8,0
512fe8fb19SBen Gras	stw	%r8,0(%r7)
522fe8fb19SBen Gras	mtlr	0
532fe8fb19SBen Gras#else
542fe8fb19SBen Gras	lis	%r7,_C_LABEL(errno)@ha
552fe8fb19SBen Gras	li	%r8,0
562fe8fb19SBen Gras	stw	%r8,_C_LABEL(errno)@l(%r7)
57*84d9c625SLionel Sambuc#endif /* __PIC__ */
582fe8fb19SBen Gras#endif /* _REENTRANT */
592fe8fb19SBen Gras	_DOSYSCALL(ptrace)
602fe8fb19SBen Gras	bnslr
612fe8fb19SBen Gras	b	_C_LABEL(__cerror)
62