Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp281331ybv; Wed, 19 Feb 2020 21:30:11 -0800 (PST) X-Google-Smtp-Source: APXvYqySXGI1vWOVo5xXX/2UB2XsSUWMu/zIWDcQOCsxiS1eyvce0HPqhbVAVrtL7JZtbaK2aF0l X-Received: by 2002:a9d:1c96:: with SMTP id l22mr22726671ota.322.1582176611105; Wed, 19 Feb 2020 21:30:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582176611; cv=none; d=google.com; s=arc-20160816; b=uhaZQCRh6f9Gq0JfTfDT/4Q93Zh1anRDVP8OJB5bkyPwDCLKjMliXnYpzhoWzMbsHf I1RaDmYSQLGpe0/Hwaflpvgc/MBzVevvirFZEWro3H+fdNDC3CWaGOOyRNpyX6GJ2s0Z i9++4YQZ/jGMgV/LNrKWJq5JzoMdHzTLuF9mCN0B7qOl01Z1cJUFwFEvuHmifAGjyndE eJGMTy47ygFbyUmjE6nfLTPZv16+nnUUIHbw0X7TqAcre1cNaRMKhNPOzH1OFCHuhiHc o2nETy1DjVk75VBvbFaQQ2HXrQey60Wey5KZI3OLFMYYuqDC6wayokl3ce3/co+2dkUw 0FFA== 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=k8d4kmIccAidADFe+MdrG7ylohXu5nRgFPNyr4D4gnE=; b=rMCQM0Tanf8wIfhGvqcnfLGBt2aadqyoWs2Gvws2yJEv4yd0RK4QFfK1yNzRGzoVJZ RUiX7E/BWSwdnYoA/b053YG+dCiBv5jTkyTkCveRl+JD+/NaHv06tJIeYDJboNrB2noD Jomamlp5Qb8I4LoEpgGVZOmR9CQb30H5MVFwL+2bYpUZph42NrrKJ6NgI8C/NKmDeAWF PeMg7zMtOkiKVcLRT8qSnsxolAmzsC8MRCiOI3A0Kd7Bv2GXjy/cxrigktD2eL4VhMXm 4qTdZaWrU0NcP+8fMklJUydlrgQp/LqMwnl4uK1d/IaKH8CE8aMI+NECyB8TTIH8SmA3 qg7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="B4R6/j6T"; 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 b21si1520398ots.38.2020.02.19.21.29.59; Wed, 19 Feb 2020 21:30:11 -0800 (PST) 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="B4R6/j6T"; 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 S1726791AbgBTF20 (ORCPT + 99 others); Thu, 20 Feb 2020 00:28:26 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:39671 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725811AbgBTF20 (ORCPT ); Thu, 20 Feb 2020 00:28:26 -0500 Received: by mail-pg1-f193.google.com with SMTP id j15so1324915pgm.6 for ; Wed, 19 Feb 2020 21:28:25 -0800 (PST) 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=k8d4kmIccAidADFe+MdrG7ylohXu5nRgFPNyr4D4gnE=; b=B4R6/j6TkXEcNb0cGsNW/UtwR61rs/DnLFsdw6EqYmbnBzbQJJ7s9M0FY67z5uwYgA p31L6Gh121GL+N+2fBiynbasV3w/nXAUn30xYWWT6fKF4T5lQ+gD1pvCgDGCfey4edKn a0duIjYt+ZWPsMoEs+Mx776KNj+zmZIIuFK8YnarRbuXhPo6JeJB12rOFqRJBcjpEthU fhb7A3AZc4gxSz9gECh2zgp0ntAZcQU6Q99x5Hv7AsMIx/DnpIpl6soRAx8EEjJ0IH/c tfVl4jrZHNM8uwIwjmbdLb3oMUfkQ5w0XoVko4PfteOhpEGZlmvMoLbfIRR7ajCSW3yf JqOw== 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=k8d4kmIccAidADFe+MdrG7ylohXu5nRgFPNyr4D4gnE=; b=sHUXo212T1vuCzhqkPtqSzNYHpQXhdjBuVtb5DU5GWef1t7JuFqpFwvfs3+oZEipI4 UDceiRUjVf/8pSE+w6mnw1xlZbRKFWBMFacXI8mns+Z4ECMS16GPPB8KgR3uElJyvwqT GjCZwuJZrPQsFdRkun1PAMSPX14UyouWNaxzD9LtzT3kAW72BlrGTdIKTXL+Py6lDaf2 djrCfoOgjXzJwVsfCcDmS1J7bKXkUl9Zmz6QZb6MLJTrWqcwSGAwnxaQOsFWPdwVfYDu ivXIfM0BmfsnVk8MSBnWxppTvDDL6E/RiF5/iOYYpTuj7uJVszt4RecorsF0LFKxSiwv G3UA== X-Gm-Message-State: APjAAAWCsJDvmyu5dJgvChjl2437K4zJt4wRgjEf4bVEXyA+slrUf0PA R5+Mo48JlANp3hpJO7qD0e4dOQ== X-Received: by 2002:a65:6454:: with SMTP id s20mr32221795pgv.386.1582176505177; Wed, 19 Feb 2020 21:28:25 -0800 (PST) Received: from localhost.localdomain (li1441-214.members.linode.com. [45.118.134.214]) by smtp.gmail.com with ESMTPSA id l69sm1535663pgd.1.2020.02.19.21.28.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Feb 2020 21:28:24 -0800 (PST) From: Leo Yan To: Arnaldo Carvalho de Melo , Mathieu Poirier , Suzuki K Poulose , Mark Rutland , Mike Leach , Robert Walker , Peter Zijlstra , Ingo Molnar , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Coresight ML Cc: Leo Yan Subject: [PATCH v5 4/9] perf cs-etm: Support thread stack Date: Thu, 20 Feb 2020 13:26:56 +0800 Message-Id: <20200220052701.7754-5-leo.yan@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200220052701.7754-1-leo.yan@linaro.org> References: <20200220052701.7754-1-leo.yan@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since Arm CoreSight doesn't support thread stack, the decoding cannot display symbols with indented spaces to reflect the stack depth. This patch adds support thread stack for Arm CoreSight, this allows 'perf script' to display properly for 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(+) diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index f3ba2cfb634f..08ca919aa2b1 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -1138,6 +1138,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 + 1); + } 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 + 1); + } +} + static int cs_etm__synth_instruction_sample(struct cs_etm_queue *etmq, struct cs_etm_traceid_queue *tidq, u64 addr, u64 period) @@ -1382,6 +1421,9 @@ static int cs_etm__sample(struct cs_etm_queue *etmq, tidq->prev_packet->last_instr_taken_branch) cs_etm__update_last_branch_rb(etmq, tidq); + if (tidq->prev_packet->last_instr_taken_branch) + cs_etm__add_stack_event(etmq, tidq); + if (etm->sample_instructions && tidq->period_instructions >= etm->instructions_sample_period) { /* @@ -2730,6 +2772,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); -- 2.17.1