On Mon, Sep 21, 2020 at 06:10:35PM -0400, Eduardo Habkost wrote: > Class properties make QOM introspection simpler and easier, as > they don't require an object to be instantiated. > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > --- > Cc: Paolo Bonzini <pbonz...@redhat.com> > Cc: Richard Henderson <r...@twiddle.net> > Cc: Eduardo Habkost <ehabk...@redhat.com> > Cc: qemu-devel@nongnu.org > --- > target/i386/cpu.c | 33 ++++++++++++++++----------------- > 1 file changed, 16 insertions(+), 17 deletions(-) > > diff --git a/target/i386/cpu.c b/target/i386/cpu.c > index 66792f28ba7..1aba87e0a5b 100644 > --- a/target/i386/cpu.c > +++ b/target/i386/cpu.c > @@ -6819,16 +6819,17 @@ static void x86_cpu_release_bit_prop(Object *obj, > const char *name, > * multiple bits in the same FeatureWord. In that case, the getter will > return > * true only if all bits are set. > */ > -static void x86_cpu_register_bit_prop(X86CPU *cpu, > +static void x86_cpu_register_bit_prop(X86CPUClass *xcc, > const char *prop_name, > FeatureWord w, > int bitnr) > { > + ObjectClass *oc = OBJECT_CLASS(xcc); > BitProperty *fp; > ObjectProperty *op; > uint64_t mask = (1ULL << bitnr); > > - op = object_property_find(OBJECT(cpu), prop_name, NULL); > + op = object_class_property_find(oc, prop_name, NULL); > if (op) { > fp = op->opaque; > assert(fp->w == w); > @@ -6837,14 +6838,14 @@ static void x86_cpu_register_bit_prop(X86CPU *cpu, > fp = g_new0(BitProperty, 1); > fp->w = w; > fp->mask = mask; > - object_property_add(OBJECT(cpu), prop_name, "bool", > - x86_cpu_get_bit_prop, > - x86_cpu_set_bit_prop, > - x86_cpu_release_bit_prop, fp); > + object_class_property_add(oc, prop_name, "bool", > + x86_cpu_get_bit_prop, > + x86_cpu_set_bit_prop, > + x86_cpu_release_bit_prop, fp);
This one is broken. x86_cpu_release_bit_prop() frees fp, and now fp should never be freed. The release function shouldn't be set. I will send a new version of this patch later. > [...] -- Eduardo