X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftarget-descriptions.c;h=bdd29c0f2b5930b5f36edc24e0cc653da72165c8;hb=e418a61a67a3476826259163383e5deb661042cc;hp=3d7aa2582e72815f98e77681fdec15acfb54ec43;hpb=8b88a78e63526b84d540b9c7d5f459593a248d5e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 3d7aa2582e..bdd29c0f2b 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -816,8 +816,7 @@ tdesc_numbered_register_choices (const struct tdesc_feature *feature, bits. The register must exist. */ int -tdesc_register_size (const struct tdesc_feature *feature, - const char *name) +tdesc_register_bitsize (const struct tdesc_feature *feature, const char *name) { struct tdesc_reg *reg = tdesc_find_register_early (feature, name); @@ -855,12 +854,11 @@ tdesc_register_name (struct gdbarch *gdbarch, int regno) { struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno); int num_regs = gdbarch_num_regs (gdbarch); - int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch); if (reg != NULL) return reg->name.c_str (); - if (regno >= num_regs && regno < num_regs + num_pseudo_regs) + if (regno >= num_regs && regno < gdbarch_num_cooked_regs (gdbarch)) { struct tdesc_arch_data *data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data); @@ -1735,7 +1733,19 @@ maint_print_c_tdesc_cmd (const char *args, int from_tty) namespace selftests { -static std::vector> xml_tdesc; +/* A reference target description, used for testing (see record_xml_tdesc). */ + +struct xml_test_tdesc +{ + xml_test_tdesc (const char *name, std::unique_ptr &&tdesc) + : name (name), tdesc (std::move (tdesc)) + {} + + const char *name; + std::unique_ptr tdesc; +}; + +static std::vector xml_tdesc; #if GDB_SELF_TEST @@ -1744,7 +1754,7 @@ static std::vector> xml_tdesc; void record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc) { - xml_tdesc.emplace_back (xml_file, tdesc); + xml_tdesc.emplace_back (xml_file, std::unique_ptr (tdesc)); } #endif @@ -1799,17 +1809,17 @@ maintenance_check_xml_descriptions (const char *dir, int from_tty) for (auto const &e : selftests::xml_tdesc) { - std::string tdesc_xml = (feature_dir + SLASH_STRING + e.first); + std::string tdesc_xml = (feature_dir + SLASH_STRING + e.name); const target_desc *tdesc = file_read_description_xml (tdesc_xml.data ()); - if (tdesc == NULL || *tdesc != *e.second) + if (tdesc == NULL || *tdesc != *e.tdesc) { - printf_filtered ( _("Descriptions for %s do not match.\n"), e.first); + printf_filtered ( _("Descriptions for %s do not match.\n"), e.name); failed++; } - else if (!maintenance_check_tdesc_xml_convert (tdesc, e.first) - || !maintenance_check_tdesc_xml_convert (e.second, e.first)) + else if (!maintenance_check_tdesc_xml_convert (tdesc, e.name) + || !maintenance_check_tdesc_xml_convert (e.tdesc.get (), e.name)) failed++; } printf_filtered (_("Tested %lu XML files, %d failed\n"),