From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 2C0A931A053 for ; Mon, 4 May 2026 08:12:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777882362; cv=none; b=CqWhUFxhvO7vED9l3zYxIfWDR5oPoYFgn17m66NTZbOxg1cJpXRONKkY6Rkvw5D/cJME5fAkFKlAYVGkdHR1oRGZSjRQy5tW/TdHl36+ePFiCB/1OXtZf82jCLvIfPhzP985/ezGoT5yCPzutb+LqIFv+alEw2icQ6tRyyrVNuQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777882362; c=relaxed/simple; bh=Gmuxp4WqFA97QBknE838BCE9Wm1G7NAZG6fKiarOItM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FodkpilzuW2mhClIVDes2MIntQO6+DEzJq9oBCm5IvPmG2LKpPbh6z0Lf94ddH9QqpMTz5FofkCTdaDwNQf1bXbFZ0UrJAZEhx41z+l8D9Esxm5IdJyn7yoNMtnvWvgdnxXZB2Rab2BZjYJFRkbEtQ3ZsRPrT58/GpoDKjHe7BY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gwxfeqrE; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gwxfeqrE" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12e683ca86bso7090188c88.1 for ; Mon, 04 May 2026 01:12:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777882360; x=1778487160; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=AgADkEc29AeokmXkoizx0BWcSRq7zf6UjkidjmJFVco=; b=gwxfeqrECNQ6tNdPC3gXG9SeWpGETmO/n+QKbWeFzEqCipdBiMve9UPlJhIj6RrKmy FlPrQrWaTC6P9DO/7lE/hWqm260eDIihq41mw6vAiXABbE/U/7aHMNB66Z9Oiv38NMm6 RmGIrIYC2a65a8kkBmlLQNst7HTJ6Df/iUp1gG0SpchF5x5rCVz9nBivaR8HijMWWZr2 6oI4/ZL3za5I3XKtOPNqRligRE2u85k4U9gg4B9foKKv8x2VpWJ4XOKKCOp9B4DF4pNC v69wVTDMn4UxbMwXJlQMgGbi7Ydm5VD7FVt84U2Kn2VHd/WUYEunQq+QDbHpdv8zuURL IPbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777882360; x=1778487160; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AgADkEc29AeokmXkoizx0BWcSRq7zf6UjkidjmJFVco=; b=Rxilg6Qt+QMeXBMU/zPNx0PidD1CYPdZuCIggkaHeTo2TZ1KzsHuVXfKHUz3hKhO+w Ummq3s99Q7tOndnVZ9Vygjx6mSEJHzMI8lJUm3w2yg+A1HJRxxRwe/5zo7yucQYJc1/X 3FO3J+yrqk1diTWiGP+sp+V2VmIXqdlleFGD3whVHjhuh9uavdU4iWIGet8txE6W+46V 1fgVE8vL7f1gxr7qCEpvrSyfLHbKhRqxdD3+CjUz0cAxtmAGNaEZWnRJjEljGAs/fKxR YKzBmj5XtOEI5yhs0bomvkTrWJuh1umE3lCzlRB4gdob+9VErj5aGCXvcFVWfDxAhe98 qmBw== X-Forwarded-Encrypted: i=1; AFNElJ/u9XMy5WfJik1Bd1BR6VuDbqCYsGHMQAMjY1xeVht/52Nywy/dm9RPxtjXJP+WPAwHh3wzB5K5E62SRvw=@vger.kernel.org X-Gm-Message-State: AOJu0Yx47G54cXtNb4qPP5aEUrwGQ1efqtXR8DtZYIu17YsQQ6kYA+TG ugMgvbb9kvpp/sQqJ2vu+kD5666J2QWpjjG/X9IUVYlilVnvQgbfII/P9ESVvr74TVlzWCtjm3p 5YCys9qpw/Q== X-Received: from dlii2.prod.google.com ([2002:a05:7022:4182:b0:12d:b65b:1fb3]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:427:b0:12d:de3e:86a7 with SMTP id a92af1059eb24-12dfd8621a2mr4592641c88.37.1777882360268; Mon, 04 May 2026 01:12:40 -0700 (PDT) Date: Mon, 4 May 2026 01:12:22 -0700 In-Reply-To: <20260504081227.2203848-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260503171032.1559338-1-irogers@google.com> <20260504081227.2203848-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260504081227.2203848-5-irogers@google.com> Subject: [PATCH v5 4/9] perf libdw: Fix callchain parent update in ORDER_CALLER mode From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Adrian Hunter , James Clark , Zecheng Li , Masami Hiramatsu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Ian Rogers Content-Type: text/plain; charset="UTF-8" Fix the parent srcline lookup in `libdw_a2l_cb()` to target the correct parent node depending on the callchain order (ORDER_CALLER/ORDER_CALLEE). This ensures inline callchains are not corrupted when nest depth > 2. Signed-off-by: Ian Rogers --- v5: - Split from original Patch 3/6 into its own commit. - Fixed bisectability failure by removing unused `ilist` variable declaration. --- tools/perf/util/libdw.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tools/perf/util/libdw.c b/tools/perf/util/libdw.c index 216977884103..301642084c69 100644 --- a/tools/perf/util/libdw.c +++ b/tools/perf/util/libdw.c @@ -4,6 +4,7 @@ #include "srcline.h" #include "symbol.h" #include "dwarf-aux.h" +#include "callchain.h" #include #include #include @@ -80,7 +81,6 @@ static int libdw_a2l_cb(Dwarf_Die *die, void *_args) struct symbol *inline_sym = new_inline_sym(args->dso, args->sym, dwarf_diename(die)); const char *call_fname = die_get_call_file(die); char *call_srcline = srcline__unknown; - struct inline_list *ilist; if (!inline_sym) return -ENOMEM; @@ -89,14 +89,20 @@ static int libdw_a2l_cb(Dwarf_Die *die, void *_args) if (call_fname) call_srcline = srcline_from_fileline(call_fname, die_get_call_lineno(die)); - list_for_each_entry(ilist, &args->node->val, list) { - if (args->leaf_srcline == ilist->srcline) + if (!list_empty(&args->node->val)) { + struct inline_list *parent; + + if (callchain_param.order == ORDER_CALLEE) + parent = list_first_entry(&args->node->val, struct inline_list, list); + else + parent = list_last_entry(&args->node->val, struct inline_list, list); + + if (args->leaf_srcline == parent->srcline) args->leaf_srcline_used = false; - else if (ilist->srcline != srcline__unknown) - free(ilist->srcline); - ilist->srcline = call_srcline; + else if (parent->srcline != srcline__unknown) + free(parent->srcline); + parent->srcline = call_srcline; call_srcline = NULL; - break; } if (call_srcline && call_srcline != srcline__unknown) free(call_srcline); -- 2.54.0.545.g6539524ca2-goog