diff options
author | David Hildenbrand <dahi@linux.vnet.ibm.com> | 2015-12-03 13:14:41 +0100 |
---|---|---|
committer | Cornelia Huck <cornelia.huck@de.ibm.com> | 2016-01-27 15:34:48 +0100 |
commit | b3820e6ca0c364cfa73c9bc1614d2f303fc74703 (patch) | |
tree | 04d1a72c8689936f800bfcb88ae4f173c9224223 /gdbstub.c | |
parent | 4c6bf79a222934ac9ff0e45fc98ea1c986ed5c67 (diff) | |
download | qemu-b3820e6ca0c364cfa73c9bc1614d2f303fc74703.zip qemu-b3820e6ca0c364cfa73c9bc1614d2f303fc74703.tar.gz qemu-b3820e6ca0c364cfa73c9bc1614d2f303fc74703.tar.bz2 |
gdb: provide the name of the architecture in the target.xml
This patch provides the name of the architecture in the target.xml
if available.
This allows the remote gdb to detect the target architecture on its
own - so there is no need to specify it manually (e.g. if gdb is
started without a binary) using "set arch *arch_name*".
The name of the architecture is provided by a callback that can
be implemented by all architectures. The arm implementation has
special handling for iwmmxt and returns arm otherwise. This can
be extended if necessary.
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
[rework to use a callback]
Message-Id: <1449144881-130935-1-git-send-email-borntraeger@de.ibm.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'gdbstub.c')
-rw-r--r-- | gdbstub.c | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -540,13 +540,20 @@ static const char *get_feature_xml(const char *p, const char **newp, GDBRegisterState *r; CPUState *cpu = first_cpu; - snprintf(target_xml, sizeof(target_xml), - "<?xml version=\"1.0\"?>" - "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">" - "<target>" - "<xi:include href=\"%s\"/>", - cc->gdb_core_xml_file); - + pstrcat(target_xml, sizeof(target_xml), + "<?xml version=\"1.0\"?>" + "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">" + "<target>"); + if (cc->gdb_arch_name) { + gchar *arch = cc->gdb_arch_name(cpu); + pstrcat(target_xml, sizeof(target_xml), "<architecture>"); + pstrcat(target_xml, sizeof(target_xml), arch); + pstrcat(target_xml, sizeof(target_xml), "</architecture>"); + g_free(arch); + } + pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\""); + pstrcat(target_xml, sizeof(target_xml), cc->gdb_core_xml_file); + pstrcat(target_xml, sizeof(target_xml), "\"/>"); for (r = cpu->gdb_regs; r; r = r->next) { pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\""); pstrcat(target_xml, sizeof(target_xml), r->xml); |