38 lines · python
1#!/usr/bin/env python2# add symbolic names to read_msr / write_msr in trace3# decode_msr msr-index.h < trace4import sys5import re6 7msrs = dict()8 9with 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 15extra_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 21for j in sys.stdin:22 m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j)23 if m:24 r = None25 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 break33 if r:34 j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")")35 print j,36 37 38