diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2015-06-10 18:29:05 +0200 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2015-06-10 18:30:10 +0200 |
commit | 24c05f46059182f0c8768c6ebbb66b4ca3233ecc (patch) | |
tree | ef8c73db66f7c89897309c61234215ae1303d09e | |
parent | 51aad7cc44161ebbd2eea80647391c692ae330ac (diff) | |
download | gdb-24c05f46059182f0c8768c6ebbb66b4ca3233ecc.zip gdb-24c05f46059182f0c8768c6ebbb66b4ca3233ecc.tar.gz gdb-24c05f46059182f0c8768c6ebbb66b4ca3233ecc.tar.bz2 |
Fix gdbserver <library-list> and its #FIXED version="1.0"
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:
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).
gdb/ChangeLog
2015-06-10 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/ChangeLog
2015-06-10 Jan Kratochvil <jan.kratochvil@redhat.com>
* server.c (handle_qxfer_libraries): Set `version' attribute for
<library-list>.
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/gdbserver/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gdbserver/server.c | 2 | ||||
-rw-r--r-- | gdb/solib-target.c | 18 |
4 files changed, 25 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 55b7d4f..83845f4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2015-06-10 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. + 2015-06-10 Gary Benson <gbenson@redhat.com> * NEWS: Announce support for direct access of executable and diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 5c3e44f..5d5f0a4 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2015-06-10 Jan Kratochvil <jan.kratochvil@redhat.com> + + * server.c (handle_qxfer_libraries): Set `version' attribute for + <library-list>. + 2015-06-10 Gary Benson <gbenson@redhat.com> * target.h (struct target_ops) <multifs_open>: New field. diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 70fbefb..01b9c96 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -1291,7 +1291,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_each_inferior_with_data (&all_dlls, emit_dll_description, &p); diff --git a/gdb/solib-target.c b/gdb/solib-target.c index bd8f58a..891e572 100644 --- a/gdb/solib-target.c +++ b/gdb/solib-target.c @@ -146,12 +146,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. */ @@ -210,7 +216,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 } }; |