• Tiezhu Yang's avatar
    bpf, mips: Fix build errors about __NR_bpf undeclared · e32cb12f
    Tiezhu Yang authored
    Add the __NR_bpf definitions to fix the following build errors for mips:
    
      $ cd tools/bpf/bpftool
      $ make
      [...]
      bpf.c:54:4: error: #error __NR_bpf not defined. libbpf does not support your arch.
       #  error __NR_bpf not defined. libbpf does not support your arch.
          ^~~~~
      bpf.c: In function ‘sys_bpf’:
      bpf.c:66:17: error: ‘__NR_bpf’ undeclared (first use in this function); did you mean ‘__NR_brk’?
        return syscall(__NR_bpf, cmd, attr, size);
                       ^~~~~~~~
                       __NR_brk
      [...]
      In file included from gen_loader.c:15:0:
      skel_internal.h: In function ‘skel_sys_bpf’:
      skel_internal.h:53:17: error: ‘__NR_bpf’ undeclared (first use in this function); did you mean ‘__NR_brk’?
        return syscall(__NR_bpf, cmd, attr, size);
                       ^~~~~~~~
                       __NR_brk
    
    We can see the following generated definitions:
    
      $ grep -r "#define __NR_bpf" arch/mips
      arch/mips/include/generated/uapi/asm/unistd_o32.h:#define __NR_bpf (__NR_Linux + 355)
      arch/mips/include/generated/uapi/asm/unistd_n64.h:#define __NR_bpf (__NR_Linux + 315)
      arch/mips/include/generated/uapi/asm/unistd_n32.h:#define __NR_bpf (__NR_Linux + 319)
    
    The __NR_Linux is defined in arch/mips/include/uapi/asm/unistd.h:
    
      $ grep -r "#define __NR_Linux" arch/mips
      arch/mips/include/uapi/asm/unistd.h:#define __NR_Linux	4000
      arch/mips/include/uapi/asm/unistd.h:#define __NR_Linux	5000
      arch/mips/include/uapi/asm/unistd.h:#define __NR_Linux	6000
    
    That is to say, __NR_bpf is:
    
      4000 + 355 = 4355 for mips o32,
      6000 + 319 = 6319 for mips n32,
      5000 + 315 = 5315 for mips n64.
    
    So use the GCC pre-defined macro _ABIO32, _ABIN32 and _ABI64 [1] to define
    the corresponding __NR_bpf.
    
    This patch is similar with commit bad1926d ("bpf, s390: fix build for
    libbpf and selftest suite").
    
      [1] https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/mips/mips.h#l549Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/1637804167-8323-1-git-send-email-yangtiezhu@loongson.cn
    e32cb12f
skel_internal.h 3.07 KB