2009-07-20 Pedro Alves <pedro@codesourcery.com>
* features/gdb-target.dtd (target): Accept an optional 'osabi' element. (osabi): Define element. * features/mips-linux.xml (target): Add an osabi subelement set to GNU/Linux. * regformats/regdat.sh (xmlarch, xmlosabi): New variables. Don't write the architecture into $xmltarget. Store it in $xmlarch. Handle the 'osabi' type. Handle outputting the osabi element of the target description. * regformats/reg-x86-64-linux.dat (osabi): Set to GNU/Linux. * regformats/reg-i386-linux.dat (osabi): Set to GNU/Linux. * target-descriptions.h (tdesc_osabi, set_tdesc_osabi): Declare. * target-descriptions.c (struct target_desc) <osabi>: New field. (tdesc_osabi): New function. (set_tdesc_osabi): New function. * xml-tdesc.c: Include osabi.h. (tdesc_end_osabi): New. (target_children): Parse "osabi" elements. * arch-utils.c (gdbarch_info_fill): Try to get the osabi from the target description if the user didn't override it or it is not extractable from the bfd. If that still fails, fallback to the configured in default. * osabi.h (osabi_from_tdesc_string): Declare. * osabi.c (osabi_from_tdesc_string): New. (gdbarch_lookup_osabi): Return GDB_OSABI_UNKNOWN instead of GDB_OSABI_DEFAULT. * NEWS: Mention that target descriptions can now describe the target OS ABI. 2009-07-20 Pedro Alves <pedro@codesourcery.com> * gdb.texinfo (Target Description Format): Mention the new <osabi> optional element. (subsection OS ABI): New subsection.
This commit is contained in:
parent
a156a29064
commit
08d1664121
15 changed files with 175 additions and 13 deletions
|
@ -1,3 +1,36 @@
|
||||||
|
2009-07-20 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* features/gdb-target.dtd (target): Accept an optional 'osabi'
|
||||||
|
element.
|
||||||
|
(osabi): Define element.
|
||||||
|
* features/mips-linux.xml (target): Add an osabi subelement set to
|
||||||
|
GNU/Linux.
|
||||||
|
* regformats/regdat.sh (xmlarch, xmlosabi): New variables. Don't
|
||||||
|
write the architecture into $xmltarget. Store it in $xmlarch.
|
||||||
|
Handle the 'osabi' type. Handle outputting the osabi element of
|
||||||
|
the target description.
|
||||||
|
* regformats/reg-x86-64-linux.dat (osabi): Set to GNU/Linux.
|
||||||
|
* regformats/reg-i386-linux.dat (osabi): Set to GNU/Linux.
|
||||||
|
|
||||||
|
* target-descriptions.h (tdesc_osabi, set_tdesc_osabi): Declare.
|
||||||
|
* target-descriptions.c (struct target_desc) <osabi>: New field.
|
||||||
|
(tdesc_osabi): New function.
|
||||||
|
(set_tdesc_osabi): New function.
|
||||||
|
* xml-tdesc.c: Include osabi.h.
|
||||||
|
(tdesc_end_osabi): New.
|
||||||
|
(target_children): Parse "osabi" elements.
|
||||||
|
* arch-utils.c (gdbarch_info_fill): Try to get the osabi from the
|
||||||
|
target description if the user didn't override it or it is not
|
||||||
|
extractable from the bfd. If that still fails, fallback to the
|
||||||
|
configured in default.
|
||||||
|
* osabi.h (osabi_from_tdesc_string): Declare.
|
||||||
|
* osabi.c (osabi_from_tdesc_string): New.
|
||||||
|
(gdbarch_lookup_osabi): Return GDB_OSABI_UNKNOWN instead of
|
||||||
|
GDB_OSABI_DEFAULT.
|
||||||
|
|
||||||
|
* NEWS: Mention that target descriptions can now describe the
|
||||||
|
target OS ABI.
|
||||||
|
|
||||||
2009-07-20 Mike Frysinger <vapier@gentoo.org>
|
2009-07-20 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* configure.ac (AC_CHECK_FUNCS): Check for pipe.
|
* configure.ac (AC_CHECK_FUNCS): Check for pipe.
|
||||||
|
|
4
gdb/NEWS
4
gdb/NEWS
|
@ -194,6 +194,10 @@ add new commands to existing prefixes, e.g. "target".
|
||||||
visible changes; see "New commands" and also "Removed commands"
|
visible changes; see "New commands" and also "Removed commands"
|
||||||
below.
|
below.
|
||||||
|
|
||||||
|
* Target descriptions can now describe the target OS ABI. See the
|
||||||
|
"Target Description Format" section in the user manual for more
|
||||||
|
information.
|
||||||
|
|
||||||
* New commands (for set/show, see "New options" below)
|
* New commands (for set/show, see "New options" below)
|
||||||
|
|
||||||
find [/size-char] [/max-count] start-address, end-address|+search-space-size,
|
find [/size-char] [/max-count] start-address, end-address|+search-space-size,
|
||||||
|
|
|
@ -710,8 +710,15 @@ gdbarch_info_fill (struct gdbarch_info *info)
|
||||||
info->byte_order_for_code = info->byte_order;
|
info->byte_order_for_code = info->byte_order;
|
||||||
|
|
||||||
/* "(gdb) set osabi ...". Handled by gdbarch_lookup_osabi. */
|
/* "(gdb) set osabi ...". Handled by gdbarch_lookup_osabi. */
|
||||||
|
/* From the manual override, or from file. */
|
||||||
if (info->osabi == GDB_OSABI_UNINITIALIZED)
|
if (info->osabi == GDB_OSABI_UNINITIALIZED)
|
||||||
info->osabi = gdbarch_lookup_osabi (info->abfd);
|
info->osabi = gdbarch_lookup_osabi (info->abfd);
|
||||||
|
/* From the target. */
|
||||||
|
if (info->osabi == GDB_OSABI_UNKNOWN && info->target_desc != NULL)
|
||||||
|
info->osabi = tdesc_osabi (info->target_desc);
|
||||||
|
/* From the configured default. */
|
||||||
|
if (info->osabi == GDB_OSABI_UNKNOWN)
|
||||||
|
info->osabi = GDB_OSABI_DEFAULT;
|
||||||
|
|
||||||
/* Must have at least filled in the architecture. */
|
/* Must have at least filled in the architecture. */
|
||||||
gdb_assert (info->bfd_arch_info != NULL);
|
gdb_assert (info->bfd_arch_info != NULL);
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2009-07-20 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* gdb.texinfo (Target Description Format): Mention the new <osabi>
|
||||||
|
optional element.
|
||||||
|
(subsection OS ABI): New subsection.
|
||||||
|
|
||||||
2009-07-14 Stan Shebs <stan@codesourcery.com>
|
2009-07-14 Stan Shebs <stan@codesourcery.com>
|
||||||
|
|
||||||
* gdb.texinfo (Tracepoint Conditions): New section.
|
* gdb.texinfo (Tracepoint Conditions): New section.
|
||||||
|
|
|
@ -30781,7 +30781,8 @@ their targets, we also describe the grammar here.
|
||||||
|
|
||||||
Target descriptions can identify the architecture of the remote target
|
Target descriptions can identify the architecture of the remote target
|
||||||
and (for some architectures) provide information about custom register
|
and (for some architectures) provide information about custom register
|
||||||
sets. @value{GDBN} can use this information to autoconfigure for your
|
sets. They can also identify the OS ABI of the remote target.
|
||||||
|
@value{GDBN} can use this information to autoconfigure for your
|
||||||
target, or to warn you if you connect to an unsupported target.
|
target, or to warn you if you connect to an unsupported target.
|
||||||
|
|
||||||
Here is a simple target description:
|
Here is a simple target description:
|
||||||
|
@ -30805,6 +30806,7 @@ are explained further below.
|
||||||
<!DOCTYPE target SYSTEM "gdb-target.dtd">
|
<!DOCTYPE target SYSTEM "gdb-target.dtd">
|
||||||
<target version="1.0">
|
<target version="1.0">
|
||||||
@r{[}@var{architecture}@r{]}
|
@r{[}@var{architecture}@r{]}
|
||||||
|
@r{[}@var{osabi}@r{]}
|
||||||
@r{[}@var{feature}@dots{}@r{]}
|
@r{[}@var{feature}@dots{}@r{]}
|
||||||
</target>
|
</target>
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
@ -30860,6 +30862,21 @@ An @samp{<architecture>} element has this form:
|
||||||
accepted by @code{set architecture} (@pxref{Targets, ,Specifying a
|
accepted by @code{set architecture} (@pxref{Targets, ,Specifying a
|
||||||
Debugging Target}).
|
Debugging Target}).
|
||||||
|
|
||||||
|
@subsection OS ABI
|
||||||
|
@cindex @code{<osabi>}
|
||||||
|
|
||||||
|
This optional field was introduced in @value{GDBN} version 7.0.
|
||||||
|
Previous versions of @value{GDBN} ignore it.
|
||||||
|
|
||||||
|
An @samp{<osabi>} element has this form:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
<osabi>@var{abi-name}</osabi>
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
@var{abi-name} is an OS ABI name from the same selection accepted by
|
||||||
|
@w{@code{set osabi}} (@pxref{ABI, ,Configuring the Current ABI}).
|
||||||
|
|
||||||
@subsection Features
|
@subsection Features
|
||||||
@cindex <feature>
|
@cindex <feature>
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,17 @@
|
||||||
|
|
||||||
<!-- The root element of a GDB target description is <target>. -->
|
<!-- The root element of a GDB target description is <target>. -->
|
||||||
|
|
||||||
<!ELEMENT target (architecture?, feature*)>
|
<!-- The osabi element was added post GDB 6.8. The version wasn't
|
||||||
|
bumped, since older GDBs silently ignore unknown elements. -->
|
||||||
|
|
||||||
|
<!ELEMENT target (architecture?, osabi?, feature*)>
|
||||||
<!ATTLIST target
|
<!ATTLIST target
|
||||||
version CDATA #FIXED "1.0">
|
version CDATA #FIXED "1.0">
|
||||||
|
|
||||||
<!ELEMENT architecture (#PCDATA)>
|
<!ELEMENT architecture (#PCDATA)>
|
||||||
|
|
||||||
|
<!ELEMENT osabi (#PCDATA)>
|
||||||
|
|
||||||
<!ELEMENT feature ((vector | union)*, reg*)>
|
<!ELEMENT feature ((vector | union)*, reg*)>
|
||||||
<!ATTLIST feature
|
<!ATTLIST feature
|
||||||
name ID #REQUIRED>
|
name ID #REQUIRED>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<!DOCTYPE target SYSTEM "gdb-target.dtd">
|
<!DOCTYPE target SYSTEM "gdb-target.dtd">
|
||||||
<target>
|
<target>
|
||||||
<architecture>mips</architecture>
|
<architecture>mips</architecture>
|
||||||
|
<osabi>GNU/Linux</osabi>
|
||||||
<xi:include href="mips-cpu.xml"/>
|
<xi:include href="mips-cpu.xml"/>
|
||||||
<xi:include href="mips-cp0.xml"/>
|
<xi:include href="mips-cp0.xml"/>
|
||||||
<xi:include href="mips-fpu.xml"/>
|
<xi:include href="mips-fpu.xml"/>
|
||||||
|
|
38
gdb/osabi.c
38
gdb/osabi.c
|
@ -87,6 +87,30 @@ gdbarch_osabi_name (enum gdb_osabi osabi)
|
||||||
return gdb_osabi_names[GDB_OSABI_INVALID];
|
return gdb_osabi_names[GDB_OSABI_INVALID];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Lookup the OS ABI corresponding to the specified target description
|
||||||
|
string. */
|
||||||
|
|
||||||
|
enum gdb_osabi
|
||||||
|
osabi_from_tdesc_string (const char *name)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE (gdb_osabi_names); i++)
|
||||||
|
if (strcmp (name, gdb_osabi_names[i]) == 0)
|
||||||
|
{
|
||||||
|
/* See note above: the name table matches the indices assigned
|
||||||
|
to enum gdb_osabi. */
|
||||||
|
enum gdb_osabi osabi = (enum gdb_osabi) i;
|
||||||
|
|
||||||
|
if (osabi == GDB_OSABI_INVALID)
|
||||||
|
return GDB_OSABI_UNKNOWN;
|
||||||
|
else
|
||||||
|
return osabi;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GDB_OSABI_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
/* Handler for a given architecture/OS ABI pair. There should be only
|
/* Handler for a given architecture/OS ABI pair. There should be only
|
||||||
one handler for a given OS ABI each architecture family. */
|
one handler for a given OS ABI each architecture family. */
|
||||||
struct gdb_osabi_handler
|
struct gdb_osabi_handler
|
||||||
|
@ -205,10 +229,11 @@ gdbarch_lookup_osabi (bfd *abfd)
|
||||||
if (user_osabi_state == osabi_user)
|
if (user_osabi_state == osabi_user)
|
||||||
return user_selected_osabi;
|
return user_selected_osabi;
|
||||||
|
|
||||||
/* If we don't have a binary, return the default OS ABI (if set) or
|
/* If we don't have a binary, just return unknown. The caller may
|
||||||
unknown (otherwise). */
|
have other sources the OSABI can be extracted from, e.g., the
|
||||||
|
target description. */
|
||||||
if (abfd == NULL)
|
if (abfd == NULL)
|
||||||
return GDB_OSABI_DEFAULT;
|
return GDB_OSABI_UNKNOWN;
|
||||||
|
|
||||||
match = GDB_OSABI_UNKNOWN;
|
match = GDB_OSABI_UNKNOWN;
|
||||||
match_specific = 0;
|
match_specific = 0;
|
||||||
|
@ -269,12 +294,7 @@ gdbarch_lookup_osabi (bfd *abfd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we didn't find a match, but a default was specified at configure
|
return match;
|
||||||
time, return the default. */
|
|
||||||
if (GDB_OSABI_DEFAULT != GDB_OSABI_UNKNOWN && match == GDB_OSABI_UNKNOWN)
|
|
||||||
return GDB_OSABI_DEFAULT;
|
|
||||||
else
|
|
||||||
return match;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,10 @@ void gdbarch_register_osabi (enum bfd_architecture, unsigned long,
|
||||||
/* Lookup the OS ABI corresponding to the specified BFD. */
|
/* Lookup the OS ABI corresponding to the specified BFD. */
|
||||||
enum gdb_osabi gdbarch_lookup_osabi (bfd *);
|
enum gdb_osabi gdbarch_lookup_osabi (bfd *);
|
||||||
|
|
||||||
|
/* Lookup the OS ABI corresponding to the specified target description
|
||||||
|
string. */
|
||||||
|
enum gdb_osabi osabi_from_tdesc_string (const char *text);
|
||||||
|
|
||||||
/* Initialize the gdbarch for the specified OS ABI variant. */
|
/* Initialize the gdbarch for the specified OS ABI variant. */
|
||||||
void gdbarch_init_osabi (struct gdbarch_info, struct gdbarch *);
|
void gdbarch_init_osabi (struct gdbarch_info, struct gdbarch *);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
name:i386_linux
|
name:i386_linux
|
||||||
xmlarch:i386
|
xmlarch:i386
|
||||||
|
osabi:GNU/Linux
|
||||||
expedite:ebp,esp,eip
|
expedite:ebp,esp,eip
|
||||||
32:eax
|
32:eax
|
||||||
32:ecx
|
32:ecx
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
name:x86_64_linux
|
name:x86_64_linux
|
||||||
xmlarch:i386:x86-64
|
xmlarch:i386:x86-64
|
||||||
|
osabi:GNU/Linux
|
||||||
expedite:rbp,rsp,rip
|
expedite:rbp,rsp,rip
|
||||||
64:rax
|
64:rax
|
||||||
64:rbx
|
64:rbx
|
||||||
|
|
|
@ -128,6 +128,8 @@ offset=0
|
||||||
i=0
|
i=0
|
||||||
name=x
|
name=x
|
||||||
xmltarget=x
|
xmltarget=x
|
||||||
|
xmlarch=x
|
||||||
|
xmlosabi=x
|
||||||
expedite=x
|
expedite=x
|
||||||
exec < $1
|
exec < $1
|
||||||
while do_read
|
while do_read
|
||||||
|
@ -140,7 +142,10 @@ do
|
||||||
xmltarget="${entry}"
|
xmltarget="${entry}"
|
||||||
continue
|
continue
|
||||||
elif test "${type}" = "xmlarch"; then
|
elif test "${type}" = "xmlarch"; then
|
||||||
xmltarget="@<target><architecture>${entry}</architecture></target>"
|
xmlarch="${entry}"
|
||||||
|
continue
|
||||||
|
elif test "${type}" = "osabi"; then
|
||||||
|
xmlosabi="${entry}"
|
||||||
continue
|
continue
|
||||||
elif test "${type}" = "expedite"; then
|
elif test "${type}" = "expedite"; then
|
||||||
expedite="${entry}"
|
expedite="${entry}"
|
||||||
|
@ -159,7 +164,18 @@ echo "};"
|
||||||
echo
|
echo
|
||||||
echo "const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };"
|
echo "const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };"
|
||||||
if test "${xmltarget}" = x; then
|
if test "${xmltarget}" = x; then
|
||||||
echo "const char *xmltarget_${name} = 0;"
|
if test "${xmlarch}" = x && test "${xmlosabi}" = x; then
|
||||||
|
echo "const char *xmltarget_${name} = 0;"
|
||||||
|
else
|
||||||
|
echo "const char *xmltarget_${name} = \"@<target>\\"
|
||||||
|
if test "${xmlarch}" != x; then
|
||||||
|
echo "<architecture>${xmlarch}</architecture>\\"
|
||||||
|
fi
|
||||||
|
if test "${xmlosabi}" != x; then
|
||||||
|
echo "<osabi>${xmlosabi}</osabi>\\"
|
||||||
|
fi
|
||||||
|
echo "</target>\";"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "const char *xmltarget_${name} = \"${xmltarget}\";"
|
echo "const char *xmltarget_${name} = \"${xmltarget}\";"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -165,6 +165,10 @@ struct target_desc
|
||||||
/* The architecture reported by the target, if any. */
|
/* The architecture reported by the target, if any. */
|
||||||
const struct bfd_arch_info *arch;
|
const struct bfd_arch_info *arch;
|
||||||
|
|
||||||
|
/* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN
|
||||||
|
otherwise. */
|
||||||
|
enum gdb_osabi osabi;
|
||||||
|
|
||||||
/* Any architecture-specific properties specified by the target. */
|
/* Any architecture-specific properties specified by the target. */
|
||||||
VEC(property_s) *properties;
|
VEC(property_s) *properties;
|
||||||
|
|
||||||
|
@ -351,6 +355,16 @@ tdesc_architecture (const struct target_desc *target_desc)
|
||||||
{
|
{
|
||||||
return target_desc->arch;
|
return target_desc->arch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the OSABI associated with this target description, or
|
||||||
|
GDB_OSABI_UNKNOWN if no osabi was specified. */
|
||||||
|
|
||||||
|
enum gdb_osabi
|
||||||
|
tdesc_osabi (const struct target_desc *target_desc)
|
||||||
|
{
|
||||||
|
return target_desc->osabi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Return 1 if this target description includes any registers. */
|
/* Return 1 if this target description includes any registers. */
|
||||||
|
@ -1161,6 +1175,12 @@ set_tdesc_architecture (struct target_desc *target_desc,
|
||||||
{
|
{
|
||||||
target_desc->arch = arch;
|
target_desc->arch = arch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
|
||||||
|
{
|
||||||
|
target_desc->osabi = osabi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
|
static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
|
||||||
|
|
|
@ -123,6 +123,11 @@ int tdesc_numbered_register_choices (const struct tdesc_feature *feature,
|
||||||
const struct bfd_arch_info *tdesc_architecture
|
const struct bfd_arch_info *tdesc_architecture
|
||||||
(const struct target_desc *);
|
(const struct target_desc *);
|
||||||
|
|
||||||
|
/* Return the OSABI associated with this target description, or
|
||||||
|
GDB_OSABI_UNKNOWN if no osabi was specified. */
|
||||||
|
|
||||||
|
enum gdb_osabi tdesc_osabi (const struct target_desc *);
|
||||||
|
|
||||||
/* Return the string value of a property named KEY, or NULL if the
|
/* Return the string value of a property named KEY, or NULL if the
|
||||||
property was not specified. */
|
property was not specified. */
|
||||||
|
|
||||||
|
@ -167,6 +172,7 @@ struct target_desc *allocate_target_description (void);
|
||||||
struct cleanup *make_cleanup_free_target_description (struct target_desc *);
|
struct cleanup *make_cleanup_free_target_description (struct target_desc *);
|
||||||
void set_tdesc_architecture (struct target_desc *,
|
void set_tdesc_architecture (struct target_desc *,
|
||||||
const struct bfd_arch_info *);
|
const struct bfd_arch_info *);
|
||||||
|
void set_tdesc_osabi (struct target_desc *, enum gdb_osabi osabi);
|
||||||
void set_tdesc_property (struct target_desc *,
|
void set_tdesc_property (struct target_desc *,
|
||||||
const char *key, const char *value);
|
const char *key, const char *value);
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "target-descriptions.h"
|
#include "target-descriptions.h"
|
||||||
#include "xml-support.h"
|
#include "xml-support.h"
|
||||||
#include "xml-tdesc.h"
|
#include "xml-tdesc.h"
|
||||||
|
#include "osabi.h"
|
||||||
|
|
||||||
#include "filenames.h"
|
#include "filenames.h"
|
||||||
|
|
||||||
|
@ -105,6 +106,24 @@ tdesc_end_arch (struct gdb_xml_parser *parser,
|
||||||
set_tdesc_architecture (data->tdesc, arch);
|
set_tdesc_architecture (data->tdesc, arch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle the end of an <osabi> element and its value. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
tdesc_end_osabi (struct gdb_xml_parser *parser,
|
||||||
|
const struct gdb_xml_element *element,
|
||||||
|
void *user_data, const char *body_text)
|
||||||
|
{
|
||||||
|
struct tdesc_parsing_data *data = user_data;
|
||||||
|
enum gdb_osabi osabi;
|
||||||
|
|
||||||
|
osabi = osabi_from_tdesc_string (body_text);
|
||||||
|
if (osabi == GDB_OSABI_UNKNOWN)
|
||||||
|
warning (_("Target description specified unknown osabi \"%s\""),
|
||||||
|
body_text);
|
||||||
|
else
|
||||||
|
set_tdesc_osabi (data->tdesc, osabi);
|
||||||
|
}
|
||||||
|
|
||||||
/* Handle the start of a <target> element. */
|
/* Handle the start of a <target> element. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -313,6 +332,8 @@ static const struct gdb_xml_attribute target_attributes[] = {
|
||||||
static const struct gdb_xml_element target_children[] = {
|
static const struct gdb_xml_element target_children[] = {
|
||||||
{ "architecture", NULL, NULL, GDB_XML_EF_OPTIONAL,
|
{ "architecture", NULL, NULL, GDB_XML_EF_OPTIONAL,
|
||||||
NULL, tdesc_end_arch },
|
NULL, tdesc_end_arch },
|
||||||
|
{ "osabi", NULL, NULL, GDB_XML_EF_OPTIONAL,
|
||||||
|
NULL, tdesc_end_osabi },
|
||||||
{ "feature", feature_attributes, feature_children,
|
{ "feature", feature_attributes, feature_children,
|
||||||
GDB_XML_EF_OPTIONAL | GDB_XML_EF_REPEATABLE,
|
GDB_XML_EF_OPTIONAL | GDB_XML_EF_REPEATABLE,
|
||||||
tdesc_start_feature, NULL },
|
tdesc_start_feature, NULL },
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue