From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yw1-f169.google.com (mail-yw1-f169.google.com [209.85.128.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3CD345BE3 for ; Sat, 17 Oct 2026 00:02:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792195329; cv=none; b=jDkzGKyB5L5bIfHz8jEydXbCrHF9iIhnri7HIO98lHpx0FM5uEmDI8Eag1/dlMv7hlExqPb6MlDM76Hz49gy4o8CaC6QzPnqqh7nYCaWGMh7NMLTZpC88JDISZVPyhC0FXN7HipthUHg4GTHV7ylJsqNokZDOqlCsqbs2heiZT8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792195329; c=relaxed/simple; bh=bpFNZaYuwTCMcr+uQiesvng45mUPfxfYKl8zKxZwNI8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=twpeTgNFcAx83Psyjjp2iAcaCyq+7H1/n6MbW6gxA0QNFKrMBbt1hrCkGzIrJcPG/Y2OSrpAOMhLatHONCTirrxzdOgrYhezEwQFx0yyQNZTFYUVfoXZArrksVnI6/XTuOlXvxYE+qNNbRcAL42vXnw+y0xyXWouj4EwtcaHCVA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nNq1Nn/0; arc=none smtp.client-ip=209.85.128.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nNq1Nn/0" Received: by mail-yw1-f169.google.com with SMTP id 00721157ae682-87ab6e5f91eso4137507b3.2 for ; Fri, 16 Oct 2026 17:02:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792195327; x=1792800127; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YMX1yKnizXoHYuUYwiXKhlsMcTLb0C4TkTtJpsCQmZc=; b=nNq1Nn/04ZeGibXNKy2NxhLYvt9MPedMGfkskb3+mFmjHUiOWz2cnN3KI/2zQbFuY0 NMGmOIjx5rBcQLeMVAeBpLM/d/u9CmFBDm/9t7uC8PDqAS0KP8Lqem7aiYuC9ZYo7Eeq Kw6e8Jq+a6tiL7cT9jr+tIvmBnYNMd1NUkI8AypALTcxIe46zNCyOAXidXrF33VromxD XRmpbX1IKoyqrptYyqtVgX9xJ7rmCzEnnIfYYfj/PrMatkAFbwmUqJ5ZyVRVGhN6mZrz 1MczS5wN2W16twZECEQi0Qs3vQxFl/wdYGTcKlssT7ogIIu7MKwo9NBzKGgRf+7tygm5 Y2rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792195327; x=1792800127; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=YMX1yKnizXoHYuUYwiXKhlsMcTLb0C4TkTtJpsCQmZc=; b=xJkQj6qlDhZTrvuZwYttsPJDqDx8p0s7GfqA0fil24JRLOaevDOuNaav4dzVa/jdNE AoPlWntM/013+DGvYdh36vsUcbheTKAFHimUYGqYmCH050sT5K3GNfmr+zqr1M5gnRX6 ZLT8vuUf+0aqCQrWwz/9v+Xy2yiVoqyvXyRNcLMQONOJidHNvLHE4ujDTJCBPDLSg4+Q OeoQcl5l28PTQ3cTQ0zgcR4XjEdTPmJEDbnZK4H32Iblv1diZ2aXGchEH6EYtzqVZgEy fCgAZ++Kk5sSXhKHYIaVyMUlZL67hestoqe5E3lOv9Oh9+cTRdg5mrmgKT4iOxds8T2T xhFQ== X-Forwarded-Encrypted: i=1; AKwUvBycw+GQtVSc/iZJ8ToDEVIkJ7kR/Os1ajEmCnJhcgTV8RNc+OMgV0Dtyf9R0eOlAcY1Npq6IRpIR43G+SY=@vger.kernel.org X-Gm-Message-State: AFq9FYILXfyTNfyHko8slD2K0ppKr/4/2ro6+ocKUjAx4dU6U7mc22+k c9B+FWGuRRp7D6RnjxvYACtk4YOmygA1cIufRrUjKCZfSyVX3xyQQ8js X-Gm-Gg: AYBFou2WSw2oqP45VCHmJHfMhPXRnE9mpuVV1DaWrBs20LZcBb5I79cPycSwC0hKBzF 4pqOGJyxR9S5Qw+g+jHGSwjVdPD29d2nrvdfRffxQx17mi9nYsZdqSge1ItC5fpRbY68wpcbtwd KDeIiNT8xhmV7ZfOu40OZeZXfyJYiI4ZVlgNAGksoFpDf5/9tDfGpNV40X0oJisnl7awnAQIVgh Bc4hvLflm4mcJygQJLJAA0281atZkzQ9vVPeLxbCfUNs0HDc6kgpg4j0AStB9/lKIxoRWVqExK7 7SfHmIlOy0uEF9+QI4bXg9xzUEKj2tsYb2jfXTVtthBaHZaww4Fg24F7xH30/9k9QV6uR0jT/Su YLTHINrqKm/0JeuE8PwaCAjqLTdg8+z1OEYOUmVP8SeX41T2DQfhFIl5wnaxLmJih7TBqsT/myo p24IZ0/SY/zd3cLsbGepU6zpunuoQrKj8TjtL7M256d7Gx2v29oy4lsXoTzU3wEQBKgKS0/kyKi tabx97F4g== X-Received: by 2002:a05:690c:c4e9:b0:8a8:6a39:37e0 with SMTP id 00721157ae682-8b0f21973f2mr5598407b3.42.1792195326755; Fri, 16 Oct 2026 17:02:06 -0700 (PDT) Received: from gmail.com ([2a03:2880:1fff:46::]) by smtp.gmail.com with ESMTPSA id 00721157ae682-8b0e591c51bsm15065347b3.34.2026.10.16.17.02.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Oct 2026 17:02:06 -0700 (PDT) From: Matthew Wood To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/3] perf dso: Move dso__read_build_id() from perf inject to dso.c Date: Fri, 16 Oct 2026 17:01:52 -0700 Message-ID: <20261017000158.1178269-2-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261017000158.1178269-1-thepacketgeek@gmail.com> References: <20261017000158.1178269-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit dso__read_build_id() reads a DSO's build-id from inside its mount namespace when it isn't known yet. The libdw unwinder is going to need it, so move it out of builtin-inject.c and make it available to the rest of perf. No functional change. Signed-off-by: Matthew Wood --- tools/perf/builtin-inject.c | 25 ------------------------- tools/perf/util/dso.c | 29 +++++++++++++++++++++++++++++ tools/perf/util/dso.h | 1 + 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 70bbfad5653e..7e4b45a5062c 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -892,31 +892,6 @@ static int perf_event__repipe_tracing_data(const struct perf_tool *tool, } #endif -static int dso__read_build_id(struct dso *dso) -{ - struct nscookie nsc; - struct build_id bid = { .size = 0, }; - - if (dso__has_build_id(dso)) - return 0; - - mutex_lock(dso__lock(dso)); - nsinfo__mountns_enter(dso__nsinfo(dso), &nsc); - if (filename__read_build_id(dso__long_name(dso), &bid) > 0) - dso__set_build_id(dso, &bid); - else if (dso__nsinfo(dso)) { - char *new_name = dso__filename_with_chroot(dso, dso__long_name(dso)); - - if (new_name && filename__read_build_id(new_name, &bid) > 0) - dso__set_build_id(dso, &bid); - free(new_name); - } - nsinfo__mountns_exit(&nsc); - mutex_unlock(dso__lock(dso)); - - return dso__has_build_id(dso) ? 0 : -1; -} - static struct strlist *perf_inject__parse_known_build_ids( const char *known_build_ids_string) { diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index 42bfe30a3b51..e03e2cb9212b 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c @@ -569,6 +569,35 @@ char *dso__filename_with_chroot(const struct dso *dso, const char *filename) return filename_with_chroot(nsinfo__pid(dso__nsinfo_const(dso)), filename); } +/* + * Read the build-id from the DSO's file, inside its mount namespace, if it + * isn't known yet. + */ +int dso__read_build_id(struct dso *dso) +{ + struct nscookie nsc; + struct build_id bid = { .size = 0, }; + + if (dso__has_build_id(dso)) + return 0; + + mutex_lock(dso__lock(dso)); + nsinfo__mountns_enter(dso__nsinfo(dso), &nsc); + if (filename__read_build_id(dso__long_name(dso), &bid) > 0) + dso__set_build_id(dso, &bid); + else if (dso__nsinfo(dso)) { + char *new_name = dso__filename_with_chroot(dso, dso__long_name(dso)); + + if (new_name && filename__read_build_id(new_name, &bid) > 0) + dso__set_build_id(dso, &bid); + free(new_name); + } + nsinfo__mountns_exit(&nsc); + mutex_unlock(dso__lock(dso)); + + return dso__has_build_id(dso) ? 0 : -1; +} + static char *dso__get_filename(struct dso *dso, const char *root_dir, bool *decomp) { diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h index 55c4aaa53c38..ece54b9b8552 100644 --- a/tools/perf/util/dso.h +++ b/tools/perf/util/dso.h @@ -805,6 +805,7 @@ static inline bool dso__has_symbols(const struct dso *dso) } char *dso__filename_with_chroot(const struct dso *dso, const char *filename); +int dso__read_build_id(struct dso *dso); bool dso__sorted_by_name(const struct dso *dso); void dso__set_sorted_by_name(struct dso *dso); -- 2.53.0-Meta