@@ -2011,131 +2011,146 @@ static int lookup_add_arch_defined_types(char const **arch_defined_types_list[],
20112011}
20122012
20132013static int gdb_generate_reg_type_description (struct target * target ,
2014- char * * tdesc , int * pos , int * size , struct reg_data_type * type ,
2015- char const * * arch_defined_types_list [], int * num_arch_defined_types )
2014+ char * * tdesc , int * pos , int * const size , struct reg_data_type * const type ,
2015+ char const * * arch_defined_types_list [], int * const num_arch_defined_types )
20162016{
20172017 int retval = ERROR_OK ;
20182018
2019- if (type -> type_class == REG_TYPE_CLASS_VECTOR ) {
2020- struct reg_data_type * data_type = type -> reg_type_vector -> type ;
2021- if (data_type -> type == REG_TYPE_ARCH_DEFINED ) {
2022- if (lookup_add_arch_defined_types (arch_defined_types_list , data_type -> id ,
2023- num_arch_defined_types ))
2024- gdb_generate_reg_type_description (target , tdesc , pos , size , data_type ,
2025- arch_defined_types_list ,
2026- num_arch_defined_types );
2027- }
2028- /* <vector id="id" type="type" count="count"/> */
2029- xml_printf (& retval , tdesc , pos , size ,
2030- "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>\n" ,
2031- type -> id , type -> reg_type_vector -> type -> id ,
2032- type -> reg_type_vector -> count );
2033-
2034- } else if (type -> type_class == REG_TYPE_CLASS_UNION ) {
2035- struct reg_data_type_union_field * field ;
2036- field = type -> reg_type_union -> fields ;
2037- while (field != NULL ) {
2038- struct reg_data_type * data_type = field -> type ;
2019+ switch (type -> type_class ) {
2020+ case REG_TYPE_CLASS_VECTOR :
2021+ {
2022+ struct reg_data_type * data_type = type -> reg_type_vector -> type ;
20392023 if (data_type -> type == REG_TYPE_ARCH_DEFINED ) {
20402024 if (lookup_add_arch_defined_types (arch_defined_types_list , data_type -> id ,
2041- num_arch_defined_types ))
2025+ num_arch_defined_types ))
20422026 gdb_generate_reg_type_description (target , tdesc , pos , size , data_type ,
2043- arch_defined_types_list ,
2044- num_arch_defined_types );
2027+ arch_defined_types_list ,
2028+ num_arch_defined_types );
20452029 }
2030+ /* <vector id="id" type="type" count="count"/> */
2031+ xml_printf (& retval , tdesc , pos , size ,
2032+ "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>\n" ,
2033+ type -> id , type -> reg_type_vector -> type -> id ,
2034+ type -> reg_type_vector -> count );
20462035
2047- field = field -> next ;
20482036 }
2049- /* <union id="id">
2050- * <field name="name" type="type"/> ...
2051- * </union> */
2052- xml_printf (& retval , tdesc , pos , size ,
2037+ break ;
2038+
2039+ case REG_TYPE_CLASS_UNION :
2040+ {
2041+ struct reg_data_type_union_field * field ;
2042+ field = type -> reg_type_union -> fields ;
2043+ while (field != NULL ) {
2044+ struct reg_data_type * data_type = field -> type ;
2045+ if (data_type -> type == REG_TYPE_ARCH_DEFINED ) {
2046+ if (lookup_add_arch_defined_types (arch_defined_types_list , data_type -> id ,
2047+ num_arch_defined_types ))
2048+ gdb_generate_reg_type_description (target , tdesc , pos , size , data_type ,
2049+ arch_defined_types_list ,
2050+ num_arch_defined_types );
2051+ }
2052+
2053+ field = field -> next ;
2054+ }
2055+ /* <union id="id">
2056+ * <field name="name" type="type"/> ...
2057+ * </union> */
2058+ xml_printf (& retval , tdesc , pos , size ,
20532059 "<union id=\"%s\">\n" ,
20542060 type -> id );
20552061
2056- field = type -> reg_type_union -> fields ;
2057- while (field != NULL ) {
2058- xml_printf (& retval , tdesc , pos , size ,
2062+ field = type -> reg_type_union -> fields ;
2063+ while (field != NULL ) {
2064+ xml_printf (& retval , tdesc , pos , size ,
20592065 "<field name=\"%s\" type=\"%s\"/>\n" ,
20602066 field -> name , field -> type -> id );
20612067
2062- field = field -> next ;
2063- }
2068+ field = field -> next ;
2069+ }
20642070
2065- xml_printf (& retval , tdesc , pos , size ,
2071+ xml_printf (& retval , tdesc , pos , size ,
20662072 "</union>\n" );
20672073
2068- } else if (type -> type_class == REG_TYPE_CLASS_STRUCT ) {
2069- struct reg_data_type_struct_field * field ;
2070- field = type -> reg_type_struct -> fields ;
2074+ }
2075+ break ;
20712076
2072- if (field -> use_bitfields ) {
2073- /* <struct id="id" size="size">
2074- * <field name="name" start="start" end="end"/> ...
2075- * </struct> */
2076- xml_printf (& retval , tdesc , pos , size ,
2077+ case REG_TYPE_CLASS_STRUCT :
2078+ {
2079+ struct reg_data_type_struct_field * field = type -> reg_type_struct -> fields ;
2080+
2081+ if (field -> use_bitfields ) {
2082+ /* <struct id="id" size="size">
2083+ * <field name="name" start="start" end="end"/> ...
2084+ * </struct> */
2085+ xml_printf (& retval , tdesc , pos , size ,
20772086 "<struct id=\"%s\" size=\"%d\">\n" ,
20782087 type -> id , type -> reg_type_struct -> size );
2079- while ( field != NULL ) {
2080- xml_printf (& retval , tdesc , pos , size ,
2088+ for (; field ; field = field -> next ) {
2089+ xml_printf (& retval , tdesc , pos , size ,
20812090 "<field name=\"%s\" start=\"%d\" end=\"%d\" type=\"%s\" />\n" ,
20822091 field -> name , field -> bitfield -> start , field -> bitfield -> end ,
20832092 gdb_get_reg_type_name (field -> bitfield -> type ));
2084-
2085- field = field -> next ;
2086- }
2087- } else {
2088- while (field != NULL ) {
2089- struct reg_data_type * data_type = field -> type ;
2090- if (data_type -> type == REG_TYPE_ARCH_DEFINED ) {
2091- if (lookup_add_arch_defined_types (arch_defined_types_list , data_type -> id ,
2092- num_arch_defined_types ))
2093- gdb_generate_reg_type_description (target , tdesc , pos , size , data_type ,
2094- arch_defined_types_list ,
2095- num_arch_defined_types );
20962093 }
2097- }
2094+ } else {
2095+ for (struct reg_data_type_struct_field * tmp_field = field ; tmp_field != NULL ; tmp_field = tmp_field -> next ) {
2096+ struct reg_data_type * data_type = tmp_field -> type ;
2097+ if (data_type && data_type -> type == REG_TYPE_ARCH_DEFINED ) {
2098+ if (lookup_add_arch_defined_types (arch_defined_types_list , data_type -> id ,
2099+ num_arch_defined_types ))
2100+ gdb_generate_reg_type_description (target , tdesc , pos , size , data_type ,
2101+ arch_defined_types_list ,
2102+ num_arch_defined_types );
2103+ }
2104+ }
20982105
2099- /* <struct id="id">
2100- * <field name="name" type="type"/> ...
2101- * </struct> */
2102- xml_printf (& retval , tdesc , pos , size ,
2106+ /* <struct id="id">
2107+ * <field name="name" type="type"/> ...
2108+ * </struct> */
2109+ xml_printf (& retval , tdesc , pos , size ,
21032110 "<struct id=\"%s\">\n" ,
21042111 type -> id );
2105- while ( field != NULL ) {
2106- xml_printf (& retval , tdesc , pos , size ,
2112+ for (; field ; field = field -> next ) {
2113+ xml_printf (& retval , tdesc , pos , size ,
21072114 "<field name=\"%s\" type=\"%s\"/>\n" ,
21082115 field -> name , field -> type -> id );
2109-
2110- field = field -> next ;
2116+ }
21112117 }
2112- }
21132118
2114- xml_printf (& retval , tdesc , pos , size ,
2119+ xml_printf (& retval , tdesc , pos , size ,
21152120 "</struct>\n" );
21162121
2117- } else if (type -> type_class == REG_TYPE_CLASS_FLAGS ) {
2118- /* <flags id="id" size="size">
2119- * <field name="name" start="start" end="end"/> ...
2120- * </flags> */
2121- xml_printf (& retval , tdesc , pos , size ,
2122+ }
2123+ break ;
2124+
2125+ case REG_TYPE_CLASS_FLAGS :
2126+ {
2127+ /* <flags id="id" size="size">
2128+ * <field name="name" start="start" end="end"/> ...
2129+ * </flags> */
2130+ xml_printf (& retval , tdesc , pos , size ,
21222131 "<flags id=\"%s\" size=\"%d\">\n" ,
21232132 type -> id , type -> reg_type_flags -> size );
21242133
2125- struct reg_data_type_flags_field * field ;
2126- field = type -> reg_type_flags -> fields ;
2127- while (field != NULL ) {
2128- xml_printf (& retval , tdesc , pos , size ,
2134+ struct reg_data_type_flags_field * field ;
2135+ field = type -> reg_type_flags -> fields ;
2136+ while (field != NULL ) {
2137+ xml_printf (& retval , tdesc , pos , size ,
21292138 "<field name=\"%s\" start=\"%d\" end=\"%d\" type=\"%s\" />\n" ,
21302139 field -> name , field -> bitfield -> start , field -> bitfield -> end ,
21312140 gdb_get_reg_type_name (field -> bitfield -> type ));
21322141
2133- field = field -> next ;
2134- }
2142+ field = field -> next ;
2143+ }
21352144
2136- xml_printf (& retval , tdesc , pos , size ,
2145+ xml_printf (& retval , tdesc , pos , size ,
21372146 "</flags>\n" );
21382147
2148+ }
2149+ break ;
2150+
2151+ default :
2152+ return ERROR_FAIL ;
2153+ break ;
21392154 }
21402155
21412156 return ERROR_OK ;
0 commit comments