dwarves.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] btf_encoder: Check var type after checking var addr.
@ 2020-10-26 22:18 Hao Luo
  2020-10-26 23:22 ` Andrii Nakryiko
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Hao Luo @ 2020-10-26 22:18 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Andrii Nakryiko, Jiri Olsa, dwarves, Hao Luo

Commit 2e719cc ("btf_encoder: revamp how per-CPU variables are
encoded") adds percpu_var_exists() to filter out the symbols that
are not percpu var. However, the check comes after checking the
var's type. There can be symbols that are of zero type. If we hit
that, btf_encoder will not work without '--btf_encode_force'.
So we should check percpu_var_exists before checking var's type.

Tested:
 haoluo@haoluo:~/kernel/tip$ gcc --version
 gcc (GCC) 10.2.0
 Copyright (C) 2020 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 Before:

 haoluo@haoluo:~/kernel/tip$ make clean -s
 haoluo@haoluo:~/kernel/tip$ make -j 32 -s
   LINK     resolve_btfids
 error: found variable in CU 'kernel/bpf/btf.c' that has void type
 Encountered error while encoding BTF.
 FAILED: load BTF from vmlinux: Unknown error -2make: *** [Makefile:1164: vmlinux] Error 255

 After:

 haoluo@haoluo:~/kernel/tip$ make clean -s
 haoluo@haoluo:~/kernel/tip$ make -j 32 -s
   LINK     resolve_btfids
 haoluo@haoluo:~/kernel/tip$

Fixes: 2e719cc ("btf_encoder: revamp how per-CPU variables are encoded")
Signed-off-by: Hao Luo <haoluo@google.com>
---
 btf_encoder.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/btf_encoder.c b/btf_encoder.c
index 2a6455b..b5f8f3e 100644
--- a/btf_encoder.c
+++ b/btf_encoder.c
@@ -441,9 +441,12 @@ int cu__encode_btf(struct cu *cu, int verbose, bool force,
 		if (var->spec)
 			var = var->spec;
 
+		if (!percpu_var_exists(addr, &size, &name))
+			continue; /* not a per-CPU variable */
+
 		if (var->ip.tag.type == 0) {
-			fprintf(stderr, "error: found variable in CU '%s' that has void type\n",
-				cu->name);
+			fprintf(stderr, "error: found variable '%s' in CU '%s' that has void type\n",
+				name, cu->name);
 			if (force)
 				continue;
 			err = -1;
@@ -452,8 +455,6 @@ int cu__encode_btf(struct cu *cu, int verbose, bool force,
 
 		type = var->ip.tag.type + type_id_off;
 		linkage = var->external ? BTF_VAR_GLOBAL_ALLOCATED : BTF_VAR_STATIC;
-		if (!percpu_var_exists(addr, &size, &name))
-			continue; /* not a per-CPU variable */
 
 		if (btf_elf__verbose) {
 			printf("Variable '%s' from CU '%s' at address 0x%lx encoded\n",
-- 
2.29.0.rc1.297.gfa9743e501-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] btf_encoder: Check var type after checking var addr.
  2020-10-26 22:18 [PATCH] btf_encoder: Check var type after checking var addr Hao Luo
@ 2020-10-26 23:22 ` Andrii Nakryiko
  2020-10-27 11:19 ` Arnaldo Carvalho de Melo
  2020-10-27 11:20 ` Jiri Olsa
  2 siblings, 0 replies; 4+ messages in thread
From: Andrii Nakryiko @ 2020-10-26 23:22 UTC (permalink / raw)
  To: Hao Luo; +Cc: Arnaldo Carvalho de Melo, Jiri Olsa, dwarves

