|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <!-- Copyright (C) 1988-2020 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.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <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">
- <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>
|