QOM CPUState and X86CPU
* Adoption of CPUClass::disas_set_info() hook -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJWKQqsAAoJEPou0S0+fgE/PR0QAJksKlDCWu6dyp52Wwf1WGvf wRUVKDbpxVXN6mAbWrLXkQ7m1le+c4mnMn2xAZg49++vKWav34n4+a7N6e5aYUpz X79udKHc4VuGn8DrFLxupkCUIDWGJGlx59rN6TdZdX78YWhpRR+yT467Lz0oPae1 styAO6KALs6+XP0r6gHl1OvY9JjKoSpgANmRCPEaI79/Cq06Gh70o0LwMI6mHz3l IL9KPgc8EO0GpBBd/GBSlXa7FSN9B/iOARVKly96ivYoIOBb9L2La2I8l/3CiA26 +9uvVripXgrCjVvKbzV4ukxqy4emCff2nEJ6WfSLgXiSSZcOcttfhV8uBDmXDxB1 fxfgYDwt14r0IoMnZjBqwzZlYIqjgj417XRhkg0jivRKurPk074/PaXn2XFtt1dz yXgqABLGvpWOElO3PYRyg4SLKAK0hhCp/hlWql+fb61aCMn21aqOX5ucxykv46Y/ /gPxKVEVVoPO29r5GWuV5rBbU9q2+C+LcznzIjR7JSFAXTIKLMc5kvYdIVjhafMd 6mHqTqpgAtIjvVjknZR4NTIbPGN/PwrdG7ZlSmIuP5sV92LZMJlnuivzHRjpn5o8 SOtlidZQNl9T+BWxCWo0YaMrsi3uXfQe7xIxpHx5pYQzCblQv/ZpjvkMxJOFgkie 00FpeI/PTcRgzR4V9V4E =VgY8 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/afaerber/tags/qom-cpu-for-peter' into staging QOM CPUState and X86CPU * Adoption of CPUClass::disas_set_info() hook # gpg: Signature made Thu 22 Oct 2015 17:11:24 BST using RSA key ID 3E7E013F # gpg: Good signature from "Andreas Färber <afaerber@suse.de>" # gpg: aka "Andreas Färber <afaerber@suse.com>" * remotes/afaerber/tags/qom-cpu-for-peter: disas: QOMify alpha specific disas setup disas: QOMify mips specific disas setup disas: QOMify sh4 specific disas setup disas: QOMify lm32 specific disas setup disas: QOMify sparc specific disas setup disas: QOMify m68k specific disas setup disas: QOMify moxie specific disas setup disas: QOMify s390x specific disas setup Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
b803894e2c
55
disas.c
55
disas.c
@ -214,11 +214,6 @@ void target_disas(FILE *out, CPUState *cpu, target_ulong code,
|
||||
s.info.mach = bfd_mach_i386_i386;
|
||||
}
|
||||
s.info.print_insn = print_insn_i386;
|
||||
#elif defined(TARGET_SPARC)
|
||||
s.info.print_insn = print_insn_sparc;
|
||||
#ifdef TARGET_SPARC64
|
||||
s.info.mach = bfd_mach_sparc_v9b;
|
||||
#endif
|
||||
#elif defined(TARGET_PPC)
|
||||
if ((flags >> 16) & 1) {
|
||||
s.info.endian = BFD_ENDIAN_LITTLE;
|
||||
@ -235,29 +230,6 @@ void target_disas(FILE *out, CPUState *cpu, target_ulong code,
|
||||
}
|
||||
s.info.disassembler_options = (char *)"any";
|
||||
s.info.print_insn = print_insn_ppc;
|
||||
#elif defined(TARGET_M68K)
|
||||
s.info.print_insn = print_insn_m68k;
|
||||
#elif defined(TARGET_MIPS)
|
||||
#ifdef TARGET_WORDS_BIGENDIAN
|
||||
s.info.print_insn = print_insn_big_mips;
|
||||
#else
|
||||
s.info.print_insn = print_insn_little_mips;
|
||||
#endif
|
||||
#elif defined(TARGET_SH4)
|
||||
s.info.mach = bfd_mach_sh4;
|
||||
s.info.print_insn = print_insn_sh;
|
||||
#elif defined(TARGET_ALPHA)
|
||||
s.info.mach = bfd_mach_alpha_ev6;
|
||||
s.info.print_insn = print_insn_alpha;
|
||||
#elif defined(TARGET_S390X)
|
||||
s.info.mach = bfd_mach_s390_64;
|
||||
s.info.print_insn = print_insn_s390;
|
||||
#elif defined(TARGET_MOXIE)
|
||||
s.info.mach = bfd_arch_moxie;
|
||||
s.info.print_insn = print_insn_moxie;
|
||||
#elif defined(TARGET_LM32)
|
||||
s.info.mach = bfd_mach_lm32;
|
||||
s.info.print_insn = print_insn_lm32;
|
||||
#endif
|
||||
if (s.info.print_insn == NULL) {
|
||||
s.info.print_insn = print_insn_od_target;
|
||||
@ -429,13 +401,6 @@ void monitor_disas(Monitor *mon, CPUState *cpu,
|
||||
s.info.mach = bfd_mach_i386_i386;
|
||||
}
|
||||
s.info.print_insn = print_insn_i386;
|
||||
#elif defined(TARGET_ALPHA)
|
||||
s.info.print_insn = print_insn_alpha;
|
||||
#elif defined(TARGET_SPARC)
|
||||
s.info.print_insn = print_insn_sparc;
|
||||
#ifdef TARGET_SPARC64
|
||||
s.info.mach = bfd_mach_sparc_v9b;
|
||||
#endif
|
||||
#elif defined(TARGET_PPC)
|
||||
if (flags & 0xFFFF) {
|
||||
/* If we have a precise definition of the instruction set, use it. */
|
||||
@ -451,26 +416,6 @@ void monitor_disas(Monitor *mon, CPUState *cpu,
|
||||
s.info.endian = BFD_ENDIAN_LITTLE;
|
||||
}
|
||||
s.info.print_insn = print_insn_ppc;
|
||||
#elif defined(TARGET_M68K)
|
||||
s.info.print_insn = print_insn_m68k;
|
||||
#elif defined(TARGET_MIPS)
|
||||
#ifdef TARGET_WORDS_BIGENDIAN
|
||||
s.info.print_insn = print_insn_big_mips;
|
||||
#else
|
||||
s.info.print_insn = print_insn_little_mips;
|
||||
#endif
|
||||
#elif defined(TARGET_SH4)
|
||||
s.info.mach = bfd_mach_sh4;
|
||||
s.info.print_insn = print_insn_sh;
|
||||
#elif defined(TARGET_S390X)
|
||||
s.info.mach = bfd_mach_s390_64;
|
||||
s.info.print_insn = print_insn_s390;
|
||||
#elif defined(TARGET_MOXIE)
|
||||
s.info.mach = bfd_arch_moxie;
|
||||
s.info.print_insn = print_insn_moxie;
|
||||
#elif defined(TARGET_LM32)
|
||||
s.info.mach = bfd_mach_lm32;
|
||||
s.info.print_insn = print_insn_lm32;
|
||||
#endif
|
||||
if (!s.info.print_insn) {
|
||||
monitor_printf(mon, "0x" TARGET_FMT_lx
|
||||
|
@ -46,6 +46,12 @@ static bool alpha_cpu_has_work(CPUState *cs)
|
||||
| CPU_INTERRUPT_MCHK);
|
||||
}
|
||||
|
||||
static void alpha_cpu_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->mach = bfd_mach_alpha_ev6;
|
||||
info->print_insn = print_insn_alpha;
|
||||
}
|
||||
|
||||
static void alpha_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
{
|
||||
CPUState *cs = CPU(dev);
|
||||
@ -297,6 +303,8 @@ static void alpha_cpu_class_init(ObjectClass *oc, void *data)
|
||||
cc->get_phys_page_debug = alpha_cpu_get_phys_page_debug;
|
||||
dc->vmsd = &vmstate_alpha_cpu;
|
||||
#endif
|
||||
cc->disas_set_info = alpha_cpu_disas_set_info;
|
||||
|
||||
cc->gdb_num_core_regs = 67;
|
||||
|
||||
/*
|
||||
|
@ -131,6 +131,12 @@ static void lm32_cpu_reset(CPUState *s)
|
||||
tlb_flush(s, 1);
|
||||
}
|
||||
|
||||
static void lm32_cpu_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->mach = bfd_mach_lm32;
|
||||
info->print_insn = print_insn_lm32;
|
||||
}
|
||||
|
||||
static void lm32_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
{
|
||||
CPUState *cs = CPU(dev);
|
||||
@ -275,6 +281,7 @@ static void lm32_cpu_class_init(ObjectClass *oc, void *data)
|
||||
cc->gdb_num_core_regs = 32 + 7;
|
||||
cc->gdb_stop_before_watchpoint = true;
|
||||
cc->debug_excp_handler = lm32_debug_excp_handler;
|
||||
cc->disas_set_info = lm32_cpu_disas_set_info;
|
||||
|
||||
/*
|
||||
* Reason: lm32_cpu_initfn() calls cpu_exec_init(), which saves
|
||||
|
@ -61,6 +61,11 @@ static void m68k_cpu_reset(CPUState *s)
|
||||
tlb_flush(s, 1);
|
||||
}
|
||||
|
||||
static void m68k_cpu_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->print_insn = print_insn_m68k;
|
||||
}
|
||||
|
||||
/* CPU models */
|
||||
|
||||
static ObjectClass *m68k_cpu_class_by_name(const char *cpu_model)
|
||||
@ -208,11 +213,13 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
|
||||
#endif
|
||||
cc->cpu_exec_enter = m68k_cpu_exec_enter;
|
||||
cc->cpu_exec_exit = m68k_cpu_exec_exit;
|
||||
cc->disas_set_info = m68k_cpu_disas_set_info;
|
||||
|
||||
dc->vmsd = &vmstate_m68k_cpu;
|
||||
cc->gdb_num_core_regs = 18;
|
||||
cc->gdb_core_xml_file = "cf-core.xml";
|
||||
|
||||
dc->vmsd = &vmstate_m68k_cpu;
|
||||
|
||||
/*
|
||||
* Reason: m68k_cpu_initfn() calls cpu_exec_init(), which saves
|
||||
* the object in cpus -> dangling pointer after final
|
||||
|
@ -97,6 +97,14 @@ static void mips_cpu_reset(CPUState *s)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void mips_cpu_disas_set_info(CPUState *s, disassemble_info *info) {
|
||||
#ifdef TARGET_WORDS_BIGENDIAN
|
||||
info->print_insn = print_insn_big_mips;
|
||||
#else
|
||||
info->print_insn = print_insn_little_mips;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void mips_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
{
|
||||
CPUState *cs = CPU(dev);
|
||||
@ -150,6 +158,7 @@ static void mips_cpu_class_init(ObjectClass *c, void *data)
|
||||
cc->get_phys_page_debug = mips_cpu_get_phys_page_debug;
|
||||
cc->vmsd = &vmstate_mips_cpu;
|
||||
#endif
|
||||
cc->disas_set_info = mips_cpu_disas_set_info;
|
||||
|
||||
cc->gdb_num_core_regs = 73;
|
||||
cc->gdb_stop_before_watchpoint = true;
|
||||
|
@ -48,6 +48,12 @@ static void moxie_cpu_reset(CPUState *s)
|
||||
tlb_flush(s, 1);
|
||||
}
|
||||
|
||||
static void moxie_cpu_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->mach = bfd_arch_moxie;
|
||||
info->print_insn = print_insn_moxie;
|
||||
}
|
||||
|
||||
static void moxie_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
{
|
||||
CPUState *cs = CPU(dev);
|
||||
@ -114,6 +120,7 @@ static void moxie_cpu_class_init(ObjectClass *oc, void *data)
|
||||
cc->get_phys_page_debug = moxie_cpu_get_phys_page_debug;
|
||||
cc->vmsd = &vmstate_moxie_cpu;
|
||||
#endif
|
||||
cc->disas_set_info = moxie_cpu_disas_set_info;
|
||||
|
||||
/*
|
||||
* Reason: moxie_cpu_initfn() calls cpu_exec_init(), which saves
|
||||
|
@ -184,6 +184,12 @@ static void s390_cpu_machine_reset_cb(void *opaque)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void s390_cpu_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->mach = bfd_mach_s390_64;
|
||||
info->print_insn = print_insn_s390;
|
||||
}
|
||||
|
||||
static void s390_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
{
|
||||
CPUState *cs = CPU(dev);
|
||||
@ -351,6 +357,8 @@ static void s390_cpu_class_init(ObjectClass *oc, void *data)
|
||||
cc->cpu_exec_interrupt = s390_cpu_exec_interrupt;
|
||||
cc->debug_excp_handler = s390x_cpu_debug_excp_handler;
|
||||
#endif
|
||||
cc->disas_set_info = s390_cpu_disas_set_info;
|
||||
|
||||
cc->gdb_num_core_regs = S390_NUM_CORE_REGS;
|
||||
cc->gdb_core_xml_file = "s390x-core64.xml";
|
||||
|
||||
|
@ -70,6 +70,12 @@ static void superh_cpu_reset(CPUState *s)
|
||||
set_default_nan_mode(1, &env->fp_status);
|
||||
}
|
||||
|
||||
static void superh_cpu_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->mach = bfd_mach_sh4;
|
||||
info->print_insn = print_insn_sh;
|
||||
}
|
||||
|
||||
typedef struct SuperHCPUListState {
|
||||
fprintf_function cpu_fprintf;
|
||||
FILE *file;
|
||||
@ -288,9 +294,12 @@ static void superh_cpu_class_init(ObjectClass *oc, void *data)
|
||||
#else
|
||||
cc->get_phys_page_debug = superh_cpu_get_phys_page_debug;
|
||||
#endif
|
||||
dc->vmsd = &vmstate_sh_cpu;
|
||||
cc->disas_set_info = superh_cpu_disas_set_info;
|
||||
|
||||
cc->gdb_num_core_regs = 59;
|
||||
|
||||
dc->vmsd = &vmstate_sh_cpu;
|
||||
|
||||
/*
|
||||
* Reason: superh_cpu_initfn() calls cpu_exec_init(), which saves
|
||||
* the object in cpus -> dangling pointer after final
|
||||
|
@ -90,6 +90,14 @@ static bool sparc_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
|
||||
return false;
|
||||
}
|
||||
|
||||
static void cpu_sparc_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
{
|
||||
info->print_insn = print_insn_sparc;
|
||||
#ifdef TARGET_SPARC64
|
||||
info->mach = bfd_mach_sparc_v9b;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int cpu_sparc_register(SPARCCPU *cpu, const char *cpu_model)
|
||||
{
|
||||
CPUClass *cc = CPU_GET_CLASS(cpu);
|
||||
@ -848,6 +856,7 @@ static void sparc_cpu_class_init(ObjectClass *oc, void *data)
|
||||
cc->do_unaligned_access = sparc_cpu_do_unaligned_access;
|
||||
cc->get_phys_page_debug = sparc_cpu_get_phys_page_debug;
|
||||
#endif
|
||||
cc->disas_set_info = cpu_sparc_disas_set_info;
|
||||
|
||||
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
|
||||
cc->gdb_num_core_regs = 86;
|
||||
|
Loading…
Reference in New Issue
Block a user