| #!/usr/bin/env python |
| |
| from __future__ import print_function |
| |
| import argparse |
| import sys |
| import re |
| |
| |
| parser = argparse.ArgumentParser(description='x86 CPUID dump parser') |
| parser.add_argument("input", metavar="INPUT", nargs=1, |
| help="Path to CPUID dump log") |
| |
| |
| def main(args): |
| options = parser.parse_args(args) |
| |
| cpuid_dump = list() |
| for line in open(options.input[0]).read().splitlines(): |
| match = re.match(r"CPUID ([\dA-F]{8}): ([\dA-F]{8})-([\dA-F]{8})-([\dA-F]{8})-([\dA-F]{8})", line) |
| if match is not None: |
| input_eax, eax, ebx, ecx, edx = tuple(int(match.group(i), 16) for i in [1, 2, 3, 4, 5]) |
| line = line[match.end(0):].strip() |
| input_ecx = None |
| match = re.match(r"\[SL (\d{2})\]", line) |
| if match is not None: |
| input_ecx = int(match.group(1), 16) |
| cpuid_dump.append((input_eax, input_ecx, eax, ebx, ecx, edx)) |
| |
| |
| print("struct cpuinfo_mock_cpuid cpuid_dump[] = {") |
| for input_eax, input_ecx, eax, ebx, ecx, edx in cpuid_dump: |
| print("\t{") |
| print("\t\t.input_eax = 0x%08X," % input_eax) |
| if input_ecx is not None: |
| print("\t\t.input_ecx = 0x%08X," % input_ecx) |
| print("\t\t.eax = 0x%08X," % eax) |
| print("\t\t.ebx = 0x%08X," % ebx) |
| print("\t\t.ecx = 0x%08X," % ecx) |
| print("\t\t.edx = 0x%08X," % edx) |
| print("\t},") |
| print("};") |
| print() |
| |
| |
| if __name__ == "__main__": |
| main(sys.argv[1:]) |