perf symbols: Parse NOTE segments until the build id is found
authorChengen Du <chengen.du@canonical.com>
Thu, 30 Nov 2023 13:57:23 +0000 (21:57 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 6 Dec 2023 12:46:15 +0000 (09:46 -0300)
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>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20231130135723.17562-1-chengen.du@canonical.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/symbol-minimal.c

index a81a14769bd101bdeb207a05ec4b858ac04b8193..1da8b713509c5367b9d68d666b71cf4a1d9db6fd 100644 (file)
@@ -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: