Skip to contentSkip to conversation

perf/bpf: fix a clang compilation issue

PATCH Applied Yonghong Song 3 participants 3 messages Sep 8, 2017 – Sep 13, 2017

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

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
index 88951b7..95606a2 100644
@@ -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
index 9c4eef2..696afe7 100644
@@ -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
maintainer Applied
#1 lore raw

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.

Applied.

#2 lore raw

great, thanks!

Quoted 17 lines · David Miller

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.

Applied.

Signature · 2 lines
Thanks,
~Nick Desaulniers