系列文章目录

第十八章 QEMU系统仿真的机器创建分析实例



前言

本文以 QEMU 8.2.2 为例,分析其作为系统仿真工具的工作过程,并为读者展示各种 QEMU 系统仿真的启动配置实例。
本文读者需要具备一定的 QEMU 系统仿真使用经验,并对 C 语言编程有一定了解。


一、QEMU是什么?

QEMU 是一个通用且开源的机器模拟器和虚拟机。
其官方主页是:https://www.qemu.org/


二、QEMU系统仿真的机器创建分析实例

1.系统仿真的命令行参数

QEMU 作为系统仿真工具,其入口代码在 system/main.c 文件中,初始化函数 qemu_init() 的实现在 system/vl.c 文件中。
前文完成创建目标机器的过程分析,本文将继续后续运行过程的分析,读者需要对 QEMU 系统启动过程的程序代码有所了解,相关内容可以参考《QEMU系统分析之启动篇》系列文章。

..\qemu\8.2.2-qkd\qemu-system-x86_64.exe -cpu "Penryn" -M  "q35,accel=whpx,smm=off" -m "6G" -display "sdl" -audio "sdl,model=hda" -vga "std" -L "data"

2.创建后期后端驱动

这部分代码在 system/vl.c 文件中,实现如下:

int qemu_init(int argc, char **argv)
{
...
    /*
     * Beware, QOM objects created before this point miss global and
     * compat properties.
     *
     * Global properties get set up by qdev_prop_register_global(),
     * called from user_register_global_props(), and certain option
     * desugaring.  Also in CPU feature desugaring (buried in
     * parse_cpu_option()), which happens below this point, but may
     * only target the CPU type, which can only be created after
     * parse_cpu_option() returned the type.
     *
     * Machine compat properties: object_set_machine_compat_props().
     * Accelerator compat props: object_set_accelerator_compat_props(),
     * called from do_configure_accelerator().
     */

    machine_class = MACHINE_GET_CLASS(current_machine);
    if (!qtest_enabled() && machine_class->deprecation_reason) {
        warn_report("Machine type '%s' is deprecated: %s",
                     machine_class->name, machine_class->deprecation_reason);
    }

    /*
     * Create backends before creating migration objects, so that it can
     * check against compatibilities on the backend memories (e.g. postcopy
     * over memory-backend-file objects).
     */
    qemu_create_late_backends();
...
}

前文分析了加速器的配置过程,本文继续完成创建后期后端驱动的过程。
主函数中,如果设置了设置的机器类有已弃用原因的,在终端输出弃用原因来提醒用户。
然后,创建后期后端驱动。


qemu_create_late_backends()

函数 qemu_create_late_backends() 代码如下:

static void qemu_create_late_backends(void)
{
    if (qtest_chrdev) {
        qtest_server_init(qtest_chrdev, qtest_log, &error_fatal);
    }

    net_init_clients();

    object_option_foreach_add(object_create_late);

    if (tpm_init() < 0) {
        exit(1);
    }

    qemu_opts_foreach(qemu_find_opts("mon"),
                      mon_init_func, NULL, &error_fatal);

    if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
        exit(1);
    if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
        exit(1);
    if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
        exit(1);

    /* now chardevs have been created we may have semihosting to connect */
    qemu_semihosting_chardev_init();
}

首先,如果命令行参数中有 “-qtest” 则调用函数 qtest_server_init() 做配置。


qtest_server_init()

代码如下:

void qtest_server_init(const char *qtest_chrdev, const char *qtest_log, Error **errp)
{
    ERRP_GUARD();
    Chardev *chr;
    Object *qobj;

    chr = qemu_chr_new("qtest", qtest_chrdev, NULL);
    if (chr == NULL) {
        error_setg(errp, "Failed to initialize device for qtest: \"%s\"",
                   qtest_chrdev);
        return;
    }

    qobj = object_new(TYPE_QTEST);
    object_property_set_str(qobj, "chardev", chr->label, &error_abort);
    if (qtest_log) {
        object_property_set_str(qobj, "log", qtest_log, &error_abort);
    }
    object_property_add_child(qdev_get_machine(), "qtest", qobj);
    user_creatable_complete(USER_CREATABLE(qobj), errp);
    if (*errp) {
        object_unparent(qobj);
    }
    object_unref(OBJECT(chr));
    object_unref(qobj);
}

首先,调用

    chr = qemu_chr_new("qtest", qtest_chrdev, NULL);

