[BOLT][Wrapper] Fix off-by-one when parsing 'cmp' output
authorJob Noorman <jnoorman@igalia.com>
Mon, 24 Apr 2023 18:54:23 +0000 (20:54 +0200)
committerJob Noorman <jnoorman@igalia.com>
Mon, 24 Apr 2023 18:54:56 +0000 (20:54 +0200)
The byte offsets in the output of 'cmp' start from 1, not from 0 as the
current parser assumes. This caused mismatched bytes to sometimes be
attributed to the wrong section.

Reviewed By: rafauler

Differential Revision: https://reviews.llvm.org/D149046

bolt/utils/llvm-bolt-wrapper.py

index 652cc60..a6d863c 100755 (executable)
@@ -206,7 +206,8 @@ def parse_cmp_offset(cmp_out):
     Extracts byte number from cmp output:
     file1 file2 differ: byte X, line Y
     '''
-    return int(re.search(r'byte (\d+),', cmp_out).groups()[0])
+    # NOTE: cmp counts bytes starting from 1!
+    return int(re.search(r'byte (\d+),', cmp_out).groups()[0]) - 1
 
 def report_real_time(binary, main_err, cmp_err, cfg):
     '''