On Fri, 15 Nov 2024 at 15:22, Philippe Mathieu-Daudé <[email protected]> wrote:
>
> CPUClass set_pc() and get_pc() handlers are target specific.
> Rather than passing a generic CPUState and forcing QOM casts,
> we can directly pass the target CPUArchState, simplifying.
> diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
> index db8a6fbc6e..70f5f8c3bf 100644
> --- a/include/hw/core/cpu.h
> +++ b/include/hw/core/cpu.h
> @@ -160,8 +160,8 @@ struct CPUClass {
> int64_t (*get_arch_id)(CPUState *cpu);
> bool (*cpu_persistent_status)(CPUState *cpu);
> bool (*cpu_enabled_status)(CPUState *cpu);
> - void (*set_pc)(CPUState *cpu, vaddr value);
> - vaddr (*get_pc)(CPUState *cpu);
> + void (*set_pc)(CPUArchState *env, vaddr value);
> + vaddr (*get_pc)(CPUArchState *env);
> int (*gdb_read_register)(CPUState *cpu, GByteArray *buf, int reg);
> int (*gdb_write_register)(CPUState *cpu, uint8_t *buf, int reg);
> vaddr (*gdb_adjust_breakpoint)(CPUState *cpu, vaddr addr);
This is effectively the table of methods for the CPUClass
class. I think that methods on class A should take a pointer to the
object of that type, not to something else.
thanks
-- PMM