新建字符设备,函数 qemu_chr_new() 如下:

static Chardev *qemu_chr_new_permit_mux_mon(const char *label,
                                          const char *filename,
                                          bool permit_mux_mon,
                                          GMainContext *context)
{
    Chardev *chr;
    chr = qemu_chr_new_noreplay(label, filename, permit_mux_mon, context);
    if (chr) {
        if (replay_mode != REPLAY_MODE_NONE) {
            qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_REPLAY);
        }
        if (qemu_chr_replay(chr) && CHARDEV_GET_CLASS(chr)->chr_ioctl) {
            error_report("Replay: ioctl is not supported "
                         "for serial devices yet");
        }
        replay_register_char_driver(chr);
    }
    return chr;
}

Chardev *qemu_chr_new(const char *label, const char *filename,
                      GMainContext *context)
{
    return qemu_chr_new_permit_mux_mon(label, filename, false, context);
}

继续跟踪进入函数 qemu_chr_new_noreplay() ,代码如下:

Chardev *qemu_chr_new_noreplay(const char *label, const char *filename,
                               bool permit_mux_mon, GMainContext *context)
{
    const char *p;
    Chardev *chr;
    QemuOpts *opts;
    Error *err = NULL;

    if (strstart(filename, "chardev:", &p)) {
        return qemu_chr_find(p);
    }

    opts = qemu_chr_parse_compat(label, filename, permit_mux_mon);
    if (!opts)
        return NULL;

    chr = qemu_chr_new_from_opts(opts, context, &err);
    if (!chr) {
        error_report_err(err);
        goto out;
    }

    if (qemu_opt_get_bool(opts, "mux", 0)) {
        assert(permit_mux_mon);
        monitor_init_hmp(chr, true, &err);
        if (err) {
            error_report_err(err);
            object_unparent(OBJECT(chr));
            chr = NULL;
            goto out;
        }
    }

out:
    qemu_opts_del(opts);
    return chr;
}

在函数中,将调用 qemu_chr_parse_compat() 来解析命令行参数,函数 qemu_chr_parse_compat() 代码如下:

QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename,
                                bool permit_mux_mon)
{
    char host[65], port[33], width[8], height[8];
    int pos;
    const char *p;
    QemuOpts *opts;
    Error *local_err = NULL;

    opts = qemu_opts_create(qemu_find_opts("chardev"), label, 1, &local_err);
    if (local_err) {
        error_report_err(local_err);
        return NULL;
    }

    if (strstart(filename, "mon:", &p)) {
        if (!permit_mux_mon) {
            error_report("mon: isn't supported in this context");
            return NULL;
        }
        filename = p;
        qemu_opt_set(opts, "mux", "on", &error_abort);
        if (strcmp(filename, "stdio") == 0) {
            /* Monitor is muxed to stdio: do not exit on Ctrl+C by default
             * but pass it to the guest.  Handle this only for compat syntax,
             * for -chardev syntax we have special option for this.
             * This is what -nographic did, redirecting+muxing serial+monitor
             * to stdio causing Ctrl+C to be passed to guest. */
            qemu_opt_set(opts, "signal", "off", &error_abort);
        }
    }

    if (strcmp(filename, "null")    == 0 ||
        strcmp(filename, "pty")     == 0 ||
        strcmp(filename, "msmouse") == 0 ||
        strcmp(filename, "wctablet") == 0 ||
        strcmp(filename, "braille") == 0 ||
        strcmp(filename, "testdev") == 0 ||
        strcmp(filename, "stdio")   == 0) {
        qemu_opt_set(opts, "backend", filename, &error_abort);
        return opts;
    }
    if (strstart(filename, "vc", &p)) {
        qemu_opt_set(opts, "backend", "vc", &error_abort);
        if (*p == ':') {
            if (sscanf(p+1, "%7[0-9]x%7[0-9]", width, height) == 2) {
                /* pixels */
                qemu_opt_set(opts, "width", width, &error_abort);
                qemu_opt_set(opts, "height", height, &error_abort);
            } else if (sscanf(p+1, "%7[0-9]Cx%7[0-9]C", width, height) == 2) {
                /* chars */
                qemu_opt_set(opts, "cols", width, &error_abort);
                qemu_opt_set(opts, "rows", height, &error_abort);
            } else {
                goto fail;
            }
        }
        return opts;
    }
    if (strcmp(filename, "con:") == 0) {
        qemu_opt_set(opts, "backend", "console", &error_abort);
        return opts;
    }
    if (strstart(filename, "COM", NULL)) {
        qemu_opt_set(opts, "backend", "serial", &error_abort);
        qemu_opt_set(opts, "path", filename, &error_abort);
        return opts;
    }
    if (strstart(filename, "file:", &p)) {
        qemu_opt_set(opts, "backend", "file", &error_abort);
        qemu_opt_set(opts, "path", p, &error_abort);
        return opts;
    }
    if (strstart(filename, "pipe:", &p)) {
        qemu_opt_set(opts, "backend", "pipe", &error_abort);
        qemu_opt_set(opts, "path", p, &error_abort);
        return opts;
    }
    if (strstart(filename, "tcp:", &p) ||
        strstart(filename, "telnet:", &p) ||
        strstart(filename, "tn3270:", &p) ||
        strstart(filename, "websocket:", &p)) {
        if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
            host[0] = 0;
            if (sscanf(p, ":%32[^,]%n", port, &pos) < 1)
                goto fail;
        }
        qemu_opt_set(opts, "backend", "socket", &error_abort);
        qemu_opt_set(opts, "host", host, &error_abort);
        qemu_opt_set(opts, "port", port, &error_abort);
        if (p[pos] == ',') {
            if (!qemu_opts_do_parse(opts, p + pos + 1, NULL, &local_err)) {
                error_report_err(local_err);
                goto fail;
            }
        }
        if (strstart(filename, "telnet:", &p)) {
            qemu_opt_set(opts, "telnet", "on", &error_abort);
        } else if (strstart(filename, "tn3270:", &p)) {
            qemu_opt_set(opts, "tn3270", "on", &error_abort);
        } else if (strstart(filename, "websocket:", &p)) {
            qemu_opt_set(opts, "websocket", "on", &error_abort);
        }
        return opts;
    }
    if (strstart(filename, "udp:", &p)) {
        qemu_opt_set(opts, "backend", "udp", &error_abort);
        if (sscanf(p, "%64[^:]:%32[^@,]%n", host, port, &pos) < 2) {
            host[0] = 0;
            if (sscanf(p, ":%32[^@,]%n", port, &pos) < 1) {
                goto fail;
            }
        }
        qemu_opt_set(opts, "host", host, &error_abort);
        qemu_opt_set(opts, "port", port, &error_abort);
        if (p[pos] == '@') {
            p += pos + 1;
            if (sscanf(p, "%64[^:]:%32[^,]%n", host, port, &pos) < 2) {
                host[0] = 0;
                if (sscanf(p, ":%32[^,]%n", port, &pos) < 1) {
                    goto fail;
                }
            }
            qemu_opt_set(opts, "localaddr", host, &error_abort);
            qemu_opt_set(opts, "localport", port, &error_abort);
        }
        return opts;
    }
    if (strstart(filename, "unix:", &p)) {
        qemu_opt_set(opts, "backend", "socket", &error_abort);
        if (!qemu_opts_do_parse(opts, p, "path", &local_err)) {
            error_report_err(local_err);
            goto fail;
        }
        return opts;
    }
    if (strstart(filename, "/dev/parport", NULL) ||
        strstart(filename, "/dev/ppi", NULL)) {
        qemu_opt_set(opts, "backend", "parallel", &error_abort);
        qemu_opt_set(opts, "path", filename, &error_abort);
        return opts;
    }
    if (strstart(filename, "/dev/", NULL)) {
        qemu_opt_set(opts, "backend", "serial", &error_abort);
        qemu_opt_set(opts, "path", filename, &error_abort);
        return opts;
    }

    error_report("'%s' is not a valid char driver", filename);

fail:
    qemu_opts_del(opts);
    return NULL;
}

对于 qtest 的服务器端的实现,我们通常选用 telnet 或 unix 的 socket 后端驱动来实现。

一个参考的命令行参数例子如下:

 -qtest "unix:qtest-sock,server,nowait"

至此,qtest_server_init() 的执行路径已经清晰了,接下来继续主程序的运行,进入函数 net_init_clients() 中。


net_init_clients()

代码如下:


void net_init_clients(void)
{
    net_change_state_entry =
        qemu_add_vm_change_state_handler(net_vm_change_state_handler, NULL);

    QTAILQ_INIT(&net_clients);

    netdev_init_modern();

    qemu_opts_foreach(qemu_find_opts("netdev"), net_init_netdev, NULL,
                      &error_fatal);

    qemu_opts_foreach(qemu_find_opts("nic"), net_param_nic, NULL,
                      &error_fatal);

    qemu_opts_foreach(qemu_find_opts("net"), net_init_client, NULL,
                      &error_fatal);
}

