lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 10 Mar 2020 15:02:41 +0800
From:   Jin Yao <yao.jin@...ux.intel.com>
To:     acme@...nel.org, jolsa@...nel.org, peterz@...radead.org,
        mingo@...hat.com, alexander.shishkin@...ux.intel.com
Cc:     Linux-kernel@...r.kernel.org, ak@...ux.intel.com,
        kan.liang@...el.com, yao.jin@...el.com,
        Jin Yao <yao.jin@...ux.intel.com>
Subject: [PATCH v1 10/14] perf util: Enable block source line comparison

Previously we only supported address comparison, but it was not good
for the case that address might be changed if source code was updated.

This patch enables for the source line comparison.

1. If all of the source lines in a block are not changed (or only
   moved some offsets as a whole), we think the block is not changed.

2. If we can aware any source line in this block is changed,
   we think this block is changed.

3. If 1 and 2 are both not matched, fallback to address comparison.

Signed-off-by: Jin Yao <yao.jin@...ux.intel.com>
---
 tools/perf/util/block-info.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/block-info.c b/tools/perf/util/block-info.c
index 2ad9e2dd7f77..3aa564151d84 100644
--- a/tools/perf/util/block-info.c
+++ b/tools/perf/util/block-info.c
@@ -93,11 +93,12 @@ struct block_info *block_info__new(void)
 }
 
 int64_t __block_info__cmp(struct hist_entry *left, struct hist_entry *right,
-			  struct srclist *src_list __maybe_unused)
+			  struct srclist *src_list)
 {
 	struct block_info *bi_l = left->block_info;
 	struct block_info *bi_r = right->block_info;
 	int cmp;
+	bool changed;
 
 	if (!bi_l->sym || !bi_r->sym) {
 		if (!bi_l->sym && !bi_r->sym)
@@ -112,6 +113,27 @@ int64_t __block_info__cmp(struct hist_entry *left, struct hist_entry *right,
 	if (cmp)
 		return cmp;
 
+	if (src_list && bi_l->line && bi_r->line) {
+		if (block_same_srcfiles(bi_l->line, bi_r->line) &&
+		    bi_l->line->start_rel) {
+
+			if (block_srclist_matched(src_list,
+						  bi_l->line->start_rel,
+						  bi_l->line->start_nr,
+						  bi_l->line->end_nr,
+						  bi_r->line->start_nr,
+						  bi_r->line->end_nr,
+						  &changed)) {
+				bi_l->srcline_matched = true;
+				return 0;
+			} else if (changed) {
+				bi_l->block_changed = true;
+				return 0;
+			} else
+				return -1;
+		}
+	}
+
 	if (bi_l->start != bi_r->start)
 		return (int64_t)(bi_r->start - bi_l->start);
 
-- 
2.17.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