struct syscall_trace_enter *rec)
 {
        struct syscall_tp_t {
-               unsigned long long regs;
+               struct trace_entry ent;
                unsigned long syscall_nr;
                unsigned long args[SYSCALL_DEFINE_MAXARGS];
-       } param;
+       } __aligned(8) param;
        int i;
 
+       BUILD_BUG_ON(sizeof(param.ent) < sizeof(void *));
+
+       /* bpf prog requires 'regs' to be the first member in the ctx (a.k.a. ¶m) */
        *(struct pt_regs **)¶m = regs;
        param.syscall_nr = rec->nr;
        for (i = 0; i < sys_data->nb_args; i++)
                              struct syscall_trace_exit *rec)
 {
        struct syscall_tp_t {
-               unsigned long long regs;
+               struct trace_entry ent;
                unsigned long syscall_nr;
                unsigned long ret;
-       } param;
+       } __aligned(8) param;
 
+       /* bpf prog requires 'regs' to be the first member in the ctx (a.k.a. ¶m) */
        *(struct pt_regs **)¶m = regs;
        param.syscall_nr = rec->nr;
        param.ret = rec->ret;