netdev_init_modern()

代码如下:

static void netdev_init_modern(void)
{
    while (!QSIMPLEQ_EMPTY(&nd_queue)) {
        NetdevQueueEntry *nd = QSIMPLEQ_FIRST(&nd_queue);

        QSIMPLEQ_REMOVE_HEAD(&nd_queue, entry);
        loc_push_restore(&nd->loc);
        net_client_init1(nd->nd, true, &error_fatal);
        loc_pop(&nd->loc);
        qapi_free_Netdev(nd->nd);
        g_free(nd);
    }
}

net_init_netdev()

代码如下:

static int net_init_netdev(void *dummy, QemuOpts *opts, Error **errp)
{
    const char *type = qemu_opt_get(opts, "type");

    if (type && is_help_option(type)) {
        show_netdevs();
        exit(0);
    }
    return net_client_init(opts, true, errp);
}

net_param_nic()

代码如下:

/* For the convenience "--nic" parameter */
static int net_param_nic(void *dummy, QemuOpts *opts, Error **errp)
{
    char *mac, *nd_id;
    int idx, ret;
    NICInfo *ni;
    const char *type;

    type = qemu_opt_get(opts, "type");
    if (type) {
        if (g_str_equal(type, "none")) {
            return 0;    /* Nothing to do, default_net is cleared in vl.c */
        }
        if (is_help_option(type)) {
            GPtrArray *nic_models = qemu_get_nic_models(TYPE_DEVICE);
            show_netdevs();
            printf("\n");
            qemu_show_nic_models(type, (const char **)nic_models->pdata);
            g_ptr_array_free(nic_models, true);
            exit(0);
        }
    }

    idx = nic_get_free_idx();
    if (idx == -1 || nb_nics >= MAX_NICS) {
        error_setg(errp, "no more on-board/default NIC slots available");
        return -1;
    }

    if (!type) {
        qemu_opt_set(opts, "type", "user", &error_abort);
    }

    ni = &nd_table[idx];
    memset(ni, 0, sizeof(*ni));
    ni->model = qemu_opt_get_del(opts, "model");

    /* Create an ID if the user did not specify one */
    nd_id = g_strdup(qemu_opts_id(opts));
    if (!nd_id) {
        nd_id = id_generate(ID_NET);
        qemu_opts_set_id(opts, nd_id);
    }

    /* Handle MAC address */
    mac = qemu_opt_get_del(opts, "mac");
    if (mac) {
        ret = net_parse_macaddr(ni->macaddr.a, mac);
        g_free(mac);
        if (ret) {
            error_setg(errp, "invalid syntax for ethernet address");
            goto out;
        }
        if (is_multicast_ether_addr(ni->macaddr.a)) {
            error_setg(errp, "NIC cannot have multicast MAC address");
            ret = -1;
            goto out;
        }
    }
    qemu_macaddr_default_if_unset(&ni->macaddr);

    ret = net_client_init(opts, true, errp);
    if (ret == 0) {
        ni->netdev = qemu_find_netdev(nd_id);
        ni->used = true;
        nb_nics++;
    }

out:
    g_free(nd_id);
    return ret;
}

net_init_client()

代码如下:

static int net_client_init(QemuOpts *opts, bool is_netdev, Error **errp)
{
    gchar **substrings = NULL;
    Netdev *object = NULL;
    int ret = -1;
    Visitor *v = opts_visitor_new(opts);

    /* Parse convenience option format ipv6-net=fec0::0[/64] */
    const char *ip6_net = qemu_opt_get(opts, "ipv6-net");

    if (ip6_net) {
        char *prefix_addr;
        unsigned long prefix_len = 64; /* Default 64bit prefix length. */

        substrings = g_strsplit(ip6_net, "/", 2);
        if (!substrings || !substrings[0]) {
            error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "ipv6-net",
                       "a valid IPv6 prefix");
            goto out;
        }

        prefix_addr = substrings[0];

        /* Handle user-specified prefix length. */
        if (substrings[1] &&
            qemu_strtoul(substrings[1], NULL, 10, &prefix_len))
        {
            error_setg(errp,
                       "parameter 'ipv6-net' expects a number after '/'");
            goto out;
        }

        qemu_opt_set(opts, "ipv6-prefix", prefix_addr, &error_abort);
        qemu_opt_set_number(opts, "ipv6-prefixlen", prefix_len,
                            &error_abort);
        qemu_opt_unset(opts, "ipv6-net");
    }

    /* Create an ID for -net if the user did not specify one */
    if (!is_netdev && !qemu_opts_id(opts)) {
        qemu_opts_set_id(opts, id_generate(ID_NET));
    }

    if (visit_type_Netdev(v, NULL, &object, errp)) {
        ret = net_client_init1(object, is_netdev, errp);
    }

    qapi_free_Netdev(object);

