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