From 851dec945d7a4855542a2f0e2a67160d03fe5a51 Mon Sep 17 00:00:00 2001 From: Bharata B Rao Date: Sat, 24 Feb 2018 18:59:25 -0500 Subject: [PATCH] qom: API to get instance_size of a type Add an API object_type_get_size(const char *typename) that returns the instance_size of the give typename. Backports commit 3f97b53a682d2595747c926c00d78b9d406f1be0 from qemu --- qemu/aarch64.h | 1 + qemu/aarch64eb.h | 1 + qemu/arm.h | 1 + qemu/armeb.h | 1 + qemu/header_gen.py | 1 + qemu/include/qom/object.h | 8 ++++++++ qemu/m68k.h | 1 + qemu/mips.h | 1 + qemu/mips64.h | 1 + qemu/mips64el.h | 1 + qemu/mipsel.h | 1 + qemu/powerpc.h | 1 + qemu/qom/object.c | 8 ++++++++ qemu/sparc.h | 1 + qemu/sparc64.h | 1 + qemu/x86_64.h | 1 + 16 files changed, 30 insertions(+) diff --git a/qemu/aarch64.h b/qemu/aarch64.h index 7965836d..ad23a640 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_aarch64 #define object_resolve_path_type object_resolve_path_type_aarch64 #define object_set_link_property object_set_link_property_aarch64 +#define object_type_get_instance_size object_type_get_instance_size_aarch64 #define object_unparent object_unparent_aarch64 #define omap_cachemaint_write omap_cachemaint_write_aarch64 #define omap_cp_reginfo omap_cp_reginfo_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index ec80e73d..6b2ac5ba 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_aarch64eb #define object_resolve_path_type object_resolve_path_type_aarch64eb #define object_set_link_property object_set_link_property_aarch64eb +#define object_type_get_instance_size object_type_get_instance_size_aarch64eb #define object_unparent object_unparent_aarch64eb #define omap_cachemaint_write omap_cachemaint_write_aarch64eb #define omap_cp_reginfo omap_cp_reginfo_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index a91de907..e3791591 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_arm #define object_resolve_path_type object_resolve_path_type_arm #define object_set_link_property object_set_link_property_arm +#define object_type_get_instance_size object_type_get_instance_size_arm #define object_unparent object_unparent_arm #define omap_cachemaint_write omap_cachemaint_write_arm #define omap_cp_reginfo omap_cp_reginfo_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index 426b46b2..e7d16dda 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_armeb #define object_resolve_path_type object_resolve_path_type_armeb #define object_set_link_property object_set_link_property_armeb +#define object_type_get_instance_size object_type_get_instance_size_armeb #define object_unparent object_unparent_armeb #define omap_cachemaint_write omap_cachemaint_write_armeb #define omap_cp_reginfo omap_cp_reginfo_armeb diff --git a/qemu/header_gen.py b/qemu/header_gen.py index 36447d21..805dc20e 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -2223,6 +2223,7 @@ symbols = ( 'object_resolve_path_component', 'object_resolve_path_type', 'object_set_link_property', + 'object_type_get_instance_size', 'object_unparent', 'omap_cachemaint_write', 'omap_cp_reginfo', diff --git a/qemu/include/qom/object.h b/qemu/include/qom/object.h index 540f6f06..c7aab863 100644 --- a/qemu/include/qom/object.h +++ b/qemu/include/qom/object.h @@ -1376,6 +1376,14 @@ int object_child_foreach_recursive(Object *obj, */ Object *container_get(struct uc_struct *uc, Object *root, const char *path); +/** + * object_type_get_instance_size: + * @typename: Name of the Type whose instance_size is required + * + * Returns the instance_size of the given @typename. + */ +size_t object_type_get_instance_size(struct uc_struct *uc, const char *typename); + void container_register_types(struct uc_struct *uc); void register_types_object(struct uc_struct *uc); diff --git a/qemu/m68k.h b/qemu/m68k.h index 61b970a4..14f78499 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_m68k #define object_resolve_path_type object_resolve_path_type_m68k #define object_set_link_property object_set_link_property_m68k +#define object_type_get_instance_size object_type_get_instance_size_m68k #define object_unparent object_unparent_m68k #define omap_cachemaint_write omap_cachemaint_write_m68k #define omap_cp_reginfo omap_cp_reginfo_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 46da5ec6..0f075aac 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_mips #define object_resolve_path_type object_resolve_path_type_mips #define object_set_link_property object_set_link_property_mips +#define object_type_get_instance_size object_type_get_instance_size_mips #define object_unparent object_unparent_mips #define omap_cachemaint_write omap_cachemaint_write_mips #define omap_cp_reginfo omap_cp_reginfo_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 5582554e..5509f890 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_mips64 #define object_resolve_path_type object_resolve_path_type_mips64 #define object_set_link_property object_set_link_property_mips64 +#define object_type_get_instance_size object_type_get_instance_size_mips64 #define object_unparent object_unparent_mips64 #define omap_cachemaint_write omap_cachemaint_write_mips64 #define omap_cp_reginfo omap_cp_reginfo_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index 5dc52fd5..8c7b2103 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_mips64el #define object_resolve_path_type object_resolve_path_type_mips64el #define object_set_link_property object_set_link_property_mips64el +#define object_type_get_instance_size object_type_get_instance_size_mips64el #define object_unparent object_unparent_mips64el #define omap_cachemaint_write omap_cachemaint_write_mips64el #define omap_cp_reginfo omap_cp_reginfo_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index eb6027a6..3ae6d8c7 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_mipsel #define object_resolve_path_type object_resolve_path_type_mipsel #define object_set_link_property object_set_link_property_mipsel +#define object_type_get_instance_size object_type_get_instance_size_mipsel #define object_unparent object_unparent_mipsel #define omap_cachemaint_write omap_cachemaint_write_mipsel #define omap_cp_reginfo omap_cp_reginfo_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index d58bba7a..7b12987f 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_powerpc #define object_resolve_path_type object_resolve_path_type_powerpc #define object_set_link_property object_set_link_property_powerpc +#define object_type_get_instance_size object_type_get_instance_size_powerpc #define object_unparent object_unparent_powerpc #define omap_cachemaint_write omap_cachemaint_write_powerpc #define omap_cp_reginfo omap_cp_reginfo_powerpc diff --git a/qemu/qom/object.c b/qemu/qom/object.c index cf277793..b1b674b9 100644 --- a/qemu/qom/object.c +++ b/qemu/qom/object.c @@ -195,6 +195,14 @@ static size_t type_object_get_size(struct uc_struct *uc, TypeImpl *ti) return 0; } +size_t object_type_get_instance_size(struct uc_struct *uc, const char *typename) +{ + TypeImpl *type = type_get_by_name(uc, typename); + + g_assert(type != NULL); + return type_object_get_size(uc, type); +} + static bool type_is_ancestor(struct uc_struct *uc, TypeImpl *type, TypeImpl *target_type) { assert(target_type); diff --git a/qemu/sparc.h b/qemu/sparc.h index 0a62386c..0a9f4551 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_sparc #define object_resolve_path_type object_resolve_path_type_sparc #define object_set_link_property object_set_link_property_sparc +#define object_type_get_instance_size object_type_get_instance_size_sparc #define object_unparent object_unparent_sparc #define omap_cachemaint_write omap_cachemaint_write_sparc #define omap_cp_reginfo omap_cp_reginfo_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index 79fed2c4..df2136e2 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_sparc64 #define object_resolve_path_type object_resolve_path_type_sparc64 #define object_set_link_property object_set_link_property_sparc64 +#define object_type_get_instance_size object_type_get_instance_size_sparc64 #define object_unparent object_unparent_sparc64 #define omap_cachemaint_write omap_cachemaint_write_sparc64 #define omap_cp_reginfo omap_cp_reginfo_sparc64 diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 452e414f..d8e61057 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -2217,6 +2217,7 @@ #define object_resolve_path_component object_resolve_path_component_x86_64 #define object_resolve_path_type object_resolve_path_type_x86_64 #define object_set_link_property object_set_link_property_x86_64 +#define object_type_get_instance_size object_type_get_instance_size_x86_64 #define object_unparent object_unparent_x86_64 #define omap_cachemaint_write omap_cachemaint_write_x86_64 #define omap_cp_reginfo omap_cp_reginfo_x86_64