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