On Thu, Sep 02, 2021 at 12:13:40PM -0700, Alexei Starovoitov wrote: > On Thu, Sep 2, 2021 at 2:08 AM Jean-Philippe Brucker > <jean-philippe@xxxxxxxxxx> wrote: > > > > struct pt_regs is not exported to userspace on all archs. arm64 and s390 > > export "user_pt_regs" instead, which causes build failure at the moment: > > > > progs/test_task_pt_regs.c:8:16: error: variable has incomplete type 'struct pt_regs' > > struct pt_regs current_regs = {}; > > Right, which is 'bpf_user_pt_regs_t'. > It's defined for all archs and arm64/s390/ppc/risv define it > differently from pt_regs. > > > > > Use the multi-arch macros defined by tools/lib/bpf/bpf_tracing.h to copy > > the pt_regs into a locally-defined struct. > > > > Copying the user_pt_regs struct on arm64 wouldn't work because the > > struct is too large and the compiler complains about using too much > > stack. > > That's a different issue. It does work when doing an implicit copy (current_regs = *regs) rather than using __builtin_memcpy(). Don't know why but I'll take it. > I think the cleaner fix would be to make the test use > bpf_user_pt_regs_t instead. Right, although that comes with another complication. We end up including tools/include/uapi/asm/bpf_perf_event.h which requires the compiler builtins "__aarch64__", "__s390__", etc. Those are not defined with "clang -target bpf" so I have to add them to the command line. I'll resend with your suggestion but this patch is simpler. Thanks, Jean