#!/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,