Now we know all instances of GDBFeature that is used in CPU so we can traverse them to find XML. This removes the need for a CPU-specific lookup function for dynamic XMLs.
Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> --- gdbstub/gdbstub.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 182efe7e0f..e5bb2c89ba 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -354,8 +354,7 @@ static const char *get_feature_xml(const char *p, const char **newp, GDBProcess *process) { size_t len; - int i; - const char *name; + GDBRegisterState *r; CPUState *cpu = gdb_get_first_cpu_in_process(process); CPUClass *cc = CPU_GET_CLASS(cpu); @@ -364,15 +363,12 @@ static const char *get_feature_xml(const char *p, const char **newp, len++; *newp = p + len; - name = NULL; if (strncmp(p, "target.xml", len) == 0) { char *buf = process->target_xml; const size_t buf_sz = sizeof(process->target_xml); /* Generate the XML description for this CPU. */ if (!buf[0]) { - GDBRegisterState *r; - pstrcat(buf, buf_sz, "<?xml version=\"1.0\"?>" "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">" @@ -389,28 +385,22 @@ static const char *get_feature_xml(const char *p, const char **newp, pstrcat(buf, buf_sz, "\"/>"); for (r = cpu->gdb_regs; r; r = r->next) { pstrcat(buf, buf_sz, "<xi:include href=\""); - pstrcat(buf, buf_sz, r->feature->xml); + pstrcat(buf, buf_sz, r->feature->xmlname); pstrcat(buf, buf_sz, "\"/>"); } pstrcat(buf, buf_sz, "</target>"); } return buf; } - if (cc->gdb_get_dynamic_xml) { - char *xmlname = g_strndup(p, len); - const char *xml = cc->gdb_get_dynamic_xml(cpu, xmlname); - - g_free(xmlname); - if (xml) { - return xml; - } + if (strncmp(p, cc->gdb_core_feature->xmlname, len) == 0) { + return cc->gdb_core_feature->xml; } - for (i = 0; ; i++) { - name = gdb_features[i].xmlname; - if (!name || (strncmp(name, p, len) == 0 && strlen(name) == len)) - break; + for (r = cpu->gdb_regs; r; r = r->next) { + if (strncmp(p, r->feature->xmlname, len) == 0) { + return r->feature->xml; + } } - return name ? gdb_features[i].xml : NULL; + return NULL; } const GDBFeature *gdb_find_static_feature(const char *xmlname) -- 2.41.0