[PATCH] perf symbols: Parse NOTE segments until the build id is found

Chengen Du posted 1 patch 2 years ago
tools/perf/util/symbol-minimal.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
[PATCH] perf symbols: Parse NOTE segments until the build id is found
Posted by Chengen Du 2 years ago
In the ELF file, multiple NOTE segments may exist.
To locate the build id, the process shall persist
in parsing NOTE segments until the build id is found.

Signed-off-by: Chengen Du <chengen.du@canonical.com>
---
 tools/perf/util/symbol-minimal.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-minimal.c
index a81a14769bd1..1da8b713509c 100644
--- a/tools/perf/util/symbol-minimal.c
+++ b/tools/perf/util/symbol-minimal.c
@@ -159,9 +159,10 @@ int filename__read_build_id(const char *filename, struct build_id *bid)
 				goto out_free;
 
 			ret = read_build_id(buf, buf_size, bid, need_swap);
-			if (ret == 0)
+			if (ret == 0) {
 				ret = bid->size;
-			break;
+				break;
+			}
 		}
 	} else {
 		Elf64_Ehdr ehdr;
@@ -210,9 +211,10 @@ int filename__read_build_id(const char *filename, struct build_id *bid)
 				goto out_free;
 
 			ret = read_build_id(buf, buf_size, bid, need_swap);
-			if (ret == 0)
+			if (ret == 0) {
 				ret = bid->size;
-			break;
+				break;
+			}
 		}
 	}
 out_free:
-- 
2.40.1
Re: [PATCH] perf symbols: Parse NOTE segments until the build id is found
Posted by Ian Rogers 2 years ago
On Thu, Nov 30, 2023 at 5:57 AM Chengen Du <chengen.du@canonical.com> wrote:
>
> In the ELF file, multiple NOTE segments may exist.
> To locate the build id, the process shall persist
> in parsing NOTE segments until the build id is found.
>
> Signed-off-by: Chengen Du <chengen.du@canonical.com>

Acked-by: Ian Rogers <irogers@google.com>

For this code to be run then libelf needs to be disabled, I guess this
is why the problem has existed, out of curiosity why not use libelf?
If you look at tools/perf/Makefile.config, disabling libelf disables
libbpf, which means a whole heap of perf tool features are going to be
missing for you.

It may also be possible to add:
Fixes b691f64360ec ("perf symbols: Implement poor man's ELF parser")

Thanks,
Ian

> ---
>  tools/perf/util/symbol-minimal.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/util/symbol-minimal.c b/tools/perf/util/symbol-minimal.c
> index a81a14769bd1..1da8b713509c 100644
> --- a/tools/perf/util/symbol-minimal.c
> +++ b/tools/perf/util/symbol-minimal.c
> @@ -159,9 +159,10 @@ int filename__read_build_id(const char *filename, struct build_id *bid)
>                                 goto out_free;
>
>                         ret = read_build_id(buf, buf_size, bid, need_swap);
> -                       if (ret == 0)
> +                       if (ret == 0) {
>                                 ret = bid->size;
> -                       break;
> +                               break;
> +                       }
>                 }
>         } else {
>                 Elf64_Ehdr ehdr;
> @@ -210,9 +211,10 @@ int filename__read_build_id(const char *filename, struct build_id *bid)
>                                 goto out_free;
>
>                         ret = read_build_id(buf, buf_size, bid, need_swap);
> -                       if (ret == 0)
> +                       if (ret == 0) {
>                                 ret = bid->size;
> -                       break;
> +                               break;
> +                       }
>                 }
>         }
>  out_free:
> --
> 2.40.1
>
Re: [PATCH] perf symbols: Parse NOTE segments until the build id is found
Posted by Arnaldo Carvalho de Melo 2 years ago
Em Thu, Nov 30, 2023 at 10:23:31AM -0800, Ian Rogers escreveu:
> On Thu, Nov 30, 2023 at 5:57 AM Chengen Du <chengen.du@canonical.com> wrote:
> >
> > In the ELF file, multiple NOTE segments may exist.
> > To locate the build id, the process shall persist
> > in parsing NOTE segments until the build id is found.
> >
> > Signed-off-by: Chengen Du <chengen.du@canonical.com>
> 
> Acked-by: Ian Rogers <irogers@google.com>

Thanks, applied to perf-tools-next.

- Arnaldo