Andi Kleen | 7f47d8c | 2015-12-01 17:00:59 -0800 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | # add symbolic names to read_msr / write_msr in trace |
| 3 | # decode_msr msr-index.h < trace |
| 4 | import sys |
| 5 | import re |
| 6 | |
| 7 | msrs = dict() |
| 8 | |
| 9 | with open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f: |
| 10 | for j in f: |
| 11 | m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j) |
| 12 | if m: |
| 13 | msrs[int(m.group(2), 16)] = m.group(1) |
| 14 | |
| 15 | extra_ranges = ( |
| 16 | ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ), |
| 17 | ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ), |
| 18 | ( "LBR_INFO_%d", 0xdc0, 0xddf ), |
| 19 | ) |
| 20 | |
| 21 | for j in sys.stdin: |
| 22 | m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j) |
| 23 | if m: |
| 24 | r = None |
| 25 | num = int(m.group(2), 16) |
| 26 | if num in msrs: |
| 27 | r = msrs[num] |
| 28 | else: |
| 29 | for er in extra_ranges: |
| 30 | if er[1] <= num <= er[2]: |
| 31 | r = er[0] % (num - er[1],) |
| 32 | break |
| 33 | if r: |
| 34 | j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")") |
| 35 | print j, |
| 36 | |
| 37 | |