Back to home page

OSCL-LXR

 
 

    


0001 #!/usr/bin/env python
0002 # add symbolic names to read_msr / write_msr in trace
0003 # decode_msr msr-index.h < trace
0004 import sys
0005 import re
0006 
0007 msrs = dict()
0008 
0009 with open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f:
0010     for j in f:
0011         m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j)
0012         if m:
0013             msrs[int(m.group(2), 16)] = m.group(1)
0014 
0015 extra_ranges = (
0016     ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ),
0017     ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ),
0018     ( "LBR_INFO_%d", 0xdc0, 0xddf ),
0019 )
0020 
0021 for j in sys.stdin:
0022     m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j)
0023     if m:
0024         r = None
0025         num = int(m.group(2), 16)
0026         if num in msrs:
0027             r = msrs[num]
0028         else:
0029             for er in extra_ranges:
0030                 if er[1] <= num <= er[2]:
0031                     r = er[0] % (num - er[1],)
0032                     break
0033         if r:
0034             j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")")
0035     print j,
0036 
0037