Skip to content

Commit 89aecd2

Browse files
authored
Merge branch 'libbpf:master' into master
2 parents b39b7f4 + 02724cf commit 89aecd2

8 files changed

+107
-69
lines changed

CHECKPOINT-COMMIT

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0737df6de94661ae55fd3343ce9abec32c687e62
1+
009367099eb61a4fc2af44d4eb06b6b4de7de6db

src/bpf_core_read.h

+1
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ enum bpf_enum_value_kind {
104104
case 2: val = *(const unsigned short *)p; break; \
105105
case 4: val = *(const unsigned int *)p; break; \
106106
case 8: val = *(const unsigned long long *)p; break; \
107+
default: val = 0; break; \
107108
} \
108109
val <<= __CORE_RELO(s, field, LSHIFT_U64); \
109110
if (__CORE_RELO(s, field, SIGNED)) \

src/bpf_helpers.h

+14-3
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,21 @@ enum libbpf_tristate {
186186
#define __kptr __attribute__((btf_type_tag("kptr")))
187187
#define __percpu_kptr __attribute__((btf_type_tag("percpu_kptr")))
188188

189-
#define bpf_ksym_exists(sym) ({ \
190-
_Static_assert(!__builtin_constant_p(!!sym), #sym " should be marked as __weak"); \
191-
!!sym; \
189+
#if defined (__clang__)
190+
#define bpf_ksym_exists(sym) ({ \
191+
_Static_assert(!__builtin_constant_p(!!sym), \
192+
#sym " should be marked as __weak"); \
193+
!!sym; \
192194
})
195+
#elif __GNUC__ > 8
196+
#define bpf_ksym_exists(sym) ({ \
197+
_Static_assert(__builtin_has_attribute (*sym, __weak__), \
198+
#sym " should be marked as __weak"); \
199+
!!sym; \
200+
})
201+
#else
202+
#define bpf_ksym_exists(sym) !!sym
203+
#endif
193204

194205
#define __arg_ctx __attribute__((btf_decl_tag("arg:ctx")))
195206
#define __arg_nonnull __attribute((btf_decl_tag("arg:nonnull")))

src/bpf_tracing.h

+35-35
Original file line numberDiff line numberDiff line change
@@ -633,18 +633,18 @@ struct pt_regs;
633633
#endif
634634

635635
#define ___bpf_ctx_cast0() ctx
636-
#define ___bpf_ctx_cast1(x) ___bpf_ctx_cast0(), (void *)ctx[0]
637-
#define ___bpf_ctx_cast2(x, args...) ___bpf_ctx_cast1(args), (void *)ctx[1]
638-
#define ___bpf_ctx_cast3(x, args...) ___bpf_ctx_cast2(args), (void *)ctx[2]
639-
#define ___bpf_ctx_cast4(x, args...) ___bpf_ctx_cast3(args), (void *)ctx[3]
640-
#define ___bpf_ctx_cast5(x, args...) ___bpf_ctx_cast4(args), (void *)ctx[4]
641-
#define ___bpf_ctx_cast6(x, args...) ___bpf_ctx_cast5(args), (void *)ctx[5]
642-
#define ___bpf_ctx_cast7(x, args...) ___bpf_ctx_cast6(args), (void *)ctx[6]
643-
#define ___bpf_ctx_cast8(x, args...) ___bpf_ctx_cast7(args), (void *)ctx[7]
644-
#define ___bpf_ctx_cast9(x, args...) ___bpf_ctx_cast8(args), (void *)ctx[8]
645-
#define ___bpf_ctx_cast10(x, args...) ___bpf_ctx_cast9(args), (void *)ctx[9]
646-
#define ___bpf_ctx_cast11(x, args...) ___bpf_ctx_cast10(args), (void *)ctx[10]
647-
#define ___bpf_ctx_cast12(x, args...) ___bpf_ctx_cast11(args), (void *)ctx[11]
636+
#define ___bpf_ctx_cast1(x) ___bpf_ctx_cast0(), ctx[0]
637+
#define ___bpf_ctx_cast2(x, args...) ___bpf_ctx_cast1(args), ctx[1]
638+
#define ___bpf_ctx_cast3(x, args...) ___bpf_ctx_cast2(args), ctx[2]
639+
#define ___bpf_ctx_cast4(x, args...) ___bpf_ctx_cast3(args), ctx[3]
640+
#define ___bpf_ctx_cast5(x, args...) ___bpf_ctx_cast4(args), ctx[4]
641+
#define ___bpf_ctx_cast6(x, args...) ___bpf_ctx_cast5(args), ctx[5]
642+
#define ___bpf_ctx_cast7(x, args...) ___bpf_ctx_cast6(args), ctx[6]
643+
#define ___bpf_ctx_cast8(x, args...) ___bpf_ctx_cast7(args), ctx[7]
644+
#define ___bpf_ctx_cast9(x, args...) ___bpf_ctx_cast8(args), ctx[8]
645+
#define ___bpf_ctx_cast10(x, args...) ___bpf_ctx_cast9(args), ctx[9]
646+
#define ___bpf_ctx_cast11(x, args...) ___bpf_ctx_cast10(args), ctx[10]
647+
#define ___bpf_ctx_cast12(x, args...) ___bpf_ctx_cast11(args), ctx[11]
648648
#define ___bpf_ctx_cast(args...) ___bpf_apply(___bpf_ctx_cast, ___bpf_narg(args))(args)
649649

