This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch] gdbserver <library-list> and its #FIXED version="1.0"
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Thu, 3 Nov 2011 20:16:40 +0100
- Subject: [patch] gdbserver <library-list> and its #FIXED version="1.0"
Hi,
while reimplementing <library-list/> I found from expat-2.0.1-11.fc15.x86_64:
warning: while parsing target library list (at line 1): Required attribute "version" of <library-list-svr4> not specified
I believe the same bug has to apply for existing FSF gdbserver but I do not
have any <library-list/> platform to test it (I did not try to build MinGW).
features/library-list.dtd:
<!ATTLIST library-list version CDATA #FIXED "1.0">
http://www.xml.com/pub/a/98/10/guide0.html?page=3 says:
#FIXED
In this case, the attribute is not required, but if it occurs, it must
have the specified value.
Which would suggest gdbserver is right but solib-target.c is wrong. One could
also make gdbserver explicit for the version (if those 14 bytes are not of
a concern).
Not going to check it in without a comment/approval.
Thanks,
Jan
gdb/
2011-11-03 Jan Kratochvil <jan.kratochvil@redhat.com>
* solib-target.c (library_list_start_list): Do not dereference
variable version in its initialization. Make the VERSION check handle
NULL.
(library_list_attributes): Make "version" GDB_XML_AF_OPTIONAL.
gdb/gdbserver/
2011-11-03 Jan Kratochvil <jan.kratochvil@redhat.com>
* server.c (handle_qxfer_libraries): Set `version' attribute for
<library-list>.
--- a/gdb/solib-target.c
+++ b/gdb/solib-target.c
@@ -150,12 +150,18 @@ library_list_start_list (struct gdb_xml_parser *parser,
const struct gdb_xml_element *element,
void *user_data, VEC(gdb_xml_value_s) *attributes)
{
- char *version = xml_find_attribute (attributes, "version")->value;
+ struct gdb_xml_value *version = xml_find_attribute (attributes, "version");
- if (strcmp (version, "1.0") != 0)
- gdb_xml_error (parser,
- _("Library list has unsupported version \"%s\""),
- version);
+ /* #FIXED attribute may be omitted, Expat returns NULL in such case. */
+ if (version)
+ {
+ const char *string = version->value;
+
+ if (strcmp (string, "1.0") != 0)
+ gdb_xml_error (parser,
+ _("Library list has unsupported version \"%s\""),
+ version);
+ }
}
/* Discard the constructed library list. */
@@ -214,7 +220,7 @@ static const struct gdb_xml_element library_list_children[] = {
};
static const struct gdb_xml_attribute library_list_attributes[] = {
- { "version", GDB_XML_AF_NONE, NULL, NULL },
+ { "version", GDB_XML_AF_OPTIONAL, NULL, NULL },
{ NULL, GDB_XML_AF_NONE, NULL, NULL }
};
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -952,7 +952,7 @@ handle_qxfer_libraries (const char *annex,
if (document == NULL)
return -1;
- strcpy (document, "<library-list>\n");
+ strcpy (document, "<library-list version=\"1.0\">\n");
p = document + strlen (document);
for (dll_ptr = all_dlls.head; dll_ptr != NULL; dll_ptr = dll_ptr->next)