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