650650
/*
@@ -786,14 +786,14 @@ ____##name(unsigned long long *ctx ___bpf_ctx_decl(args))
786786
struct pt_regs;
787787

788788
#define ___bpf_kprobe_args0() ctx
789-
#define ___bpf_kprobe_args1(x) ___bpf_kprobe_args0(), (void *)PT_REGS_PARM1(ctx)
790-
#define ___bpf_kprobe_args2(x, args...) ___bpf_kprobe_args1(args), (void *)PT_REGS_PARM2(ctx)
791-
#define ___bpf_kprobe_args3(x, args...) ___bpf_kprobe_args2(args), (void *)PT_REGS_PARM3(ctx)
792-
#define ___bpf_kprobe_args4(x, args...) ___bpf_kprobe_args3(args), (void *)PT_REGS_PARM4(ctx)
793-
#define ___bpf_kprobe_args5(x, args...) ___bpf_kprobe_args4(args), (void *)PT_REGS_PARM5(ctx)
794-
#define ___bpf_kprobe_args6(x, args...) ___bpf_kprobe_args5(args), (void *)PT_REGS_PARM6(ctx)
795-
#define ___bpf_kprobe_args7(x, args...) ___bpf_kprobe_args6(args), (void *)PT_REGS_PARM7(ctx)
796-
#define ___bpf_kprobe_args8(x, args...) ___bpf_kprobe_args7(args), (void *)PT_REGS_PARM8(ctx)
789+
#define ___bpf_kprobe_args1(x) ___bpf_kprobe_args0(), (unsigned long long)PT_REGS_PARM1(ctx)
790+
#define ___bpf_kprobe_args2(x, args...) ___bpf_kprobe_args1(args), (unsigned long long)PT_REGS_PARM2(ctx)
791+
#define ___bpf_kprobe_args3(x, args...) ___bpf_kprobe_args2(args), (unsigned long long)PT_REGS_PARM3(ctx)
792+
#define ___bpf_kprobe_args4(x, args...) ___bpf_kprobe_args3(args), (unsigned long long)PT_REGS_PARM4(ctx)
793+
#define ___bpf_kprobe_args5(x, args...) ___bpf_kprobe_args4(args), (unsigned long long)PT_REGS_PARM5(ctx)
794+
#define ___bpf_kprobe_args6(x, args...) ___bpf_kprobe_args5(args), (unsigned long long)PT_REGS_PARM6(ctx)
795+
#define ___bpf_kprobe_args7(x, args...) ___bpf_kprobe_args6(args), (unsigned long long)PT_REGS_PARM7(ctx)
796+
#define ___bpf_kprobe_args8(x, args...) ___bpf_kprobe_args7(args), (unsigned long long)PT_REGS_PARM8(ctx)
797797
#define ___bpf_kprobe_args(args...) ___bpf_apply(___bpf_kprobe_args, ___bpf_narg(args))(args)
798798

799799
/*
@@ -821,7 +821,7 @@ static __always_inline typeof(name(0)) \
821821
____##name(struct pt_regs *ctx, ##args)
822822

823823
#define ___bpf_kretprobe_args0() ctx
824-
#define ___bpf_kretprobe_args1(x) ___bpf_kretprobe_args0(), (void *)PT_REGS_RC(ctx)
824+
#define ___bpf_kretprobe_args1(x) ___bpf_kretprobe_args0(), (unsigned long long)PT_REGS_RC(ctx)
825825
#define ___bpf_kretprobe_args(args...) ___bpf_apply(___bpf_kretprobe_args, ___bpf_narg(args))(args)
826826

827827
/*
@@ -845,24 +845,24 @@ static __always_inline typeof(name(0)) ____##name(struct pt_regs *ctx, ##args)
845845

846846
/* If kernel has CONFIG_ARCH_HAS_SYSCALL_WRAPPER, read pt_regs directly */
847847
#define ___bpf_syscall_args0() ctx
848-
#define ___bpf_syscall_args1(x) ___bpf_syscall_args0(), (void *)PT_REGS_PARM1_SYSCALL(regs)
849-
#define ___bpf_syscall_args2(x, args...) ___bpf_syscall_args1(args), (void *)PT_REGS_PARM2_SYSCALL(regs)
850-
#define ___bpf_syscall_args3(x, args...) ___bpf_syscall_args2(args), (void *)PT_REGS_PARM3_SYSCALL(regs)
851-
#define ___bpf_syscall_args4(x, args...) ___bpf_syscall_args3(args), (void *)PT_REGS_PARM4_SYSCALL(regs)
852-
#define ___bpf_syscall_args5(x, args...) ___bpf_syscall_args4(args), (void *)PT_REGS_PARM5_SYSCALL(regs)
853-
#define ___bpf_syscall_args6(x, args...) ___bpf_syscall_args5(args), (void *)PT_REGS_PARM6_SYSCALL(regs)
854-
#define ___bpf_syscall_args7(x, args...) ___bpf_syscall_args6(args), (void *)PT_REGS_PARM7_SYSCALL(regs)
848+
#define ___bpf_syscall_args1(x) ___bpf_syscall_args0(), (unsigned long long)PT_REGS_PARM1_SYSCALL(regs)
849+
#define ___bpf_syscall_args2(x, args...) ___bpf_syscall_args1(args), (unsigned long long)PT_REGS_PARM2_SYSCALL(regs)
850+
#define ___bpf_syscall_args3(x, args...) ___bpf_syscall_args2(args), (unsigned long long)PT_REGS_PARM3_SYSCALL(regs)
851+
#define ___bpf_syscall_args4(x, args...) ___bpf_syscall_args3(args), (unsigned long long)PT_REGS_PARM4_SYSCALL(regs)
852+
#define ___bpf_syscall_args5(x, args...) ___bpf_syscall_args4(args), (unsigned long long)PT_REGS_PARM5_SYSCALL(regs)
853+
#define ___bpf_syscall_args6(x, args...) ___bpf_syscall_args5(args), (unsigned long long)PT_REGS_PARM6_SYSCALL(regs)
854+
#define ___bpf_syscall_args7(x, args...) ___bpf_syscall_args6(args), (unsigned long long)PT_REGS_PARM7_SYSCALL(regs)
855855
#define ___bpf_syscall_args(args...) ___bpf_apply(___bpf_syscall_args, ___bpf_narg(args))(args)
856856

