2023-11-30 13:57:53

by Chengen Du

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

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 <[email protected]>
---
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


2023-11-30 18:24:14

by Ian Rogers

[permalink] [raw]
Subject: Re: [PATCH] perf symbols: Parse NOTE segments until the build id is found

On Thu, Nov 30, 2023 at 5:57 AM Chengen Du <[email protected]> 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 <[email protected]>

Acked-by: Ian Rogers <[email protected]>

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
>

2023-12-05 15:56:49

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf symbols: Parse NOTE segments until the build id is found

Em Thu, Nov 30, 2023 at 10:23:31AM -0800, Ian Rogers escreveu:
> On Thu, Nov 30, 2023 at 5:57 AM Chengen Du <[email protected]> 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 <[email protected]>
>
> Acked-by: Ian Rogers <[email protected]>

Thanks, applied to perf-tools-next.

- Arnaldo