Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1404398pxj; Fri, 21 May 2021 13:26:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwZJNDydaGKUHNn9ETekmEHRy+jP8x05ZuNyubZze/7bMfoHC8vSAeBGlyCAIRW5o+jqni2 X-Received: by 2002:a05:6402:35c4:: with SMTP id z4mr12689809edc.362.1621628779020; Fri, 21 May 2021 13:26:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621628779; cv=none; d=google.com; s=arc-20160816; b=aHPqki3e+JwdCQKwEBpQnQZbXHalrkUs7hrGI1/zhvY0eqdakysIV8EvuqRxiPiaji Yc3une26vrGHyC1rhL27C9AO7Z1Z8pOJcZ1fB07a62xsIvz7NBosMsCIo9iRFGANhl7I aXU3x1H8MkH/yi/Ri+gZ7E4eqt05dwRU4k4EBxVtCgcZofpM+VzdYbIUofhbi7jAPZXT y4nr036WJgaD9YJq9JHmKNEGobzE65TuUdTrDwhJ2UBhPoM1EWe4W/Yu07B5au/QowL5 alsb203Qnv756HUIhBukIJC5xXPGHzlXlrBoovLHOfhYoDyZ5rMWnAF5yZhucjlEyIS2 FBsg== 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 :message-id:date:subject:to:from:ironport-hdrordr:ironport-data :dkim-signature; bh=9ei9Banry0D38dJcxajYDljgdKscZRj5aWj1XS+xc6U=; b=JYdp5HAUm9f6zuHB1xI9gTwcf6QYrYlZ0/qlonVB01fwhYQ3q5QAwlkL/caBcp7/rf 6btTHrCltJhEd1RARP9px3ygDOIdDY7JEWZBXfGJIykb4UEudRqCg2BN90C1/C3J9e7W rrbNQ8HNJKiTzs9iJlRIBJmrXKuKgsbBrATTCbPyJP4zZ1jYaNh1PNgMNZuqDTqzuaE7 FTX1+4+sufUeHZk29F/DFpxerXXBWWC9faI5eDgUMxmsc5ZXOhnb/SdJHM9bO566UJ3t zTJiG+uAQNRv9Yhlrvll6boL0ytXrjR3cYJpXnwot67yaLHZymeqSDdzUMrkhEHJUbra 3wUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cisco.com header.s=iport header.b=dlwr+hvK; 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=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cisco.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id le4si5935106ejc.650.2021.05.21.13.25.55; Fri, 21 May 2021 13:26:19 -0700 (PDT) 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; dkim=pass header.i=@cisco.com header.s=iport header.b=dlwr+hvK; 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=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cisco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232386AbhEUR3V (ORCPT + 99 others); Fri, 21 May 2021 13:29:21 -0400 Received: from alln-iport-3.cisco.com ([173.37.142.90]:2968 "EHLO alln-iport-3.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230048AbhEUR3S (ORCPT ); Fri, 21 May 2021 13:29:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=5250; q=dns/txt; s=iport; t=1621618075; x=1622827675; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=f7KkmiD67k482FiyPYG2FhcNqhM3Qxwr6ZxK5dM0wIc=; b=dlwr+hvK/TnvlXe9Lo8UJ8jOI779qOjVZwL93+DAYyTtPVljFhsXRP2f xkarPzqDNnqLkosvA8NMMw11n62731Ru+Y42D6iolaPB4FjVB7m9s9ytp pZFpI38p/600adshJPpojLGC377d+KwIIoN3TAeasN0jQlMYBhvTg4af6 M=; X-IPAS-Result: =?us-ascii?q?A0AMBAD87Kdg/4oNJK1agmCCK3dWATkxljibK4F8CwEBA?= =?us-ascii?q?Q0BAS0UBAEBhk8CJTQJDgIEAQEBAQMCAwEBAQEFAQEFAQEBAgEGBHEThWgNh?= =?us-ascii?q?nILAXRfMhKCcQGDB6legXkzgQGIP4FEgTqIdnaDeCccgUlEgRWDYGmJVASCJ?= =?us-ascii?q?xkHAYENAYFLgRmRNI16nFWDIZ1HEymDW4sZlleGa45PoAuEDQIEBgUCFoFUO?= =?us-ascii?q?4FZMxoIGxWDJAlHGQ6OKxaDNYsWIQMvAjYCBgoBAQMJiWQBAQ?= IronPort-Data: A9a23:9wlQ2quQVOgosPQ9ZKfXh8eYd+fnVE5fMUV32f8akzHdYApBsoF/q tZmKWyPaauPZzbze952OYjn9kkEvpaHzNZjS1NkqSFjES9DgMeUXt7xwmUckM+xwmwvaGo9s q3yv/GZdJhcokcxJX5BC5C5xZVG/fngqoHUVaiUYEideSc+EH140U85wrZg6mJVqYHR7z2l6 IuaT/L3YDdJ6xYsWo7Dw/vewP/HlK2aVAIw5jTSV9gS1LPtvyV94KYkGE2EByCQrr+4sQKNb 72rILmRpgs19vq2Yz+vuu6TnkYiGtY+MeUS45Zbc/DKv/RMmsA9+p0DBsgtc1d8ty6Yutd90 dwRrq2MCgh8a8UgmMxFO/VZOyh6OasD87jdLD3i98eS1EbBNXDrxp2CDmlvYtZeobgxWDoIr KdIQNwORkjra+aezKCyRe52m8ULJ8jwN4RZsXZlpd3cJal+Hc6fGfSUu7e02h8pnupPHs3vT PEjUgdQMUvyID11HVsuXcdWcOCAwyOXnydjgFaUo7cnpmve1gp81JDzP9fPPN+HX8NYmgCfv G2u12H4BB4dHMaSxTqM7jSngeqntSH8XJkbPKe1+v5jnBuYwWl7IBQSWEuyp/W0kAilW9NEK 08V/AIqrK4v5AqqSMXwW1uzp3vslhgVXtpBDus1wAKA0KzZ50CeHGdsZjdKbdEOt8IsQzEuk FiTkLvBHTFzvaeHYXOb+K2doT67NW4SN2BqTSoNVwhD+cT/pIg1gjrGVNMlG6mw5uAZAhn5x zSM6SM5nbhW0IgA1r6w+hbMhDfESoX1czPZLz7/BgqNhj6Vrqb/D2B0wTA3Ncp9Ebs= IronPort-HdrOrdr: A9a23:xCP266GmkbbZLe+VpLqE/ceALOsnbusQ8zAXPidKOH5om6Oj+f xG8M536faWskdzZJhfo7G90cC7KBu2n6KdirN/AV7NZmXbUROTTL2LKeDZslnd8+qUzJ856Z td X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.82,319,1613433600"; d="scan'208";a="704642966" Received: from alln-core-5.cisco.com ([173.36.13.138]) by alln-iport-3.cisco.com with ESMTP/TLS/DHE-RSA-SEED-SHA; 21 May 2021 17:27:55 +0000 Received: from sjc-ads-9103.cisco.com (sjc-ads-9103.cisco.com [10.30.208.113]) by alln-core-5.cisco.com (8.15.2/8.15.2) with ESMTPS id 14LHRsOb023280 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 21 May 2021 17:27:54 GMT Received: by sjc-ads-9103.cisco.com (Postfix, from userid 487941) id 03679CC1251; Fri, 21 May 2021 10:27:53 -0700 (PDT) From: Denys Zagorui To: jolsa@redhat.com, linux-kernel@vger.kernel.org, peterz@infradead.org, mingo@redhat.com, acme@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, namhyung@kernel.org Subject: [PATCH v6 1/3] perf report: compile tips.txt in perf binary Date: Fri, 21 May 2021 10:27:51 -0700 Message-Id: <20210521172753.55399-1-dzagorui@cisco.com> X-Mailer: git-send-email 2.26.2.Cisco MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Outbound-SMTP-Client: 10.30.208.113, sjc-ads-9103.cisco.com X-Outbound-Node: alln-core-5.cisco.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It seems there is some need to have an ability to invoke perf from build directory without installation (84cfac7f05e1: perf tools: Set and pass DOCDIR to builtin-report.c) DOCDIR definition contains an absolute path to kernel source directory. It is build machine related info and it makes perf binary unreproducible. This can be avoided by compiling tips.txt in perf directly. Signed-off-by: Denys Zagorui --- tools/perf/Build | 2 +- tools/perf/Documentation/Build | 9 +++++++++ tools/perf/builtin-report.c | 34 +++++++++++++++++++++++++--------- tools/perf/util/util.c | 28 ---------------------------- tools/perf/util/util.h | 2 -- 5 files changed, 35 insertions(+), 40 deletions(-) create mode 100644 tools/perf/Documentation/Build diff --git a/tools/perf/Build b/tools/perf/Build index db61dbe2b543..3a2e768d7576 100644 --- a/tools/perf/Build +++ b/tools/perf/Build @@ -45,12 +45,12 @@ CFLAGS_perf.o += -DPERF_HTML_PATH="BUILD_STR($(htmldir_SQ))" \ -DPREFIX="BUILD_STR($(prefix_SQ))" CFLAGS_builtin-trace.o += -DSTRACE_GROUPS_DIR="BUILD_STR($(STRACE_GROUPS_DIR_SQ))" CFLAGS_builtin-report.o += -DTIPDIR="BUILD_STR($(tipdir_SQ))" -CFLAGS_builtin-report.o += -DDOCDIR="BUILD_STR($(srcdir_SQ)/Documentation)" perf-y += util/ perf-y += arch/ perf-y += ui/ perf-y += scripts/ perf-$(CONFIG_TRACE) += trace/beauty/ +perf-y += Documentation/ gtk-y += ui/gtk/ diff --git a/tools/perf/Documentation/Build b/tools/perf/Documentation/Build new file mode 100644 index 000000000000..83e16764caa4 --- /dev/null +++ b/tools/perf/Documentation/Build @@ -0,0 +1,9 @@ +perf-y += tips.o + +quiet_cmd_ld_tips = LD $@ + cmd_ld_tips = $(LD) -r -b binary -o $@ $< + +$(OUTPUT)Documentation/tips.o: Documentation/tips.txt FORCE + $(call rule_mkdir) + $(call if_changed,ld_tips) + diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 36f9ccfeb38a..4f2c7ee8fea1 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -47,7 +47,6 @@ #include "util/time-utils.h" #include "util/auxtrace.h" #include "util/units.h" -#include "util/util.h" // perf_tip() #include "ui/ui.h" #include "ui/progress.h" #include "util/block-info.h" @@ -109,6 +108,9 @@ struct report { int nr_block_reports; }; +extern char _binary_Documentation_tips_txt_start[]; +extern char _binary_Documentation_tips_txt_end[]; + static int report__config(const char *var, const char *value, void *cb) { struct report *rep = cb; @@ -614,19 +616,33 @@ static int report__gtk_browse_hists(struct report *rep, const char *help) return hist_browser(rep->session->evlist, help, NULL, rep->min_percent); } +static const char *perf_tip(void) +{ + char *start = _binary_Documentation_tips_txt_start; + char *tok, *tmp, *prev; + int pick, size; + + size = _binary_Documentation_tips_txt_end - start; + pick = random() % size; + + _binary_Documentation_tips_txt_start[size - 1] = 0; + + for (tok = strtok_r(start, "\n", &tmp); tok; + tok = strtok_r(NULL, "\n", &tmp)) { + if (pick < (tok - start)) + return prev; + prev = tok; + } + + return prev; +} + static int report__browse_hists(struct report *rep) { int ret; struct perf_session *session = rep->session; struct evlist *evlist = session->evlist; - const char *help = perf_tip(system_path(TIPDIR)); - - if (help == NULL) { - /* fallback for people who don't install perf ;-) */ - help = perf_tip(DOCDIR); - if (help == NULL) - help = "Cannot load tips.txt file, please install perf!"; - } + const char *help = perf_tip(); switch (use_browser) { case 1: diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 37a9492edb3e..3bba74e431ed 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c @@ -379,34 +379,6 @@ fetch_kernel_version(unsigned int *puint, char *str, return 0; } -const char *perf_tip(const char *dirpath) -{ - struct strlist *tips; - struct str_node *node; - char *tip = NULL; - struct strlist_config conf = { - .dirname = dirpath, - .file_only = true, - }; - - tips = strlist__new("tips.txt", &conf); - if (tips == NULL) - return errno == ENOENT ? NULL : - "Tip: check path of tips.txt or get more memory! ;-p"; - - if (strlist__nr_entries(tips) == 0) - goto out; - - node = strlist__entry(tips, random() % strlist__nr_entries(tips)); - if (asprintf(&tip, "Tip: %s", node->s) < 0) - tip = (char *)"Tip: get more memory! ;-)"; - -out: - strlist__delete(tips); - - return tip; -} - char *perf_exe(char *buf, int len) { int n = readlink("/proc/self/exe", buf, len); diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h index ad737052e597..80b194ee6c7d 100644 --- a/tools/perf/util/util.h +++ b/tools/perf/util/util.h @@ -39,8 +39,6 @@ int fetch_kernel_version(unsigned int *puint, #define KVER_FMT "%d.%d.%d" #define KVER_PARAM(x) KVER_VERSION(x), KVER_PATCHLEVEL(x), KVER_SUBLEVEL(x) -const char *perf_tip(const char *dirpath); - #ifndef HAVE_SCHED_GETCPU_SUPPORT int sched_getcpu(void); #endif -- 2.26.2.Cisco