857857
/* If kernel doesn't have CONFIG_ARCH_HAS_SYSCALL_WRAPPER, we have to BPF_CORE_READ from pt_regs */
858858
#define ___bpf_syswrap_args0() ctx
859-
#define ___bpf_syswrap_args1(x) ___bpf_syswrap_args0(), (void *)PT_REGS_PARM1_CORE_SYSCALL(regs)
860-
#define ___bpf_syswrap_args2(x, args...) ___bpf_syswrap_args1(args), (void *)PT_REGS_PARM2_CORE_SYSCALL(regs)
861-
#define ___bpf_syswrap_args3(x, args...) ___bpf_syswrap_args2(args), (void *)PT_REGS_PARM3_CORE_SYSCALL(regs)
862-
#define ___bpf_syswrap_args4(x, args...) ___bpf_syswrap_args3(args), (void *)PT_REGS_PARM4_CORE_SYSCALL(regs)
863-
#define ___bpf_syswrap_args5(x, args...) ___bpf_syswrap_args4(args), (void *)PT_REGS_PARM5_CORE_SYSCALL(regs)
864-
#define ___bpf_syswrap_args6(x, args...) ___bpf_syswrap_args5(args), (void *)PT_REGS_PARM6_CORE_SYSCALL(regs)
865-
#define ___bpf_syswrap_args7(x, args...) ___bpf_syswrap_args6(args), (void *)PT_REGS_PARM7_CORE_SYSCALL(regs)
859+
#define ___bpf_syswrap_args1(x) ___bpf_syswrap_args0(), (unsigned long long)PT_REGS_PARM1_CORE_SYSCALL(regs)
860+
#define ___bpf_syswrap_args2(x, args...) ___bpf_syswrap_args1(args), (unsigned long long)PT_REGS_PARM2_CORE_SYSCALL(regs)
861+
#define ___bpf_syswrap_args3(x, args...) ___bpf_syswrap_args2(args), (unsigned long long)PT_REGS_PARM3_CORE_SYSCALL(regs)
862+
#define ___bpf_syswrap_args4(x, args...) ___bpf_syswrap_args3(args), (unsigned long long)PT_REGS_PARM4_CORE_SYSCALL(regs)
863+
#define ___bpf_syswrap_args5(x, args...) ___bpf_syswrap_args4(args), (unsigned long long)PT_REGS_PARM5_CORE_SYSCALL(regs)
864+
#define ___bpf_syswrap_args6(x, args...) ___bpf_syswrap_args5(args), (unsigned long long)PT_REGS_PARM6_CORE_SYSCALL(regs)
865+
#define ___bpf_syswrap_args7(x, args...) ___bpf_syswrap_args6(args), (unsigned long long)PT_REGS_PARM7_CORE_SYSCALL(regs)
866866
#define ___bpf_syswrap_args(args...) ___bpf_apply(___bpf_syswrap_args, ___bpf_narg(args))(args)
867867

