1 #ifndef CREATE_SYSCALL_TABLE
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
),
8 __typeof__(uservaddr
->sa_family
) sa_family
;
12 unsigned int v4addr_len
, v6addr_len
;
16 memset(tp_locvar
, 0, sizeof(*tp_locvar
));
17 if (addrlen
< sizeof(tp_locvar
->sa_family
))
19 (void) get_user(tp_locvar
->sa_family
, &uservaddr
->sa_family
);
20 switch (tp_locvar
->sa_family
) {
22 if (addrlen
< sizeof(struct sockaddr_in
))
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;
29 if (addrlen
< sizeof(struct sockaddr_in6
))
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;
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(unsigned short, 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
))
55 #define LTTNG_SYSCALL_ACCEPT_locvar \
56 __typeof__(upeer_sockaddr->sa_family) sa_family;\
60 int v4addr_len, v6addr_len; \
63 #define LTTNG_SYSCALL_ACCEPT_code_pre \
65 memset(tp_locvar, 0, sizeof(*tp_locvar)); \
66 (void) get_user(tp_locvar->uaddr_len, upeer_addrlen); \
69 if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \
71 (void) get_user(tp_locvar->sa_family, &upeer_sockaddr->sa_family); \
72 switch (tp_locvar->sa_family) { \
74 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \
76 (void) get_user(tp_locvar->sport, &((struct sockaddr_in *) upeer_sockaddr)->sin_port); \
77 (void) get_user(tp_locvar->v4addr, &((struct sockaddr_in *) upeer_sockaddr)->sin_addr.s_addr); \
78 tp_locvar->v4addr_len = 4; \
81 if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) \
83 (void) get_user(tp_locvar->sport, &((struct sockaddr_in6 *) upeer_sockaddr)->sin6_port); \
84 if (copy_from_user(tp_locvar->v6addr, \
85 &((struct sockaddr_in6 *) upeer_sockaddr)->sin6_addr.in6_u.u6_addr8, \
86 sizeof(tp_locvar->v6addr))) \
87 memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); \
88 tp_locvar->v6addr_len = 8; \
94 #define OVERRIDE_64_accept
95 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept
,
96 TP_PROTO(sc_exit(long ret
,) int fd
, struct sockaddr
* upeer_sockaddr
, int * upeer_addrlen
),
97 TP_ARGS(sc_exit(ret
,) fd
, upeer_sockaddr
, upeer_addrlen
),
99 LTTNG_SYSCALL_ACCEPT_locvar
102 LTTNG_SYSCALL_ACCEPT_code_pre
105 sc_exit(ctf_integer(long, ret
, ret
))
106 sc_in(ctf_integer(int, fd
, fd
))
107 sc_in(ctf_integer_hex(struct sockaddr
*, upeer_sockaddr
, upeer_sockaddr
))
108 sc_inout(ctf_integer(int, upeer_addrlen
, tp_locvar
->uaddr_len
))
109 sc_out(ctf_integer(unsigned short, family
, tp_locvar
->sa_family
))
110 sc_out(ctf_integer_network(uint16_t, sport
, tp_locvar
->sport
))
111 sc_out(ctf_sequence_network(uint8_t, v4addr
, &tp_locvar
->v4addr
, unsigned int, tp_locvar
->v4addr_len
))
112 sc_out(ctf_sequence_network(uint16_t, v6addr
, &tp_locvar
->v6addr
, unsigned int, tp_locvar
->v6addr_len
))
117 #define OVERRIDE_64_accept4
118 SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4
,
119 TP_PROTO(sc_exit(long ret
,) int fd
, struct sockaddr
* upeer_sockaddr
, int * upeer_addrlen
, int flags
),
120 TP_ARGS(sc_exit(ret
,) fd
, upeer_sockaddr
, upeer_addrlen
, flags
),
122 LTTNG_SYSCALL_ACCEPT_locvar
125 LTTNG_SYSCALL_ACCEPT_code_pre
128 sc_exit(ctf_integer(long, ret
, ret
))
129 sc_in(ctf_integer(int, fd
, fd
))
130 sc_in(ctf_integer_hex(struct sockaddr
*, upeer_sockaddr
, upeer_sockaddr
))
131 sc_inout(ctf_integer(int, upeer_addrlen
, tp_locvar
->uaddr_len
))
132 sc_in(ctf_integer_hex(int, flags
, flags
))
133 sc_out(ctf_integer(unsigned short, family
, tp_locvar
->sa_family
))
134 sc_out(ctf_integer_network(uint16_t, sport
, tp_locvar
->sport
))
135 sc_out(ctf_sequence_network(uint8_t, v4addr
, &tp_locvar
->v4addr
, unsigned int, tp_locvar
->v4addr_len
))
136 sc_out(ctf_sequence_network(uint16_t, v6addr
, &tp_locvar
->v6addr
, unsigned int, tp_locvar
->v6addr_len
))
141 #define OVERRIDE_64_pipe
142 SC_LTTNG_TRACEPOINT_EVENT(pipe
,
143 TP_PROTO(sc_exit(long ret
,) int * fildes
),
144 TP_ARGS(sc_exit(ret
,) fildes
),
145 TP_FIELDS(sc_exit(ctf_integer(long, ret
, ret
))
146 sc_out(ctf_user_array(int, fildes
, fildes
, 2))
150 #else /* CREATE_SYSCALL_TABLE */
152 #define OVERRIDE_TABLE_64_clone
153 TRACE_SYSCALL_TABLE(clone
, clone
, 56, 5)
154 #define OVERRIDE_TABLE_64_execve
155 TRACE_SYSCALL_TABLE(execve
, execve
, 59, 3)
156 #define OVERRIDE_TABLE_64_getcpu
157 TRACE_SYSCALL_TABLE(getcpu
, getcpu
, 309, 3)
159 #endif /* CREATE_SYSCALL_TABLE */