mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
843 B
37 lines
843 B
#!/usr/bin/env 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, |
|
|
|
|
|
|