868868
/*

src/libbpf.c

+28-14
Original file line numberDiff line numberDiff line change
@@ -1152,22 +1152,15 @@ static int bpf_map__init_kern_struct_ops(struct bpf_map *map)
11521152
return -ENOTSUP;
11531153
}
11541154

1155-
prog = st_ops->progs[i];
1156-
if (prog) {
1155+
if (st_ops->progs[i]) {
11571156
/* If we had declaratively set struct_ops callback, we need to
1158-
* first validate that it's actually a struct_ops program.
1159-
* And then force its autoload to false, because it doesn't have
1157+
* force its autoload to false, because it doesn't have
11601158
* a chance of succeeding from POV of the current struct_ops map.
11611159
* If this program is still referenced somewhere else, though,
11621160
* then bpf_object_adjust_struct_ops_autoload() will update its
11631161
* autoload accordingly.
11641162
*/
1165-
if (!is_valid_st_ops_program(obj, prog)) {
1166-
pr_warn("struct_ops init_kern %s: member %s is declaratively assigned a non-struct_ops program\n",
1167-
map->name, mname);
1168-
return -EINVAL;
1169-
}
1170-
prog->autoload = false;
1163+
st_ops->progs[i]->autoload = false;
11711164
st_ops->progs[i] = NULL;
11721165
}
11731166

@@ -1200,11 +1193,19 @@ static int bpf_map__init_kern_struct_ops(struct bpf_map *map)
12001193
}
12011194

