| 1 | |
| 2 | |
| 3 | |
| 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 |
|