Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1627771pxb; Thu, 4 Mar 2021 16:53:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJyfzBi3uHkBAaglu9o19G4P2vniw2S578Yx1DAf8zg4bN9BAXyiUJCQOprKVopF5f2BPX+a X-Received: by 2002:a02:3541:: with SMTP id y1mr7042224jae.66.1614905583056; Thu, 04 Mar 2021 16:53:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614905583; cv=none; d=google.com; s=arc-20160816; b=jt1KMc6VyQJAydI9dV8/1Bt8jRI+VKwokXYx9h3xpj/ASeqK0jInRN0vZP2irhcQhM jNEKIiPzlco5naS+Y0XM1N8tTB4Xg6XiTHtFFSsTkBg0qjBynWQ4Lz7NKZ6JEirmpkFd ubws/M19qjIMm/2NC9EMttb9Fu038KZV1LnYyQqgE39779HmAj6UACG4+FBNyNqtqcSE PEjyEg7oJhYTU7B1daaEoykrxfM7j55HuHpVwjpGYsQZqukWMrEPqaNXMjj40IoAA39B UbZd49f4bOKLddKuzpIqAvEekLCmQmwd9PmUNeTT2WUhiA6yAziEbit97iaxMdy83XJu cxZQ== 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=dSQ+QZ+merLXc3FpmwaRVndRGFGTZ6hQY4e/3AwOKCg=; b=sRTYdQZ3A7BskGNTJ4gRcPj3R3UzDjkGeqesChKqFnE1AQIExzxSyLzMcpXshR0U3c zSRUYAL2WMs2gaYQP3uyCXRZV7DeT5D4U8M6ADc0Gyia4Ugs8tml560v7Q72LOJDEYu1 PmUuAjcgU93vAnfiEPvcOyf1/WUCFTRXkfRyq4DYFFzHAAIxP+dz1chprthM/u30bGQ3 NOJKYRpng8Zy6JwSEWLwKyRtYgg14nxBDC3RKWyJ8glRYR8EBezxCgCAyTdyo4ajcvnO otaJrFhRMZyIL5vS4ZRvuz3OPUOFgZE/cSIceVYXZ5P1Bk8fu88BvX8UDU2TuXSjqwPC 8MEA== 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 v3si1002792jat.33.2021.03.04.16.52.49; Thu, 04 Mar 2021 16:53:03 -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 S238086AbhCDQea (ORCPT + 99 others); Thu, 4 Mar 2021 11:34:30 -0500 Received: from foss.arm.com ([217.140.110.172]:41068 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237738AbhCDQeD (ORCPT ); Thu, 4 Mar 2021 11:34:03 -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 7A3FDD6E; Thu, 4 Mar 2021 08:33:17 -0800 (PST) Received: from e125528.arm.com (unknown [10.57.51.148]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E635D3F766; Thu, 4 Mar 2021 08:33:12 -0800 (PST) From: Alexandre Truong To: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: Alexandre Truong , John Garry , Will Deacon , Mathieu Poirier , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kemeng Shi , Ian Rogers , Andi Kleen , Kan Liang , Jin Yao , Adrian Hunter , Suzuki K Poulose , Al Grant , James Clark , Wilco Dijkstra Subject: [PATCH RESEND WITH CCs v3 2/4] perf tools: add a mechanism to inject stack frames Date: Thu, 4 Mar 2021 16:32:53 +0000 Message-Id: <20210304163255.10363-2-alexandre.truong@arm.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20210304163255.10363-1-alexandre.truong@arm.com> References: <20210304163255.10363-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 Cc: John Garry Cc: Will Deacon Cc: Mathieu Poirier Cc: Leo Yan Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Arnaldo Carvalho de Melo Cc: Mark Rutland Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Namhyung Kim Cc: Kemeng Shi Cc: Ian Rogers Cc: Andi Kleen Cc: Kan Liang Cc: Jin Yao Cc: Adrian Hunter Cc: Suzuki K Poulose Cc: Al Grant Cc: James Clark Cc: Wilco Dijkstra --- 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