Add script to automate the syscall extraction process
[lttng-modules.git] / instrumentation / syscalls / headers / x86-64-syscalls-3.10.0-rc7_pointers_override.h
1 #ifndef CREATE_SYSCALL_TABLE
2
3 #define OVERRIDE_64_connect
4 SC_LTTNG_TRACEPOINT_EVENT_CODE(connect,
5 TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * uservaddr, int addrlen),
6 TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen),
7 TP_locvar(
8 __typeof__(uservaddr->sa_family) sa_family;
9 uint16_t dport;
10 uint32_t v4addr;
11 uint16_t v6addr[8];
12 unsigned int v4addr_len, v6addr_len;
13 ),
14 TP_code_pre(
15 sc_in(
16 memset(tp_locvar, 0, sizeof(*tp_locvar));
17 if (addrlen < sizeof(tp_locvar->sa_family))
18 goto skip_code;
19 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family,
20 &uservaddr->sa_family, sizeof(tp_locvar->sa_family));
21 switch (tp_locvar->sa_family) {
22 case AF_INET:
23 if (addrlen < sizeof(struct sockaddr_in))
24 goto skip_code;
25 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport,
26 &((struct sockaddr_in __user *) uservaddr)->sin_port,
27 sizeof(tp_locvar->dport));
28 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr,
29 &((struct sockaddr_in __user *) uservaddr)->sin_addr.s_addr,
30 sizeof(tp_locvar->v4addr));
31 tp_locvar->v4addr_len = 4;
32 break;
33 case AF_INET6:
34 if (addrlen < sizeof(struct sockaddr_in6))
35 goto skip_code;
36 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport,
37 &((struct sockaddr_in6 __user *) uservaddr)->sin6_port,
38 sizeof(tp_locvar->dport));
39 if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr,
40 &((struct sockaddr_in6 __user *) uservaddr)->sin6_addr.in6_u.u6_addr8,
41 sizeof(tp_locvar->v6addr)))
42 memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr));
43 tp_locvar->v6addr_len = 8;
44 break;
45 }
46 skip_code:
47 )
48 ),
49 TP_FIELDS(
50 sc_exit(ctf_integer(long, ret, ret))
51 sc_in(ctf_integer(int, fd, fd))
52 sc_in(ctf_integer_hex(struct sockaddr *, uservaddr, uservaddr))
53 sc_in(ctf_integer_hex(int, addrlen, addrlen))
54 sc_in(ctf_integer(unsigned short, family, tp_locvar->sa_family))
55 sc_in(ctf_integer_network(uint16_t, dport, tp_locvar->dport))
56 sc_in(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len))
57 sc_in(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len))
58 ),
59 TP_code_post()
60 )
61
62 #define LTTNG_SYSCALL_ACCEPT_locvar \
63 __typeof__(upeer_sockaddr->sa_family) sa_family;\
64 uint16_t sport; \
65 uint32_t v4addr; \
66 uint16_t v6addr[8]; \
67 int v4addr_len, v6addr_len; \
68 int uaddr_len;
69
70 #define LTTNG_SYSCALL_ACCEPT_code_pre \
71 sc_inout( \
72 memset(tp_locvar, 0, sizeof(*tp_locvar)); \
73 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->uaddr_len, \
74 upeer_addrlen, sizeof(tp_locvar->uaddr_len)); \
75 ) \
76 sc_out( \
77 if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \
78 goto skip_code; \
79 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, \
80 &upeer_sockaddr->sa_family, sizeof(tp_locvar->sa_family)); \
81 switch (tp_locvar->sa_family) { \
82 case AF_INET: \
83 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \
84 goto skip_code; \
85 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \
86 &((struct sockaddr_in __user *) upeer_sockaddr)->sin_port, \
87 sizeof(tp_locvar->sport)); \
88 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr, \
89 &((struct sockaddr_in __user *) upeer_sockaddr)->sin_addr.s_addr, \
90 sizeof(tp_locvar->v4addr)); \
91 tp_locvar->v4addr_len = 4; \
92 break; \
93 case AF_INET6: \
94 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) \
95 goto skip_code; \
96 (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \
97 &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_port, \
98 sizeof(tp_locvar->sport)); \
99 if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr, \
100 &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_addr.in6_u.u6_addr8, \
101 sizeof(tp_locvar->v6addr))) \
102 memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); \
103 tp_locvar->v6addr_len = 8; \
104 break; \
105 } \
106 skip_code: \
107 )
108
109 #define OVERRIDE_64_accept
110 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept,
111 TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen),
112 TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen),
113 TP_locvar(
114 LTTNG_SYSCALL_ACCEPT_locvar
115 ),
116 TP_code_pre(
117 LTTNG_SYSCALL_ACCEPT_code_pre
118 ),
119 TP_FIELDS(
120 sc_exit(ctf_integer(long, ret, ret))
121 sc_in(ctf_integer(int, fd, fd))
122 sc_in(ctf_integer_hex(struct sockaddr *, upeer_sockaddr, upeer_sockaddr))
123 sc_inout(ctf_integer(int, upeer_addrlen, tp_locvar->uaddr_len))
124 sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family))
125 sc_out(ctf_integer_network(uint16_t, sport, tp_locvar->sport))
126 sc_out(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len))
127 sc_out(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len))
128 ),
129 TP_code_post()
130 )
131
132 #define OVERRIDE_64_accept4
133 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4,
134 TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen, int flags),
135 TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags),
136 TP_locvar(
137 LTTNG_SYSCALL_ACCEPT_locvar
138 ),
139 TP_code_pre(
140 LTTNG_SYSCALL_ACCEPT_code_pre
141 ),
142 TP_FIELDS(
143 sc_exit(ctf_integer(long, ret, ret))
144 sc_in(ctf_integer(int, fd, fd))
145 sc_in(ctf_integer_hex(struct sockaddr *, upeer_sockaddr, upeer_sockaddr))
146 sc_inout(ctf_integer(int, upeer_addrlen, tp_locvar->uaddr_len))
147 sc_in(ctf_integer_hex(int, flags, flags))
148 sc_out(ctf_integer(unsigned short, family, tp_locvar->sa_family))
149 sc_out(ctf_integer_network(uint16_t, sport, tp_locvar->sport))
150 sc_out(ctf_sequence_network(uint8_t, v4addr, &tp_locvar->v4addr, unsigned int, tp_locvar->v4addr_len))
151 sc_out(ctf_sequence_network(uint16_t, v6addr, &tp_locvar->v6addr, unsigned int, tp_locvar->v6addr_len))
152 ),
153 TP_code_post()
154 )
155
156 #define OVERRIDE_64_pipe
157 SC_LTTNG_TRACEPOINT_EVENT(pipe,
158 TP_PROTO(sc_exit(long ret,) int * fildes),
159 TP_ARGS(sc_exit(ret,) fildes),
160 TP_FIELDS(sc_exit(ctf_integer(long, ret, ret))
161 sc_out(ctf_user_array(int, fildes, fildes, 2))
162 )
163 )
164
165 #else /* CREATE_SYSCALL_TABLE */
166
167 #define OVERRIDE_TABLE_64_clone
168 TRACE_SYSCALL_TABLE(clone, clone, 56, 5)
169 #define OVERRIDE_TABLE_64_execve
170 TRACE_SYSCALL_TABLE(execve, execve, 59, 3)
171 #define OVERRIDE_TABLE_64_getcpu
172 TRACE_SYSCALL_TABLE(getcpu, getcpu, 309, 3)
173
174 #endif /* CREATE_SYSCALL_TABLE */
This page took 0.034742 seconds and 4 git commands to generate.