Oops, sorry about my terrible formatting. On Mon, Oct 26, 2020 at 2:17 PM Hao Luo <haoluo@xxxxxxxxxx> wrote: > > On Mon, Oct 26, 2020 at 1:32 PM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > > > On Mon, Oct 26, 2020 at 04:58:30PM -0300, Arnaldo Carvalho de Melo wrote: > > > Hi guys, > > > > > > I just stumbled on this, investigating... This is with what is > > > in the tmp branch at > > > git://git.kernel.org/pub/scm/devel/pahole/pahole.git. > > > > > > error: found variable in CU '/home/acme/git/linux/security/selinux/hooks.c' that has void type > > > Encountered error while encoding BTF. > > > LD .tmp_vmlinux.kallsyms1 > > > KSYMS .tmp_vmlinux.kallsyms1.S > > > AS .tmp_vmlinux.kallsyms1.S > > > LD .tmp_vmlinux.kallsyms2 > > > KSYMS .tmp_vmlinux.kallsyms2.S > > > AS .tmp_vmlinux.kallsyms2.S > > > LD vmlinux > > > BTFIDS vmlinux > > > FAILED: load BTF from vmlinux: Unknown error -2make[1]: *** [/home/acme/git/linux/Makefile:1164: vmlinux] Error 255 > > > make[1]: Leaving directory '/home/acme/git/build/v5.10.0-rc1+' > > > make: *** [Makefile:185: __sub-make] Error 2 > > > > yep, I see the same and when I use --btf_encode_force, > > it shows more of them: > > > > error: found variable in CU 'arch/x86/kernel/cpu/mce/core.c' that has void type > > error: found variable in CU 'security/selinux/hooks.c' that has void type > > error: found variable in CU 'security/selinux/hooks.c' that has void type > > error: found variable in CU 'security/selinux/hooks.c' that has void type > > error: found variable in CU 'security/selinux/hooks.c' that has void type > > error: found variable in CU 'security/selinux/hooks.c' that has void type > > error: found variable in CU 'security/selinux/hooks.c' that has void type > > error: found variable in CU 'drivers/platform/x86/intel_pmc_core.c' that has void type > > > > I have no idea how variables are encoded in dwarf, > > but I wonder it's another gcc bug ;-) > > > > jirka > > > > Still looking. But I found if I move > > c815d266 (Hao Luo 2020-08-24 17:45:23 -0700 444) > if (var->ip.tag.type == 0) { > 2e719cca (Andrii Nakryiko 2020-10-08 16:39:57 -0700 445) > fprintf(stderr, "error: found variable in CU '%s' > that has void type\n", > 2e719cca (Andrii Nakryiko 2020-10-08 16:39:57 -0700 446) > cu->name); > f3d9054b (Hao Luo 2020-07-08 13:44:10 -0700 447) > if (force) > f3d9054b (Hao Luo 2020-07-08 13:44:10 -0700 448) > continue; > f3d9054b (Hao Luo 2020-07-08 13:44:10 -0700 449) > err = -1; > f3d9054b (Hao Luo 2020-07-08 13:44:10 -0700 450) > break; > f3d9054b (Hao Luo 2020-07-08 13:44:10 -0700 451) > } > f3d9054b (Hao Luo 2020-07-08 13:44:10 -0700 452) > > after > > 2e719cca (Andrii Nakryiko 2020-10-08 16:39:57 -0700 453) > type = var->ip.tag.type + type_id_off; > 2e719cca (Andrii Nakryiko 2020-10-08 16:39:57 -0700 454) > linkage = var->external ? BTF_VAR_GLOBAL_ALLOCATED : > BTF_VAR_STATIC; > 2e719cca (Andrii Nakryiko 2020-10-08 16:39:57 -0700 455) > if (!percpu_var_exists(addr, &size, &name)) > 2e719cca (Andrii Nakryiko 2020-10-08 16:39:57 -0700 456) > continue; /* not a per-CPU variable */ > > the error is gone. I think we should check percpu_var_exists() before > checking var->ip.tag.type. > > Hao