162306a36Sopenharmony_ci#!/usr/bin/env python 262306a36Sopenharmony_ci# add symbolic names to read_msr / write_msr in trace 362306a36Sopenharmony_ci# decode_msr msr-index.h < trace 462306a36Sopenharmony_ciimport sys 562306a36Sopenharmony_ciimport re 662306a36Sopenharmony_ci 762306a36Sopenharmony_cimsrs = dict() 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciwith open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f: 1062306a36Sopenharmony_ci for j in f: 1162306a36Sopenharmony_ci m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j) 1262306a36Sopenharmony_ci if m: 1362306a36Sopenharmony_ci msrs[int(m.group(2), 16)] = m.group(1) 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciextra_ranges = ( 1662306a36Sopenharmony_ci ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ), 1762306a36Sopenharmony_ci ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ), 1862306a36Sopenharmony_ci ( "LBR_INFO_%d", 0xdc0, 0xddf ), 1962306a36Sopenharmony_ci) 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cifor j in sys.stdin: 2262306a36Sopenharmony_ci m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j) 2362306a36Sopenharmony_ci if m: 2462306a36Sopenharmony_ci r = None 2562306a36Sopenharmony_ci num = int(m.group(2), 16) 2662306a36Sopenharmony_ci if num in msrs: 2762306a36Sopenharmony_ci r = msrs[num] 2862306a36Sopenharmony_ci else: 2962306a36Sopenharmony_ci for er in extra_ranges: 3062306a36Sopenharmony_ci if er[1] <= num <= er[2]: 3162306a36Sopenharmony_ci r = er[0] % (num - er[1],) 3262306a36Sopenharmony_ci break 3362306a36Sopenharmony_ci if r: 3462306a36Sopenharmony_ci j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")") 3562306a36Sopenharmony_ci print j, 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci 38