12021195
if (btf_is_ptr(mtype)) {
1203-
/* Update the value from the shadow type */
12041196
prog = *(void **)mdata;
1197+
/* just like for !kern_member case above, reset declaratively
1198+
* set (at compile time) program's autload to false,
1199+
* if user replaced it with another program or NULL
1200+
*/
1201+
if (st_ops->progs[i] && st_ops->progs[i] != prog)
1202+
st_ops->progs[i]->autoload = false;
1203+
1204+
/* Update the value from the shadow type */
12051205
st_ops->progs[i] = prog;
12061206
if (!prog)
12071207
continue;
1208+
12081209
if (!is_valid_st_ops_program(obj, prog)) {
12091210
pr_warn("struct_ops init_kern %s: member %s is not a struct_ops program\n",
12101211
map->name, mname);
@@ -7371,14 +7372,27 @@ static int bpf_object_load_prog(struct bpf_object *obj, struct bpf_program *prog
73717372
__u32 log_level = prog->log_level;
73727373
int ret, err;
73737374

7374-
if (prog->type == BPF_PROG_TYPE_UNSPEC) {
7375+
/* Be more helpful by rejecting programs that can't be validated early
7376+
* with more meaningful and actionable error message.
7377+
*/
7378+
switch (prog->type) {
7379+
case BPF_PROG_TYPE_UNSPEC:
73757380
/*
73767381
* The program type must be set. Most likely we couldn't find a proper
73777382
* section definition at load time, and thus we didn't infer the type.
73787383
*/
73797384
pr_warn("prog '%s': missing BPF prog type, check ELF section name '%s'\n",
73807385
prog->name, prog->sec_name);
73817386
return -EINVAL;
7387+
case BPF_PROG_TYPE_STRUCT_OPS:
7388+
if (prog->attach_btf_id == 0) {
7389+
pr_warn("prog '%s': SEC(\"struct_ops\") program isn't referenced anywhere, did you forget to use it?\n",
7390+
prog->name);
7391+
return -EINVAL;
7392+
}
7393+
break;
7394+
default:
7395+
break;
73827396
}
73837397

73847398
if (!insns || !insns_cnt)
@@ -11579,7 +11593,7 @@ static int attach_kprobe_multi(const struct bpf_program *prog, long cookie, stru
1157911593

1158011594
n = sscanf(spec, "%m[a-zA-Z0-9_.*?]", &pattern);
1158111595
if (n < 1) {
11582-
pr_warn("kprobe multi pattern is invalid: %s\n", pattern);
11596+
pr_warn("kprobe multi pattern is invalid: %s\n", spec);
1158311597
return -EINVAL;
1158411598
}
1158511599

@@ -11605,7 +11619,7 @@ static int attach_kprobe_session(const struct bpf_program *prog, long cookie,
1160511619
spec = prog->sec_name + sizeof("kprobe.session/") - 1;
1160611620
n = sscanf(spec, "%m[a-zA-Z0-9_.*?]", &pattern);
1160711621
if (n < 1) {
11608-
pr_warn("kprobe session pattern is invalid: %s\n", pattern);
11622+
pr_warn("kprobe session pattern is invalid: %s\n", spec);
1160911623
return -EINVAL;
1161011624
}
1161111625

src/ringbuf.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ int ring_buffer__consume_n(struct ring_buffer *rb, size_t n)
301301
if (n == 0)
302302
break;
303303
}
304-
return res;
304+
return res > INT_MAX ? INT_MAX : res;
305305
}
306306

307307
/* Consume available ring buffer(s) data without event polling.
@@ -405,7 +405,7 @@ int ring__map_fd(const struct ring *r)
405405

406406
int ring__consume_n(struct ring *r, size_t n)
407407
{
408-
int res;
408+
int64_t res;
409409

410410
res = ringbuf_process_ring(r, n);
411411
if (res < 0)

src/str_error.c

+14-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#undef _GNU_SOURCE
33
#include <string.h>
44
#include <stdio.h>
5+
#include <errno.h>
56
#include "str_error.h"
67

78
/* make sure libbpf doesn't use kernel-only integer typedefs */
@@ -15,7 +16,18 @@
1516
char *libbpf_strerror_r(int err, char *dst, int len)
1617
{
1718
int ret = strerror_r(err < 0 ? -err : err, dst, len);
18-
if (ret)
19-
snprintf(dst, len, "ERROR: strerror_r(%d)=%d", err, ret);
19+
/* on glibc <2.13, ret == -1 and errno is set, if strerror_r() can't
20+
* handle the error, on glibc >=2.13 *positive* (errno-like) error
21+
* code is returned directly
22+
*/
23+
if (ret == -1)
24+
ret = errno;
25+
if (ret) {
26+
if (ret == EINVAL)
27+
/* strerror_r() doesn't recognize this specific error */
28+
snprintf(dst, len, "unknown error (%d)", err < 0 ? err : -err);
29+
else
30+
snprintf(dst, len, "ERROR: strerror_r(%d)=%d", err, ret);
31+
}
2032
return dst;
2133
}

src/usdt.bpf.h

+12-12
Original file line numberDiff line numberDiff line change
@@ -214,18 +214,18 @@ long bpf_usdt_cookie(struct pt_regs *ctx)
214214

215215
/* we rely on ___bpf_apply() and ___bpf_narg() macros already defined in bpf_tracing.h */
216216
#define ___bpf_usdt_args0() ctx
217-
#define ___bpf_usdt_args1(x) ___bpf_usdt_args0(), ({ long _x; bpf_usdt_arg(ctx, 0, &_x); (void *)_x; })
218-
#define ___bpf_usdt_args2(x, args...) ___bpf_usdt_args1(args), ({ long _x; bpf_usdt_arg(ctx, 1, &_x); (void *)_x; })
219-
#define ___bpf_usdt_args3(x, args...) ___bpf_usdt_args2(args), ({ long _x; bpf_usdt_arg(ctx, 2, &_x); (void *)_x; })
220-
#define ___bpf_usdt_args4(x, args...) ___bpf_usdt_args3(args), ({ long _x; bpf_usdt_arg(ctx, 3, &_x); (void *)_x; })
221-
#define ___bpf_usdt_args5(x, args...) ___bpf_usdt_args4(args), ({ long _x; bpf_usdt_arg(ctx, 4, &_x); (void *)_x; })
222-
#define ___bpf_usdt_args6(x, args...) ___bpf_usdt_args5(args), ({ long _x; bpf_usdt_arg(ctx, 5, &_x); (void *)_x; })
223-
#define ___bpf_usdt_args7(x, args...) ___bpf_usdt_args6(args), ({ long _x; bpf_usdt_arg(ctx, 6, &_x); (void *)_x; })
224-
#define ___bpf_usdt_args8(x, args...) ___bpf_usdt_args7(args), ({ long _x; bpf_usdt_arg(ctx, 7, &_x); (void *)_x; })
225-
#define ___bpf_usdt_args9(x, args...) ___bpf_usdt_args8(args), ({ long _x; bpf_usdt_arg(ctx, 8, &_x); (void *)_x; })
226-
#define ___bpf_usdt_args10(x, args...) ___bpf_usdt_args9(args), ({ long _x; bpf_usdt_arg(ctx, 9, &_x); (void *)_x; })
227-
#define ___bpf_usdt_args11(x, args...) ___bpf_usdt_args10(args), ({ long _x; bpf_usdt_arg(ctx, 10, &_x); (void *)_x; })
228-
#define ___bpf_usdt_args12(x, args...) ___bpf_usdt_args11(args), ({ long _x; bpf_usdt_arg(ctx, 11, &_x); (void *)_x; })
217+
#define ___bpf_usdt_args1(x) ___bpf_usdt_args0(), ({ long _x; bpf_usdt_arg(ctx, 0, &_x); _x; })
218+
#define ___bpf_usdt_args2(x, args...) ___bpf_usdt_args1(args), ({ long _x; bpf_usdt_arg(ctx, 1, &_x); _x; })
219+
#define ___bpf_usdt_args3(x, args...) ___bpf_usdt_args2(args), ({ long _x; bpf_usdt_arg(ctx, 2, &_x); _x; })
220+
#define ___bpf_usdt_args4(x, args...) ___bpf_usdt_args3(args), ({ long _x; bpf_usdt_arg(ctx, 3, &_x); _x; })
221+
#define ___bpf_usdt_args5(x, args...) ___bpf_usdt_args4(args), ({ long _x; bpf_usdt_arg(ctx, 4, &_x); _x; })
222+
#define ___bpf_usdt_args6(x, args...) ___bpf_usdt_args5(args), ({ long _x; bpf_usdt_arg(ctx, 5, &_x); _x; })
223+
#define ___bpf_usdt_args7(x, args...) ___bpf_usdt_args6(args), ({ long _x; bpf_usdt_arg(ctx, 6, &_x); _x; })
224+
#define ___bpf_usdt_args8(x, args...) ___bpf_usdt_args7(args), ({ long _x; bpf_usdt_arg(ctx, 7, &_x); _x; })
225+
#define ___bpf_usdt_args9(x, args...) ___bpf_usdt_args8(args), ({ long _x; bpf_usdt_arg(ctx, 8, &_x); _x; })
226+
#define ___bpf_usdt_args10(x, args...) ___bpf_usdt_args9(args), ({ long _x; bpf_usdt_arg(ctx, 9, &_x); _x; })
227+
#define ___bpf_usdt_args11(x, args...) ___bpf_usdt_args10(args), ({ long _x; bpf_usdt_arg(ctx, 10, &_x); _x; })
228+
#define ___bpf_usdt_args12(x, args...) ___bpf_usdt_args11(args), ({ long _x; bpf_usdt_arg(ctx, 11, &_x); _x; })
229229
#define ___bpf_usdt_args(args...) ___bpf_apply(___bpf_usdt_args, ___bpf_narg(args))(args)
230230

231231
/*

0 commit comments

Comments
 (0)