1*2b54f0dbSXin Li#!/usr/bin/env python 2*2b54f0dbSXin Li 3*2b54f0dbSXin Lifrom __future__ import print_function 4*2b54f0dbSXin Li 5*2b54f0dbSXin Liimport argparse 6*2b54f0dbSXin Liimport sys 7*2b54f0dbSXin Liimport re 8*2b54f0dbSXin Li 9*2b54f0dbSXin Li 10*2b54f0dbSXin Liparser = argparse.ArgumentParser(description='x86 CPUID dump parser') 11*2b54f0dbSXin Liparser.add_argument("input", metavar="INPUT", nargs=1, 12*2b54f0dbSXin Li help="Path to CPUID dump log") 13*2b54f0dbSXin Li 14*2b54f0dbSXin Li 15*2b54f0dbSXin Lidef main(args): 16*2b54f0dbSXin Li options = parser.parse_args(args) 17*2b54f0dbSXin Li 18*2b54f0dbSXin Li cpuid_dump = list() 19*2b54f0dbSXin Li for line in open(options.input[0]).read().splitlines(): 20*2b54f0dbSXin Li match = re.match(r"CPUID ([\dA-F]{8}): ([\dA-F]{8})-([\dA-F]{8})-([\dA-F]{8})-([\dA-F]{8})", line) 21*2b54f0dbSXin Li if match is not None: 22*2b54f0dbSXin Li input_eax, eax, ebx, ecx, edx = tuple(int(match.group(i), 16) for i in [1, 2, 3, 4, 5]) 23*2b54f0dbSXin Li line = line[match.end(0):].strip() 24*2b54f0dbSXin Li input_ecx = None 25*2b54f0dbSXin Li match = re.match(r"\[SL (\d{2})\]", line) 26*2b54f0dbSXin Li if match is not None: 27*2b54f0dbSXin Li input_ecx = int(match.group(1), 16) 28*2b54f0dbSXin Li cpuid_dump.append((input_eax, input_ecx, eax, ebx, ecx, edx)) 29*2b54f0dbSXin Li 30*2b54f0dbSXin Li 31*2b54f0dbSXin Li print("struct cpuinfo_mock_cpuid cpuid_dump[] = {") 32*2b54f0dbSXin Li for input_eax, input_ecx, eax, ebx, ecx, edx in cpuid_dump: 33*2b54f0dbSXin Li print("\t{") 34*2b54f0dbSXin Li print("\t\t.input_eax = 0x%08X," % input_eax) 35*2b54f0dbSXin Li if input_ecx is not None: 36*2b54f0dbSXin Li print("\t\t.input_ecx = 0x%08X," % input_ecx) 37*2b54f0dbSXin Li print("\t\t.eax = 0x%08X," % eax) 38*2b54f0dbSXin Li print("\t\t.ebx = 0x%08X," % ebx) 39*2b54f0dbSXin Li print("\t\t.ecx = 0x%08X," % ecx) 40*2b54f0dbSXin Li print("\t\t.edx = 0x%08X," % edx) 41*2b54f0dbSXin Li print("\t},") 42*2b54f0dbSXin Li print("};") 43*2b54f0dbSXin Li print() 44*2b54f0dbSXin Li 45*2b54f0dbSXin Li 46*2b54f0dbSXin Liif __name__ == "__main__": 47*2b54f0dbSXin Li main(sys.argv[1:]) 48