• Tiezhu Yang's avatar
    samples/bpf: Set flag __SANE_USERSPACE_TYPES__ for MIPS to fix build warnings · 190d1c92
    Tiezhu Yang authored
    There exists many build warnings when make M=samples/bpf on the Loongson
    platform, this issue is MIPS related, x86 compiles just fine.
    
    Here are some warnings:
    
      CC  samples/bpf/ibumad_user.o
    samples/bpf/ibumad_user.c: In function ‘dump_counts’:
    samples/bpf/ibumad_user.c:46:24: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘__u64’ {aka ‘long unsigned int’} [-Wformat=]
        printf("0x%02x : %llu\n", key, value);
                         ~~~^          ~~~~~
                         %lu
      CC  samples/bpf/offwaketime_user.o
    samples/bpf/offwaketime_user.c: In function ‘print_ksym’:
    samples/bpf/offwaketime_user.c:34:17: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘__u64’ {aka ‘long unsigned int’} [-Wformat=]
       printf("%s/%llx;", sym->name, addr);
                  ~~~^               ~~~~
                  %lx
    samples/bpf/offwaketime_user.c: In function ‘print_stack’:
    samples/bpf/offwaketime_user.c:68:17: warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 3 has type ‘__u64’ {aka ‘long unsigned int’} [-Wformat=]
      printf(";%s %lld\n", key->waker, count);
                  ~~~^                 ~~~~~
                  %ld
    
    MIPS needs __SANE_USERSPACE_TYPES__ before <linux/types.h> to select
    'int-ll64.h' in arch/mips/include/uapi/asm/types.h, then it can avoid
    build warnings when printing __u64 with %llu, %llx or %lld.
    
    The header tools/include/linux/types.h defines __SANE_USERSPACE_TYPES__,
    it seems that we can include <linux/types.h> in the source files which
    have build warnings, but it has no effect due to actually it includes
    usr/include/linux/types.h instead of tools/include/linux/types.h, the
    problem is that "usr/include" is preferred first than "tools/include"
    in samples/bpf/Makefile, that sounds like a ugly hack to -Itools/include
    before -Iusr/include.
    
    So define __SANE_USERSPACE_TYPES__ for MIPS in samples/bpf/Makefile
    is proper, if add "TPROGS_CFLAGS += -D__SANE_USERSPACE_TYPES__" in
    samples/bpf/Makefile, it appears the following error:
    
    Auto-detecting system features:
    ...                        libelf: [ on  ]
    ...                          zlib: [ on  ]
    ...                           bpf: [ OFF ]
    
    BPF API too old
    make[3]: *** [Makefile:293: bpfdep] Error 1
    make[2]: *** [Makefile:156: all] Error 2
    
    With #ifndef __SANE_USERSPACE_TYPES__  in tools/include/linux/types.h,
    the above error has gone and this ifndef change does not hurt other
    compilations.
    Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/1611551146-14052-1-git-send-email-yangtiezhu@loongson.cn
    190d1c92
Makefile 10.8 KB