12345678910111213141516171819202122232425262728293031323334353637 |
- #!/usr/bin/python
- # add symbolic names to read_msr / write_msr in trace
- # decode_msr msr-index.h < trace
- import sys
- import re
- msrs = dict()
- with open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f:
- for j in f:
- m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j)
- if m:
- msrs[int(m.group(2), 16)] = m.group(1)
- extra_ranges = (
- ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ),
- ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ),
- ( "LBR_INFO_%d", 0xdc0, 0xddf ),
- )
- for j in sys.stdin:
- m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j)
- if m:
- r = None
- num = int(m.group(2), 16)
- if num in msrs:
- r = msrs[num]
- else:
- for er in extra_ranges:
- if er[1] <= num <= er[2]:
- r = er[0] % (num - er[1],)
- break
- if r:
- j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")")
- print j,
|