ptrace.S revision 1.5
1/* $NetBSD: ptrace.S,v 1.5 2011/01/15 07:31:13 matt Exp $ */ 2 3#include "SYS.h" 4#include "assym.h" 5 6#if defined(LIBC_SCCS) && !defined(lint) 7__RCSID("$NetBSD: ptrace.S,v 1.5 2011/01/15 07:31:13 matt Exp $") 8#endif /* LIBC_SCCS && !lint */ 9 10#define XCALLFRAMELEN ((((2+4)*SZREG) + CALLFRAMELEN - 1) & -CALLFRAMELEN) 11#define XCALLFRAME_DATA (XCALLFRAMELEN - 1*SZREG) 12#define XCALLFRAME_ADDR (XCALLFRAMELEN - 2*SZREG) 13#define XCALLFRAME_PID (XCALLFRAMELEN - 3*SZREG) 14#define XCALLFRAME_REQUEST (XCALLFRAMELEN - 4*SZREG) 15 16ENTRY(ptrace) 17#ifdef _REENTRANT 18 mflr %r0 19 stw %r0,CALLFRAME_LR(%r1) 20 stwu %r1,-XCALLFRAMELEN(%r1) 21 stw %r3,XCALLFRAME_REQUEST(%r1) 22 stw %r4,XCALLFRAME_PID(%r1) 23 stw %r5,XCALLFRAME_ADDR(%r1) 24 stw %r6,XCALLFRAME_DATA(%r1) 25 26 bl PIC_PLT(_C_LABEL(__errno)) 27 li %r7,0 28 stw %r7,0(%r3) 29 30 lwz %r6,XCALLFRAME_DATA(%r1) 31 lwz %r4,XCALLFRAME_PID(%r1) 32 lwz %r5,XCALLFRAME_ADDR(%r1) 33 lwz %r3,XCALLFRAME_REQUEST(%r1) 34 addi %r1,%r1,XCALLFRAMELEN 35 lwz %r0,CALLFRAME_LR(%r1) 36 mtlr %r0 37#else 38#ifdef PIC 39 mflr %r0 40 bl _GLOBAL_OFFSET_TABLE_@local-4 41 mflr %r7 42 lwz %r7,_C_LABEL(errno)@got(%r7) 43 li %r8,0 44 stw %r8,0(%r7) 45 mtlr 0 46#else 47 lis %r7,_C_LABEL(errno)@ha 48 li %r8,0 49 stw %r8,_C_LABEL(errno)@l(%r7) 50#endif /* PIC */ 51#endif /* _REENTRANT */ 52 _DOSYSCALL(ptrace) 53 bso 1f 54 blr 551: 56 b _C_LABEL(__cerror) 57END(ptrace) 58