• Alan Maguire's avatar
    libbpf: Fix clang compilation error in btf_relocate.c · 0f31c2c6
    Alan Maguire authored
    When building with clang for ARCH=i386, the following errors are
    observed:
    
      CC      kernel/bpf/btf_relocate.o
    ./tools/lib/bpf/btf_relocate.c:206:23: error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Werror,-Wsingle-bit-bitfield-constant-conversion]
      206 |                 info[id].needs_size = true;
          |                                     ^ ~
    ./tools/lib/bpf/btf_relocate.c:256:25: error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Werror,-Wsingle-bit-bitfield-constant-conversion]
      256 |                         base_info.needs_size = true;
          |                                              ^ ~
    2 errors generated.
    
    The problem is we use 1-bit, 31-bit bitfields in a signed int.
    Changing to
    
    	bool needs_size: 1;
    	unsigned int size:31;
    
    ...resolves the error and pahole reports that 4 bytes are used
    for the underlying representation:
    
    $ pahole btf_name_info tools/lib/bpf/btf_relocate.o
    struct btf_name_info {
    	const char  *              name;                 /*     0     8 */
    	unsigned int               needs_size:1;         /*     8: 0  4 */
    	unsigned int               size:31;              /*     8: 1  4 */
    	__u32                      id;                   /*    12     4 */
    
    	/* size: 16, cachelines: 1, members: 4 */
    	/* last cacheline: 16 bytes */
    };
    Signed-off-by: default avatarAlan Maguire <alan.maguire@oracle.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20240624192903.854261-1-alan.maguire@oracle.com
    0f31c2c6
btf_relocate.c 14.3 KB