blob: 6f6b927630eee5b9f45c6a516ce38f5b03b6c2c2 [file] [log] [blame]
<html lang="en">
<head>
<title>Memory Map 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="Library-List-Format.html#Library-List-Format" title="Library List Format">
<link rel="next" href="Thread-List-Format.html#Thread-List-Format" title="Thread List 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="Memory-Map-Format"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Thread-List-Format.html#Thread-List-Format">Thread List Format</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Library-List-Format.html#Library-List-Format">Library List Format</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Remote-Protocol.html#Remote-Protocol">Remote Protocol</a>
<hr>
</div>
<h3 class="section">D.16 Memory Map Format</h3>
<p><a name="index-memory-map-format-2532"></a>
To be able to write into flash memory, <span class="sc">gdb</span> needs to obtain a
memory map from the target. This section describes the format of the
memory map.
<p>The memory map is obtained using the &lsquo;<samp><span class="samp">qXfer:memory-map:read</span></samp>&rsquo;
(see <a href="qXfer-memory-map-read.html#qXfer-memory-map-read">qXfer memory map read</a>) packet and is an XML document that
lists memory regions.
<p><span class="sc">gdb</span> must be linked with the Expat library to support XML
memory maps. See <a href="Expat.html#Expat">Expat</a>.
<p>The top-level structure of the document is shown below:
<pre class="smallexample"> &lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE memory-map
PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
"http://sourceware.org/gdb/gdb-memory-map.dtd"&gt;
&lt;memory-map&gt;
region...
&lt;/memory-map&gt;
</pre>
<p>Each region can be either:
<ul>
<li>A region of RAM starting at <var>addr</var> and extending for <var>length</var>
bytes from there:
<pre class="smallexample"> &lt;memory type="ram" start="<var>addr</var>" length="<var>length</var>"/&gt;
</pre>
<li>A region of read-only memory:
<pre class="smallexample"> &lt;memory type="rom" start="<var>addr</var>" length="<var>length</var>"/&gt;
</pre>
<li>A region of flash memory, with erasure blocks <var>blocksize</var>
bytes in length:
<pre class="smallexample"> &lt;memory type="flash" start="<var>addr</var>" length="<var>length</var>"&gt;
&lt;property name="blocksize"&gt;<var>blocksize</var>&lt;/property&gt;
&lt;/memory&gt;
</pre>
</ul>
<p>Regions must not overlap. <span class="sc">gdb</span> assumes that areas of memory not covered
by the memory map are RAM, and uses the ordinary &lsquo;<samp><span class="samp">M</span></samp>&rsquo; and &lsquo;<samp><span class="samp">X</span></samp>&rsquo;
packets to write to addresses in such ranges.
<p>The formal DTD for memory map format is given below:
<pre class="smallexample"> &lt;!-- ................................................... --&gt;
&lt;!-- Memory Map XML DTD ................................ --&gt;
&lt;!-- File: memory-map.dtd .............................. --&gt;
&lt;!-- .................................... .............. --&gt;
&lt;!-- memory-map.dtd --&gt;
&lt;!-- memory-map: Root element with versioning --&gt;
&lt;!ELEMENT memory-map (memory | property)&gt;
&lt;!ATTLIST memory-map version CDATA #FIXED "1.0.0"&gt;
&lt;!ELEMENT memory (property)&gt;
&lt;!-- memory: Specifies a memory region,
and its type, or device. --&gt;
&lt;!ATTLIST memory type CDATA #REQUIRED
start CDATA #REQUIRED
length CDATA #REQUIRED
device CDATA #IMPLIED&gt;
&lt;!-- property: Generic attribute tag --&gt;
&lt;!ELEMENT property (#PCDATA | property)*&gt;
&lt;!ATTLIST property name CDATA #REQUIRED&gt;
</pre>
</body></html>