Add x86-64 override for accept4 syscall
[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 * 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(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);
32 if (copy_from_user(tp_locvar->v6addr,
33 &((struct sockaddr_in6 *) uservaddr)->sin6_addr.in6_u.u6_addr8,
34 sizeof(tp_locvar->v6addr)))
35 memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr));
36 tp_locvar->v6addr_len = 8;
37 break;
38 }
39 skip_code:
40 )
41 ),
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))
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))
51 ),
52 TP_code_post()
53 )
54
55 #define OVERRIDE_64_accept
56 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept,
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 ),
67 TP_code_pre(
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);
88 if (copy_from_user(tp_locvar->v6addr,
89 &((struct sockaddr_in6 *) upeer_sockaddr)->sin6_addr.in6_u.u6_addr8,
90 sizeof(tp_locvar->v6addr)))
91 memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr));
92 tp_locvar->v6addr_len = 8;
93 break;
94 }
95 skip_code:
96 )
97 ),
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))
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))
107 ),
108 TP_code_post()
109 )
110
111 #define OVERRIDE_64_accept4
112 SC_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
168 #define OVERRIDE_64_pipe
169 SC_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
177 #else /* CREATE_SYSCALL_TABLE */
178
179 #define OVERRIDE_TABLE_64_clone
180 TRACE_SYSCALL_TABLE(clone, clone, 56, 5)
181 #define OVERRIDE_TABLE_64_execve
182 TRACE_SYSCALL_TABLE(execve, execve, 59, 3)
183 #define OVERRIDE_TABLE_64_getcpu
184 TRACE_SYSCALL_TABLE(getcpu, getcpu, 309, 3)
185
186 #endif /* CREATE_SYSCALL_TABLE */
This page took 0.033769 seconds and 4 git commands to generate.