Hi, I started looking at how the current CPU models could be converted to QOM classes, and ended up implementing this. It's completely experimental and untested, and the final step involves a hack, that is necessary until we remove support for the cpudef config section.
The first 7 patches are pure cleanups. Patches 8 to 17 does lots of code movements to isolate the CPU model string parsing and CPU object creation together, so they can be changed to use the right CPU class. Patch 18 finally does the change to use a CPU class corresponding to the requested CPU model. Patch 19 is an ugly hack to make it possible to test this code, by now. This is surely not something for 1.2 (maybe just some cleanups from the first few patches). It's just a RFC to see what you think about this approach. It conflicts with ongoing work in this area, too, but I can rebase as necessary. The series depends on the "[PATCH 0/3] Move CPU model definitions to C" series I submitted yesterday. Note that there's still lots of room for improvement. The X86CPUDefinition struct could be much cleaner and simpler, and cpu_x86_create() (and the functions it calls) could be simplified and become more QOM-like, too. But I believe these changes at least make the steps involved in the CPU object creation more visible, and can facilitate further refactorings. Eduardo Habkost (19): target-i386/cpu.c: coding style fixes x86_cpudef_setup: coding style change i386: x86_def_t: rename 'flags' field rename cpu_x86_find_by_name to x86_cpu_build_from_name cpu_x86_build_from_name: use strtok_r() i386: cpu: extract the full feature list before parsing it i386: cpu: extract parsing of feature strings to separate function i386: extract CPU model lookup to a separate function i386: reorder object setup on cpu_x86_init() move CPU object creation to cpu.c rename x86_def_t to X86CPUDefinition create struct X86CPUModelTableEntry move X86CPUDefinition to cpu-qom.h extract CPU object field initialization from cpu_x86_register() cpu_x86_create: move error handling to end of function kill cpu_x86_register() kill cpu_x86_build_from_name() register a class for each CPU model HACK: late CPU class initialization target-i386/cpu-qom.h | 22 ++++ target-i386/cpu.c | 356 ++++++++++++++++++++++++++++++++------------------ target-i386/cpu.h | 2 +- target-i386/helper.c | 14 +- 4 files changed, 256 insertions(+), 138 deletions(-) -- 1.7.11.2