perf/bpf: fix a clang compilation issue
Subsystems (4)
PATCH 1/1 perf/bpf: fix a clang compilation issue
clang does not support variable length array for structure member. It has the following error during compilation:
kernel/trace/trace_syscalls.c:568:17: error: fields must have a constant size:
'variable length array in structure' extension will never be supported
unsigned long args[sys_data->nb_args];
^The fix is to use a fixed array length instead.
--- include/linux/syscalls.h | 2 ++ kernel/trace/trace_syscalls.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-)
include/linux/syscalls.h +2 -0
@@ -200,6 +200,8 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event)#define SYSCALL_DEFINE5 (name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)#define SYSCALL_DEFINE6 (name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) +#define SYSCALL_DEFINE_MAXARGS 6 +#define SYSCALL_DEFINEx (x, sname, ...) \ SYSCALL_METADATA(sname, x, __VA_ARGS__) \ __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
kernel/trace/trace_syscalls.c +1 -1
@@ -565,7 +565,7 @@ static int perf_call_bpf_enter(struct bpf_prog *prog, struct pt_regs *regs,struct syscall_tp_t {unsigned long long regs;unsigned long syscall_nr; -unsigned long args[sys_data->nb_args]; +unsigned long args[SYSCALL_DEFINE_MAXARGS ]; } param;int i;
Signature · 1 line
2.9.5
From: Yonghong Song <[email protected]>
Date: Thu, 7 Sep 2017 18:36:15 -0700
Quoted 5 lines
clang does not support variable length array for structure member. It has the following error during compilation:
kernel/trace/trace_syscalls.c:568:17: error: fields must have a constant size:
'variable length array in structure' extension will never be supported
Quoted 7 lines
unsigned long args[sys_data->nb_args]; ^The fix is to use a fixed array length instead.
Reported-by Nick Desaulniers <[email protected]>Signed-off-by Yonghong Song <[email protected]>
Applied.
great, thanks!
Quoted 17 lines · David Miller
From: Yonghong Song <[email protected]>
Date: Thu, 7 Sep 2017 18:36:15 -0700Quoted 5 lines
clang does not support variable length array for structure member. It has the following error during compilation:
kernel/trace/trace_syscalls.c:568:17: error: fields must have a constant size:
'variable length array in structure' extension will never be supportedQuoted 7 lines
unsigned long args[sys_data->nb_args]; ^The fix is to use a fixed array length instead.
Reported-by Nick Desaulniers <[email protected]>Signed-off-by Yonghong Song <[email protected]>Applied.
Signature · 2 lines
Thanks, ~Nick Desaulniers