qom: Propagate alignment through type system
Propagate alignment just like size. This is required in order to get the correct alignment on most cpu subclasses where the size and alignment is only specified for the base cpu type. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
ef6d8210a2
commit
ad4ec2798f
14
qom/object.c
14
qom/object.c
@ -220,6 +220,19 @@ static size_t type_object_get_size(TypeImpl *ti)
|
||||
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);
|
||||
@ -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->instance_align = type_object_get_align(ti);
|
||||
/* Any type with zero instance_size is implicitly abstract.
|
||||
* This means interface types are all abstract.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user