1 #!/usr/bin/env python 1 #!/usr/bin/env python 2 # add symbolic names to read_msr / write_msr i 2 # add symbolic names to read_msr / write_msr in trace 3 # decode_msr msr-index.h < trace 3 # decode_msr msr-index.h < trace 4 import sys 4 import sys 5 import re 5 import re 6 6 7 msrs = dict() 7 msrs = dict() 8 8 9 with open(sys.argv[1] if len(sys.argv) > 1 els 9 with open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f: 10 for j in f: 10 for j in f: 11 m = re.match(r'#define (MSR_\w 11 m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j) 12 if m: 12 if m: 13 msrs[int(m.group(2), 1 13 msrs[int(m.group(2), 16)] = m.group(1) 14 14 15 extra_ranges = ( 15 extra_ranges = ( 16 ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 16 ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ), 17 ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x 17 ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ), 18 ( "LBR_INFO_%d", 0xdc0, 0xddf ), 18 ( "LBR_INFO_%d", 0xdc0, 0xddf ), 19 ) 19 ) 20 20 21 for j in sys.stdin: 21 for j in sys.stdin: 22 m = re.search(r'(read|write)_msr:\s+([ 22 m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j) 23 if m: 23 if m: 24 r = None 24 r = None 25 num = int(m.group(2), 16) 25 num = int(m.group(2), 16) 26 if num in msrs: 26 if num in msrs: 27 r = msrs[num] 27 r = msrs[num] 28 else: 28 else: 29 for er in extra_ranges 29 for er in extra_ranges: 30 if er[1] <= nu 30 if er[1] <= num <= er[2]: 31 r = er 31 r = er[0] % (num - er[1],) 32 break 32 break 33 if r: 33 if r: 34 j = j.replace(" " + m. 34 j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")") 35 print j, 35 print j, 36 36 37 37
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.