Message ID | 20231010092901.99189-16-philmd@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target: Make 'cpu-qom.h' really target agnostic | expand |
On 10/10/23 02:28, Philippe Mathieu-Daudé wrote: > Since the OBJECT_DECLARE_CPU_TYPE() macro uses the abstract ArchCPU > type, when declaring multiple CPUs of the same ArchCPU type we get > an error related to the indirect G_DEFINE_AUTOPTR_CLEANUP_FUNC() > use within OBJECT_DECLARE_TYPE(): > > target/mips/cpu-qom.h:31:1: error: redefinition of 'glib_autoptr_clear_ArchCPU' > OBJECT_DECLARE_CPU_TYPE(MIPS64CPU, MIPSCPUClass, MIPS64_CPU) > ^ > include/hw/core/cpu.h:82:5: note: expanded from macro 'OBJECT_DECLARE_CPU_TYPE' > OBJECT_DECLARE_TYPE(ArchCPU, CpuClassType, CPU_MODULE_OBJ_NAME); > ^ > include/qom/object.h:237:5: note: expanded from macro 'OBJECT_DECLARE_TYPE' > G_DEFINE_AUTOPTR_CLEANUP_FUNC(InstanceType, object_unref) \ > ^ > /usr/include/glib-2.0/glib/gmacros.h:1371:3: note: expanded from macro 'G_DEFINE_AUTOPTR_CLEANUP_FUNC' > _GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS(TypeName, TypeName, func) > ^ > /usr/include/glib-2.0/glib/gmacros.h:1354:36: note: expanded from macro '_GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS' > static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) (TypeName *_ptr) \ > ^ > /usr/include/glib-2.0/glib/gmacros.h:1338:49: note: expanded from macro '_GLIB_AUTOPTR_CLEAR_FUNC_NAME' > #define _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) glib_autoptr_clear_##TypeName > ^ > <scratch space>:54:1: note: expanded from here > glib_autoptr_clear_ArchCPU > ^ > target/mips/cpu-qom.h:30:1: note: previous definition is here > OBJECT_DECLARE_CPU_TYPE(MIPS32CPU, MIPSCPUClass, MIPS32_CPU) > ^ > > Avoid that problem by expanding the OBJECT_DECLARE_TYPE() macro > within OBJECT_DECLARE_CPU_TYPE(). > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > include/hw/core/cpu.h | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) Unfortunate, but I suppose this isn't so bad. Acked-by: Richard Henderson <richard.henderson@linaro.org> r~
On 10/12/23 21:27, Richard Henderson wrote: > On 10/10/23 02:28, Philippe Mathieu-Daudé wrote: >> Since the OBJECT_DECLARE_CPU_TYPE() macro uses the abstract ArchCPU >> type, when declaring multiple CPUs of the same ArchCPU type we get >> an error related to the indirect G_DEFINE_AUTOPTR_CLEANUP_FUNC() >> use within OBJECT_DECLARE_TYPE(): >> >> target/mips/cpu-qom.h:31:1: error: redefinition of 'glib_autoptr_clear_ArchCPU' >> OBJECT_DECLARE_CPU_TYPE(MIPS64CPU, MIPSCPUClass, MIPS64_CPU) >> ^ >> include/hw/core/cpu.h:82:5: note: expanded from macro 'OBJECT_DECLARE_CPU_TYPE' >> OBJECT_DECLARE_TYPE(ArchCPU, CpuClassType, CPU_MODULE_OBJ_NAME); >> ^ >> include/qom/object.h:237:5: note: expanded from macro 'OBJECT_DECLARE_TYPE' >> G_DEFINE_AUTOPTR_CLEANUP_FUNC(InstanceType, object_unref) \ >> ^ >> /usr/include/glib-2.0/glib/gmacros.h:1371:3: note: expanded from macro >> 'G_DEFINE_AUTOPTR_CLEANUP_FUNC' >> _GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS(TypeName, TypeName, func) >> ^ >> /usr/include/glib-2.0/glib/gmacros.h:1354:36: note: expanded from macro >> '_GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS' >> static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) (TypeName >> *_ptr) \ >> ^ >> /usr/include/glib-2.0/glib/gmacros.h:1338:49: note: expanded from macro >> '_GLIB_AUTOPTR_CLEAR_FUNC_NAME' >> #define _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) glib_autoptr_clear_##TypeName >> ^ >> <scratch space>:54:1: note: expanded from here >> glib_autoptr_clear_ArchCPU >> ^ >> target/mips/cpu-qom.h:30:1: note: previous definition is here >> OBJECT_DECLARE_CPU_TYPE(MIPS32CPU, MIPSCPUClass, MIPS32_CPU) >> ^ >> >> Avoid that problem by expanding the OBJECT_DECLARE_TYPE() macro >> within OBJECT_DECLARE_CPU_TYPE(). >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> include/hw/core/cpu.h | 7 ++++++- >> 1 file changed, 6 insertions(+), 1 deletion(-) > > Unfortunate, but I suppose this isn't so bad. > > Acked-by: Richard Henderson <richard.henderson@linaro.org> What about adding an OBJECT_DECLARE_CPU_SUBTYPE that omits half the stuff instead? We don't need another object typedef at all, for instance. r~
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index e02bc5980f..ab724fab3a 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -79,7 +79,12 @@ DECLARE_CLASS_CHECKERS(CPUClass, CPU, */ #define OBJECT_DECLARE_CPU_TYPE(CpuInstanceType, CpuClassType, CPU_MODULE_OBJ_NAME) \ typedef struct ArchCPU CpuInstanceType; \ - OBJECT_DECLARE_TYPE(ArchCPU, CpuClassType, CPU_MODULE_OBJ_NAME); + typedef struct CpuClassType CpuClassType; \ + \ + G_DEFINE_AUTOPTR_CLEANUP_FUNC(CpuInstanceType, object_unref) \ + \ + DECLARE_OBJ_CHECKERS(CpuInstanceType, CpuClassType, \ + CPU_MODULE_OBJ_NAME, TYPE_##CPU_MODULE_OBJ_NAME) typedef enum MMUAccessType { MMU_DATA_LOAD = 0,
Since the OBJECT_DECLARE_CPU_TYPE() macro uses the abstract ArchCPU type, when declaring multiple CPUs of the same ArchCPU type we get an error related to the indirect G_DEFINE_AUTOPTR_CLEANUP_FUNC() use within OBJECT_DECLARE_TYPE(): target/mips/cpu-qom.h:31:1: error: redefinition of 'glib_autoptr_clear_ArchCPU' OBJECT_DECLARE_CPU_TYPE(MIPS64CPU, MIPSCPUClass, MIPS64_CPU) ^ include/hw/core/cpu.h:82:5: note: expanded from macro 'OBJECT_DECLARE_CPU_TYPE' OBJECT_DECLARE_TYPE(ArchCPU, CpuClassType, CPU_MODULE_OBJ_NAME); ^ include/qom/object.h:237:5: note: expanded from macro 'OBJECT_DECLARE_TYPE' G_DEFINE_AUTOPTR_CLEANUP_FUNC(InstanceType, object_unref) \ ^ /usr/include/glib-2.0/glib/gmacros.h:1371:3: note: expanded from macro 'G_DEFINE_AUTOPTR_CLEANUP_FUNC' _GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS(TypeName, TypeName, func) ^ /usr/include/glib-2.0/glib/gmacros.h:1354:36: note: expanded from macro '_GLIB_DEFINE_AUTOPTR_CLEANUP_FUNCS' static G_GNUC_UNUSED inline void _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) (TypeName *_ptr) \ ^ /usr/include/glib-2.0/glib/gmacros.h:1338:49: note: expanded from macro '_GLIB_AUTOPTR_CLEAR_FUNC_NAME' #define _GLIB_AUTOPTR_CLEAR_FUNC_NAME(TypeName) glib_autoptr_clear_##TypeName ^ <scratch space>:54:1: note: expanded from here glib_autoptr_clear_ArchCPU ^ target/mips/cpu-qom.h:30:1: note: previous definition is here OBJECT_DECLARE_CPU_TYPE(MIPS32CPU, MIPSCPUClass, MIPS32_CPU) ^ Avoid that problem by expanding the OBJECT_DECLARE_TYPE() macro within OBJECT_DECLARE_CPU_TYPE(). Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- include/hw/core/cpu.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)