out:
    g_strfreev(substrings);
    visit_free(v);
    return ret;
}


static int net_init_client(void *dummy, QemuOpts *opts, Error **errp)
{
    return net_client_init(opts, false, errp);
}

3.调试输出

首先,添加跟踪调试信息,修改后的代码如下:

static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
{
...
    accel = ACCEL(object_new_with_class(OBJECT_CLASS(ac)));
    HUEDBG("accel=0x%llx\n", (unsigned long long int)accel);
    huedbg_dump_AccelClass(ac, 9);
...
}


static void configure_accelerators(const char *progname)
{
...
        HUEDBG("accelerators=[%s]\n", accelerators);
        accel_list = g_strsplit(accelerators, ":", 0);
...
}


int accel_init_machine(AccelState *accel, MachineState *ms)
{
    AccelClass *acc = ACCEL_GET_CLASS(accel);
    int ret;
    HUEDBG("accel=0x%llx\n", (unsigned long long int)accel);
    ms->accelerator = accel;
    *(acc->allowed) = true;
    ret = acc->init_machine(ms);
    if (ret < 0) {
        HUEDBG("\n");
        ms->accelerator = NULL;
        *(acc->allowed) = false;
        object_unref(OBJECT(accel));
    } else {
        HUEDBG("\n");
        object_set_accelerator_compat_props(acc->compat_props);
    }
    huedbg_dump_AccelClass(acc, 9);
    return ret;
}


int qemu_init(int argc, char **argv)
{
...
    /*
     * Note: uses machine properties such as kernel-irqchip, must run
     * after qemu_apply_machine_options.
     */
    huedbg_flag = 1;
    HUEDBG("\n");
    configure_accelerators(argv[0]);
    HUEDBG("\n");
    huedbg_flag = 0;
    phase_advance(PHASE_ACCEL_CREATED);
...
}

运行后,输出信息如下:

