On Mon, Jul 16, 2018 at 5:59 AM, Thomas Huth <th...@redhat.com> wrote: > Valgrind complains: > > echo "{'execute':'qmp_capabilities'} {'execute':'device-list-properties'," \ > "'arguments':{'typename':'stm32f205-soc'}}" \ > "{'execute': 'human-monitor-command', " \ > "'arguments': {'command-line': 'info qtree'}}" | \ > valgrind -q aarch64-softmmu/qemu-system-aarch64 -M none,accel=qtest -qmp > stdio > [...] > ==28531== Invalid read of size 8 > ==28531== at 0x6185BA: qdev_print (qdev-monitor.c:686) > ==28531== by 0x6185BA: qbus_print (qdev-monitor.c:719) > ==28531== by 0x452B38: handle_hmp_command (monitor.c:3446) > [...] > > Fix it with the new sysbus_init_child_obj() function. > > Signed-off-by: Thomas Huth <th...@redhat.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > hw/arm/stm32f205_soc.c | 28 ++++++++++++---------------- > 1 file changed, 12 insertions(+), 16 deletions(-) > > diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c > index 2b2135d..c486d06 100644 > --- a/hw/arm/stm32f205_soc.c > +++ b/hw/arm/stm32f205_soc.c > @@ -49,36 +49,32 @@ static void stm32f205_soc_initfn(Object *obj) > STM32F205State *s = STM32F205_SOC(obj); > int i; > > - object_initialize(&s->armv7m, sizeof(s->armv7m), TYPE_ARMV7M); > - qdev_set_parent_bus(DEVICE(&s->armv7m), sysbus_get_default()); > + sysbus_init_child_obj(obj, "armv7m", &s->armv7m, sizeof(s->armv7m), > + TYPE_ARMV7M); > > - object_initialize(&s->syscfg, sizeof(s->syscfg), TYPE_STM32F2XX_SYSCFG); > - qdev_set_parent_bus(DEVICE(&s->syscfg), sysbus_get_default()); > + sysbus_init_child_obj(obj, "syscfg", &s->syscfg, sizeof(s->syscfg), > + TYPE_STM32F2XX_SYSCFG); > > for (i = 0; i < STM_NUM_USARTS; i++) { > - object_initialize(&s->usart[i], sizeof(s->usart[i]), > - TYPE_STM32F2XX_USART); > - qdev_set_parent_bus(DEVICE(&s->usart[i]), sysbus_get_default()); > + sysbus_init_child_obj(obj, "usart[*]", &s->usart[i], > + sizeof(s->usart[i]), TYPE_STM32F2XX_USART); > } > > for (i = 0; i < STM_NUM_TIMERS; i++) { > - object_initialize(&s->timer[i], sizeof(s->timer[i]), > - TYPE_STM32F2XX_TIMER); > - qdev_set_parent_bus(DEVICE(&s->timer[i]), sysbus_get_default()); > + sysbus_init_child_obj(obj, "timer[*]", &s->timer[i], > + sizeof(s->timer[i]), TYPE_STM32F2XX_TIMER); > } > > s->adc_irqs = OR_IRQ(object_new(TYPE_OR_IRQ)); > > for (i = 0; i < STM_NUM_ADCS; i++) { > - object_initialize(&s->adc[i], sizeof(s->adc[i]), > - TYPE_STM32F2XX_ADC); > - qdev_set_parent_bus(DEVICE(&s->adc[i]), sysbus_get_default()); > + sysbus_init_child_obj(obj, "adc[*]", &s->adc[i], sizeof(s->adc[i]), > + TYPE_STM32F2XX_ADC); > } > > for (i = 0; i < STM_NUM_SPIS; i++) { > - object_initialize(&s->spi[i], sizeof(s->spi[i]), > - TYPE_STM32F2XX_SPI); > - qdev_set_parent_bus(DEVICE(&s->spi[i]), sysbus_get_default()); > + sysbus_init_child_obj(obj, "spi[*]", &s->spi[i], sizeof(s->spi[i]), > + TYPE_STM32F2XX_SPI); > } > } > > -- > 1.8.3.1 > >