OSDN Git Service
(root)
/
qmiga
/
qemu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
target/hppa: Pass d to do_sub_cond
[qmiga/qemu.git]
/
qom
/
object.c
diff --git
a/qom/object.c
b/qom/object.c
index
e5cef30
..
8557fe8
100644
(file)
--- a/
qom/object.c
+++ b/
qom/object.c
@@
-220,6
+220,19
@@
static size_t type_object_get_size(TypeImpl *ti)
return 0;
}
return 0;
}
+static size_t type_object_get_align(TypeImpl *ti)
+{
+ if (ti->instance_align) {
+ return ti->instance_align;
+ }
+
+ if (type_has_parent(ti)) {
+ return type_object_get_align(type_get_parent(ti));
+ }
+
+ return 0;
+}
+
size_t object_type_get_instance_size(const char *typename)
{
TypeImpl *type = type_get_by_name(typename);
size_t object_type_get_instance_size(const char *typename)
{
TypeImpl *type = type_get_by_name(typename);
@@
-293,6
+306,7
@@
static void type_initialize(TypeImpl *ti)
ti->class_size = type_class_get_size(ti);
ti->instance_size = type_object_get_size(ti);
ti->class_size = type_class_get_size(ti);
ti->instance_size = type_object_get_size(ti);
+ ti->instance_align = type_object_get_align(ti);
/* Any type with zero instance_size is implicitly abstract.
* This means interface types are all abstract.
*/
/* Any type with zero instance_size is implicitly abstract.
* This means interface types are all abstract.
*/
@@
-526,8
+540,13
@@
void object_initialize(void *data, size_t size, const char *typename)
#ifdef CONFIG_MODULES
if (!type) {
#ifdef CONFIG_MODULES
if (!type) {
- module_load_qom_one(typename);
- type = type_get_by_name(typename);
+ int rv = module_load_qom(typename, &error_fatal);
+ if (rv > 0) {
+ type = type_get_by_name(typename);
+ } else {
+ error_report("missing object type '%s'", typename);
+ exit(1);
+ }
}
#endif
if (!type) {
}
#endif
if (!type) {
@@
-1033,8
+1052,13
@@
ObjectClass *module_object_class_by_name(const char *typename)
oc = object_class_by_name(typename);
#ifdef CONFIG_MODULES
if (!oc) {
oc = object_class_by_name(typename);
#ifdef CONFIG_MODULES
if (!oc) {
- module_load_qom_one(typename);
- oc = object_class_by_name(typename);
+ Error *local_err = NULL;
+ int rv = module_load_qom(typename, &local_err);
+ if (rv > 0) {
+ oc = object_class_by_name(typename);
+ } else if (rv < 0) {
+ error_report_err(local_err);
+ }
}
#endif
return oc;
}
#endif
return oc;