[16676]../system/vl.c/qemu_init(3852):
[16676]../system/qtest.c/qtest_server_init(873):enter
[16676]../qom/object.c/object_class_by_name(1095):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-socket) in hash table
[16676]../qom/object.c/object_class_by_name(1105):class(chardev-socket) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_class_by_name(1095):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-socket) in hash table
[16676]../qom/object.c/object_class_by_name(1105):class(chardev-socket) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-socket) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(chardev-socket)
[16676]../qom/object.c/object_new_with_type(799):obj(chardev-socket) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(chardev-socket)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(chardev-socket) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(chardev-socket).class with type(chardev-socket).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(chardev-socket)
[16676]../qom/object.c/object_class_property_init_all(552):obj(chardev-socket) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{chardev-socket} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(chardev-socket) has parent(chardev)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(chardev-socket) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{chardev-socket} return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[addr] type=[SocketAddress] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[connected] type=[bool] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(chardev-socket) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(chardev-socket)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-socket] ti->name=[chardev-socket] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-socket] ti->name=[chardev] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-socket] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-socket] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(423):name=[chardev] ti->instance_init() before
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_init_with_type(425):name=[chardev] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-socket] ti->name=[chardev] return
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-socket] ti->name=[chardev-socket] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(chardev-socket)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-socket] ti->name=[chardev-socket] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-socket] ti->name=[chardev] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-socket] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(chardev-socket) return
[16676]../qom/object.c/object_new_with_type(812):obj(chardev-socket) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-socket) in hash table
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-net-listener) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(qio-net-listener)
[16676]../qom/object.c/object_new_with_type(799):obj(qio-net-listener) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(qio-net-listener)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(qio-net-listener) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(qio-net-listener).class with type(qio-net-listener).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(qio-net-listener)
[16676]../qom/object.c/object_class_property_init_all(552):obj(qio-net-listener) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{qio-net-listener} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qio-net-listener) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qio-net-listener) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{qio-net-listener} return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(qio-net-listener) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(qio-net-listener)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qio-net-listener] ti->name=[qio-net-listener] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qio-net-listener] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qio-net-listener] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qio-net-listener] ti->name=[qio-net-listener] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(qio-net-listener)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qio-net-listener] ti->name=[qio-net-listener] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qio-net-listener] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(qio-net-listener) return
[16676]../qom/object.c/object_new_with_type(812):obj(qio-net-listener) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-net-listener) in hash table
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-dns-resolver) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(qio-dns-resolver)
[16676]../qom/object.c/object_new_with_type(799):obj(qio-dns-resolver) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(qio-dns-resolver)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(qio-dns-resolver) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(qio-dns-resolver).class with type(qio-dns-resolver).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(qio-dns-resolver)
[16676]../qom/object.c/object_class_property_init_all(552):obj(qio-dns-resolver) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{qio-dns-resolver} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qio-dns-resolver) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qio-dns-resolver) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{qio-dns-resolver} return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(qio-dns-resolver) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(qio-dns-resolver)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qio-dns-resolver] ti->name=[qio-dns-resolver] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qio-dns-resolver] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qio-dns-resolver] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qio-dns-resolver] ti->name=[qio-dns-resolver] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(qio-dns-resolver)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qio-dns-resolver] ti->name=[qio-dns-resolver] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qio-dns-resolver] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(qio-dns-resolver) return
[16676]../qom/object.c/object_new_with_type(812):obj(qio-dns-resolver) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-dns-resolver) in hash table
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-channel-socket) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(qio-channel-socket)
[16676]../qom/object.c/object_new_with_type(799):obj(qio-channel-socket) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(qio-channel-socket)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(qio-channel-socket) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(qio-channel-socket).class with type(qio-channel-socket).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(qio-channel-socket)
[16676]../qom/object.c/object_class_property_init_all(552):obj(qio-channel-socket) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{qio-channel-socket} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qio-channel)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qio-channel-socket) has parent(qio-channel)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qio-channel-socket) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{qio-channel-socket} return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qio-channel) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qio-channel) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(qio-channel-socket) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(qio-channel-socket)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qio-channel-socket] ti->name=[qio-channel-socket] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qio-channel)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qio-channel-socket] ti->name=[qio-channel] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qio-channel-socket] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qio-channel-socket] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qio-channel-socket] ti->name=[qio-channel] return
[16676]../qom/object.c/object_init_with_type(423):name=[qio-channel-socket] ti->instance_init() before
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-channel-socket) in hash table
[16676]../qom/object.c/object_init_with_type(425):name=[qio-channel-socket] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qio-channel-socket] ti->name=[qio-channel-socket] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(qio-channel-socket)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qio-channel-socket] ti->name=[qio-channel-socket] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qio-channel)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qio-channel-socket] ti->name=[qio-channel] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qio-channel-socket] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(qio-channel-socket) return
[16676]../qom/object.c/object_new_with_type(812):obj(qio-channel-socket) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-channel) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qio-channel)
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-channel) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qio-channel)
[16676]../qom/object.c/type_table_lookup(103):lookup type(qio-channel) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qio-channel)
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_try_add(1309):name=[qtest] enter!
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_try_add(1350):name=[qtest] return-3!
[16676]../qom/object.c/type_table_lookup(103):lookup type(qtest) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(qtest)
[16676]../qom/object.c/object_new_with_type(799):obj(qtest) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(qtest)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(qtest) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(qtest).class with type(qtest).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(qtest)
[16676]../qom/object.c/object_class_property_init_all(552):obj(qtest) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{qtest} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qtest) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qtest) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{qtest} return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[log] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[chardev] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(qtest) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(qtest)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qtest] ti->name=[qtest] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qtest] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qtest] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qtest] ti->name=[qtest] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(qtest)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qtest] ti->name=[qtest] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qtest] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(qtest) return
[16676]../qom/object.c/object_new_with_type(812):obj(qtest) return
[16676]../qom/qom-qobject.c/object_property_set_qobject(26):name=[chardev] enter!
[16676]../qom/object.c/object_property_set(1507):name=[chardev] enter!
[16676]../qom/object.c/object_property_set(1509):name=[chardev] run!
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qtest) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qtest) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_set(1511):name=[chardev] run!
[16676]../qom/object.c/object_property_set(1524):name=[chardev] run!
[16676]../qom/object.c/type_table_lookup(103):lookup type(qtest) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_set(1526):name=[chardev] return!
[16676]../qom/qom-qobject.c/object_property_set_qobject(33):name=[chardev] return!
[16676]../qom/object.c/object_property_try_add(1309):name=[qtest] enter!
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(generic-pc-machine)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(pc-q35-8.2-machine) has parent(generic-pc-machine)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(pc-q35-8.2-machine) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(x86-machine)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(generic-pc-machine) has parent(x86-machine)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(generic-pc-machine) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(machine)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(x86-machine) has parent(machine)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(x86-machine) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(machine) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(machine) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_try_add(1350):name=[qtest] return-3!
[16676]../qom/object.c/type_table_lookup(103):lookup type(user-creatable) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(interface)
[16676]../qom/object.c/type_get_parent(194):parent_type(user-creatable)
[16676]../qom/object.c/type_table_lookup(103):lookup type(user-creatable) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(interface)
[16676]../qom/object.c/type_get_parent(194):parent_type(user-creatable)
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-mux) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-mux) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../system/qtest.c/qtest_server_init(894):exit
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-mux) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-mux) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_by_name(1095):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-vc) in hash table
[16676]../qom/object.c/object_class_by_name(1105):class(chardev-vc) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_class_by_name(1095):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-vc) in hash table
[16676]../qom/object.c/object_class_by_name(1105):class(chardev-vc) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-vc) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(chardev-vc)
[16676]../qom/object.c/object_new_with_type(799):obj(chardev-vc) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(chardev-vc)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(chardev-vc) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(chardev-vc).class with type(chardev-vc).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(chardev-vc)
[16676]../qom/object.c/object_class_property_init_all(552):obj(chardev-vc) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{chardev-vc} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{chardev-vc} return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(chardev-vc) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(chardev-vc)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-vc] ti->name=[chardev-vc] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-vc] ti->name=[chardev] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-vc] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-vc] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(423):name=[chardev] ti->instance_init() before
[16676]../qom/object.c/object_init_with_type(425):name=[chardev] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-vc] ti->name=[chardev] return
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-vc] ti->name=[chardev-vc] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(chardev-vc)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-vc] ti->name=[chardev-vc] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-vc] ti->name=[chardev] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-vc] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(chardev-vc) return
[16676]../qom/object.c/object_new_with_type(812):obj(chardev-vc) return
[16676]../ui/console-vc.c/vc_chr_open(978):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-fixed-text-console) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(qemu-fixed-text-console)
[16676]../qom/object.c/object_new_with_type(799):obj(qemu-fixed-text-console) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(qemu-fixed-text-console)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(qemu-fixed-text-console) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(qemu-fixed-text-console).class with type(qemu-fixed-text-console).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(qemu-fixed-text-console)
[16676]../qom/object.c/object_class_property_init_all(552):obj(qemu-fixed-text-console) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{qemu-fixed-text-console} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qemu-fixed-text-console) has parent(qemu-text-console)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qemu-fixed-text-console) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{qemu-fixed-text-console} return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qemu-text-console) has parent(qemu-console)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qemu-text-console) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qemu-console) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qemu-console) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(qemu-fixed-text-console) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(qemu-fixed-text-console)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-fixed-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(423):name=[qemu-console] ti->instance_init() before
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-graphic-console) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-graphic-console) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-graphic-console) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_init_with_type(425):name=[qemu-console] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-console] return
[16676]../qom/object.c/object_init_with_type(423):name=[qemu-text-console] ti->instance_init() before
[16676]../qom/object.c/object_init_with_type(425):name=[qemu-text-console] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-text-console] return
[16676]../qom/object.c/object_init_with_type(423):name=[qemu-fixed-text-console] ti->instance_init() before
[16676]../qom/object.c/object_init_with_type(425):name=[qemu-fixed-text-console] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-fixed-text-console] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(qemu-fixed-text-console)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-fixed-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(qemu-fixed-text-console) return
[16676]../qom/object.c/object_new_with_type(812):obj(qemu-fixed-text-console) return
[16676]../ui/console-vc.c/vc_chr_open(1026):enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_try_add(1309):name=[serial0] enter!
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_try_add(1350):name=[serial0] return-3!
[16676]../qom/object.c/object_class_by_name(1095):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-vc) in hash table
[16676]../qom/object.c/object_class_by_name(1105):class(chardev-vc) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_class_by_name(1095):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-vc) in hash table
[16676]../qom/object.c/object_class_by_name(1105):class(chardev-vc) return
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/type_table_lookup(103):lookup type(chardev-vc) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(chardev-vc)
[16676]../qom/object.c/object_new_with_type(799):obj(chardev-vc) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(chardev-vc)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(chardev-vc) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(chardev-vc).class with type(chardev-vc).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(chardev-vc)
[16676]../qom/object.c/object_class_property_init_all(552):obj(chardev-vc) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{chardev-vc} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(chardev-vc) has parent(chardev)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(chardev-vc) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{chardev-vc} return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(chardev) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(chardev) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(chardev-vc) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(chardev-vc)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-vc] ti->name=[chardev-vc] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-vc] ti->name=[chardev] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[chardev-vc] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-vc] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(423):name=[chardev] ti->instance_init() before
[16676]../qom/object.c/object_init_with_type(425):name=[chardev] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-vc] ti->name=[chardev] return
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[chardev-vc] ti->name=[chardev-vc] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(chardev-vc)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-vc] ti->name=[chardev-vc] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(chardev)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-vc] ti->name=[chardev] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[chardev-vc] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(chardev-vc) return
[16676]../qom/object.c/object_new_with_type(812):obj(chardev-vc) return
[16676]../ui/console-vc.c/vc_chr_open(978):enter
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-fixed-text-console) in hash table
[16676]../qom/object.c/object_new_with_type(789):try type_initialize(qemu-fixed-text-console)
[16676]../qom/object.c/object_new_with_type(799):obj(qemu-fixed-text-console) alloc
[16676]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(qemu-fixed-text-console)
[16676]../qom/object.c/object_initialize_with_type(568):obj with type(qemu-fixed-text-console) enter
[16676]../qom/object.c/object_initialize_with_type(576):mapping obj(qemu-fixed-text-console).class with type(qemu-fixed-text-console).class
[16676]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(qemu-fixed-text-console)
[16676]../qom/object.c/object_class_property_init_all(552):obj(qemu-fixed-text-console) enter
[16676]../qom/object.c/object_class_property_iter_init(1440):objclass{qemu-fixed-text-console} enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qemu-fixed-text-console) has parent(qemu-text-console)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qemu-fixed-text-console) return
[16676]../qom/object.c/object_class_property_iter_init(1443):objclass{qemu-fixed-text-console} return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qemu-text-console) has parent(qemu-console)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qemu-text-console) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(qemu-console) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(qemu-console) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[16676]../qom/object.c/object_class_property_init_all(563):obj(qemu-fixed-text-console) return
[16676]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(qemu-fixed-text-console)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-fixed-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_init_with_type(416):obj->class->type->name=[qemu-fixed-text-console] ti->name=[object] enter
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[object] return
[16676]../qom/object.c/object_init_with_type(423):name=[qemu-console] ti->instance_init() before
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-graphic-console) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-graphic-console) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/type_table_lookup(103):lookup type(qemu-graphic-console) in hash table
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_init_with_type(425):name=[qemu-console] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-console] return
[16676]../qom/object.c/object_init_with_type(423):name=[qemu-text-console] ti->instance_init() before
[16676]../qom/object.c/object_init_with_type(425):name=[qemu-text-console] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-text-console] return
[16676]../qom/object.c/object_init_with_type(423):name=[qemu-fixed-text-console] ti->instance_init() before
[16676]../qom/object.c/object_init_with_type(425):name=[qemu-fixed-text-console] ti->instance_init() after
[16676]../qom/object.c/object_init_with_type(427):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-fixed-text-console] return
[16676]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(qemu-fixed-text-console)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-fixed-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-text-console)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-text-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(qemu-console)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[qemu-console] enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[qemu-fixed-text-console] ti->name=[object] enter
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_post_init_with_type(444):return
[16676]../qom/object.c/object_initialize_with_type(587):obj(qemu-fixed-text-console) return
[16676]../qom/object.c/object_new_with_type(812):obj(qemu-fixed-text-console) return
[16676]../ui/console-vc.c/vc_chr_open(1026):enter
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_try_add(1309):name=[parallel0] enter!
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(194):parent_type(object)
[16676]../qom/object.c/object_class_get_parent(1138):objclass(container) has parent(object)
[16676]../qom/object.c/object_class_get_parent(1141):objclass(container) return
[16676]../qom/object.c/object_class_get_parent(1130):enter
[16676]../qom/object.c/type_get_parent(196):no parent_type
[16676]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[16676]../qom/object.c/object_property_try_add(1350):name=[parallel0] return-3!
[16676]../system/vl.c/qemu_init(3854):

总结

以上分析了系统初始化过程中创建后期后端驱动的过程。

05-06 23:52