Commit ca81e74d authored by Ian Rogers's avatar Ian Rogers Committed by Namhyung Kim
Browse files

perf symbol-elf: Add support for the block argument for libbfd



James Clark caught that the BUILD_NONDISTRO=1 build with libbfd was
broken due to an update to the read_build_id function adding a
blocking argument. Add support for this argument by first opening the
file blocking or non-blocking, then switching from bfd_openr to
bfd_fdopenr and passing the opened fd. bfd_fdopenr closes the fd on
error and when bfd_close are called.

Reported-by: default avatarJames Clark <james.clark@linaro.org>
Closes: https://lore.kernel.org/lkml/20250903-james-perf-read-build-id-fix-v1-2-6a694d0a980f@linaro.org/


Fixes: 2c369d91 ("perf symbol: Add blocking argument to filename__read_build_id")
Signed-off-by: default avatarIan Rogers <irogers@google.com>
Reviewed-by: default avatarJames Clark <james.clark@linaro.org>
Link: https://lore.kernel.org/r/20250904161731.1193729-1-irogers@google.com


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent 744175e9
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -873,13 +873,17 @@ static int elf_read_build_id(Elf *elf, void *bf, size_t size)

#ifdef HAVE_LIBBFD_BUILDID_SUPPORT

static int read_build_id(const char *filename, struct build_id *bid)
static int read_build_id(const char *filename, struct build_id *bid, bool block)
{
	size_t size = sizeof(bid->data);
	int err = -1;
	int err = -1, fd;
	bfd *abfd;

	abfd = bfd_openr(filename, NULL);
	fd = open(filename, block ? O_RDONLY : (O_RDONLY | O_NONBLOCK));
	if (fd < 0)
		return -1;

	abfd = bfd_fdopenr(filename, /*target=*/NULL, fd);
	if (!abfd)
		return -1;