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