【QEMU系统分析之实例篇(十八)】

系列文章目录

第十八章 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系统分析之启动篇》系列文章。

bash 复制代码
..\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 文件中,实现如下:

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() 代码如下:

c 复制代码
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()

代码如下:

c 复制代码
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);
}

首先,调用

c 复制代码
    chr = qemu_chr_new("qtest", qtest_chrdev, NULL);

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

c 复制代码
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() ,代码如下:

c 复制代码
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() 代码如下:

c 复制代码
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 后端驱动来实现。

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

bash 复制代码
 -qtest "unix:qtest-sock,server,nowait"

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


net_init_clients()

代码如下:

c 复制代码
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()

代码如下:

c 复制代码
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()

代码如下:

c 复制代码
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()

代码如下:

c 复制代码
/* 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()

代码如下:

c 复制代码
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.调试输出

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

c 复制代码
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);
...
}

运行后,输出信息如下:

bash 复制代码
[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):

总结

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

相关推荐
潘yi.26 分钟前
web技术与nginx网站环境部署
服务器·网络·nginx
Jtti1 小时前
Jtti:nginx服务器如何限制访问频率
服务器·网络·nginx
视觉&物联智能2 小时前
【杂谈】-人工智能驱动的网络安全威胁:新一代网络钓鱼
网络·人工智能·web安全·网络安全·安全威胁分析
刘婉晴2 小时前
【环境配置】Mac电脑安装运行R语言教程 2025年
开发语言·macos·r语言
只可远观2 小时前
Flutter 泛型 泛型方法 泛型类 泛型接口
服务器·windows·flutter
云和数据.ChenGuang3 小时前
鸿蒙版电影app设计开发
华为·harmonyos·鸿蒙·鸿蒙系统
yt948323 小时前
STM32裸机编程架构与思路
单片机·嵌入式硬件
学习溢出3 小时前
【网络安全】网络钓鱼的类型
网络·安全·网络安全·网络钓鱼·社会工程
葡萄学妹4 小时前
Windows server:
windows
KAXA_4 小时前
智能电网第5期 | 老旧电力设备智能化改造:协议转换与边缘计算
网络·硬件工程·信息与通信·智能电网