toolchain/share/doc/gdb/Target-Description-Format.html

327 lines
17 KiB
HTML

<html lang="en">
<head>
<title>Target Description Format - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Target-Descriptions.html#Target-Descriptions" title="Target Descriptions">
<link rel="prev" href="Retrieving-Descriptions.html#Retrieving-Descriptions" title="Retrieving Descriptions">
<link rel="next" href="Predefined-Target-Types.html#Predefined-Target-Types" title="Predefined Target Types">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="Target-Description-Format"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Predefined-Target-Types.html#Predefined-Target-Types">Predefined Target Types</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Retrieving-Descriptions.html#Retrieving-Descriptions">Retrieving Descriptions</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Target-Descriptions.html#Target-Descriptions">Target Descriptions</a>
<hr>
</div>
<h3 class="section">G.2 Target Description Format</h3>
<p><a name="index-target-descriptions_002c-XML-format-3642"></a>
A target description annex is an <a href="http://www.w3.org/XML/">XML</a>
document which complies with the Document Type Definition provided in
the <span class="sc">gdb</span> sources in <samp><span class="file">gdb/features/gdb-target.dtd</span></samp>. This
means you can use generally available tools like <samp><span class="command">xmllint</span></samp> to
check that your feature descriptions are well-formed and valid.
However, to help people unfamiliar with XML write descriptions for
their targets, we also describe the grammar here.
<p>Target descriptions can identify the architecture of the remote target
and (for some architectures) provide information about custom register
sets. They can also identify the OS ABI of the remote target.
<span class="sc">gdb</span> can use this information to autoconfigure for your
target, or to warn you if you connect to an unsupported target.
<p>Here is a simple target description:
<pre class="smallexample"> &lt;target version="1.0"&gt;
&lt;architecture&gt;i386:x86-64&lt;/architecture&gt;
&lt;/target&gt;
</pre>
<p class="noindent">This minimal description only says that the target uses
the x86-64 architecture.
<p>A target description has the following overall form, with [ ] marking
optional elements and <small class="dots">...</small> marking repeatable elements. The elements
are explained further below.
<pre class="smallexample"> &lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE target SYSTEM "gdb-target.dtd"&gt;
&lt;target version="1.0"&gt;
<span class="roman">[</span><var>architecture</var><span class="roman">]</span>
<span class="roman">[</span><var>osabi</var><span class="roman">]</span>
<span class="roman">[</span><var>compatible</var><span class="roman">]</span>
<span class="roman">[</span><var>feature</var>...<span class="roman">]</span>
&lt;/target&gt;
</pre>
<p class="noindent">The description is generally insensitive to whitespace and line
breaks, under the usual common-sense rules. The XML version
declaration and document type declaration can generally be omitted
(<span class="sc">gdb</span> does not require them), but specifying them may be
useful for XML validation tools. The &lsquo;<samp><span class="samp">version</span></samp>&rsquo; attribute for
&lsquo;<samp><span class="samp">&lt;target&gt;</span></samp>&rsquo; may also be omitted, but we recommend
including it; if future versions of <span class="sc">gdb</span> use an incompatible
revision of <samp><span class="file">gdb-target.dtd</span></samp>, they will detect and report
the version mismatch.
<h4 class="subsection">G.2.1 Inclusion</h4>
<p><a name="index-target-descriptions_002c-inclusion-3643"></a><a name="index-XInclude-3644"></a><a name="index-g_t_003cxi_003ainclude_003e-3645"></a>
It can sometimes be valuable to split a target description up into
several different annexes, either for organizational purposes, or to
share files between different possible target descriptions. You can
divide a description into multiple files by replacing any element of
the target description with an inclusion directive of the form:
<pre class="smallexample"> &lt;xi:include href="<var>document</var>"/&gt;
</pre>
<p class="noindent">When <span class="sc">gdb</span> encounters an element of this form, it will retrieve
the named XML <var>document</var>, and replace the inclusion directive with
the contents of that document. If the current description was read
using &lsquo;<samp><span class="samp">qXfer</span></samp>&rsquo;, then so will be the included document;
<var>document</var> will be interpreted as the name of an annex. If the
current description was read from a file, <span class="sc">gdb</span> will look for
<var>document</var> as a file in the same directory where it found the
original description.
<h4 class="subsection">G.2.2 Architecture</h4>
<p><a name="index-g_t_003carchitecture_003e-3646"></a>
An &lsquo;<samp><span class="samp">&lt;architecture&gt;</span></samp>&rsquo; element has this form:
<pre class="smallexample"> &lt;architecture&gt;<var>arch</var>&lt;/architecture&gt;
</pre>
<p><var>arch</var> is one of the architectures from the set accepted by
<code>set architecture</code> (see <a href="Targets.html#Targets">Specifying a Debugging Target</a>).
<h4 class="subsection">G.2.3 OS ABI</h4>
<p><a name="index-g_t_0040code_007b_003cosabi_003e_007d-3647"></a>
This optional field was introduced in <span class="sc">gdb</span> version 7.0.
Previous versions of <span class="sc">gdb</span> ignore it.
<p>An &lsquo;<samp><span class="samp">&lt;osabi&gt;</span></samp>&rsquo; element has this form:
<pre class="smallexample"> &lt;osabi&gt;<var>abi-name</var>&lt;/osabi&gt;
</pre>
<p><var>abi-name</var> is an OS ABI name from the same selection accepted by
<code>set&nbsp;osabi</code><!-- /@w --> (see <a href="ABI.html#ABI">Configuring the Current ABI</a>).
<h4 class="subsection">G.2.4 Compatible Architecture</h4>
<p><a name="index-g_t_0040code_007b_003ccompatible_003e_007d-3648"></a>
This optional field was introduced in <span class="sc">gdb</span> version 7.0.
Previous versions of <span class="sc">gdb</span> ignore it.
<p>A &lsquo;<samp><span class="samp">&lt;compatible&gt;</span></samp>&rsquo; element has this form:
<pre class="smallexample"> &lt;compatible&gt;<var>arch</var>&lt;/compatible&gt;
</pre>
<p><var>arch</var> is one of the architectures from the set accepted by
<code>set architecture</code> (see <a href="Targets.html#Targets">Specifying a Debugging Target</a>).
<p>A &lsquo;<samp><span class="samp">&lt;compatible&gt;</span></samp>&rsquo; element is used to specify that the target
is able to run binaries in some other than the main target architecture
given by the &lsquo;<samp><span class="samp">&lt;architecture&gt;</span></samp>&rsquo; element. For example, on the
Cell Broadband Engine, the main architecture is <code>powerpc:common</code>
or <code>powerpc:common64</code>, but the system is able to run binaries
in the <code>spu</code> architecture as well. The way to describe this
capability with &lsquo;<samp><span class="samp">&lt;compatible&gt;</span></samp>&rsquo; is as follows:
<pre class="smallexample"> &lt;architecture&gt;powerpc:common&lt;/architecture&gt;
&lt;compatible&gt;spu&lt;/compatible&gt;
</pre>
<h4 class="subsection">G.2.5 Features</h4>
<p><a name="index-g_t_003cfeature_003e-3649"></a>
Each &lsquo;<samp><span class="samp">&lt;feature&gt;</span></samp>&rsquo; describes some logical portion of the target
system. Features are currently used to describe available CPU
registers and the types of their contents. A &lsquo;<samp><span class="samp">&lt;feature&gt;</span></samp>&rsquo; element
has this form:
<pre class="smallexample"> &lt;feature name="<var>name</var>"&gt;
<span class="roman">[</span><var>type</var>...<span class="roman">]</span>
<var>reg</var>...
&lt;/feature&gt;
</pre>
<p class="noindent">Each feature's name should be unique within the description. The name
of a feature does not matter unless <span class="sc">gdb</span> has some special
knowledge of the contents of that feature; if it does, the feature
should have its standard name. See <a href="Standard-Target-Features.html#Standard-Target-Features">Standard Target Features</a>.
<h4 class="subsection">G.2.6 Types</h4>
<p>Any register's value is a collection of bits which <span class="sc">gdb</span> must
interpret. The default interpretation is a two's complement integer,
but other types can be requested by name in the register description.
Some predefined types are provided by <span class="sc">gdb</span> (see <a href="Predefined-Target-Types.html#Predefined-Target-Types">Predefined Target Types</a>), and the description can define additional composite
and enum types.
<p>Each type element must have an &lsquo;<samp><span class="samp">id</span></samp>&rsquo; attribute, which gives
a unique (within the containing &lsquo;<samp><span class="samp">&lt;feature&gt;</span></samp>&rsquo;) name to the type.
Types must be defined before they are used.
<p><a name="index-g_t_003cvector_003e-3650"></a>Some targets offer vector registers, which can be treated as arrays
of scalar elements. These types are written as &lsquo;<samp><span class="samp">&lt;vector&gt;</span></samp>&rsquo; elements,
specifying the array element type, <var>type</var>, and the number of elements,
<var>count</var>:
<pre class="smallexample"> &lt;vector id="<var>id</var>" type="<var>type</var>" count="<var>count</var>"/&gt;
</pre>
<p><a name="index-g_t_003cunion_003e-3651"></a>If a register's value is usefully viewed in multiple ways, define it
with a union type containing the useful representations. The
&lsquo;<samp><span class="samp">&lt;union&gt;</span></samp>&rsquo; element contains one or more &lsquo;<samp><span class="samp">&lt;field&gt;</span></samp>&rsquo; elements,
each of which has a <var>name</var> and a <var>type</var>:
<pre class="smallexample"> &lt;union id="<var>id</var>"&gt;
&lt;field name="<var>name</var>" type="<var>type</var>"/&gt;
...
&lt;/union&gt;
</pre>
<p><a name="index-g_t_003cstruct_003e-3652"></a><a name="index-g_t_003cflags_003e-3653"></a>If a register's value is composed from several separate values, define
it with either a structure type or a flags type.
A flags type may only contain bitfields.
A structure type may either contain only bitfields or contain no bitfields.
If the value contains only bitfields, its total size in bytes must be
specified.
<p>Non-bitfield values have a <var>name</var> and <var>type</var>.
<pre class="smallexample"> &lt;struct id="<var>id</var>"&gt;
&lt;field name="<var>name</var>" type="<var>type</var>"/&gt;
...
&lt;/struct&gt;
</pre>
<p>Both <var>name</var> and <var>type</var> values are required.
No implicit padding is added.
<p>Bitfield values have a <var>name</var>, <var>start</var>, <var>end</var> and <var>type</var>.
<pre class="smallexample"> &lt;struct id="<var>id</var>" size="<var>size</var>"&gt;
&lt;field name="<var>name</var>" start="<var>start</var>" end="<var>end</var>" type="<var>type</var>"/&gt;
...
&lt;/struct&gt;
</pre>
<pre class="smallexample"> &lt;flags id="<var>id</var>" size="<var>size</var>"&gt;
&lt;field name="<var>name</var>" start="<var>start</var>" end="<var>end</var>" type="<var>type</var>"/&gt;
...
&lt;/flags&gt;
</pre>
<p>The <var>name</var> value is required.
Bitfield values may be named with the empty string, &lsquo;<samp><span class="samp">""</span></samp>&rsquo;,
in which case the field is &ldquo;filler&rdquo; and its value is not printed.
Not all bits need to be specified, so &ldquo;filler&rdquo; fields are optional.
<p>The <var>start</var> and <var>end</var> values are required, and <var>type</var>
is optional.
The field's <var>start</var> must be less than or equal to its <var>end</var>,
and zero represents the least significant bit.
<p>The default value of <var>type</var> is <code>bool</code> for single bit fields,
and an unsigned integer otherwise.
<p>Which to choose? Structures or flags?
<p>Registers defined with &lsquo;<samp><span class="samp">flags</span></samp>&rsquo; have these advantages over
defining them with &lsquo;<samp><span class="samp">struct</span></samp>&rsquo;:
<ul>
<li>Arithmetic may be performed on them as if they were integers.
<li>They are printed in a more readable fashion.
</ul>
<p>Registers defined with &lsquo;<samp><span class="samp">struct</span></samp>&rsquo; have one advantage over
defining them with &lsquo;<samp><span class="samp">flags</span></samp>&rsquo;:
<ul>
<li>One can fetch individual fields like in &lsquo;<samp><span class="samp">C</span></samp>&rsquo;.
<pre class="smallexample"> (gdb) print $my_struct_reg.field3
$1 = 42
</pre>
</ul>
<h4 class="subsection">G.2.7 Registers</h4>
<p><a name="index-g_t_003creg_003e-3654"></a>
Each register is represented as an element with this form:
<pre class="smallexample"> &lt;reg name="<var>name</var>"
bitsize="<var>size</var>"
<span class="roman">[</span>regnum="<var>num</var>"<span class="roman">]</span>
<span class="roman">[</span>save-restore="<var>save-restore</var>"<span class="roman">]</span>
<span class="roman">[</span>type="<var>type</var>"<span class="roman">]</span>
<span class="roman">[</span>group="<var>group</var>"<span class="roman">]</span>/&gt;
</pre>
<p class="noindent">The components are as follows:
<dl>
<dt><var>name</var><dd>The register's name; it must be unique within the target description.
<br><dt><var>bitsize</var><dd>The register's size, in bits.
<br><dt><var>regnum</var><dd>The register's number. If omitted, a register's number is one greater
than that of the previous register (either in the current feature or in
a preceding feature); the first register in the target description
defaults to zero. This register number is used to read or write
the register; e.g. it is used in the remote <code>p</code> and <code>P</code>
packets, and registers appear in the <code>g</code> and <code>G</code> packets
in order of increasing register number.
<br><dt><var>save-restore</var><dd>Whether the register should be preserved across inferior function
calls; this must be either <code>yes</code> or <code>no</code>. The default is
<code>yes</code>, which is appropriate for most registers except for
some system control registers; this is not related to the target's
ABI.
<br><dt><var>type</var><dd>The type of the register. It may be a predefined type, a type
defined in the current feature, or one of the special types <code>int</code>
and <code>float</code>. <code>int</code> is an integer type of the correct size
for <var>bitsize</var>, and <code>float</code> is a floating point type (in the
architecture's normal floating point format) of the correct size for
<var>bitsize</var>. The default is <code>int</code>.
<br><dt><var>group</var><dd>The register group to which this register belongs. It can be one of the
standard register groups <code>general</code>, <code>float</code>, <code>vector</code> or an
arbitrary string. Group names should be limited to alphanumeric characters.
If a group name is made up of multiple words the words may be separated by
hyphens; e.g. <code>special-group</code> or <code>ultra-special-group</code>. If no
<var>group</var> is specified, <span class="sc">gdb</span> will not display the register in
<code>info registers</code>.
</dl>
</body></html>