ptrace.S revision 1.5
11.5Smatt/* $NetBSD: ptrace.S,v 1.5 2011/01/15 07:31:13 matt Exp $ */ 21.1Sthorpej 31.1Sthorpej#include "SYS.h" 41.5Smatt#include "assym.h" 51.5Smatt 61.5Smatt#if defined(LIBC_SCCS) && !defined(lint) 71.5Smatt__RCSID("$NetBSD: ptrace.S,v 1.5 2011/01/15 07:31:13 matt Exp $") 81.5Smatt#endif /* LIBC_SCCS && !lint */ 91.5Smatt 101.5Smatt#define XCALLFRAMELEN ((((2+4)*SZREG) + CALLFRAMELEN - 1) & -CALLFRAMELEN) 111.5Smatt#define XCALLFRAME_DATA (XCALLFRAMELEN - 1*SZREG) 121.5Smatt#define XCALLFRAME_ADDR (XCALLFRAMELEN - 2*SZREG) 131.5Smatt#define XCALLFRAME_PID (XCALLFRAMELEN - 3*SZREG) 141.5Smatt#define XCALLFRAME_REQUEST (XCALLFRAMELEN - 4*SZREG) 151.1Sthorpej 161.3SkleinkENTRY(ptrace) 171.3Skleink#ifdef _REENTRANT 181.4Smatt mflr %r0 191.5Smatt stw %r0,CALLFRAME_LR(%r1) 201.5Smatt stwu %r1,-XCALLFRAMELEN(%r1) 211.5Smatt stw %r3,XCALLFRAME_REQUEST(%r1) 221.5Smatt stw %r4,XCALLFRAME_PID(%r1) 231.5Smatt stw %r5,XCALLFRAME_ADDR(%r1) 241.5Smatt stw %r6,XCALLFRAME_DATA(%r1) 251.3Skleink 261.3Skleink bl PIC_PLT(_C_LABEL(__errno)) 271.4Smatt li %r7,0 281.4Smatt stw %r7,0(%r3) 291.3Skleink 301.5Smatt lwz %r6,XCALLFRAME_DATA(%r1) 311.5Smatt lwz %r4,XCALLFRAME_PID(%r1) 321.5Smatt lwz %r5,XCALLFRAME_ADDR(%r1) 331.5Smatt lwz %r3,XCALLFRAME_REQUEST(%r1) 341.5Smatt addi %r1,%r1,XCALLFRAMELEN 351.5Smatt lwz %r0,CALLFRAME_LR(%r1) 361.4Smatt mtlr %r0 371.3Skleink#else 381.3Skleink#ifdef PIC 391.4Smatt mflr %r0 401.3Skleink bl _GLOBAL_OFFSET_TABLE_@local-4 411.4Smatt mflr %r7 421.4Smatt lwz %r7,_C_LABEL(errno)@got(%r7) 431.4Smatt li %r8,0 441.4Smatt stw %r8,0(%r7) 451.3Skleink mtlr 0 461.3Skleink#else 471.4Smatt lis %r7,_C_LABEL(errno)@ha 481.4Smatt li %r8,0 491.4Smatt stw %r8,_C_LABEL(errno)@l(%r7) 501.3Skleink#endif /* PIC */ 511.3Skleink#endif /* _REENTRANT */ 521.5Smatt _DOSYSCALL(ptrace) 531.3Skleink bso 1f 541.3Skleink blr 551.3Skleink1: 561.5Smatt b _C_LABEL(__cerror) 571.5SmattEND(ptrace) 58