18c2ecf20Sopenharmony_ci#!/usr/bin/env python 28c2ecf20Sopenharmony_ci# add symbolic names to read_msr / write_msr in trace 38c2ecf20Sopenharmony_ci# decode_msr msr-index.h < trace 48c2ecf20Sopenharmony_ciimport sys 58c2ecf20Sopenharmony_ciimport re 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cimsrs = dict() 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ciwith open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f: 108c2ecf20Sopenharmony_ci for j in f: 118c2ecf20Sopenharmony_ci m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j) 128c2ecf20Sopenharmony_ci if m: 138c2ecf20Sopenharmony_ci msrs[int(m.group(2), 16)] = m.group(1) 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciextra_ranges = ( 168c2ecf20Sopenharmony_ci ( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ), 178c2ecf20Sopenharmony_ci ( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ), 188c2ecf20Sopenharmony_ci ( "LBR_INFO_%d", 0xdc0, 0xddf ), 198c2ecf20Sopenharmony_ci) 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cifor j in sys.stdin: 228c2ecf20Sopenharmony_ci m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j) 238c2ecf20Sopenharmony_ci if m: 248c2ecf20Sopenharmony_ci r = None 258c2ecf20Sopenharmony_ci num = int(m.group(2), 16) 268c2ecf20Sopenharmony_ci if num in msrs: 278c2ecf20Sopenharmony_ci r = msrs[num] 288c2ecf20Sopenharmony_ci else: 298c2ecf20Sopenharmony_ci for er in extra_ranges: 308c2ecf20Sopenharmony_ci if er[1] <= num <= er[2]: 318c2ecf20Sopenharmony_ci r = er[0] % (num - er[1],) 328c2ecf20Sopenharmony_ci break 338c2ecf20Sopenharmony_ci if r: 348c2ecf20Sopenharmony_ci j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")") 358c2ecf20Sopenharmony_ci print j, 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci 38