tree:
https://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git bpf/d_path
head: 686910572925427af4fbcc0fffdff0dd0904de64
commit: 1ebb9a6880b2e1d1ade270367e023cb3ed074b6f [2/11] bpf: Compile btfid tool at kernel
compilation start
config: x86_64-rhel-7.6-kselftests (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce (this is a W=1 build):
git checkout 1ebb9a6880b2e1d1ade270367e023cb3ed074b6f
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>, old ones prefixed by <<):
In file included from btfid.c:51:
tools/lib/bpf/btf.h: In function 'btf_kflag':
> tools/lib/bpf/btf.h:168:9: warning: implicit declaration of
function 'BTF_INFO_KFLAG'; did you mean 'BTF_INFO_KIND'?
[-Wimplicit-function-declaration]
168 | return BTF_INFO_KFLAG(t->info);
| ^~~~~~~~~~~~~~
| BTF_INFO_KIND
tools/lib/bpf/btf.h: In function 'btf_is_func':
> tools/lib/bpf/btf.h:244:24: error: 'BTF_KIND_FUNC'
undeclared (first use in this function); did you mean 'BTF_KIND_UNKN'?
244 |
return btf_kind(t) == BTF_KIND_FUNC;
| ^~~~~~~~~~~~~
| BTF_KIND_UNKN
tools/lib/bpf/btf.h:244:24: note: each undeclared identifier is reported only once for
each function it appears in
tools/lib/bpf/btf.h: In function 'btf_is_func_proto':
> tools/lib/bpf/btf.h:249:24: error: 'BTF_KIND_FUNC_PROTO'
undeclared (first use in this function); did you mean 'BTF_KIND_UNION'?
249
| return btf_kind(t) == BTF_KIND_FUNC_PROTO;
| ^~~~~~~~~~~~~~~~~~~
| BTF_KIND_UNION
tools/lib/bpf/btf.h: In function 'btf_is_var':
> tools/lib/bpf/btf.h:254:24: error: 'BTF_KIND_VAR'
undeclared (first use in this function); did you mean 'BTF_KIND_PTR'?
254 |
return btf_kind(t) == BTF_KIND_VAR;
| ^~~~~~~~~~~~
| BTF_KIND_PTR
tools/lib/bpf/btf.h: In function 'btf_is_datasec':
> tools/lib/bpf/btf.h:259:24: error: 'BTF_KIND_DATASEC'
undeclared (first use in this function); did you mean 'BTF_KIND_PTR'?
259 |
return btf_kind(t) == BTF_KIND_DATASEC;
| ^~~~~~~~~~~~~~~~
| BTF_KIND_PTR
tools/lib/bpf/btf.h: In function 'btf_member_bit_offset':
> tools/lib/bpf/btf.h:299:17: warning: implicit declaration of
function 'BTF_MEMBER_BIT_OFFSET' [-Wimplicit-function-declaration]
299 |
return kflag ? BTF_MEMBER_BIT_OFFSET(m->offset) : m->offset;
| ^~~~~~~~~~~~~~~~~~~~~
tools/lib/bpf/btf.h: In function 'btf_member_bitfield_size':
> tools/lib/bpf/btf.h:311:17: warning: implicit declaration of
function 'BTF_MEMBER_BITFIELD_SIZE' [-Wimplicit-function-declaration]
311 |
return kflag ? BTF_MEMBER_BITFIELD_SIZE(m->offset) : 0;
| ^~~~~~~~~~~~~~~~~~~~~~~~
btfid.c: In function 'symbols_resolve':
> btfid.c:443:36: error: 'BTF_KIND_FUNC' undeclared (first
use in this function); did you mean 'BTF_KIND_UNKN'?
443 | if
(BTF_INFO_KIND(type->info) == BTF_KIND_FUNC && nr_funcs) {
| ^~~~~~~~~~~~~
| BTF_KIND_UNKN
mv: cannot stat 'tools/bpf/btfid/.btfid.o.tmp': No such file or directory
make[4]: *** [tools/build/Makefile.build:97: tools/bpf/btfid/btfid.o] Error 1
make[4]: Target '__build' not remade because of errors.
make[3]: *** [Makefile:59: tools/bpf/btfid/btfid-in.o] Error 2
make[3]: Target 'all' not remade because of errors.
make[2]: *** [Makefile:71: bpf/btfid] Error 2
make[1]: *** [Makefile:1892: tools/bpf/btfid] Error 2
make[1]: Target 'prepare' not remade because of errors.
make: *** [Makefile:185: __sub-make] Error 2
make: Target 'prepare' not remade because of errors.
vim +244 tools/lib/bpf/btf.h
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 165
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 166 static inline bool btf_kflag(const struct
btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 167 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 @168 return BTF_INFO_KFLAG(t->info);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 169 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 170
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 171 static inline bool btf_is_int(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 172 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 173 return btf_kind(t) == BTF_KIND_INT;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 174 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 175
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 176 static inline bool btf_is_ptr(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 177 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 178 return btf_kind(t) == BTF_KIND_PTR;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 179 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 180
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 181 static inline bool btf_is_array(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 182 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 183 return btf_kind(t) == BTF_KIND_ARRAY;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 184 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 185
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 186 static inline bool btf_is_struct(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 187 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 188 return btf_kind(t) == BTF_KIND_STRUCT;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 189 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 190
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 191 static inline bool btf_is_union(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 192 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 193 return btf_kind(t) == BTF_KIND_UNION;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 194 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 195
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 196 static inline bool btf_is_composite(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 197 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 198 __u16 kind = btf_kind(t);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 199
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 200 return kind == BTF_KIND_STRUCT || kind
== BTF_KIND_UNION;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 201 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 202
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 203 static inline bool btf_is_enum(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 204 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 205 return btf_kind(t) == BTF_KIND_ENUM;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 206 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 207
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 208 static inline bool btf_is_fwd(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 209 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 210 return btf_kind(t) == BTF_KIND_FWD;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 211 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 212
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 213 static inline bool btf_is_typedef(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 214 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 215 return btf_kind(t) == BTF_KIND_TYPEDEF;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 216 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 217
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 218 static inline bool btf_is_volatile(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 219 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 220 return btf_kind(t) ==
BTF_KIND_VOLATILE;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 221 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 222
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 223 static inline bool btf_is_const(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 224 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 225 return btf_kind(t) == BTF_KIND_CONST;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 226 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 227
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 228 static inline bool btf_is_restrict(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 229 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 230 return btf_kind(t) ==
BTF_KIND_RESTRICT;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 231 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 232
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 233 static inline bool btf_is_mod(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 234 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 235 __u16 kind = btf_kind(t);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 236
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 237 return kind == BTF_KIND_VOLATILE ||
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 238 kind == BTF_KIND_CONST ||
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 239 kind == BTF_KIND_RESTRICT;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 240 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 241
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 242 static inline bool btf_is_func(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 243 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 @244 return btf_kind(t) == BTF_KIND_FUNC;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 245 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 246
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 247 static inline bool
btf_is_func_proto(const struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 248 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 @249 return btf_kind(t) ==
BTF_KIND_FUNC_PROTO;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 250 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 251
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 252 static inline bool btf_is_var(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 253 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 @254 return btf_kind(t) == BTF_KIND_VAR;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 255 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 256
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 257 static inline bool btf_is_datasec(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 258 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 @259 return btf_kind(t) == BTF_KIND_DATASEC;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 260 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 261
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 262 static inline __u8 btf_int_encoding(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 263 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 264 return BTF_INT_ENCODING(*(__u32 *)(t +
1));
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 265 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 266
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 267 static inline __u8 btf_int_offset(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 268 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 269 return BTF_INT_OFFSET(*(__u32 *)(t +
1));
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 270 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 271
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 272 static inline __u8 btf_int_bits(const
struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 273 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 274 return BTF_INT_BITS(*(__u32 *)(t + 1));
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 275 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 276
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 277 static inline struct btf_array
*btf_array(const struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 278 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 279 return (struct btf_array *)(t + 1);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 280 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 281
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 282 static inline struct btf_enum
*btf_enum(const struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 283 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 284 return (struct btf_enum *)(t + 1);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 285 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 286
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 287 static inline struct btf_member
*btf_members(const struct btf_type *t)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 288 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 289 return (struct btf_member *)(t + 1);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 290 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 291
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 292 /* Get bit offset of a member with
specified index. */
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 293 static inline __u32
btf_member_bit_offset(const struct btf_type *t,
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 294 __u32 member_idx)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 295 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 296 const struct btf_member *m =
btf_members(t) + member_idx;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 297 bool kflag = btf_kflag(t);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 298
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 @299 return kflag ?
BTF_MEMBER_BIT_OFFSET(m->offset) : m->offset;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 300 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 301 /*
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 302 * Get bitfield size of a member,
assuming t is BTF_KIND_STRUCT or
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 303 * BTF_KIND_UNION. If member is not a
bitfield, zero is returned.
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 304 */
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 305 static inline __u32
btf_member_bitfield_size(const struct btf_type *t,
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 306 __u32 member_idx)
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 307 {
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 308 const struct btf_member *m =
btf_members(t) + member_idx;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 309 bool kflag = btf_kflag(t);
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 310
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 @311 return kflag ?
BTF_MEMBER_BITFIELD_SIZE(m->offset) : 0;
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 312 }
ef20a9b27c66278 Andrii Nakryiko 2019-08-07 313
:::::: The code at line 244 was first introduced by commit
:::::: ef20a9b27c66278ac2f85006db8ea11d5f61a781 libbpf: add helpers for working with BTF
types
:::::: TO: Andrii Nakryiko <andriin(a)fb.com>
:::::: CC: Alexei Starovoitov <ast(a)kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org