You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
13 KiB
HTML
276 lines
13 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<!-- 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." -->
|
|
<!-- Created by GNU Texinfo 6.4, http://www.gnu.org/software/texinfo/ -->
|
|
<head>
|
|
<title>DJGPP Native (Debugging with GDB)</title>
|
|
|
|
<meta name="description" content="DJGPP Native (Debugging with GDB)">
|
|
<meta name="keywords" content="DJGPP Native (Debugging with GDB)">
|
|
<meta name="resource-type" content="document">
|
|
<meta name="distribution" content="global">
|
|
<meta name="Generator" content="makeinfo">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<link href="index.html#Top" rel="start" title="Top">
|
|
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
|
|
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
|
|
<link href="Native.html#Native" rel="up" title="Native">
|
|
<link href="Cygwin-Native.html#Cygwin-Native" rel="next" title="Cygwin Native">
|
|
<link href="Process-Information.html#Process-Information" rel="prev" title="Process Information">
|
|
<style type="text/css">
|
|
<!--
|
|
a.summary-letter {text-decoration: none}
|
|
blockquote.indentedblock {margin-right: 0em}
|
|
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
|
|
blockquote.smallquotation {font-size: smaller}
|
|
div.display {margin-left: 3.2em}
|
|
div.example {margin-left: 3.2em}
|
|
div.lisp {margin-left: 3.2em}
|
|
div.smalldisplay {margin-left: 3.2em}
|
|
div.smallexample {margin-left: 3.2em}
|
|
div.smalllisp {margin-left: 3.2em}
|
|
kbd {font-style: oblique}
|
|
pre.display {font-family: inherit}
|
|
pre.format {font-family: inherit}
|
|
pre.menu-comment {font-family: serif}
|
|
pre.menu-preformatted {font-family: serif}
|
|
pre.smalldisplay {font-family: inherit; font-size: smaller}
|
|
pre.smallexample {font-size: smaller}
|
|
pre.smallformat {font-family: inherit; font-size: smaller}
|
|
pre.smalllisp {font-size: smaller}
|
|
span.nolinebreak {white-space: nowrap}
|
|
span.roman {font-family: initial; font-weight: normal}
|
|
span.sansserif {font-family: sans-serif; font-weight: normal}
|
|
ul.no-bullet {list-style: none}
|
|
-->
|
|
</style>
|
|
|
|
|
|
</head>
|
|
|
|
<body lang="en">
|
|
<a name="DJGPP-Native"></a>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Cygwin-Native.html#Cygwin-Native" accesskey="n" rel="next">Cygwin Native</a>, Previous: <a href="Process-Information.html#Process-Information" accesskey="p" rel="prev">Process Information</a>, Up: <a href="Native.html#Native" accesskey="u" rel="up">Native</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
<hr>
|
|
<a name="Features-for-Debugging-DJGPP-Programs"></a>
|
|
<h4 class="subsection">21.1.3 Features for Debugging <small>DJGPP</small> Programs</h4>
|
|
<a name="index-DJGPP-debugging"></a>
|
|
<a name="index-native-DJGPP-debugging"></a>
|
|
<a name="index-MS_002dDOS_002dspecific-commands"></a>
|
|
|
|
<a name="index-DPMI"></a>
|
|
<p><small>DJGPP</small> is a port of the <small>GNU</small> development tools to MS-DOS and
|
|
MS-Windows. <small>DJGPP</small> programs are 32-bit protected-mode programs
|
|
that use the <em>DPMI</em> (DOS Protected-Mode Interface) API to run on
|
|
top of real-mode DOS systems and their emulations.
|
|
</p>
|
|
<p><small>GDB</small> supports native debugging of <small>DJGPP</small> programs, and
|
|
defines a few commands specific to the <small>DJGPP</small> port. This
|
|
subsection describes those commands.
|
|
</p>
|
|
<dl compact="compact">
|
|
<dd><a name="index-info-dos"></a>
|
|
</dd>
|
|
<dt><code>info dos</code></dt>
|
|
<dd><p>This is a prefix of <small>DJGPP</small>-specific commands which print
|
|
information about the target system and important OS structures.
|
|
</p>
|
|
<a name="index-sysinfo"></a>
|
|
<a name="index-MS_002dDOS-system-info"></a>
|
|
<a name="index-free-memory-information-_0028MS_002dDOS_0029"></a>
|
|
</dd>
|
|
<dt><code>info dos sysinfo</code></dt>
|
|
<dd><p>This command displays assorted information about the underlying
|
|
platform: the CPU type and features, the OS version and flavor, the
|
|
DPMI version, and the available conventional and DPMI memory.
|
|
</p>
|
|
<a name="index-GDT"></a>
|
|
<a name="index-LDT"></a>
|
|
<a name="index-IDT"></a>
|
|
<a name="index-segment-descriptor-tables"></a>
|
|
<a name="index-descriptor-tables-display"></a>
|
|
</dd>
|
|
<dt><code>info dos gdt</code></dt>
|
|
<dt><code>info dos ldt</code></dt>
|
|
<dt><code>info dos idt</code></dt>
|
|
<dd><p>These 3 commands display entries from, respectively, Global, Local,
|
|
and Interrupt Descriptor Tables (GDT, LDT, and IDT). The descriptor
|
|
tables are data structures which store a descriptor for each segment
|
|
that is currently in use. The segment’s selector is an index into a
|
|
descriptor table; the table entry for that index holds the
|
|
descriptor’s base address and limit, and its attributes and access
|
|
rights.
|
|
</p>
|
|
<p>A typical <small>DJGPP</small> program uses 3 segments: a code segment, a data
|
|
segment (used for both data and the stack), and a DOS segment (which
|
|
allows access to DOS/BIOS data structures and absolute addresses in
|
|
conventional memory). However, the DPMI host will usually define
|
|
additional segments in order to support the DPMI environment.
|
|
</p>
|
|
<a name="index-garbled-pointers"></a>
|
|
<p>These commands allow to display entries from the descriptor tables.
|
|
Without an argument, all entries from the specified table are
|
|
displayed. An argument, which should be an integer expression, means
|
|
display a single entry whose index is given by the argument. For
|
|
example, here’s a convenient way to display information about the
|
|
debugged program’s data segment:
|
|
</p>
|
|
<div class="smallexample">
|
|
<pre class="smallexample"><code>(gdb) info dos ldt $ds</code>
|
|
</pre><pre class="smallexample"><code>0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)</code>
|
|
</pre></div>
|
|
|
|
<p>This comes in handy when you want to see whether a pointer is outside
|
|
the data segment’s limit (i.e. <em>garbled</em>).
|
|
</p>
|
|
<a name="index-page-tables-display-_0028MS_002dDOS_0029"></a>
|
|
</dd>
|
|
<dt><code>info dos pde</code></dt>
|
|
<dt><code>info dos pte</code></dt>
|
|
<dd><p>These two commands display entries from, respectively, the Page
|
|
Directory and the Page Tables. Page Directories and Page Tables are
|
|
data structures which control how virtual memory addresses are mapped
|
|
into physical addresses. A Page Table includes an entry for every
|
|
page of memory that is mapped into the program’s address space; there
|
|
may be several Page Tables, each one holding up to 4096 entries. A
|
|
Page Directory has up to 4096 entries, one each for every Page Table
|
|
that is currently in use.
|
|
</p>
|
|
<p>Without an argument, <kbd>info dos pde</kbd> displays the entire Page
|
|
Directory, and <kbd>info dos pte</kbd> displays all the entries in all of
|
|
the Page Tables. An argument, an integer expression, given to the
|
|
<kbd>info dos pde</kbd> command means display only that entry from the Page
|
|
Directory table. An argument given to the <kbd>info dos pte</kbd> command
|
|
means display entries from a single Page Table, the one pointed to by
|
|
the specified entry in the Page Directory.
|
|
</p>
|
|
<a name="index-direct-memory-access-_0028DMA_0029-on-MS_002dDOS"></a>
|
|
<p>These commands are useful when your program uses <em>DMA</em> (Direct
|
|
Memory Access), which needs physical addresses to program the DMA
|
|
controller.
|
|
</p>
|
|
<p>These commands are supported only with some DPMI servers.
|
|
</p>
|
|
<a name="index-physical-address-from-linear-address"></a>
|
|
</dd>
|
|
<dt><code>info dos address-pte <var>addr</var></code></dt>
|
|
<dd><p>This command displays the Page Table entry for a specified linear
|
|
address. The argument <var>addr</var> is a linear address which should
|
|
already have the appropriate segment’s base address added to it,
|
|
because this command accepts addresses which may belong to <em>any</em>
|
|
segment. For example, here’s how to display the Page Table entry for
|
|
the page where a variable <code>i</code> is stored:
|
|
</p>
|
|
<div class="smallexample">
|
|
<pre class="smallexample"><code>(gdb) info dos address-pte __djgpp_base_address + (char *)&i</code>
|
|
</pre><pre class="smallexample"><code>Page Table entry for address 0x11a00d30:</code>
|
|
</pre><pre class="smallexample"><code>Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30</code>
|
|
</pre></div>
|
|
|
|
<p>This says that <code>i</code> is stored at offset <code>0xd30</code> from the page
|
|
whose physical base address is <code>0x02698000</code>, and shows all the
|
|
attributes of that page.
|
|
</p>
|
|
<p>Note that you must cast the addresses of variables to a <code>char *</code>,
|
|
since otherwise the value of <code>__djgpp_base_address</code>, the base
|
|
address of all variables and functions in a <small>DJGPP</small> program, will
|
|
be added using the rules of C pointer arithmetics: if <code>i</code> is
|
|
declared an <code>int</code>, <small>GDB</small> will add 4 times the value of
|
|
<code>__djgpp_base_address</code> to the address of <code>i</code>.
|
|
</p>
|
|
<p>Here’s another example, it displays the Page Table entry for the
|
|
transfer buffer:
|
|
</p>
|
|
<div class="smallexample">
|
|
<pre class="smallexample"><code>(gdb) info dos address-pte *((unsigned *)&_go32_info_block + 3)</code>
|
|
</pre><pre class="smallexample"><code>Page Table entry for address 0x29110:</code>
|
|
</pre><pre class="smallexample"><code>Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110</code>
|
|
</pre></div>
|
|
|
|
<p>(The <code>+ 3</code> offset is because the transfer buffer’s address is the
|
|
3rd member of the <code>_go32_info_block</code> structure.) The output
|
|
clearly shows that this DPMI server maps the addresses in conventional
|
|
memory 1:1, i.e. the physical (<code>0x00029000</code> + <code>0x110</code>) and
|
|
linear (<code>0x29110</code>) addresses are identical.
|
|
</p>
|
|
<p>This command is supported only with some DPMI servers.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
<a name="index-DOS-serial-data-link_002c-remote-debugging"></a>
|
|
<p>In addition to native debugging, the DJGPP port supports remote
|
|
debugging via a serial data link. The following commands are specific
|
|
to remote serial debugging in the DJGPP port of <small>GDB</small>.
|
|
</p>
|
|
<dl compact="compact">
|
|
<dd><a name="index-set-com1base"></a>
|
|
<a name="index-set-com1irq"></a>
|
|
<a name="index-set-com2base"></a>
|
|
<a name="index-set-com2irq"></a>
|
|
<a name="index-set-com3base"></a>
|
|
<a name="index-set-com3irq"></a>
|
|
<a name="index-set-com4base"></a>
|
|
<a name="index-set-com4irq"></a>
|
|
</dd>
|
|
<dt><code>set com1base <var>addr</var></code></dt>
|
|
<dd><p>This command sets the base I/O port address of the <samp>COM1</samp> serial
|
|
port.
|
|
</p>
|
|
</dd>
|
|
<dt><code>set com1irq <var>irq</var></code></dt>
|
|
<dd><p>This command sets the <em>Interrupt Request</em> (<code>IRQ</code>) line to use
|
|
for the <samp>COM1</samp> serial port.
|
|
</p>
|
|
<p>There are similar commands ‘<samp>set com2base</samp>’, ‘<samp>set com3irq</samp>’,
|
|
etc. for setting the port address and the <code>IRQ</code> lines for the
|
|
other 3 COM ports.
|
|
</p>
|
|
<a name="index-show-com1base"></a>
|
|
<a name="index-show-com1irq"></a>
|
|
<a name="index-show-com2base"></a>
|
|
<a name="index-show-com2irq"></a>
|
|
<a name="index-show-com3base"></a>
|
|
<a name="index-show-com3irq"></a>
|
|
<a name="index-show-com4base"></a>
|
|
<a name="index-show-com4irq"></a>
|
|
<p>The related commands ‘<samp>show com1base</samp>’, ‘<samp>show com1irq</samp>’ etc.
|
|
display the current settings of the base address and the <code>IRQ</code>
|
|
lines used by the COM ports.
|
|
</p>
|
|
</dd>
|
|
<dt><code>info serial</code></dt>
|
|
<dd><a name="index-info-serial"></a>
|
|
<a name="index-DOS-serial-port-status"></a>
|
|
<p>This command prints the status of the 4 DOS serial ports. For each
|
|
port, it prints whether it’s active or not, its I/O base address and
|
|
IRQ number, whether it uses a 16550-style FIFO, its baudrate, and the
|
|
counts of various errors encountered so far.
|
|
</p></dd>
|
|
</dl>
|
|
|
|
|
|
<hr>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Cygwin-Native.html#Cygwin-Native" accesskey="n" rel="next">Cygwin Native</a>, Previous: <a href="Process-Information.html#Process-Information" accesskey="p" rel="prev">Process Information</a>, Up: <a href="Native.html#Native" accesskey="u" rel="up">Native</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
|
|
</div>
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|