Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3100636pxb; Fri, 12 Feb 2021 09:09:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJzxeOd19oUO9xy7YxvblmutZllF4yX7hlwdMoxexztnQ6vqluI6XeDiRKHlSe/e53Z26F8H X-Received: by 2002:a17:906:6095:: with SMTP id t21mr3975545ejj.384.1613149775743; Fri, 12 Feb 2021 09:09:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613149775; cv=none; d=google.com; s=arc-20160816; b=PkLucK+I5yaW8QZ5dq/9V9ss14rUnZScGGkG6p2JXgDdS//6PihndabYjTQX7KHrpq XsKRUR1P1l/VjG/FfdJ2PRSJuhlqqgylCE77Cj0gAzninIoSX1odqguSbcomgOS1AIYG +YQ2sgjJsHypa9nzzfRnf7u5mzBxF40DA6wsDFIXpR1ebMP/+UKTa4PRSYsFiu6OwthY WiW5+cye1TgpEyqWuQVp9gn9vlq+ggjWf6hBIL+x6F8PNwyf48MEoaaRfmsy4Tz4syrE lmo9EH6jdbvz0vF1qWCEmifeZsh647Mhbv2SVSYimoTGmqDt3AVjjB7SDR5vQ5waJ49M 466A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=TjJP5PLS/relwovdkfOe02hYWYOydSIE62o8xpkzPtQ=; b=zlWz6w9/D/RCSzHjERVBp+Cr4eATppDymSxqp3iSgK9Z39eK62wAvNVyQFugXWAlbI NIjoMfrwFGQjaxaFGWgwoop4Y0Rx/PIiFQ/eDQ2jGUAizDW506TeLRZe7ObU4vASiHhQ Lx3fsIlnpm4DmJ9TAKzDZjijGQiLJWh+T1fvYGC5RtkRgFn4cI1BG1AeHj5RXug3Arxw s7sk3tZnataaYfIry9sJzG/e7A1dN803V9dZ2P4wXof4S9gRZOtgMWZ6CR5Bbv0jKy8v 41YRMw+xCS9UpTJdh9rMq5pF+sXen9lHKK2qtasbCpqHcEk9eObS+nTwuZ7cVLCTirK1 s03A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v26si6457825ejc.336.2021.02.12.09.09.11; Fri, 12 Feb 2021 09:09:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231131AbhBLRFS (ORCPT + 99 others); Fri, 12 Feb 2021 12:05:18 -0500 Received: from foss.arm.com ([217.140.110.172]:39928 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230394AbhBLREy (ORCPT ); Fri, 12 Feb 2021 12:04:54 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1CE5411B3; Fri, 12 Feb 2021 09:04:05 -0800 (PST) Received: from e125528.arm.com (unknown [10.57.5.230]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id ECE873F73B; Fri, 12 Feb 2021 09:04:03 -0800 (PST) From: Alexandre Truong To: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: Alexandre Truong Subject: [PATCH v2 2/4] perf tools: add a mechanism to inject stack frames Date: Fri, 12 Feb 2021 17:03:41 +0000 Message-Id: <20210212170343.7729-2-alexandre.truong@arm.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20210212170343.7729-1-alexandre.truong@arm.com> References: <20210212170343.7729-1-alexandre.truong@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a mechanism for platforms to inject stack frames for the leaf frame caller if there is enough information to determine a frame is missing from dwarf or other post processing mechanisms. Signed-off-by: Alexandre Truong --- tools/perf/util/machine.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index ab8a6b3e801d..7f03ffa016b0 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2671,6 +2671,12 @@ static int find_prev_cpumode(struct ip_callchain *chain, struct thread *thread, return err; } +static u64 get_leaf_frame_caller(struct perf_sample *sample __maybe_unused, + struct thread *thread __maybe_unused) +{ + return 0; +} + static int thread__resolve_callchain_sample(struct thread *thread, struct callchain_cursor *cursor, struct evsel *evsel, @@ -2687,6 +2693,8 @@ static int thread__resolve_callchain_sample(struct thread *thread, int i, j, err, nr_entries; int skip_idx = -1; int first_call = 0; + u64 leaf_frame_caller; + int pos; if (chain) chain_nr = chain->nr; @@ -2811,6 +2819,21 @@ static int thread__resolve_callchain_sample(struct thread *thread, continue; } + pos = callchain_param.order == ORDER_CALLEE ? 2 : chain_nr - 2; + + if (i == pos) { + leaf_frame_caller = get_leaf_frame_caller(sample, thread); + + if (leaf_frame_caller && leaf_frame_caller != ip) { + + err = add_callchain_ip(thread, cursor, parent, + root_al, &cpumode, leaf_frame_caller, + false, NULL, NULL, 0); + if (err) + return (err < 0) ? err : 0; + } + } + err = add_callchain_ip(thread, cursor, parent, root_al, &cpumode, ip, false, NULL, NULL, 0); -- 2.23.0