blob: c3fd3b68ca6216188cd53fba835a6da450ebdd81 [file] [log] [blame]
<html lang="en">
<head>
<title>Library List 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="Remote-Protocol.html#Remote-Protocol" title="Remote Protocol">
<link rel="prev" href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension" title="File-I/O Remote Protocol Extension">
<link rel="next" href="Memory-Map-Format.html#Memory-Map-Format" title="Memory Map Format">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Library-List-Format"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Memory-Map-Format.html#Memory-Map-Format">Memory Map Format</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension">File-I/O Remote Protocol Extension</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Remote-Protocol.html#Remote-Protocol">Remote Protocol</a>
<hr>
</div>
<h3 class="section">D.15 Library List Format</h3>
<p><a name="index-library-list-format_002c-remote-protocol-2531"></a>
On some platforms, a dynamic loader (e.g. <samp><span class="file">ld.so</span></samp>) runs in the
same process as your application to manage libraries. In this case,
<span class="sc">gdb</span> can use the loader's symbol table and normal memory
operations to maintain a list of shared libraries. On other
platforms, the operating system manages loaded libraries.
<span class="sc">gdb</span> can not retrieve the list of currently loaded libraries
through memory operations, so it uses the &lsquo;<samp><span class="samp">qXfer:libraries:read</span></samp>&rsquo;
packet (see <a href="qXfer-library-list-read.html#qXfer-library-list-read">qXfer library list read</a>) instead. The remote stub
queries the target's operating system and reports which libraries
are loaded.
<p>The &lsquo;<samp><span class="samp">qXfer:libraries:read</span></samp>&rsquo; packet returns an XML document which
lists loaded libraries and their offsets. Each library has an
associated name and one or more segment or section base addresses,
which report where the library was loaded in memory.
<p>For the common case of libraries that are fully linked binaries, the
library should have a list of segments. If the target supports
dynamic linking of a relocatable object file, its library XML element
should instead include a list of allocated sections. The segment or
section bases are start addresses, not relocation offsets; they do not
depend on the library's link-time base addresses.
<p><span class="sc">gdb</span> must be linked with the Expat library to support XML
library lists. See <a href="Expat.html#Expat">Expat</a>.
<p>A simple memory map, with one loaded library relocated by a single
offset, looks like this:
<pre class="smallexample"> &lt;library-list&gt;
&lt;library name="/lib/libc.so.6"&gt;
&lt;segment address="0x10000000"/&gt;
&lt;/library&gt;
&lt;/library-list&gt;
</pre>
<p>Another simple memory map, with one loaded library with three
allocated sections (.text, .data, .bss), looks like this:
<pre class="smallexample"> &lt;library-list&gt;
&lt;library name="sharedlib.o"&gt;
&lt;section address="0x10000000"/&gt;
&lt;section address="0x20000000"/&gt;
&lt;section address="0x30000000"/&gt;
&lt;/library&gt;
&lt;/library-list&gt;
</pre>
<p>The format of a library list is described by this DTD:
<pre class="smallexample"> &lt;!-- library-list: Root element with versioning --&gt;
&lt;!ELEMENT library-list (library)*&gt;
&lt;!ATTLIST library-list version CDATA #FIXED "1.0"&gt;
&lt;!ELEMENT library (segment*, section*)&gt;
&lt;!ATTLIST library name CDATA #REQUIRED&gt;
&lt;!ELEMENT segment EMPTY&gt;
&lt;!ATTLIST segment address CDATA #REQUIRED&gt;
&lt;!ELEMENT section EMPTY&gt;
&lt;!ATTLIST section address CDATA #REQUIRED&gt;
</pre>
<p>In addition, segments and section descriptors cannot be mixed within a
single library element, and you must supply at least one segment or
section for each library.
</body></html>