On Mon, Oct 26, 2020 at 3:18 PM Hao Luo <haoluo@google.com> wrote:
>
> Commit 2e719cc ("btf_encoder: revamp how per-CPU variables are
> encoded") adds percpu_var_exists() to filter out the symbols that
> are not percpu var. However, the check comes after checking the
> var's type. There can be symbols that are of zero type. If we hit
> that, btf_encoder will not work without '--btf_encode_force'.
> So we should check percpu_var_exists before checking var's type.
>
> Tested:
>  haoluo@haoluo:~/kernel/tip$ gcc --version
>  gcc (GCC) 10.2.0
>  Copyright (C) 2020 Free Software Foundation, Inc.
>  This is free software; see the source for copying conditions.  There is NO
>  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
>  Before:
>
>  haoluo@haoluo:~/kernel/tip$ make clean -s
>  haoluo@haoluo:~/kernel/tip$ make -j 32 -s
>    LINK     resolve_btfids
>  error: found variable in CU 'kernel/bpf/btf.c' that has void type
>  Encountered error while encoding BTF.
>  FAILED: load BTF from vmlinux: Unknown error -2make: *** [Makefile:1164: vmlinux] Error 255
>
>  After:
>
>  haoluo@haoluo:~/kernel/tip$ make clean -s
>  haoluo@haoluo:~/kernel/tip$ make -j 32 -s
>    LINK     resolve_btfids
>  haoluo@haoluo:~/kernel/tip$
>
> Fixes: 2e719cc ("btf_encoder: revamp how per-CPU variables are encoded")
> Signed-off-by: Hao Luo <haoluo@google.com>
> ---

Looks good, thanks for the prompt fix!

Acked-by: Andrii Nakryiko <andrii@kernel.org>

>  btf_encoder.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/btf_encoder.c b/btf_encoder.c
> index 2a6455b..b5f8f3e 100644
> --- a/btf_encoder.c
> +++ b/btf_encoder.c
> @@ -441,9 +441,12 @@ int cu__encode_btf(struct cu *cu, int verbose, bool force,
>                 if (var->spec)
>                         var = var->spec;
>
> +               if (!percpu_var_exists(addr, &size, &name))
> +                       continue; /* not a per-CPU variable */
> +
>                 if (var->ip.tag.type == 0) {
> -                       fprintf(stderr, "error: found variable in CU '%s' that has void type\n",
> -                               cu->name);
> +                       fprintf(stderr, "error: found variable '%s' in CU '%s' that has void type\n",
> +                               name, cu->name);
>                         if (force)
>                                 continue;
>                         err = -1;
> @@ -452,8 +455,6 @@ int cu__encode_btf(struct cu *cu, int verbose, bool force,
>
>                 type = var->ip.tag.type + type_id_off;
>                 linkage = var->external ? BTF_VAR_GLOBAL_ALLOCATED : BTF_VAR_STATIC;
> -               if (!percpu_var_exists(addr, &size, &name))
> -                       continue; /* not a per-CPU variable */
>
>                 if (btf_elf__verbose) {
>                         printf("Variable '%s' from CU '%s' at address 0x%lx encoded\n",
> --
> 2.29.0.rc1.297.gfa9743e501-goog
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] btf_encoder: Check var type after checking var addr.
  2020-10-26 22:18 [PATCH] btf_encoder: Check var type after checking var addr Hao Luo
  2020-10-26 23:22 ` Andrii Nakryiko
@ 2020-10-27 11:19 ` Arnaldo Carvalho de Melo
  2020-10-27 11:20 ` Jiri Olsa
  2 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-10-27 11:19 UTC (permalink / raw)
  To: Hao Luo; +Cc: Arnaldo Carvalho de Melo, Andrii Nakryiko, Jiri Olsa, dwarves

Em Mon, Oct 26, 2020 at 03:18:22PM -0700, Hao Luo escreveu:
> Commit 2e719cc ("btf_encoder: revamp how per-CPU variables are
> encoded") adds percpu_var_exists() to filter out the symbols that
> are not percpu var. However, the check comes after checking the
> var's type. There can be symbols that are of zero type. If we hit
> that, btf_encoder will not work without '--btf_encode_force'.
> So we should check percpu_var_exists before checking var's type.
> 
> Tested:
>  haoluo@haoluo:~/kernel/tip$ gcc --version
>  gcc (GCC) 10.2.0
>  Copyright (C) 2020 Free Software Foundation, Inc.
>  This is free software; see the source for copying conditions.  There is NO
>  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
>  Before:
> 
>  haoluo@haoluo:~/kernel/tip$ make clean -s
>  haoluo@haoluo:~/kernel/tip$ make -j 32 -s
>    LINK     resolve_btfids
>  error: found variable in CU 'kernel/bpf/btf.c' that has void type
>  Encountered error while encoding BTF.
>  FAILED: load BTF from vmlinux: Unknown error -2make: *** [Makefile:1164: vmlinux] Error 255
> 
>  After:
> 
>  haoluo@haoluo:~/kernel/tip$ make clean -s
>  haoluo@haoluo:~/kernel/tip$ make -j 32 -s
>    LINK     resolve_btfids
>  haoluo@haoluo:~/kernel/tip$

Thanks, tested and applied.

- Arnaldo

 
> Fixes: 2e719cc ("btf_encoder: revamp how per-CPU variables are encoded")
> Signed-off-by: Hao Luo <haoluo@google.com>
> ---
>  btf_encoder.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/btf_encoder.c b/btf_encoder.c
> index 2a6455b..b5f8f3e 100644
> --- a/btf_encoder.c
> +++ b/btf_encoder.c
> @@ -441,9 +441,12 @@ int cu__encode_btf(struct cu *cu, int verbose, bool force,
>  		if (var->spec)
>  			var = var->spec;
>  
> +		if (!percpu_var_exists(addr, &size, &name))
> +			continue; /* not a per-CPU variable */
> +
>  		if (var->ip.tag.type == 0) {
> -			fprintf(stderr, "error: found variable in CU '%s' that has void type\n",
> -				cu->name);
> +			fprintf(stderr, "error: found variable '%s' in CU '%s' that has void type\n",
> +				name, cu->name);
>  			if (force)
>  				continue;
>  			err = -1;
> @@ -452,8 +455,6 @@ int cu__encode_btf(struct cu *cu, int verbose, bool force,
>  
>  		type = var->ip.tag.type + type_id_off;
>  		linkage = var->external ? BTF_VAR_GLOBAL_ALLOCATED : BTF_VAR_STATIC;
> -		if (!percpu_var_exists(addr, &size, &name))
> -			continue; /* not a per-CPU variable */
>  
>  		if (btf_elf__verbose) {
>  			printf("Variable '%s' from CU '%s' at address 0x%lx encoded\n",
> -- 
> 2.29.0.rc1.297.gfa9743e501-goog
> 

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] btf_encoder: Check var type after checking var addr.
  2020-10-26 22:18 [PATCH] btf_encoder: Check var type after checking var addr Hao Luo
  2020-10-26 23:22 ` Andrii Nakryiko
  2020-10-27 11:19 ` Arnaldo Carvalho de Melo
@ 2020-10-27 11:20 ` Jiri Olsa
  2 siblings, 0 replies; 4+ messages in thread
From: Jiri Olsa @ 2020-10-27 11:20 UTC (permalink / raw)
  To: Hao Luo; +Cc: Arnaldo Carvalho de Melo, Andrii Nakryiko, Jiri Olsa, dwarves

On Mon, Oct 26, 2020 at 03:18:22PM -0700, Hao Luo wrote:
> Commit 2e719cc ("btf_encoder: revamp how per-CPU variables are
> encoded") adds percpu_var_exists() to filter out the symbols that
> are not percpu var. However, the check comes after checking the
> var's type. There can be symbols that are of zero type. If we hit
> that, btf_encoder will not work without '--btf_encode_force'.
> So we should check percpu_var_exists before checking var's type.
> 
> Tested:
>  haoluo@haoluo:~/kernel/tip$ gcc --version
>  gcc (GCC) 10.2.0
>  Copyright (C) 2020 Free Software Foundation, Inc.
>  This is free software; see the source for copying conditions.  There is NO
>  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
>  Before:
> 
>  haoluo@haoluo:~/kernel/tip$ make clean -s
>  haoluo@haoluo:~/kernel/tip$ make -j 32 -s
>    LINK     resolve_btfids
>  error: found variable in CU 'kernel/bpf/btf.c' that has void type
>  Encountered error while encoding BTF.
>  FAILED: load BTF from vmlinux: Unknown error -2make: *** [Makefile:1164: vmlinux] Error 255
> 
>  After:
> 
>  haoluo@haoluo:~/kernel/tip$ make clean -s
>  haoluo@haoluo:~/kernel/tip$ make -j 32 -s
>    LINK     resolve_btfids
>  haoluo@haoluo:~/kernel/tip$
> 
> Fixes: 2e719cc ("btf_encoder: revamp how per-CPU variables are encoded")
> Signed-off-by: Hao Luo <haoluo@google.com>

it fixes the build issue for me

Tested-by: Jiri Olsa <jolsa@redhat.com>

thanks,
jirka


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-10-27 11:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-26 22:18 [PATCH] btf_encoder: Check var type after checking var addr Hao Luo
2020-10-26 23:22 ` Andrii Nakryiko
2020-10-27 11:19 ` Arnaldo Carvalho de Melo
2020-10-27 11:20 ` Jiri Olsa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).