From patchwork Mon Sep 23 16:07:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leo Yan X-Patchwork-Id: 174219 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp2992140ill; Mon, 23 Sep 2019 09:08:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqwAnAK4BYv9esSVpe/glf9Pw0a156XQz+RuRqnnaVfHk7szZqrkzEoD7ddzjamcqYtqNfr9 X-Received: by 2002:a50:908c:: with SMTP id c12mr901410eda.45.1569254900092; Mon, 23 Sep 2019 09:08:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569254900; cv=none; d=google.com; s=arc-20160816; b=ir+dod2pWiGQHzBgbaUlY4zs1HIClsEHE0/08aRFfX9fxdQJKZuDH8vlLdVAB60Au7 iRB2yTvBJagt1BFh8N1t2a/5Aq8TPvVbjBsmJafjppSLnWFyaIAqHMq3hAq3UUgC7D8F ezuyzbcfm3tyMjIpGKsJbGNoRckw027FO/ebA/7GB/LVlOgnF1SB3wRUlg3PRqvJf1nc NcMLQc9x7xeI21adPKPnYeQoxEeaEY+I55MUIX9/4tmfZc7LpT5mZFccL+PfNN3c2PuV fW9UiGMjuYjg0PT2I8yC6vrd0+Yag0XrXJNN+shzbJHWilyxJ+C+MBBwgAXYGVaMzcyg ZKRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=2BxhOdJYXJi532SmentxbXVQYJErTKd5nVs++YvZFCU=; b=VitZ/hpDoc8phhChiNmNV0c4Tss3WnbBEdV6qZdogCgJZWJNQIc+ggJJxGIrhn934Q qz0R0v/Zu1RCTmD7HpY00dVWMtQmEAunKZr1IOkewddcegtBf+QqgxWCzqPXUj+LywWx xLUWmbN5HZbXZ5lbfyXTtzQWZve/1EN5JYPo1dXonLYRnjxhWv4FWHlGQqQJ4Kcg8uFW /CJm3GHUHgOMFWJCG/2xpZieUraCJrw+9VbP6LKL1peNNXuERQPF8Deq3glnUYW9KCDP i5bm6TswzRVBt1BTe39/RWD3DJr4Ey+jjwNw1Og5BTsRvPSNfBesrVauUbzAb54C/aar 7qMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=FuJY65Uc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l1si5225095ejr.246.2019.09.23.09.08.19; Mon, 23 Sep 2019 09:08:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=FuJY65Uc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387986AbfIWQIR (ORCPT + 26 others); Mon, 23 Sep 2019 12:08:17 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:36450 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387969AbfIWQIP (ORCPT ); Mon, 23 Sep 2019 12:08:15 -0400 Received: by mail-pf1-f193.google.com with SMTP id y22so9409554pfr.3 for ; Mon, 23 Sep 2019 09:08:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=2BxhOdJYXJi532SmentxbXVQYJErTKd5nVs++YvZFCU=; b=FuJY65Uccx36X3yZKLYnu5YgoLkoKPHdaCgcxI4S3TLOblQObylYTyM2jj+nF8rT0/ wKwhN0mJ0QORonekDL+A+pYZXSlNOkrbFoETnBLYUZyi4+4YqHR0H/JyPGKIFmZ7b/6Z nyeYgnu9EVky+iLmTg6GeRPSw4Ae7h36sN/IwIrqlxo0MgqJvpQOjHKuyb6Xqdk90hLd qcSiDIRuvQ5VCzh4PBcdrNCFPZATaeszoier7rCXg1QcPnyExYfodq1GSToljEwJ9vZg q0YTKL3e/eTPv1ZMvAhgWVHC9NaoNFKYsivR48KdZiNbGMbznV2txAnDg6FxMYZIin4T T/PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=2BxhOdJYXJi532SmentxbXVQYJErTKd5nVs++YvZFCU=; b=DKjPSNxxseJTT26q0pTVcGNe3Yk2/Gdw9M6sAWSeKhPRbX3gqg4ws7Onf+CJ2kE6kg /WladwCiHJ45sVPQMm8stOZeUUH9QIhghI373mfMtoSqQwpiPte8dzYblAciSqIShA3q 87Rh2CbHyQ3HNmC+g7ItpRwSyh8ofLVZETx24vkTBde5dzeR7V/GIexTBLUOAsZ9EZhz PHY//mNGUXJHO+i6lhBP8N4hIAUGcOyQbcXSdo//1KkytgsMiryAYJAvkmZDguE08qlT A47j05KRTgZFs1frHuiMmB5HzanbPyNjJR/Hxc+cWWh4aJKGaWuYQsbMFcTrYJ8Yb+jQ p6rQ== X-Gm-Message-State: APjAAAVBxHpAjr6jcNsIHvg/LqdnYZUxjkXrccdPzdgfXIAyItgC2W/8 ksMAUGcZPA8WwsNe1oPL30LKDA== X-Received: by 2002:a63:1d02:: with SMTP id d2mr708391pgd.190.1569254893704; Mon, 23 Sep 2019 09:08:13 -0700 (PDT) Received: from localhost.localdomain ([12.206.46.62]) by smtp.gmail.com with ESMTPSA id r1sm9880006pgv.70.2019.09.23.09.08.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Sep 2019 09:08:13 -0700 (PDT) From: Leo Yan To: Arnaldo Carvalho de Melo , Mathieu Poirier , Suzuki K Poulose , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mike Leach , Coresight ML Cc: Leo Yan Subject: [PATCH v2 2/5] perf cs-etm: Support thread stack Date: Tue, 24 Sep 2019 00:07:56 +0800 Message-Id: <20190923160759.14866-3-leo.yan@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190923160759.14866-1-leo.yan@linaro.org> References: <20190923160759.14866-1-leo.yan@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Arm CoreSight doesn't support thread stack, thus the decoding cannot display the symbol with indented spaces to reflect the stack depth. This patch adds support thread stack, this allows 'perf script' to support option '-F,+callindent'. Before: # perf script -F,+callindent main 2808 1 branches: coresight_test1 ffff8634f5c8 coresight_test1+0x3c (/root/coresight_test/libcstest.so) main 2808 1 branches: printf@plt aaaaba8d37ec main+0x28 (/root/coresight_test/main) main 2808 1 branches: printf@plt aaaaba8d36bc printf@plt+0xc (/root/coresight_test/main) main 2808 1 branches: _init aaaaba8d3650 _init+0x30 (/root/coresight_test/main) main 2808 1 branches: _dl_fixup ffff86373b4c _dl_runtime_resolve+0x40 (/lib/aarch64-linux-gnu/ld-2.28.so) main 2808 1 branches: _dl_lookup_symbol_x ffff8636e078 _dl_fixup+0xb8 (/lib/aarch64-linux-gnu/ld-2.28.so) [...] After: # perf script -F,+callindent main 2808 1 branches: coresight_test1 ffff8634f5c8 coresight_test1+0x3c (/root/coresight_test/libcstest.so) main 2808 1 branches: printf@plt aaaaba8d37ec main+0x28 (/root/coresight_test/main) main 2808 1 branches: printf@plt aaaaba8d36bc printf@plt+0xc (/root/coresight_test/main) main 2808 1 branches: _init aaaaba8d3650 _init+0x30 (/root/coresight_test/main) main 2808 1 branches: _dl_fixup ffff86373b4c _dl_runtime_resolve+0x40 (/lib/aarch64-linux-gnu/ld-2.28.s main 2808 1 branches: _dl_lookup_symbol_x ffff8636e078 _dl_fixup+0xb8 (/lib/aarch64-linux-gnu/ld-2.28.so) [...] Signed-off-by: Leo Yan --- tools/perf/util/cs-etm.c | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) -- 2.17.1 diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 1de3f9361193..6bdc9cd8293c 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -1116,6 +1116,45 @@ static void cs_etm__copy_insn(struct cs_etm_queue *etmq, sample->insn_len, (void *)sample->insn); } +static void cs_etm__add_stack_event(struct cs_etm_queue *etmq, + struct cs_etm_traceid_queue *tidq) +{ + struct cs_etm_auxtrace *etm = etmq->etm; + u8 trace_chan_id = tidq->trace_chan_id; + int insn_len; + u64 from_ip, to_ip; + + if (etm->synth_opts.thread_stack) { + from_ip = cs_etm__last_executed_instr(tidq->prev_packet); + to_ip = cs_etm__first_executed_instr(tidq->packet); + + insn_len = cs_etm__instr_size(etmq, trace_chan_id, + tidq->prev_packet->isa, from_ip); + + /* + * Create thread stacks by keeping track of calls and returns; + * any call pushes thread stack, return pops the stack, and + * flush stack when the trace is discontinuous. + */ + thread_stack__event(tidq->thread, tidq->prev_packet->cpu, + tidq->prev_packet->flags, + from_ip, to_ip, insn_len, + etmq->buffer->buffer_nr); + } else { + /* + * The thread stack can be output via thread_stack__process(); + * thus the detailed information about paired calls and returns + * will be facilitated by Python script for the db-export. + * + * Need to set trace buffer number and flush thread stack if the + * trace buffer number has been alternate. + */ + thread_stack__set_trace_nr(tidq->thread, + tidq->prev_packet->cpu, + etmq->buffer->buffer_nr); + } +} + static int cs_etm__synth_instruction_sample(struct cs_etm_queue *etmq, struct cs_etm_traceid_queue *tidq, u64 addr, u64 period) @@ -1392,6 +1431,9 @@ static int cs_etm__sample(struct cs_etm_queue *etmq, tidq->period_instructions = instrs_over; } + if (tidq->prev_packet->last_instr_taken_branch) + cs_etm__add_stack_event(etmq, tidq); + if (etm->sample_branches) { bool generate_sample = false; @@ -2592,6 +2634,8 @@ int cs_etm__process_auxtrace_info(union perf_event *event, itrace_synth_opts__set_default(&etm->synth_opts, session->itrace_synth_opts->default_no_sample); etm->synth_opts.callchain = false; + etm->synth_opts.thread_stack = + session->itrace_synth_opts->thread_stack; } err = cs_etm__synth_events(etm, session);