diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2018-01-07 09:29:52 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2018-01-07 09:38:16 -0500 |
commit | 4d0fdd9b357aff1fea3ef3def55d12464a41bf5b (patch) | |
tree | 3d31052e1794ddbe5942daabe65d3fc1d900cf76 /gdb/xml-tdesc.c | |
parent | f979c73fd0be9a8a683f79af40c7b939c2a65d9f (diff) | |
download | gdb-4d0fdd9b357aff1fea3ef3def55d12464a41bf5b.zip gdb-4d0fdd9b357aff1fea3ef3def55d12464a41bf5b.tar.gz gdb-4d0fdd9b357aff1fea3ef3def55d12464a41bf5b.tar.bz2 |
Replace VEC(gdb_xml_value_s) with std::vector
This patch replaces VEC(gdb_xml_value_s), which is passed to XML
visitors, with an std::vector. In order to be able to remove the
cleanup in gdb_xml_parser::start_element, the gdb_xml_parser structure
is made to own the value with a gdb::unique_xmalloc_ptr.
This patch has been tested on the buildbot.
gdb/ChangeLog:
* xml-support.h (struct gdb_xml_value): Add constructor.
<value>: Change type to unique_xmalloc_ptr.
(gdb_xml_value_s): Remove typedef.
(DEF_VEC_O (gdb_xml_value_s)): Remove.
(gdb_xml_element_start_handler): Change parameter type to
std::vector.
(xml_find_attribute): Likewise.
* xml-support.c (xml_find_attribute): Change parameter type to
std::vector and adjust.
(gdb_xml_values_cleanup): Remove.
(gdb_xml_parser::start_element): Adjust to std::vector.
(xinclude_start_include): Change paraeter type to std::vector
and adjust.
* btrace.c (check_xml_btrace_version): Likewise.
(parse_xml_btrace_block): Likewise.
(parse_xml_btrace_pt_config_cpu): Likewise.
(parse_xml_btrace_pt): Likewise.
(parse_xml_btrace_conf_bts): Likewise.
(parse_xml_btrace_conf_pt): Likewise.
* memory-map.c (memory_map_start_memory): Likewise.
(memory_map_start_property): Likewise.
* osdata.c (osdata_start_osdata): Likewise.
(osdata_start_item): Likewise.
(osdata_start_column): Likewise.
* remote.c (start_thread): Likewise.
* solib-aix.c (library_list_start_library): Likewise.
(library_list_start_list): Likewise.
* solib-svr4.c (library_list_start_library): Likewise.
(svr4_library_list_start_list): Likewise.
* solib-target.c (library_list_start_segment): Likewise.
(library_list_start_section): Likewise.
(library_list_start_library): Likewise.
(library_list_start_list): Likewise.
* tracepoint.c (traceframe_info_start_memory): Likewise.
(traceframe_info_start_tvar): Likewise.
* xml-syscall.c (syscall_start_syscall): Likewise.
* xml-tdesc.c (tdesc_start_target): Likewise.
(tdesc_start_feature): Likewise.
(tdesc_start_reg): Likewise.
(tdesc_start_union): Likewise.
(tdesc_start_struct): Likewise.
(tdesc_start_flags): Likewise.
(tdesc_start_enum): Likewise.
(tdesc_start_field): Likewise.
(tdesc_start_enum_value): Likewise.
(tdesc_start_vector): Likewise.
Diffstat (limited to 'gdb/xml-tdesc.c')
-rw-r--r-- | gdb/xml-tdesc.c | 83 |
1 files changed, 41 insertions, 42 deletions
diff --git a/gdb/xml-tdesc.c b/gdb/xml-tdesc.c index 1228375..9190d5f 100644 --- a/gdb/xml-tdesc.c +++ b/gdb/xml-tdesc.c @@ -144,9 +144,10 @@ tdesc_end_compatible (struct gdb_xml_parser *parser, static void tdesc_start_target (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { - char *version = (char *) xml_find_attribute (attributes, "version")->value; + char *version + = (char *) xml_find_attribute (attributes, "version")->value.get (); if (strcmp (version, "1.0") != 0) gdb_xml_error (parser, @@ -159,10 +160,10 @@ tdesc_start_target (struct gdb_xml_parser *parser, static void tdesc_start_feature (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; - char *name = (char *) xml_find_attribute (attributes, "name")->value; + char *name = (char *) xml_find_attribute (attributes, "name")->value.get (); data->current_feature = tdesc_create_feature (data->tdesc, name); } @@ -173,37 +174,36 @@ tdesc_start_feature (struct gdb_xml_parser *parser, static void tdesc_start_reg (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; - struct gdb_xml_value *attrs = VEC_address (gdb_xml_value_s, attributes); - int ix = 0, length; + int ix = 0; char *name, *group; const char *type; int bitsize, regnum, save_restore; - length = VEC_length (gdb_xml_value_s, attributes); + int length = attributes.size (); - name = (char *) attrs[ix++].value; - bitsize = * (ULONGEST *) attrs[ix++].value; + name = (char *) attributes[ix++].value.get (); + bitsize = * (ULONGEST *) attributes[ix++].value.get (); - if (ix < length && strcmp (attrs[ix].name, "regnum") == 0) - regnum = * (ULONGEST *) attrs[ix++].value; + if (ix < length && strcmp (attributes[ix].name, "regnum") == 0) + regnum = * (ULONGEST *) attributes[ix++].value.get (); else regnum = data->next_regnum; - if (ix < length && strcmp (attrs[ix].name, "type") == 0) - type = (char *) attrs[ix++].value; + if (ix < length && strcmp (attributes[ix].name, "type") == 0) + type = (char *) attributes[ix++].value.get (); else type = "int"; - if (ix < length && strcmp (attrs[ix].name, "group") == 0) - group = (char *) attrs[ix++].value; + if (ix < length && strcmp (attributes[ix].name, "group") == 0) + group = (char *) attributes[ix++].value.get (); else group = NULL; - if (ix < length && strcmp (attrs[ix].name, "save-restore") == 0) - save_restore = * (ULONGEST *) attrs[ix++].value; + if (ix < length && strcmp (attributes[ix].name, "save-restore") == 0) + save_restore = * (ULONGEST *) attributes[ix++].value.get (); else save_restore = 1; @@ -225,10 +225,10 @@ tdesc_start_reg (struct gdb_xml_parser *parser, static void tdesc_start_union (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; - char *id = (char *) xml_find_attribute (attributes, "id")->value; + char *id = (char *) xml_find_attribute (attributes, "id")->value.get (); data->current_type = tdesc_create_union (data->current_feature, id); data->current_type_size = 0; @@ -240,10 +240,10 @@ tdesc_start_union (struct gdb_xml_parser *parser, static void tdesc_start_struct (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; - char *id = (char *) xml_find_attribute (attributes, "id")->value; + char *id = (char *) xml_find_attribute (attributes, "id")->value.get (); struct gdb_xml_value *attr; tdesc_type_with_fields *type_with_fields @@ -254,7 +254,7 @@ tdesc_start_struct (struct gdb_xml_parser *parser, attr = xml_find_attribute (attributes, "size"); if (attr != NULL) { - ULONGEST size = * (ULONGEST *) attr->value; + ULONGEST size = * (ULONGEST *) attr->value.get (); if (size > MAX_FIELD_SIZE) { @@ -270,12 +270,12 @@ tdesc_start_struct (struct gdb_xml_parser *parser, static void tdesc_start_flags (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; - char *id = (char *) xml_find_attribute (attributes, "id")->value; + char *id = (char *) xml_find_attribute (attributes, "id")->value.get (); ULONGEST size = * (ULONGEST *) - xml_find_attribute (attributes, "size")->value; + xml_find_attribute (attributes, "size")->value.get (); if (size > MAX_FIELD_SIZE) { @@ -291,12 +291,12 @@ tdesc_start_flags (struct gdb_xml_parser *parser, static void tdesc_start_enum (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; - char *id = (char *) xml_find_attribute (attributes, "id")->value; + char *id = (char *) xml_find_attribute (attributes, "id")->value.get (); int size = * (ULONGEST *) - xml_find_attribute (attributes, "size")->value; + xml_find_attribute (attributes, "size")->value.get (); if (size > MAX_FIELD_SIZE) { @@ -315,7 +315,7 @@ tdesc_start_enum (struct gdb_xml_parser *parser, static void tdesc_start_field (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; struct gdb_xml_value *attr; @@ -323,12 +323,12 @@ tdesc_start_field (struct gdb_xml_parser *parser, char *field_name, *field_type_id; int start, end; - field_name = (char *) xml_find_attribute (attributes, "name")->value; + field_name = (char *) xml_find_attribute (attributes, "name")->value.get (); attr = xml_find_attribute (attributes, "type"); if (attr != NULL) { - field_type_id = (char *) attr->value; + field_type_id = (char *) attr->value.get (); field_type = tdesc_named_type (data->current_feature, field_type_id); } else @@ -340,7 +340,7 @@ tdesc_start_field (struct gdb_xml_parser *parser, attr = xml_find_attribute (attributes, "start"); if (attr != NULL) { - ULONGEST ul_start = * (ULONGEST *) attr->value; + ULONGEST ul_start = * (ULONGEST *) attr->value.get (); if (ul_start > MAX_FIELD_BITSIZE) { @@ -356,7 +356,7 @@ tdesc_start_field (struct gdb_xml_parser *parser, attr = xml_find_attribute (attributes, "end"); if (attr != NULL) { - ULONGEST ul_end = * (ULONGEST *) attr->value; + ULONGEST ul_end = * (ULONGEST *) attr->value.get (); if (ul_end > MAX_FIELD_BITSIZE) { @@ -444,7 +444,7 @@ tdesc_start_field (struct gdb_xml_parser *parser, static void tdesc_start_enum_value (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; struct gdb_xml_value *attr; @@ -452,10 +452,10 @@ tdesc_start_enum_value (struct gdb_xml_parser *parser, ULONGEST ul_value; int value; - field_name = (char *) xml_find_attribute (attributes, "name")->value; + field_name = (char *) xml_find_attribute (attributes, "name")->value.get (); attr = xml_find_attribute (attributes, "value"); - ul_value = * (ULONGEST *) attr->value; + ul_value = * (ULONGEST *) attr->value.get (); if (ul_value > INT_MAX) { gdb_xml_error (parser, @@ -473,17 +473,16 @@ tdesc_start_enum_value (struct gdb_xml_parser *parser, static void tdesc_start_vector (struct gdb_xml_parser *parser, const struct gdb_xml_element *element, - void *user_data, VEC(gdb_xml_value_s) *attributes) + void *user_data, std::vector<gdb_xml_value> &attributes) { struct tdesc_parsing_data *data = (struct tdesc_parsing_data *) user_data; - struct gdb_xml_value *attrs = VEC_address (gdb_xml_value_s, attributes); struct tdesc_type *field_type; char *id, *field_type_id; ULONGEST count; - id = (char *) attrs[0].value; - field_type_id = (char *) attrs[1].value; - count = * (ULONGEST *) attrs[2].value; + id = (char *) attributes[0].value.get (); + field_type_id = (char *) attributes[1].value.get (); + count = * (ULONGEST *) attributes[2].value.get (); if (count > MAX_VECTOR_SIZE) { |