On Wed, Oct 22, 2025 at 2:15 PM Markus Armbruster <[email protected]> wrote: > > qdev_print_props() retrieves a property's value from its legacy > property if it exists. A legacy property is created by > qdev_class_add_legacy_property() when the property has a print() > method or does not have a get() method. > > If it has a print() method, the legacy property's value is obtained > from the property's print() method. This is used to format PCI > addresses nicely, i.e. like 01.3 instead of 11. > > Else, if doesn't have a get() method, the legacy property is > unreadable. "info qtree" silently skips unreadable properties. > > Link properties don't have a get() method, and are therefore skipped. > This is wrong, because the underlying QOM property *is* readable. > > Change qdev_print_props() to simply use a print() method directly if > it exists, else get the value via QOM. > > "info qtree" now shows links fine. For instance, machine "pc" onboard > device "PIIX4_PM" property "bus" is now visible. > > Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]> > --- > system/qdev-monitor.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c > index 2ac92d0a07..850f0c6606 100644 > --- a/system/qdev-monitor.c > +++ b/system/qdev-monitor.c > @@ -745,19 +745,18 @@ static void qdev_print_props(Monitor *mon, DeviceState > *dev, DeviceClass *dc, > for (int i = 0, n = dc->props_count_; i < n; ++i) { > const Property *prop = &dc->props_[i]; > char *value; > - char *legacy_name = g_strdup_printf("legacy-%s", prop->name); > > - if (object_property_get_type(OBJECT(dev), legacy_name, NULL)) { > - value = object_property_get_str(OBJECT(dev), legacy_name, NULL); > + if (prop->info->print) { > + value = prop->info->print(OBJECT(dev), prop); > } else { > value = object_property_print(OBJECT(dev), prop->name, true, > NULL); > } > - g_free(legacy_name); > > if (!value) { > continue; > } > + > qdev_printf("%s = %s\n", prop->name, > *value ? value : "<null>"); > g_free(value); > -- > 2.49.0 > > -- Marc-André Lureau
