From patchwork Fri Feb 2 11:01:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Hunter X-Patchwork-Id: 195802 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:9bc1:b0:106:209c:c626 with SMTP id op1csp347641dyc; Fri, 2 Feb 2024 03:02:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IGvRcXQdMBS+6AxsDZsPfMpBfh0/401xj2Zr+3UIImp/ZUEbn349B4Ffeqju3xmKM2dufaZ X-Received: by 2002:a50:871d:0:b0:55f:e682:c933 with SMTP id i29-20020a50871d000000b0055fe682c933mr1419556edb.12.1706871769552; Fri, 02 Feb 2024 03:02:49 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706871769; cv=pass; d=google.com; s=arc-20160816; b=PA0axPBd2nDGMkCqo2EFluY4bBiGTP9+KDoHk1b/iUSXtIes2MtKg5YmtoYGTXJlEB 1HYhaGQ4/ul1wnCY2SHONR6HcZ4JbQz44CK0hLDqJoRSqeRRVjOFNMiAEtlorQMWcm6P iGA/N+dvZ1/G/ZxdrseT4ZHahhdutCnJlb7bP7jYZ+JJX/zCEAafqb3xwTgfKBLAReNX 0yQBqtRYrbjOolQmTsyuYKulbTtwnzXOhxZb3L298lde/EoqcmTiRsPVPvKzNQzT8ol5 yyxSrFyObtld1+yLO662ZGi5/hO9lvNm7YdC19+y5m5brDvpuhrKRm0HaIro5/Nejurr ahFg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:organization:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=DRx8mN3GXnfbjDyzK2vFKDyrXfVNZVRrEOiMq7B2gpQ=; fh=ZPkLIY1K/OcL+9NwHTx1jBKjCYFqo1wv9jw9gvsgMFM=; b=VB7G53QSK6dQaett7/LlVaUVWm0pxRzPv9bZCBYQ8Q3uFsPlJvPJJgFkIRgswVm/SS 3YmixMydIRUXg8SW9TQsnWwO7abK77y6tdDmZYr5+myA/IeOOqgPcjRaWOM2NcCuv6cC NUfMg3UnESiF0ZEJmq76eI2LCeVqHz+YdnNboS8qm5VuW1sIhsHf/woTTNUfqtdOUJVz XEJRqKw4VmF+9rAJ9LzeEGA8T/68sbXox1nzHFYm37cV4jibThVv5wejQHNCgN6o0CP3 kenHwGES8RJtFcMmegdO4ILI/WfkLvben4l4ZxMpCtdtObix1hnUTH9hvSFxA5dcriGf 75aA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bnCGCWus; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-49723-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49723-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Forwarded-Encrypted: i=1; AJvYcCWcMmEB5NCZYsvP9zybyribptuLoInKfDwrDX/aGgBA5wRmSAez4HCAT46CfVCZ7GC9zlqI8P5Dm0SmyMhmQfZ6S6kpsA== Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id v8-20020a50d588000000b0055d360393e4si717452edi.6.2024.02.02.03.02.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Feb 2024 03:02:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-49723-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bnCGCWus; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-49723-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49723-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 26B331F262C2 for ; Fri, 2 Feb 2024 11:02:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9375D13E233; Fri, 2 Feb 2024 11:01:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="bnCGCWus" Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61A4513D504; Fri, 2 Feb 2024 11:01:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=134.134.136.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706871706; cv=none; b=DljgmwWYIznkx9gjH1WPi2Li0m0T7Sz/Ti2RuLlfE/4TQXWEAbENXj5DIeT/rCj1wkytjfWi3k4BlyH4AqLcL55LU04hzq4ldW+EZXTEKm4EiAKEvPGQulAL90wStY33VqDb1j+cuZaNh+h/xL+/O66iPtVrseG01hJykAtv38g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706871706; c=relaxed/simple; bh=d3RYZ3+6vD59qvNSR99INzel292Ot602uZFnHAzYWPk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GpjYRqcyNWHZPthjQHdApSRyiPMI5AyE5n8gsftD4IjBJsrbwQM1XckMXUVFHmqfZqJ99/u/sWJW/xZLhVuCWvT3hHW7vvBz6M82pgMiihQkb9xXhZ5M8UdC3JH1CYr0UfY8ZnKt3/SOaTiVnDnH/m458ByaV8QORxFfXmpQ6Us= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=bnCGCWus; arc=none smtp.client-ip=134.134.136.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1706871705; x=1738407705; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=d3RYZ3+6vD59qvNSR99INzel292Ot602uZFnHAzYWPk=; b=bnCGCWusKdRx6Mbg8pbxn28hwKfEs9Aq1GB0TPIYy6xo4c6O8jSP622G bG6b+xBRAb++X68RdY9eDXq4pI0T8gOiIYfc8dcDVzymc2OVh6lyU6PZL UVJuqkknQoYAHchg+gst+wqBhBvP12Eu23/aOkPPs2igUesm7/4bjY7Bv loJIdPoK4e/bLiseD7OUS0tUuS9M0grUKBJwV7/7LavVKxMPeWncD+lxm nEjuMFr/95IjqimFTeWFp4ncNg9y/BiEW0VnB9rDh5S+R8gCijzN8kOhD k3HmkQ+r+aambQEJWfCL2dK+/0MPJ5yxjVPKDzjkMQG+vFW5S+MrronAJ g==; X-IronPort-AV: E=McAfee;i="6600,9927,10971"; a="394571887" X-IronPort-AV: E=Sophos;i="6.05,237,1701158400"; d="scan'208";a="394571887" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2024 03:01:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.05,237,1701158400"; d="scan'208";a="4639303" Received: from ahunter6-mobl1.ger.corp.intel.com (HELO ahunter-VirtualBox.home\044ger.corp.intel.com) ([10.252.59.118]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2024 03:01:43 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Namhyung Kim , Ian Rogers , Like Xu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Subject: [PATCH 1/2] perf script: Make it possible to see perf's kernel and module memory mappings Date: Fri, 2 Feb 2024 13:01:29 +0200 Message-Id: <20240202110130.3553-2-adrian.hunter@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240202110130.3553-1-adrian.hunter@intel.com> References: <20240202110130.3553-1-adrian.hunter@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789784772522076768 X-GMAIL-MSGID: 1789784772522076768 Dump kmaps if verbose > 2. Example: $ perf script -vvv 2>&1 >/dev/null | grep kvm.intel build id event received for /lib/modules/6.7.2-local/kernel/arch/x86/kvm/kvm-intel.ko: 0691d75e10e72ebbbd45a44c59f6d00a5604badf [20] Map: 0-3a3 4f5d8 [kvm_intel].modinfo Map: 0-5240 5f280 [kvm_intel]__versions Map: 0-30 64 [kvm_intel].note.Linux Map: 0-14 644c0 [kvm_intel].orc_header Map: 0-5297 43680 [kvm_intel].rodata Map: 0-5bee 3b837 [kvm_intel].text.unlikely Map: 0-7e0 41430 [kvm_intel].noinstr.text Map: 0-2080 713c0 [kvm_intel].bss Map: 0-26 705c8 [kvm_intel].data..read_mostly Map: 0-5888 6a4c0 [kvm_intel].data Map: 0-22 70220 [kvm_intel].data.once Map: 0-40 705f0 [kvm_intel].data..percpu Map: 0-1685 41d20 [kvm_intel].init.text Map: 0-4b8 6fd60 [kvm_intel].init.data Map: 0-380 70248 [kvm_intel]__dyndbg Map: 0-8 70218 [kvm_intel].exit.data Map: 0-438 4f980 [kvm_intel]__param Map: 0-5f5 4ca0f [kvm_intel].rodata.str1.1 Map: 0-3657 493b8 [kvm_intel].rodata.str1.8 Map: 0-e0 70640 [kvm_intel].data..ro_after_init Map: 0-500 70ec0 [kvm_intel].gnu.linkonce.this_module Map: ffffffffc13a7000-ffffffffc1421000 a0 /lib/modules/6.7.2-local/kernel/arch/x86/kvm/kvm-intel.ko The example above shows how the module section mappings are all wrong except for the main .text mapping at 0xffffffffc13a7000. Signed-off-by: Adrian Hunter --- tools/perf/builtin-script.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index b1f57401ff23..e764b319ef59 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -3806,6 +3806,16 @@ static int parse_callret_trace(const struct option *opt __maybe_unused, return 0; } +static void dump_kmaps(struct perf_session *session) +{ + int save_verbose = verbose; + + pr_debug("Kernel and module maps:\n"); + verbose = 0; /* Suppress verbose to print a summary only */ + maps__fprintf(machine__kernel_maps(&session->machines.host), stderr); + verbose = save_verbose; +} + int cmd_script(int argc, const char **argv) { bool show_full_info = false; @@ -4366,6 +4376,9 @@ int cmd_script(int argc, const char **argv) flush_scripting(); + if (verbose > 2) + dump_kmaps(session); + out_delete: if (script.ptime_range) { itrace_synth_opts__clear_time_range(&itrace_synth_opts); From patchwork Fri Feb 2 11:01:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Hunter X-Patchwork-Id: 195803 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:9bc1:b0:106:209c:c626 with SMTP id op1csp347885dyc; Fri, 2 Feb 2024 03:03:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IGzzHfFtft0R+8EijgaubBPBYSJ2rSX48LwXRLl4iqVpBqANgArIGxKIx2f+BEYpI6B28N5 X-Received: by 2002:a17:907:960c:b0:a35:3718:997c with SMTP id gb12-20020a170907960c00b00a353718997cmr1811353ejc.28.1706871787846; Fri, 02 Feb 2024 03:03:07 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706871787; cv=pass; d=google.com; s=arc-20160816; b=NoM223/u89wjeJFSDBebWOoeks+LQwBH3vWcyUfT0GAq1lg1UG63oQWHz3YpYxsJzG ASE+HN2n4UYjCsvhpuE81ie4emaDWgn3REFYsDZII4lmqZnZnHlMUUsp14BIQnfKT1GA Z0EiVt3iMLTi0JgPUTwwoIo8z7s0NNIvIuP+Vwmxgpd0Sgx04kl9vC1Tu2z5SMveUeok DturvQIZpWjS7yr/5oay17arA2yEEhQw6Ie7FxEi8r6T1hSUweBdB9yw8yfRTcCdRwDP UbzRbD947goqKqSir1I1cjg1F2Uzrw2eQ6EL8cAO+VTQvW6/PdLTxKt4nwp9Wlz6K81/ TChw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:organization:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=yI0MAiqFa8H5aH8+89mX0avuKM8ZPOnLeIvNV8luxbQ=; fh=r/mJ53mevMj9skPdfnBxE6Q5I1k6zlhCdakngCAMTIU=; b=yesuo9C8YhhUC1zTxQGebIp40PQhcbvAyg9EL9vyR9DME5ONzt30qeEdSwCLDUDnzV L0n9FnmXq4Yvqo+OERKkswc5CCVDaXHx7dUhX5AtRVY2YgZYHUryD+/j7sFtfuriyTxi F7VEW6LgNjGGjU0/xEqDfIey1tnpxpwWwVIowNmM0Q+I+7VA57HT8us74MrscZGbDfgC qmvWl8EXDm7MZIVA2rxGf5rorweRCqOFrcEJHtqVqrLZmxHnfYtErPjy7fUVtd94ZDn8 5Uk2dU1aWaxTYScxvKhPY8BZNBdcoY6Fz7ihnwsbiZc1inSR+/8diAFULYO5uFANMMx2 XEkQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Sm1uYxhm; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-49724-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49724-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Forwarded-Encrypted: i=1; AJvYcCVU+pqf6ZTZ+XHv/GKLGPhNnH8zLnCVRF8OlJqDK/vg0M5aBq1WcQIwIaMbe+viUTtHQ2j7RORMKybAmF400emYGW+5rA== Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id gw26-20020a170906f15a00b00a3677f18eccsi691519ejb.895.2024.02.02.03.03.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Feb 2024 03:03:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-49724-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Sm1uYxhm; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-49724-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49724-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 4D6181F255BD for ; Fri, 2 Feb 2024 11:03:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1BDE913DB8D; Fri, 2 Feb 2024 11:01:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Sm1uYxhm" Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 505C313E223; Fri, 2 Feb 2024 11:01:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=134.134.136.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706871709; cv=none; b=Ko/f6P/8xTxT3qc/a9VXx+Y41WI8pQkQUAWVefZK6I8izv3nwX2kR5xA2QRhHnNTOXUJc1gUz+CfO5tILRJxqL/Lkh60cOCusHH9uRSKFvulaQD7V7FAroS7F2cHWCkPWh4dOBkUtAzMC4+yRLNHnmALWFIPpHv0OlLV1b41FE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706871709; c=relaxed/simple; bh=dc2O85R1+54lcZQTbhpdideOJEc3GjHDCDPyDd2m00A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=iUGchhXqjJeq7E3cjbp1HDdUpD3BJetKnUtMK6t+6iCIJiRfFV8UTHGP9fbNo6xSs8uYHsyjlx7nRRPqx+OSAF3nAnJukmEHcRO1/rp2URNsy+soITyQV/OAhEeT2YufL+tIgo/uoJqEkW6m7LVtloRZOe2obTsE8Dada7WDe3g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Sm1uYxhm; arc=none smtp.client-ip=134.134.136.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1706871708; x=1738407708; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dc2O85R1+54lcZQTbhpdideOJEc3GjHDCDPyDd2m00A=; b=Sm1uYxhmoBgSDxgHiC/mtYd96GxnJ41nimomHhG/1mxeZq8ytEtZHrNC O9dP6qgBYQ6mTPX24Yxrh9Fr2n0G9n3yywtIgaZOyJeUkq1UtpZzjigC7 8A4GEIdwBTP80b7zWg838bf3T+wnhs6CXtkXbfk/U1qxAY80Lve6fkAo9 u9SIX3/EC7v+YXUrgZ+XHdOWWvnNvjeSXr/T3SqfwT4LXbGCo1vMjoaC+ Vuzs2gweHfff7M5qW2eZYTrZ6qWQ648tApxI2PsWN0vrvwSfVFJI/di+d 9AFPhVFC620kRTPM93Zq5psA//y6dqqZcj9jCNp2uGk3qvBj8YZTV6dlB A==; X-IronPort-AV: E=McAfee;i="6600,9927,10971"; a="394571891" X-IronPort-AV: E=Sophos;i="6.05,237,1701158400"; d="scan'208";a="394571891" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2024 03:01:47 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.05,237,1701158400"; d="scan'208";a="4639313" Received: from ahunter6-mobl1.ger.corp.intel.com (HELO ahunter-VirtualBox.home\044ger.corp.intel.com) ([10.252.59.118]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2024 03:01:45 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Namhyung Kim , Ian Rogers , Like Xu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Subject: [PATCH 2/2] perf symbols: Slightly improve module file executable section mappings Date: Fri, 2 Feb 2024 13:01:30 +0200 Message-Id: <20240202110130.3553-3-adrian.hunter@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240202110130.3553-1-adrian.hunter@intel.com> References: <20240202110130.3553-1-adrian.hunter@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789784791936495507 X-GMAIL-MSGID: 1789784791936495507 Currently perf does not record module section addresses except for the .text section. In general that means perf cannot get module section mappings correct (except for .text) when loading symbols from a kernel module file. (Note using --kcore does not have this issue) Improve that situation slightly by identifying executable sections that use the same mapping as the .text section. That happens when an executable section comes directly after the .text section, both in memory and on file, something that can be determined by following the same layout rules used by the kernel, refer kernel layout_sections(). Note whether that happens is somewhat arbitrary, so this is not a final solution. Example from tracing a virtual machine process: Before: $ perf script | grep unknown CPU 0/KVM 1718 203.511270: 318341 cpu-cycles:P: ffffffffc13e8a70 [unknown] (/lib/modules/6.7.2-local/kernel/arch/x86/kvm/kvm-intel.ko) $ perf script -vvv 2>&1 >/dev/null | grep kvm.intel | grep 'noinstr.text\|ffff' Map: 0-7e0 41430 [kvm_intel].noinstr.text Map: ffffffffc13a7000-ffffffffc1421000 a0 /lib/modules/6.7.2-local/kernel/arch/x86/kvm/kvm-intel.ko After: $ perf script | grep 203.511270 CPU 0/KVM 1718 203.511270: 318341 cpu-cycles:P: ffffffffc13e8a70 vmx_vmexit+0x0 (/lib/modules/6.7.2-local/kernel/arch/x86/kvm/kvm-intel.ko) $ perf script -vvv 2>&1 >/dev/null | grep kvm.intel | grep 'noinstr.text\|ffff' Map: ffffffffc13a7000-ffffffffc1421000 a0 /lib/modules/6.7.2-local/kernel/arch/x86/kvm/kvm-intel.ko Reported-by: Like Xu Signed-off-by: Adrian Hunter --- tools/perf/util/symbol-elf.c | 75 +++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 9e7eeaf616b8..98bf0881aaf6 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -1329,6 +1330,58 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name, return -1; } +static bool is_exe_text(int flags) +{ + return (flags & (SHF_ALLOC | SHF_EXECINSTR)) == (SHF_ALLOC | SHF_EXECINSTR); +} + +/* + * Some executable module sections like .noinstr.text might be laid out with + * .text so they can use the same mapping (memory address to file offset). + * Check if that is the case. Refer to kernel layout_sections(). Return the + * maximum offset. + */ +static u64 max_text_section(Elf *elf, GElf_Ehdr *ehdr) +{ + Elf_Scn *sec = NULL; + GElf_Shdr shdr; + u64 offs = 0; + + /* Doesn't work for some arch */ + if (ehdr->e_machine == EM_PARISC || + ehdr->e_machine == EM_ALPHA) + return 0; + + /* ELF is corrupted/truncated, avoid calling elf_strptr. */ + if (!elf_rawdata(elf_getscn(elf, ehdr->e_shstrndx), NULL)) + return 0; + + while ((sec = elf_nextscn(elf, sec)) != NULL) { + char *sec_name; + + if (!gelf_getshdr(sec, &shdr)) + break; + + if (!is_exe_text(shdr.sh_flags)) + continue; + + /* .init and .exit sections are not placed with .text */ + sec_name = elf_strptr(elf, ehdr->e_shstrndx, shdr.sh_name); + if (!sec_name || + strstarts(sec_name, ".init") || + strstarts(sec_name, ".exit")) + break; + + /* Must be next to previous, assumes .text is first */ + if (offs && PERF_ALIGN(offs, shdr.sh_addralign ?: 1) != shdr.sh_offset) + break; + + offs = shdr.sh_offset + shdr.sh_size; + } + + return offs; +} + /** * ref_reloc_sym_not_found - has kernel relocation symbol been found. * @kmap: kernel maps and relocation reference symbol @@ -1368,7 +1421,8 @@ static int dso__process_kernel_symbol(struct dso *dso, struct map *map, struct maps *kmaps, struct kmap *kmap, struct dso **curr_dsop, struct map **curr_mapp, const char *section_name, - bool adjust_kernel_syms, bool kmodule, bool *remap_kernel) + bool adjust_kernel_syms, bool kmodule, bool *remap_kernel, + u64 max_text_sh_offset) { struct dso *curr_dso = *curr_dsop; struct map *curr_map; @@ -1425,6 +1479,17 @@ static int dso__process_kernel_symbol(struct dso *dso, struct map *map, if (!kmap) return 0; + /* + * perf does not record module section addresses except for .text, but + * some sections can use the same mapping as .text. + */ + if (kmodule && adjust_kernel_syms && is_exe_text(shdr->sh_flags) && + shdr->sh_offset <= max_text_sh_offset) { + *curr_mapp = map; + *curr_dsop = dso; + return 0; + } + snprintf(dso_name, sizeof(dso_name), "%s%s", dso->short_name, section_name); curr_map = maps__find_by_name(kmaps, dso_name); @@ -1499,6 +1564,7 @@ dso__load_sym_internal(struct dso *dso, struct map *map, struct symsrc *syms_ss, Elf *elf; int nr = 0; bool remap_kernel = false, adjust_kernel_syms = false; + u64 max_text_sh_offset = 0; if (kmap && !kmaps) return -1; @@ -1586,6 +1652,10 @@ dso__load_sym_internal(struct dso *dso, struct map *map, struct symsrc *syms_ss, remap_kernel = true; adjust_kernel_syms = dso->adjust_symbols; } + + if (kmodule && adjust_kernel_syms) + max_text_sh_offset = max_text_section(runtime_ss->elf, &runtime_ss->ehdr); + elf_symtab__for_each_symbol(syms, nr_syms, idx, sym) { struct symbol *f; const char *elf_name = elf_sym__name(&sym, symstrs); @@ -1675,7 +1745,8 @@ dso__load_sym_internal(struct dso *dso, struct map *map, struct symsrc *syms_ss, if (dso->kernel) { if (dso__process_kernel_symbol(dso, map, &sym, &shdr, kmaps, kmap, &curr_dso, &curr_map, - section_name, adjust_kernel_syms, kmodule, &remap_kernel)) + section_name, adjust_kernel_syms, kmodule, + &remap_kernel, max_text_sh_offset)) goto out_elf_end; } else if ((used_opd && runtime_ss->adjust_symbols) || (!used_opd && syms_ss->adjust_symbols)) {