ptrace.S revision 1.1 1 1.1 matt /* $NetBSD: ptrace.S,v 1.1 2014/09/03 19:34:26 matt Exp $ */
2 1.1 matt
3 1.1 matt #include "SYS.h"
4 1.1 matt #include "assym.h"
5 1.1 matt
6 1.1 matt #if defined(LIBC_SCCS) && !defined(lint)
7 1.1 matt __RCSID("$NetBSD: ptrace.S,v 1.1 2014/09/03 19:34:26 matt Exp $")
8 1.1 matt #endif /* LIBC_SCCS && !lint */
9 1.1 matt
10 1.1 matt #define XCALLFRAME_LR (-1*4)
11 1.1 matt #define XCALLFRAME_DATA (-2*4)
12 1.1 matt #define XCALLFRAME_ADDR (-3*4)
13 1.1 matt #define XCALLFRAME_PID (-4*4)
14 1.1 matt #define XCALLFRAME_REQUEST (-5*4)
15 1.1 matt #define XCALLFRAME_GP (-6*4)
16 1.1 matt #define XCALLFRAME_SP (-7*4)
17 1.1 matt #define XCALLFRAMELEN (-XCALLFRAME_SP)
18 1.1 matt
19 1.1 matt ENTRY(ptrace)
20 1.1 matt #ifdef _REENTRANT
21 1.1 matt l.sw XCALLFRAME_LR(r1),lr
22 1.1 matt l.sw XCALLFRAME_REQUEST(r1),r3
23 1.1 matt l.sw XCALLFRAME_PID(r1),r4
24 1.1 matt l.sw XCALLFRAME_ADDR(r1),r5
25 1.1 matt l.sw XCALLFRAME_DATA(r1),r6
26 1.1 matt
27 1.1 matt #ifdef __PIC__
28 1.1 matt l.sw XCALLFRAME_GP(r1),r16
29 1.1 matt PIC_GOTSETUP(r16)
30 1.1 matt #endif
31 1.1 matt
32 1.1 matt l.addi r1,r1,-XCALLFRAMELEN
33 1.1 matt l.jal PLT(_C_LABEL(__errno))
34 1.1 matt l.nop
35 1.1 matt l.sw 0(r11),r0
36 1.1 matt l.addi r1,r1,XCALLFRAMELEN
37 1.1 matt
38 1.1 matt #ifdef __PIC__
39 1.1 matt l.lwz r16,XCALLFRAME_GP(r1)
40 1.1 matt #endif
41 1.1 matt
42 1.1 matt l.lwz r6,XCALLFRAME_DATA(r1)
43 1.1 matt l.lwz r4,XCALLFRAME_PID(r1)
44 1.1 matt l.lwz r5,XCALLFRAME_ADDR(r1)
45 1.1 matt l.lwz r3,XCALLFRAME_REQUEST(r1)
46 1.1 matt l.lwz lr,XCALLFRAME_LR(r1)
47 1.1 matt #else
48 1.1 matt #ifdef __PIC__
49 1.1 matt l.or r8,r9,r0
50 1.1 matt PIC_GOTSETUP(r7)
51 1.1 matt lwz r7,_C_LABEL(errno)@got(r7)
52 1.1 matt l.or r9,r8,r0
53 1.1 matt #else
54 1.1 matt l.movhi r7,hi(_C_LABEL(errno))
55 1.1 matt l.ori r7,r7,lo(_C_LABEL(errno))
56 1.1 matt #endif /* __PIC__ */
57 1.1 matt #endif /* _REENTRANT */
58 1.1 matt l.sw 0(r7),r0
59 1.1 matt _DOSYSCALL(ptrace)
60 1.1 matt l.bf _C_LABEL(__cerror)
61 1.1 matt l.nop
62 1.1 matt l.jr lr
63 1.1 matt l.nop
64 1.1 matt END(ptrace)
65