| | |
| |
|
| | 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:]) |
| |
|