summaryrefslogtreecommitdiff
path: root/gnu/usr.bin
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2004-05-21 20:27:55 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2004-05-21 20:27:55 +0000
commit4b03c1199c66f45ef057b0d5f997136148ae7f75 (patch)
treee81eff3233b4988e019a20a939ed194791d95470 /gnu/usr.bin
parent54c8dbbf02ab898df1251a6323efffebe68c55e0 (diff)
Remove accidentally added .info file.
Diffstat (limited to 'gnu/usr.bin')
-rw-r--r--gnu/usr.bin/binutils/gdb/doc/annotate.info1106
-rw-r--r--gnu/usr.bin/binutils/gdb/doc/gdb.info379
-rw-r--r--gnu/usr.bin/binutils/gdb/doc/gdb.info-17636
-rw-r--r--gnu/usr.bin/binutils/gdb/doc/gdb.info-29133
-rw-r--r--gnu/usr.bin/binutils/gdb/doc/gdb.info-36665
-rw-r--r--gnu/usr.bin/binutils/gdb/doc/gdbint.info7091
-rw-r--r--gnu/usr.bin/binutils/gdb/doc/stabs.info4418
7 files changed, 0 insertions, 36428 deletions
diff --git a/gnu/usr.bin/binutils/gdb/doc/annotate.info b/gnu/usr.bin/binutils/gdb/doc/annotate.info
deleted file mode 100644
index 2cdf1f2894b..00000000000
--- a/gnu/usr.bin/binutils/gdb/doc/annotate.info
+++ /dev/null
@@ -1,1106 +0,0 @@
-This is annotate.info, produced by makeinfo version 4.6 from
-./annotate.texinfo.
-
-INFO-DIR-SECTION Programming & development tools.
-START-INFO-DIR-ENTRY
-* Annotate: (annotate). The obsolete annotation interface.
-END-INFO-DIR-ENTRY
-
- This file documents GDB's obsolete annotations.
-
- Copyright 1994, 1995, 2000, 2001, 2003 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.1 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts. A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
-
-File: annotate.info, Node: Top, Next: Annotations Overview, Up: (dir)
-
-GDB Annotations
-***************
-
-This document describes the obsolete level two annotation interface
-implemented in older GDB versions.
-
-* Menu:
-
-* Annotations Overview:: What annotations are; the general syntax.
-* Limitations:: Limitations of the annotation interface.
-* Migrating to GDB/MI:: Migrating to GDB/MI
-* Server Prefix:: Issuing a command without affecting user state.
-* Value Annotations:: Values are marked as such.
-* Frame Annotations:: Stack frames are annotated.
-* Displays:: GDB can be told to display something periodically.
-* Prompting:: Annotations marking GDB's need for input.
-* Errors:: Annotations for error messages.
-* Breakpoint Info:: Information on breakpoints.
-* Invalidation:: Some annotations describe things now invalid.
-* Annotations for Running::
- Whether the program is running, how it stopped, etc.
-* Source Annotations:: Annotations describing source code.
-
-* GNU Free Documentation License::
-
-
-File: annotate.info, Node: Annotations Overview, Next: Limitations, Prev: Top, Up: Top
-
-What is an Annotation?
-**********************
-
-To produce obsolete level two annotations, start GDB with the
-`--annotate=2' option.
-
- Annotations start with a newline character, two `control-z'
-characters, and the name of the annotation. If there is no additional
-information associated with this annotation, the name of the annotation
-is followed immediately by a newline. If there is additional
-information, the name of the annotation is followed by a space, the
-additional information, and a newline. The additional information
-cannot contain newline characters.
-
- Any output not beginning with a newline and two `control-z'
-characters denotes literal output from GDB. Currently there is no need
-for GDB to output a newline followed by two `control-z' characters, but
-if there was such a need, the annotations could be extended with an
-`escape' annotation which means those three characters as output.
-
- A simple example of starting up GDB with annotations is:
-
- $ gdb --annotate=2
- GNU GDB 5.0
- Copyright 2000 Free Software Foundation, Inc.
- GDB is free software, covered by the GNU General Public License,
- and you are welcome to change it and/or distribute copies of it
- under certain conditions.
- Type "show copying" to see the conditions.
- There is absolutely no warranty for GDB. Type "show warranty"
- for details.
- This GDB was configured as "sparc-sun-sunos4.1.3"
-
- ^Z^Zpre-prompt
- (gdb)
- ^Z^Zprompt
- quit
-
- ^Z^Zpost-prompt
- $
-
- Here `quit' is input to GDB; the rest is output from GDB. The three
-lines beginning `^Z^Z' (where `^Z' denotes a `control-z' character) are
-annotations; the rest is output from GDB.
-
-
-File: annotate.info, Node: Limitations, Next: Migrating to GDB/MI, Prev: Annotations Overview, Up: Top
-
-Limitations of the Annotation Interface
-***************************************
-
-The level two annotations mechanism is known to have a number of
-technical and architectural limitations. As a consequence, in 2001,
-with the release of GDB 5.1 and the addition of GDB/MI, the annotation
-interface was marked as deprecated.
-
- This chapter discusses the known problems.
-
-Dependant on CLI output
-=======================
-
-The annotation interface works by interspersing markups with GDB normal
-command-line interpreter output. Unfortunately, this makes the
-annotation client dependant on not just the annotations, but also the
-CLI output. This is because the client is forced to assume that
-specific GDB commands provide specific information. Any change to
-GDB's CLI output modifies or removes that information and,
-consequently, likely breaks the client.
-
- Since the GDB/MI output is independant of the CLI, it does not have
-this problem.
-
-Scalability
-===========
-
-The annotation interface relies on value annotations (*note Value
-Annotations::) and the display mechanism as a way of obtaining
-up-to-date value information. These mechanisms are not scalable.
-
- In a graphical environment, where many values can be displayed
-simultaneously, a serious performance problem occurs when the client
-tries to first extract from GDB, and then re-display, all those values.
-The client should instead only request and update the values that
-changed.
-
- The GDB/MI Variable Objects provide just that mechanism.
-
-Correctness
-===========
-
-The annotation interface assumes that a variable's value can only be
-changed when the target is running. This assumption is not correct. A
-single assignment to a single variable can result in the entire target,
-and all displayed values, needing an update.
-
- The GDB/MI Variable Objects include a mechanism for efficiently
-reporting such changes.
-
-Reliability
-===========
-
-The GDB/MI interface includes a dedicated test directory
-(`gdb/gdb.mi'), and any addition or fix to GDB/MI must include
-testsuite changes.
-
-Maintainability
-===============
-
-The annotation mechanism was implemented by interspersing CLI print
-statements with various annotations. As a consequence, any CLI output
-change can alter the annotation output.
-
- Since the GDB/MI output is independant of the CLI, and the GDB/MI is
-increasingly implemented independant of the CLI code, its long term
-maintenance is much easier.
-
-
-File: annotate.info, Node: Migrating to GDB/MI, Next: Server Prefix, Prev: Limitations, Up: Top
-
-Migrating to GDB/MI
-*******************
-
-By using the `interp mi' command, it is possible for annotation clients
-to invoke GDB/MI commands, and hence access the GDB/MI. By doing this,
-existing annotation clients have a migration path from this obsolete
-interface to GDB/MI.
-
-
-File: annotate.info, Node: Server Prefix, Next: Value Annotations, Prev: Migrating to GDB/MI, Up: Top
-
-The Server Prefix
-*****************
-
-To issue a command to GDB without affecting certain aspects of the
-state which is seen by users, prefix it with `server '. This means
-that this command will not affect the command history, nor will it
-affect GDB's notion of which command to repeat if <RET> is pressed on a
-line by itself.
-
- The server prefix does not affect the recording of values into the
-value history; to print a value without recording it into the value
-history, use the `output' command instead of the `print' command.
-
-
-File: annotate.info, Node: Value Annotations, Next: Frame Annotations, Prev: Server Prefix, Up: Top
-
-Values
-******
-
-_Value Annotations have been removed. GDB/MI instead provides Variable
-Objects._
-
- When a value is printed in various contexts, GDB uses annotations to
-delimit the value from the surrounding text.
-
- If a value is printed using `print' and added to the value history,
-the annotation looks like
-
- ^Z^Zvalue-history-begin HISTORY-NUMBER VALUE-FLAGS
- HISTORY-STRING
- ^Z^Zvalue-history-value
- THE-VALUE
- ^Z^Zvalue-history-end
-
-where HISTORY-NUMBER is the number it is getting in the value history,
-HISTORY-STRING is a string, such as `$5 = ', which introduces the value
-to the user, THE-VALUE is the output corresponding to the value itself,
-and VALUE-FLAGS is `*' for a value which can be dereferenced and `-'
-for a value which cannot.
-
- If the value is not added to the value history (it is an invalid
-float or it is printed with the `output' command), the annotation is
-similar:
-
- ^Z^Zvalue-begin VALUE-FLAGS
- THE-VALUE
- ^Z^Zvalue-end
-
- When GDB prints an argument to a function (for example, in the output
-from the `backtrace' command), it annotates it as follows:
-
- ^Z^Zarg-begin
- ARGUMENT-NAME
- ^Z^Zarg-name-end
- SEPARATOR-STRING
- ^Z^Zarg-value VALUE-FLAGS
- THE-VALUE
- ^Z^Zarg-end
-
-where ARGUMENT-NAME is the name of the argument, SEPARATOR-STRING is
-text which separates the name from the value for the user's benefit
-(such as `='), and VALUE-FLAGS and THE-VALUE have the same meanings as
-in a `value-history-begin' annotation.
-
- When printing a structure, GDB annotates it as follows:
-
- ^Z^Zfield-begin VALUE-FLAGS
- FIELD-NAME
- ^Z^Zfield-name-end
- SEPARATOR-STRING
- ^Z^Zfield-value
- THE-VALUE
- ^Z^Zfield-end
-
-where FIELD-NAME is the name of the field, SEPARATOR-STRING is text
-which separates the name from the value for the user's benefit (such as
-`='), and VALUE-FLAGS and THE-VALUE have the same meanings as in a
-`value-history-begin' annotation.
-
- When printing an array, GDB annotates it as follows:
-
- ^Z^Zarray-section-begin ARRAY-INDEX VALUE-FLAGS
-
-where ARRAY-INDEX is the index of the first element being annotated and
-VALUE-FLAGS has the same meaning as in a `value-history-begin'
-annotation. This is followed by any number of elements, where is
-element can be either a single element:
-
- `,' WHITESPACE ; omitted for the first element
- THE-VALUE
- ^Z^Zelt
-
- or a repeated element
-
- `,' WHITESPACE ; omitted for the first element
- THE-VALUE
- ^Z^Zelt-rep NUMBER-OF-REPETITIONS
- REPETITION-STRING
- ^Z^Zelt-rep-end
-
- In both cases, THE-VALUE is the output for the value of the element
-and WHITESPACE can contain spaces, tabs, and newlines. In the repeated
-case, NUMBER-OF-REPETITIONS is the number of consecutive array elements
-which contain that value, and REPETITION-STRING is a string which is
-designed to convey to the user that repetition is being depicted.
-
- Once all the array elements have been output, the array annotation is
-ended with
-
- ^Z^Zarray-section-end
-
-
-File: annotate.info, Node: Frame Annotations, Next: Displays, Prev: Value Annotations, Up: Top
-
-Frames
-******
-
-_Value Annotations have been removed. GDB/MI instead provides a number
-of frame commands._
-
- _Frame annotations are no longer available. The GDB/MI provides
-`-stack-list-arguments', `-stack-list-locals', and `-stack-list-frames'
-commands._
-
- Whenever GDB prints a frame, it annotates it. For example, this
-applies to frames printed when GDB stops, output from commands such as
-`backtrace' or `up', etc.
-
- The frame annotation begins with
-
- ^Z^Zframe-begin LEVEL ADDRESS
- LEVEL-STRING
-
-where LEVEL is the number of the frame (0 is the innermost frame, and
-other frames have positive numbers), ADDRESS is the address of the code
-executing in that frame, and LEVEL-STRING is a string designed to
-convey the level to the user. ADDRESS is in the form `0x' followed by
-one or more lowercase hex digits (note that this does not depend on the
-language). The frame ends with
-
- ^Z^Zframe-end
-
- Between these annotations is the main body of the frame, which can
-consist of
-
- * ^Z^Zfunction-call
- FUNCTION-CALL-STRING
-
- where FUNCTION-CALL-STRING is text designed to convey to the user
- that this frame is associated with a function call made by GDB to a
- function in the program being debugged.
-
- * ^Z^Zsignal-handler-caller
- SIGNAL-HANDLER-CALLER-STRING
-
- where SIGNAL-HANDLER-CALLER-STRING is text designed to convey to
- the user that this frame is associated with whatever mechanism is
- used by this operating system to call a signal handler (it is the
- frame which calls the signal handler, not the frame for the signal
- handler itself).
-
- * A normal frame.
-
- This can optionally (depending on whether this is thought of as
- interesting information for the user to see) begin with
-
- ^Z^Zframe-address
- ADDRESS
- ^Z^Zframe-address-end
- SEPARATOR-STRING
-
- where ADDRESS is the address executing in the frame (the same
- address as in the `frame-begin' annotation, but printed in a form
- which is intended for user consumption--in particular, the syntax
- varies depending on the language), and SEPARATOR-STRING is a string
- intended to separate this address from what follows for the user's
- benefit.
-
- Then comes
-
- ^Z^Zframe-function-name
- FUNCTION-NAME
- ^Z^Zframe-args
- ARGUMENTS
-
- where FUNCTION-NAME is the name of the function executing in the
- frame, or `??' if not known, and ARGUMENTS are the arguments to
- the frame, with parentheses around them (each argument is annotated
- individually as well, *note Value Annotations::).
-
- If source information is available, a reference to it is then
- printed:
-
- ^Z^Zframe-source-begin
- SOURCE-INTRO-STRING
- ^Z^Zframe-source-file
- FILENAME
- ^Z^Zframe-source-file-end
- :
- ^Z^Zframe-source-line
- LINE-NUMBER
- ^Z^Zframe-source-end
-
- where SOURCE-INTRO-STRING separates for the user's benefit the
- reference from the text which precedes it, FILENAME is the name of
- the source file, and LINE-NUMBER is the line number within that
- file (the first line is line 1).
-
- If GDB prints some information about where the frame is from (which
- library, which load segment, etc.; currently only done on the
- RS/6000), it is annotated with
-
- ^Z^Zframe-where
- INFORMATION
-
- Then, if source is to actually be displayed for this frame (for
- example, this is not true for output from the `backtrace'
- command), then a `source' annotation (*note Source Annotations::)
- is displayed. Unlike most annotations, this is output instead of
- the normal text which would be output, not in addition.
-
-
-File: annotate.info, Node: Displays, Next: Prompting, Prev: Frame Annotations, Up: Top
-
-Displays
-********
-
-_Display Annotations have been removed. GDB/MI instead provides
-Variable Objects._
-
- When GDB is told to display something using the `display' command,
-the results of the display are annotated:
-
- ^Z^Zdisplay-begin
- NUMBER
- ^Z^Zdisplay-number-end
- NUMBER-SEPARATOR
- ^Z^Zdisplay-format
- FORMAT
- ^Z^Zdisplay-expression
- EXPRESSION
- ^Z^Zdisplay-expression-end
- EXPRESSION-SEPARATOR
- ^Z^Zdisplay-value
- VALUE
- ^Z^Zdisplay-end
-
-where NUMBER is the number of the display, NUMBER-SEPARATOR is intended
-to separate the number from what follows for the user, FORMAT includes
-information such as the size, format, or other information about how
-the value is being displayed, EXPRESSION is the expression being
-displayed, EXPRESSION-SEPARATOR is intended to separate the expression
-from the text that follows for the user, and VALUE is the actual value
-being displayed.
-
-
-File: annotate.info, Node: Prompting, Next: Errors, Prev: Displays, Up: Top
-
-Annotation for GDB Input
-************************
-
-When GDB prompts for input, it annotates this fact so it is possible to
-know when to send output, when the output from a given command is over,
-etc.
-
- Different kinds of input each have a different "input type". Each
-input type has three annotations: a `pre-' annotation, which denotes
-the beginning of any prompt which is being output, a plain annotation,
-which denotes the end of the prompt, and then a `post-' annotation
-which denotes the end of any echo which may (or may not) be associated
-with the input. For example, the `prompt' input type features the
-following annotations:
-
- ^Z^Zpre-prompt
- ^Z^Zprompt
- ^Z^Zpost-prompt
-
- The input types are
-
-`prompt'
- When GDB is prompting for a command (the main GDB prompt).
-
-`commands'
- When GDB prompts for a set of commands, like in the `commands'
- command. The annotations are repeated for each command which is
- input.
-
-`overload-choice'
- When GDB wants the user to select between various overloaded
- functions.
-
-`query'
- When GDB wants the user to confirm a potentially dangerous
- operation.
-
-`prompt-for-continue'
- When GDB is asking the user to press return to continue. Note:
- Don't expect this to work well; instead use `set height 0' to
- disable prompting. This is because the counting of lines is buggy
- in the presence of annotations.
-
-
-File: annotate.info, Node: Errors, Next: Breakpoint Info, Prev: Prompting, Up: Top
-
-Errors
-******
-
- ^Z^Zquit
-
- This annotation occurs right before GDB responds to an interrupt.
-
- ^Z^Zerror
-
- This annotation occurs right before GDB responds to an error.
-
- Quit and error annotations indicate that any annotations which GDB
-was in the middle of may end abruptly. For example, if a
-`value-history-begin' annotation is followed by a `error', one cannot
-expect to receive the matching `value-history-end'. One cannot expect
-not to receive it either, however; an error annotation does not
-necessarily mean that GDB is immediately returning all the way to the
-top level.
-
- A quit or error annotation may be preceded by
-
- ^Z^Zerror-begin
-
- Any output between that and the quit or error annotation is the error
-message.
-
- Warning messages are not yet annotated.
-
-
-File: annotate.info, Node: Breakpoint Info, Next: Invalidation, Prev: Errors, Up: Top
-
-Information on Breakpoints
-**************************
-
-_Breakpoint Annotations have been removed. GDB/MI instead provides
-breakpoint commands._
-
- The output from the `info breakpoints' command is annotated as
-follows:
-
- ^Z^Zbreakpoints-headers
- HEADER-ENTRY
- ^Z^Zbreakpoints-table
-
-where HEADER-ENTRY has the same syntax as an entry (see below) but
-instead of containing data, it contains strings which are intended to
-convey the meaning of each field to the user. This is followed by any
-number of entries. If a field does not apply for this entry, it is
-omitted. Fields may contain trailing whitespace. Each entry consists
-of:
-
- ^Z^Zrecord
- ^Z^Zfield 0
- NUMBER
- ^Z^Zfield 1
- TYPE
- ^Z^Zfield 2
- DISPOSITION
- ^Z^Zfield 3
- ENABLE
- ^Z^Zfield 4
- ADDRESS
- ^Z^Zfield 5
- WHAT
- ^Z^Zfield 6
- FRAME
- ^Z^Zfield 7
- CONDITION
- ^Z^Zfield 8
- IGNORE-COUNT
- ^Z^Zfield 9
- COMMANDS
-
- Note that ADDRESS is intended for user consumption--the syntax
-varies depending on the language.
-
- The output ends with
-
- ^Z^Zbreakpoints-table-end
-
-
-File: annotate.info, Node: Invalidation, Next: Annotations for Running, Prev: Breakpoint Info, Up: Top
-
-Invalidation Notices
-********************
-
-The following annotations say that certain pieces of state may have
-changed.
-
-`^Z^Zframes-invalid'
- The frames (for example, output from the `backtrace' command) may
- have changed.
-
-`^Z^Zbreakpoints-invalid'
- The breakpoints may have changed. For example, the user just
- added or deleted a breakpoint.
-
-
-File: annotate.info, Node: Annotations for Running, Next: Source Annotations, Prev: Invalidation, Up: Top
-
-Running the Program
-*******************
-
-When the program starts executing due to a GDB command such as `step'
-or `continue',
-
- ^Z^Zstarting
-
- is output. When the program stops,
-
- ^Z^Zstopped
-
- is output. Before the `stopped' annotation, a variety of
-annotations describe how the program stopped.
-
-`^Z^Zexited EXIT-STATUS'
- The program exited, and EXIT-STATUS is the exit status (zero for
- successful exit, otherwise nonzero).
-
-`^Z^Zsignalled'
- The program exited with a signal. After the `^Z^Zsignalled', the
- annotation continues:
-
- INTRO-TEXT
- ^Z^Zsignal-name
- NAME
- ^Z^Zsignal-name-end
- MIDDLE-TEXT
- ^Z^Zsignal-string
- STRING
- ^Z^Zsignal-string-end
- END-TEXT
-
- where NAME is the name of the signal, such as `SIGILL' or
- `SIGSEGV', and STRING is the explanation of the signal, such as
- `Illegal Instruction' or `Segmentation fault'. INTRO-TEXT,
- MIDDLE-TEXT, and END-TEXT are for the user's benefit and have no
- particular format.
-
-`^Z^Zsignal'
- The syntax of this annotation is just like `signalled', but GDB is
- just saying that the program received the signal, not that it was
- terminated with it.
-
-`^Z^Zbreakpoint NUMBER'
- The program hit breakpoint number NUMBER.
-
-`^Z^Zwatchpoint NUMBER'
- The program hit watchpoint number NUMBER.
-
-
-File: annotate.info, Node: Source Annotations, Next: GNU Free Documentation License, Prev: Annotations for Running, Up: Top
-
-Displaying Source
-*****************
-
-The following annotation is used instead of displaying source code:
-
- ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
-
- where FILENAME is an absolute file name indicating which source
-file, LINE is the line number within that file (where 1 is the first
-line in the file), CHARACTER is the character position within the file
-(where 0 is the first character in the file) (for most debug formats
-this will necessarily point to the beginning of a line), MIDDLE is
-`middle' if ADDR is in the middle of the line, or `beg' if ADDR is at
-the beginning of the line, and ADDR is the address in the target
-program associated with the source which is being displayed. ADDR is
-in the form `0x' followed by one or more lowercase hex digits (note
-that this does not depend on the language).
-
-
-File: annotate.info, Node: GNU Free Documentation License, Prev: Source Annotations, Up: Top
-
-GNU Free Documentation License
-******************************
-
- Version 1.2, November 2002
- Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 0. PREAMBLE
-
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
-
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
-
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book.
- We recommend this License principally for works whose purpose is
- instruction or reference.
-
- 1. APPLICABILITY AND DEFINITIONS
-
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it
- can be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You
- accept the license if you copy, modify or distribute the work in a
- way requiring permission under copyright law.
-
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
-
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
-
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in
- the notice that says that the Document is released under this
- License. If a section does not fit the above definition of
- Secondary then it is not allowed to be designated as Invariant.
- The Document may contain zero Invariant Sections. If the Document
- does not identify any Invariant Sections then there are none.
-
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
-
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images
- composed of pixels) generic paint programs or (for drawings) some
- widely available drawing editor, and that is suitable for input to
- text formatters or for automatic translation to a variety of
- formats suitable for input to text formatters. A copy made in an
- otherwise Transparent file format whose markup, or absence of
- markup, has been arranged to thwart or discourage subsequent
- modification by readers is not Transparent. An image format is
- not Transparent if used for any substantial amount of text. A
- copy that is not "Transparent" is called "Opaque".
-
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and
- standard-conforming simple HTML, PostScript or PDF designed for
- human modification. Examples of transparent image formats include
- PNG, XCF and JPG. Opaque formats include proprietary formats that
- can be read and edited only by proprietary word processors, SGML or
- XML for which the DTD and/or processing tools are not generally
- available, and the machine-generated HTML, PostScript or PDF
- produced by some word processors for output purposes only.
-
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
-
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
-
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
-
- 2. VERBATIM COPYING
-
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow
- the conditions in section 3.
-
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
-
- 3. COPYING IN QUANTITY
-
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the
- title equally prominent and visible. You may add other material
- on the covers in addition. Copying with changes limited to the
- covers, as long as they preserve the title of the Document and
- satisfy these conditions, can be treated as verbatim copying in
- other respects.
-
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
-
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a
- machine-readable Transparent copy along with each Opaque copy, or
- state in or with each Opaque copy a computer-network location from
- which the general network-using public has access to download
- using public-standard network protocols a complete Transparent
- copy of the Document, free of added material. If you use the
- latter option, you must take reasonably prudent steps, when you
- begin distribution of Opaque copies in quantity, to ensure that
- this Transparent copy will remain thus accessible at the stated
- location until at least one year after the last time you
- distribute an Opaque copy (directly or through your agents or
- retailers) of that edition to the public.
-
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of
- copies, to give them a chance to provide you with an updated
- version of the Document.
-
- 4. MODIFICATIONS
-
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with
- the Modified Version filling the role of the Document, thus
- licensing distribution and modification of the Modified Version to
- whoever possesses a copy of it. In addition, you must do these
- things in the Modified Version:
-
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of
- previous versions (which should, if there were any, be listed
- in the History section of the Document). You may use the
- same title as a previous version if the original publisher of
- that version gives permission.
-
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
-
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
- D. Preserve all the copyright notices of the Document.
-
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
-
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
-
- H. Include an unaltered copy of this License.
-
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on
- the Title Page. If there is no section Entitled "History" in
- the Document, create one stating the title, year, authors,
- and publisher of the Document as given on its Title Page,
- then add an item describing the Modified Version as stated in
- the previous sentence.
-
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in
- the "History" section. You may omit a network location for a
- work that was published at least four years before the
- Document itself, or if the original publisher of the version
- it refers to gives permission.
-
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the
- section all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
-
- L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section
- titles.
-
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
-
- O. Preserve any Warranty Disclaimers.
-
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option
- designate some or all of these sections as invariant. To do this,
- add their titles to the list of Invariant Sections in the Modified
- Version's license notice. These titles must be distinct from any
- other section titles.
-
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
-
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end
- of the list of Cover Texts in the Modified Version. Only one
- passage of Front-Cover Text and one of Back-Cover Text may be
- added by (or through arrangements made by) any one entity. If the
- Document already includes a cover text for the same cover,
- previously added by you or by arrangement made by the same entity
- you are acting on behalf of, you may not add another; but you may
- replace the old one, on explicit permission from the previous
- publisher that added the old one.
-
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
-
- 5. COMBINING DOCUMENTS
-
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination
- all of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
-
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
-
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
-
- 6. COLLECTIONS OF DOCUMENTS
-
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the
- documents in all other respects.
-
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow
- this License in all other respects regarding verbatim copying of
- that document.
-
- 7. AGGREGATION WITH INDEPENDENT WORKS
-
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of
- a storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
-
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
-
- 8. TRANSLATION
-
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
-
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
-
- 9. TERMINATION
-
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided for under this License. Any other
- attempt to copy, modify, sublicense or distribute the Document is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- `http://www.gnu.org/copyleft/'.
-
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If
- the Document does not specify a version number of this License,
- you may choose any version ever published (not as a draft) by the
- Free Software Foundation.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
-
- If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License, to
-permit their use in free software.
-
-
-
-Tag Table:
-Node: Top757
-Node: Annotations Overview1856
-Node: Limitations3661
-Node: Migrating to GDB/MI6202
-Node: Server Prefix6581
-Node: Value Annotations7223
-Node: Frame Annotations10389
-Node: Displays14284
-Node: Prompting15311
-Node: Errors16810
-Node: Breakpoint Info17696
-Node: Invalidation18915
-Node: Annotations for Running19388
-Node: Source Annotations20895
-Node: GNU Free Documentation License21846
-
-End Tag Table
diff --git a/gnu/usr.bin/binutils/gdb/doc/gdb.info b/gnu/usr.bin/binutils/gdb/doc/gdb.info
deleted file mode 100644
index 0040b8618cd..00000000000
--- a/gnu/usr.bin/binutils/gdb/doc/gdb.info
+++ /dev/null
@@ -1,379 +0,0 @@
-This is gdb.info, produced by makeinfo version 4.6 from ./gdb.texinfo.
-
-INFO-DIR-SECTION Programming & development tools.
-START-INFO-DIR-ENTRY
-* Gdb: (gdb). The GNU debugger.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU debugger GDB.
-
- This is the Ninth Edition, of `Debugging with GDB: the GNU
-Source-Level Debugger' for GDB Version 6.1.
-
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
-1998,
-1999, 2000, 2001, 2002, 2003, 2004 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.1 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 Free Software Foundation's Back-Cover Text is: "You have
-freedom to copy and modify this GNU Manual, like GNU software. Copies
-published by the Free Software Foundation raise funds for GNU
-development."
-
-
-Indirect:
-gdb.info-1: 1125
-gdb.info-2: 300353
-gdb.info-3: 599606
-
-Tag Table:
-(Indirect)
-Node: Top1125
-Node: Summary3551
-Node: Free Software5175
-Node: Contributors10743
-Node: Sample Session17197
-Node: Invocation24063
-Node: Invoking GDB24600
-Node: File Options26844
-Node: Mode Options30476
-Ref: Mode Options-Footnote-136344
-Node: Quitting GDB36490
-Node: Shell Commands37373
-Node: Logging output38207
-Node: Commands39041
-Node: Command Syntax39675
-Node: Completion41751
-Node: Help46078
-Node: Running51324
-Node: Compilation52430
-Node: Starting54763
-Node: Arguments57937
-Node: Environment59199
-Node: Working Directory62459
-Node: Input/Output63196
-Node: Attach64798
-Node: Kill Process67226
-Node: Threads68184
-Node: Processes74070
-Node: Stopping77096
-Node: Breakpoints78239
-Node: Set Breaks81506
-Node: Set Watchpoints92848
-Node: Set Catchpoints98924
-Node: Delete Breaks102390
-Node: Disabling104069
-Node: Conditions106753
-Node: Break Commands111689
-Node: Breakpoint Menus114562
-Node: Error in Breakpoints116282
-Node: Breakpoint related warnings117848
-Node: Continuing and Stepping120161
-Node: Signals129366
-Node: Thread Stops133491
-Node: Stack138088
-Node: Frames139559
-Node: Backtrace142279
-Node: Selection144966
-Node: Frame Info147822
-Node: Source150145
-Node: List151145
-Node: Edit154666
-Ref: Edit-Footnote-1156375
-Node: Search156581
-Node: Source Path157381
-Node: Machine Code160195
-Node: Data163187
-Node: Expressions165438
-Node: Variables167398
-Node: Arrays171027
-Node: Output Formats173548
-Ref: Output Formats-Footnote-1175559
-Node: Memory175716
-Node: Auto Display179989
-Node: Print Settings183753
-Node: Value History193845
-Node: Convenience Vars196253
-Node: Registers199236
-Ref: Registers-Footnote-1202929
-Node: Floating Point Hardware203324
-Node: Vector Unit203844
-Node: Auxiliary Vector204221
-Node: Memory Region Attributes205395
-Node: Dump/Restore Files208676
-Node: Character Sets210954
-Node: Macros217756
-Node: Tracepoints224593
-Node: Set Tracepoints226320
-Node: Create and Delete Tracepoints227509
-Node: Enable and Disable Tracepoints229189
-Node: Tracepoint Passcounts229874
-Node: Tracepoint Actions231294
-Node: Listing Tracepoints234300
-Node: Starting and Stopping Trace Experiment235407
-Node: Analyze Collected Data236571
-Node: tfind237866
-Node: tdump242255
-Node: save-tracepoints243920
-Node: Tracepoint Variables244325
-Node: Overlays245335
-Node: How Overlays Work246049
-Ref: A code overlay248604
-Node: Overlay Commands252042
-Node: Automatic Overlay Debugging256218
-Node: Overlay Sample Program258379
-Node: Languages260129
-Node: Setting261286
-Node: Filenames262978
-Node: Manually263701
-Node: Automatically264896
-Node: Show265943
-Node: Checks267238
-Node: Type Checking268594
-Node: Range Checking271289
-Node: Support273652
-Node: C274674
-Node: C Operators275879
-Node: C Constants280242
-Node: C plus plus expressions282711
-Node: C Defaults286236
-Node: C Checks286901
-Node: Debugging C287606
-Node: Debugging C plus plus288108
-Node: Objective-C291094
-Node: Method Names in Commands291399
-Node: The Print Command with Objective-C293096
-Node: Modula-2293729
-Node: M2 Operators294624
-Node: Built-In Func/Proc297593
-Node: M2 Constants300353
-Node: M2 Defaults301939
-Node: Deviations302530
-Node: M2 Checks303613
-Node: M2 Scope304413
-Node: GDB/M2305419
-Node: Unsupported languages306313
-Node: Symbols306981
-Node: Altering318899
-Node: Assignment319862
-Node: Jumping322957
-Node: Signaling325104
-Node: Returning326225
-Node: Calling327417
-Node: Patching327891
-Node: GDB Files328958
-Node: Files329493
-Node: Separate Debug Files347422
-Node: Symbol Errors355757
-Node: Targets359350
-Node: Active Targets360355
-Node: Target Commands361924
-Node: Byte Order366283
-Node: Remote367265
-Node: KOD368185
-Node: Remote Debugging369573
-Node: Connecting370020
-Node: Server373253
-Ref: Server-Footnote-1377276
-Node: NetWare377396
-Node: Remote configuration378859
-Ref: set remote hardware-watchpoint-limit379091
-Ref: set remote hardware-breakpoint-limit379091
-Node: remote stub379317
-Node: Stub Contents382204
-Node: Bootstrapping384301
-Node: Debug Session388096
-Node: Configurations389642
-Node: Native390405
-Node: HP-UX390801
-Node: SVR4 Process Information391080
-Node: DJGPP Native391984
-Node: Cygwin Native397482
-Node: Non-debug DLL symbols399981
-Node: Embedded OS404487
-Node: VxWorks404953
-Node: VxWorks Connection407156
-Node: VxWorks Download408072
-Node: VxWorks Attach409789
-Node: Embedded Processors410169
-Node: ARM411043
-Node: H8/300411388
-Node: Renesas Boards412873
-Node: Renesas ICE417288
-Node: Renesas Special418065
-Node: H8/500418497
-Node: M32R/D418858
-Node: M68K419123
-Node: MIPS Embedded419743
-Node: OpenRISC 1000424234
-Node: PowerPC427073
-Node: PA427388
-Node: SH427654
-Node: Sparclet428099
-Node: Sparclet File429555
-Node: Sparclet Connection430417
-Node: Sparclet Download430877
-Node: Sparclet Execution431908
-Node: Sparclite432481
-Node: ST2000432841
-Node: Z8000434365
-Node: Architectures435718
-Node: A29K436005
-Node: Alpha436817
-Node: MIPS436936
-Node: Controlling GDB437903
-Node: Prompt438658
-Node: Editing439427
-Node: History440193
-Node: Screen Size442923
-Node: Numbers444381
-Node: ABI445766
-Node: Messages/Warnings448590
-Node: Debugging Output450618
-Node: Sequences452874
-Node: Define453449
-Node: Hooks456855
-Node: Command Files459054
-Ref: Command Files-Footnote-1461677
-Ref: Command Files-Footnote-2461805
-Node: Output461914
-Node: Interpreters464318
-Node: TUI466403
-Node: TUI Overview467091
-Node: TUI Keys470166
-Node: TUI Single Key Mode472657
-Node: TUI Commands473495
-Node: TUI Configuration475358
-Node: Emacs476826
-Node: GDB/MI481926
-Node: GDB/MI Command Syntax483537
-Node: GDB/MI Input Syntax483767
-Node: GDB/MI Output Syntax485307
-Node: GDB/MI Simple Examples488742
-Node: GDB/MI Compatibility with CLI489893
-Node: GDB/MI Output Records490614
-Node: GDB/MI Result Records490893
-Node: GDB/MI Stream Records491510
-Node: GDB/MI Out-of-band Records492637
-Node: GDB/MI Command Description Format493130
-Node: GDB/MI Breakpoint Table Commands494098
-Node: GDB/MI Data Manipulation509246
-Node: GDB/MI Program Control528556
-Node: GDB/MI Miscellaneous Commands541153
-Node: GDB/MI Stack Manipulation543529
-Node: GDB/MI Symbol Query551506
-Node: GDB/MI Target Manipulation554787
-Node: GDB/MI Thread Commands561874
-Node: GDB/MI Tracepoint Commands563946
-Node: GDB/MI Variable Objects564180
-Node: Annotations572563
-Node: Annotations Overview573469
-Node: Server Prefix575754
-Node: Prompting576392
-Node: Errors577899
-Node: Invalidation578785
-Node: Annotations for Running579252
-Node: Source Annotations580762
-Node: GDB Bugs581677
-Node: Bug Criteria582397
-Node: Bug Reporting583264
-Node: Command Line Editing590503
-Node: Introduction and Notation591165
-Node: Readline Interaction592775
-Node: Readline Bare Essentials593954
-Node: Readline Movement Commands595727
-Node: Readline Killing Commands596676
-Node: Readline Arguments598578
-Node: Searching599606
-Node: Readline Init File601741
-Node: Readline Init File Syntax602794
-Node: Conditional Init Constructs613672
-Node: Sample Init File616189
-Node: Bindable Readline Commands619365
-Node: Commands For Moving620410
-Node: Commands For History621255
-Node: Commands For Text624109
-Node: Commands For Killing626819
-Node: Numeric Arguments628765
-Node: Commands For Completion629888
-Node: Keyboard Macros631416
-Node: Miscellaneous Commands631971
-Node: Readline vi Mode635316
-Node: Using History Interactively636223
-Node: History Interaction636616
-Node: Event Designators638028
-Node: Word Designators638949
-Node: Modifiers640572
-Node: Formatting Documentation641704
-Ref: Formatting Documentation-Footnote-1645002
-Node: Installing GDB645066
-Node: Separate Objdir648774
-Node: Config Names651624
-Node: Configure Options653061
-Node: Maintenance Commands655390
-Ref: maint info breakpoints655699
-Node: Remote Protocol659644
-Node: Overview659969
-Node: Packets663071
-Ref: read registers packet666089
-Ref: cycle step packet667308
-Ref: write register packet669296
-Ref: general query packet669529
-Ref: step with signal packet670644
-Ref: insert breakpoint or watchpoint packet673212
-Node: Stop Reply Packets676106
-Node: General Query Packets678314
-Node: Register Packet Format686767
-Node: Examples687663
-Node: File-I/O remote protocol extension688280
-Node: File-I/O Overview688764
-Node: Protocol basics690833
-Node: The F request packet693053
-Node: The F reply packet693946
-Node: Memory transfer694861
-Node: The Ctrl-C message695440
-Node: Console I/O697120
-Node: The isatty call698296
-Node: The system call698811
-Node: List of supported calls699800
-Node: open700152
-Node: close702361
-Node: read702731
-Node: write703315
-Node: lseek704041
-Node: rename704859
-Node: unlink706110
-Node: stat/fstat706971
-Node: gettimeofday707791
-Node: isatty708216
-Node: system708545
-Node: Protocol specific representation of datatypes709116
-Node: Integral datatypes709459
-Node: Pointer values710258
-Node: struct stat710955
-Node: struct timeval713347
-Node: Constants713865
-Node: Open flags714296
-Node: mode_t values714637
-Node: Errno values715129
-Node: Lseek flags715937
-Node: Limits716122
-Node: File-I/O Examples716482
-Node: Agent Expressions717576
-Node: General Bytecode Design720475
-Node: Bytecode Descriptions725263
-Node: Using Agent Expressions735941
-Node: Varying Target Capabilities737466
-Node: Tracing on Symmetrix738631
-Node: Rationale744449
-Node: Copying751820
-Node: GNU Free Documentation License771031
-Node: Index793435
-
-End Tag Table
diff --git a/gnu/usr.bin/binutils/gdb/doc/gdb.info-1 b/gnu/usr.bin/binutils/gdb/doc/gdb.info-1
deleted file mode 100644
index 8d383117552..00000000000
--- a/gnu/usr.bin/binutils/gdb/doc/gdb.info-1
+++ /dev/null
@@ -1,7636 +0,0 @@
-This is gdb.info, produced by makeinfo version 4.6 from ./gdb.texinfo.
-
-INFO-DIR-SECTION Programming & development tools.
-START-INFO-DIR-ENTRY
-* Gdb: (gdb). The GNU debugger.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU debugger GDB.
-
- This is the Ninth Edition, of `Debugging with GDB: the GNU
-Source-Level Debugger' for GDB Version 6.1.
-
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
-1998,
-1999, 2000, 2001, 2002, 2003, 2004 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.1 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 Free Software Foundation's Back-Cover Text is: "You have
-freedom to copy and modify this GNU Manual, like GNU software. Copies
-published by the Free Software Foundation raise funds for GNU
-development."
-
-
-File: gdb.info, Node: Top, Next: Summary, Prev: (dir), Up: (dir)
-
-Debugging with GDB
-******************
-
-This file describes GDB, the GNU symbolic debugger.
-
- This is the Ninth Edition, for GDB Version 6.1.
-
- Copyright (C) 1988-2004 Free Software Foundation, Inc.
-
-* Menu:
-
-* Summary:: Summary of GDB
-* Sample Session:: A sample GDB session
-
-* Invocation:: Getting in and out of GDB
-* Commands:: GDB commands
-* Running:: Running programs under GDB
-* Stopping:: Stopping and continuing
-* Stack:: Examining the stack
-* Source:: Examining source files
-* Data:: Examining data
-* Macros:: Preprocessor Macros
-* Tracepoints:: Debugging remote targets non-intrusively
-* Overlays:: Debugging programs that use overlays
-
-* Languages:: Using GDB with different languages
-
-* Symbols:: Examining the symbol table
-* Altering:: Altering execution
-* GDB Files:: GDB files
-* Targets:: Specifying a debugging target
-* Remote Debugging:: Debugging remote programs
-* Configurations:: Configuration-specific information
-* Controlling GDB:: Controlling GDB
-* Sequences:: Canned sequences of commands
-* TUI:: GDB Text User Interface
-* Interpreters:: Command Interpreters
-* Emacs:: Using GDB under GNU Emacs
-* Annotations:: GDB's annotation interface.
-* GDB/MI:: GDB's Machine Interface.
-
-* GDB Bugs:: Reporting bugs in GDB
-* Formatting Documentation:: How to format and print GDB documentation
-
-* Command Line Editing:: Command Line Editing
-* Using History Interactively:: Using History Interactively
-* Installing GDB:: Installing GDB
-* Maintenance Commands:: Maintenance Commands
-* Remote Protocol:: GDB Remote Serial Protocol
-* Agent Expressions:: The GDB Agent Expression Mechanism
-* Copying:: GNU General Public License says
- how you can copy and share GDB
-* GNU Free Documentation License:: The license for this documentation
-* Index:: Index
-
-
-File: gdb.info, Node: Summary, Next: Sample Session, Prev: Top, Up: Top
-
-Summary of GDB
-**************
-
-The purpose of a debugger such as GDB is to allow you to see what is
-going on "inside" another program while it executes--or what another
-program was doing at the moment it crashed.
-
- GDB can do four main kinds of things (plus other things in support of
-these) to help you catch bugs in the act:
-
- * Start your program, specifying anything that might affect its
- behavior.
-
- * Make your program stop on specified conditions.
-
- * Examine what has happened, when your program has stopped.
-
- * Change things in your program, so you can experiment with
- correcting the effects of one bug and go on to learn about another.
-
- You can use GDB to debug programs written in C and C++. For more
-information, see *Note Supported languages: Support. For more
-information, see *Note C and C++: C.
-
- Support for Modula-2 is partial. For information on Modula-2, see
-*Note Modula-2: Modula-2.
-
- Debugging Pascal programs which use sets, subranges, file variables,
-or nested functions does not currently work. GDB does not support
-entering expressions, printing values, or similar features using Pascal
-syntax.
-
- GDB can be used to debug programs written in Fortran, although it
-may be necessary to refer to some variables with a trailing underscore.
-
- GDB can be used to debug programs written in Objective-C, using
-either the Apple/NeXT or the GNU Objective-C runtime.
-
-* Menu:
-
-* Free Software:: Freely redistributable software
-* Contributors:: Contributors to GDB
-
-
-File: gdb.info, Node: Free Software, Next: Contributors, Up: Summary
-
-Free software
-=============
-
-GDB is "free software", protected by the GNU General Public License
-(GPL). The GPL gives you the freedom to copy or adapt a licensed
-program--but every person getting a copy also gets with it the freedom
-to modify that copy (which means that they must get access to the
-source code), and the freedom to distribute further copies. Typical
-software companies use copyrights to limit your freedoms; the Free
-Software Foundation uses the GPL to preserve these freedoms.
-
- Fundamentally, the General Public License is a license which says
-that you have these freedoms and that you cannot take these freedoms
-away from anyone else.
-
-Free Software Needs Free Documentation
-======================================
-
-The biggest deficiency in the free software community today is not in
-the software--it is the lack of good free documentation that we can
-include with the free software. Many of our most important programs do
-not come with free reference manuals and free introductory texts.
-Documentation is an essential part of any software package; when an
-important free software package does not come with a free manual and a
-free tutorial, that is a major gap. We have many such gaps today.
-
- Consider Perl, for instance. The tutorial manuals that people
-normally use are non-free. How did this come about? Because the
-authors of those manuals published them with restrictive terms--no
-copying, no modification, source files not available--which exclude
-them from the free software world.
-
- That wasn't the first time this sort of thing happened, and it was
-far from the last. Many times we have heard a GNU user eagerly
-describe a manual that he is writing, his intended contribution to the
-community, only to learn that he had ruined everything by signing a
-publication contract to make it non-free.
-
- Free documentation, like free software, is a matter of freedom, not
-price. The problem with the non-free manual is not that publishers
-charge a price for printed copies--that in itself is fine. (The Free
-Software Foundation sells printed copies of manuals, too.) The problem
-is the restrictions on the use of the manual. Free manuals are
-available in source code form, and give you permission to copy and
-modify. Non-free manuals do not allow this.
-
- The criteria of freedom for a free manual are roughly the same as for
-free software. Redistribution (including the normal kinds of
-commercial redistribution) must be permitted, so that the manual can
-accompany every copy of the program, both on-line and on paper.
-
- Permission for modification of the technical content is crucial too.
-When people modify the software, adding or changing features, if they
-are conscientious they will change the manual too--so they can provide
-accurate and clear documentation for the modified program. A manual
-that leaves you no choice but to write a new manual to document a
-changed version of the program is not really available to our community.
-
- Some kinds of limits on the way modification is handled are
-acceptable. For example, requirements to preserve the original
-author's copyright notice, the distribution terms, or the list of
-authors, are ok. It is also no problem to require modified versions to
-include notice that they were modified. Even entire sections that may
-not be deleted or changed are acceptable, as long as they deal with
-nontechnical topics (like this one). These kinds of restrictions are
-acceptable because they don't obstruct the community's normal use of
-the manual.
-
- However, it must be possible to modify all the _technical_ content
-of the manual, and then distribute the result in all the usual media,
-through all the usual channels. Otherwise, the restrictions obstruct
-the use of the manual, it is not free, and we need another manual to
-replace it.
-
- Please spread the word about this issue. Our community continues to
-lose manuals to proprietary publishing. If we spread the word that
-free software needs free reference manuals and free tutorials, perhaps
-the next person who wants to contribute by writing documentation will
-realize, before it is too late, that only free manuals contribute to
-the free software community.
-
- If you are writing documentation, please insist on publishing it
-under the GNU Free Documentation License or another free documentation
-license. Remember that this decision requires your approval--you don't
-have to let the publisher decide. Some commercial publishers will use
-a free license if you insist, but they will not propose the option; it
-is up to you to raise the issue and say firmly that this is what you
-want. If the publisher you are dealing with refuses, please try other
-publishers. If you're not sure whether a proposed license is free,
-write to <licensing@gnu.org>.
-
- You can encourage commercial publishers to sell more free, copylefted
-manuals and tutorials by buying them, and particularly by buying copies
-from the publishers that paid for their writing or for major
-improvements. Meanwhile, try to avoid buying non-free documentation at
-all. Check the distribution terms of a manual before you buy it, and
-insist that whoever seeks your business must respect your freedom.
-Check the history of the book, and try to reward the publishers that
-have paid or pay the authors to work on it.
-
- The Free Software Foundation maintains a list of free documentation
-published by other publishers, at
-<http://www.fsf.org/doc/other-free-books.html>.
-
-
-File: gdb.info, Node: Contributors, Prev: Free Software, Up: Summary
-
-Contributors to GDB
-===================
-
-Richard Stallman was the original author of GDB, and of many other GNU
-programs. Many others have contributed to its development. This
-section attempts to credit major contributors. One of the virtues of
-free software is that everyone is free to contribute to it; with
-regret, we cannot actually acknowledge everyone here. The file
-`ChangeLog' in the GDB distribution approximates a blow-by-blow account.
-
- Changes much prior to version 2.0 are lost in the mists of time.
-
- _Plea:_ Additions to this section are particularly welcome. If you
- or your friends (or enemies, to be evenhanded) have been unfairly
- omitted from this list, we would like to add your names!
-
- So that they may not regard their many labors as thankless, we
-particularly thank those who shepherded GDB through major releases:
-Andrew Cagney (releases 6.1, 6.0, 5.3, 5.2, 5.1 and 5.0); Jim Blandy
-(release 4.18); Jason Molenda (release 4.17); Stan Shebs (release 4.14);
-Fred Fish (releases 4.16, 4.15, 4.13, 4.12, 4.11, 4.10, and 4.9); Stu
-Grossman and John Gilmore (releases 4.8, 4.7, 4.6, 4.5, and 4.4); John
-Gilmore (releases 4.3, 4.2, 4.1, 4.0, and 3.9); Jim Kingdon (releases
-3.5, 3.4, and 3.3); and Randy Smith (releases 3.2, 3.1, and 3.0).
-
- Richard Stallman, assisted at various times by Peter TerMaat, Chris
-Hanson, and Richard Mlynarik, handled releases through 2.8.
-
- Michael Tiemann is the author of most of the GNU C++ support in GDB,
-with significant additional contributions from Per Bothner and Daniel
-Berlin. James Clark wrote the GNU C++ demangler. Early work on C++
-was by Peter TerMaat (who also did much general update work leading to
-release 3.0).
-
- GDB uses the BFD subroutine library to examine multiple object-file
-formats; BFD was a joint project of David V. Henkel-Wallace, Rich
-Pixley, Steve Chamberlain, and John Gilmore.
-
- David Johnson wrote the original COFF support; Pace Willison did the
-original support for encapsulated COFF.
-
- Brent Benson of Harris Computer Systems contributed DWARF 2 support.
-
- Adam de Boor and Bradley Davis contributed the ISI Optimum V support.
-Per Bothner, Noboyuki Hikichi, and Alessandro Forin contributed MIPS
-support. Jean-Daniel Fekete contributed Sun 386i support. Chris
-Hanson improved the HP9000 support. Noboyuki Hikichi and Tomoyuki
-Hasei contributed Sony/News OS 3 support. David Johnson contributed
-Encore Umax support. Jyrki Kuoppala contributed Altos 3068 support.
-Jeff Law contributed HP PA and SOM support. Keith Packard contributed
-NS32K support. Doug Rabson contributed Acorn Risc Machine support.
-Bob Rusk contributed Harris Nighthawk CX-UX support. Chris Smith
-contributed Convex support (and Fortran debugging). Jonathan Stone
-contributed Pyramid support. Michael Tiemann contributed SPARC support.
-Tim Tucker contributed support for the Gould NP1 and Gould Powernode.
-Pace Willison contributed Intel 386 support. Jay Vosburgh contributed
-Symmetry support. Marko Mlinar contributed OpenRISC 1000 support.
-
- Andreas Schwab contributed M68K GNU/Linux support.
-
- Rich Schaefer and Peter Schauer helped with support of SunOS shared
-libraries.
-
- Jay Fenlason and Roland McGrath ensured that GDB and GAS agree about
-several machine instruction sets.
-
- Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped
-develop remote debugging. Intel Corporation, Wind River Systems, AMD,
-and ARM contributed remote debugging modules for the i960, VxWorks,
-A29K UDI, and RDI targets, respectively.
-
- Brian Fox is the author of the readline libraries providing
-command-line editing and command history.
-
- Andrew Beers of SUNY Buffalo wrote the language-switching code, the
-Modula-2 support, and contributed the Languages chapter of this manual.
-
- Fred Fish wrote most of the support for Unix System Vr4. He also
-enhanced the command-completion support to cover C++ overloaded symbols.
-
- Hitachi America (now Renesas America), Ltd. sponsored the support for
-H8/300, H8/500, and Super-H processors.
-
- NEC sponsored the support for the v850, Vr4xxx, and Vr5xxx
-processors.
-
- Mitsubishi (now Renesas) sponsored the support for D10V, D30V, and
-M32R/D processors.
-
- Toshiba sponsored the support for the TX39 Mips processor.
-
- Matsushita sponsored the support for the MN10200 and MN10300
-processors.
-
- Fujitsu sponsored the support for SPARClite and FR30 processors.
-
- Kung Hsu, Jeff Law, and Rick Sladkey added support for hardware
-watchpoints.
-
- Michael Snyder added support for tracepoints.
-
- Stu Grossman wrote gdbserver.
-
- Jim Kingdon, Peter Schauer, Ian Taylor, and Stu Grossman made nearly
-innumerable bug fixes and cleanups throughout GDB.
-
- The following people at the Hewlett-Packard Company contributed
-support for the PA-RISC 2.0 architecture, HP-UX 10.20, 10.30, and 11.0
-(narrow mode), HP's implementation of kernel threads, HP's aC++
-compiler, and the Text User Interface (nee Terminal User Interface):
-Ben Krepp, Richard Title, John Bishop, Susan Macchia, Kathy Mann,
-Satish Pai, India Paul, Steve Rehrauer, and Elena Zannoni. Kim Haase
-provided HP-specific information in this manual.
-
- DJ Delorie ported GDB to MS-DOS, for the DJGPP project. Robert
-Hoehne made significant contributions to the DJGPP port.
-
- Cygnus Solutions has sponsored GDB maintenance and much of its
-development since 1991. Cygnus engineers who have worked on GDB
-fulltime include Mark Alexander, Jim Blandy, Per Bothner, Kevin
-Buettner, Edith Epstein, Chris Faylor, Fred Fish, Martin Hunt, Jim
-Ingham, John Gilmore, Stu Grossman, Kung Hsu, Jim Kingdon, John Metzler,
-Fernando Nasser, Geoffrey Noer, Dawn Perchik, Rich Pixley, Zdenek
-Radouch, Keith Seitz, Stan Shebs, David Taylor, and Elena Zannoni. In
-addition, Dave Brolley, Ian Carmichael, Steve Chamberlain, Nick Clifton,
-JT Conklin, Stan Cox, DJ Delorie, Ulrich Drepper, Frank Eigler, Doug
-Evans, Sean Fagan, David Henkel-Wallace, Richard Henderson, Jeff
-Holcomb, Jeff Law, Jim Lemke, Tom Lord, Bob Manson, Michael Meissner,
-Jason Merrill, Catherine Moore, Drew Moseley, Ken Raeburn, Gavin
-Romig-Koch, Rob Savoye, Jamie Smith, Mike Stump, Ian Taylor, Angela
-Thomas, Michael Tiemann, Tom Tromey, Ron Unrau, Jim Wilson, and David
-Zuhn have made contributions both large and small.
-
- Jim Blandy added support for preprocessor macros, while working for
-Red Hat.
-
-
-File: gdb.info, Node: Sample Session, Next: Invocation, Prev: Summary, Up: Top
-
-A Sample GDB Session
-********************
-
-You can use this manual at your leisure to read all about GDB.
-However, a handful of commands are enough to get started using the
-debugger. This chapter illustrates those commands.
-
- One of the preliminary versions of GNU `m4' (a generic macro
-processor) exhibits the following bug: sometimes, when we change its
-quote strings from the default, the commands used to capture one macro
-definition within another stop working. In the following short `m4'
-session, we define a macro `foo' which expands to `0000'; we then use
-the `m4' built-in `defn' to define `bar' as the same thing. However,
-when we change the open quote string to `<QUOTE>' and the close quote
-string to `<UNQUOTE>', the same procedure fails to define a new synonym
-`baz':
-
- $ cd gnu/m4
- $ ./m4
- define(foo,0000)
-
- foo
- 0000
- define(bar,defn(`foo'))
-
- bar
- 0000
- changequote(<QUOTE>,<UNQUOTE>)
-
- define(baz,defn(<QUOTE>foo<UNQUOTE>))
- baz
- C-d
- m4: End of input: 0: fatal error: EOF in string
-
-Let us use GDB to try to see what is going on.
-
- $ gdb m4
- GDB is free software and you are welcome to distribute copies
- of it under certain conditions; type "show copying" to see
- the conditions.
- There is absolutely no warranty for GDB; type "show warranty"
- for details.
-
- GDB 6.1, Copyright 1999 Free Software Foundation, Inc...
- (gdb)
-
-GDB reads only enough symbol data to know where to find the rest when
-needed; as a result, the first prompt comes up very quickly. We now
-tell GDB to use a narrower display width than usual, so that examples
-fit in this manual.
-
- (gdb) set width 70
-
-We need to see how the `m4' built-in `changequote' works. Having
-looked at the source, we know the relevant subroutine is
-`m4_changequote', so we set a breakpoint there with the GDB `break'
-command.
-
- (gdb) break m4_changequote
- Breakpoint 1 at 0x62f4: file builtin.c, line 879.
-
-Using the `run' command, we start `m4' running under GDB control; as
-long as control does not reach the `m4_changequote' subroutine, the
-program runs as usual:
-
- (gdb) run
- Starting program: /work/Editorial/gdb/gnu/m4/m4
- define(foo,0000)
-
- foo
- 0000
-
-To trigger the breakpoint, we call `changequote'. GDB suspends
-execution of `m4', displaying information about the context where it
-stops.
-
- changequote(<QUOTE>,<UNQUOTE>)
-
- Breakpoint 1, m4_changequote (argc=3, argv=0x33c70)
- at builtin.c:879
- 879 if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))
-
-Now we use the command `n' (`next') to advance execution to the next
-line of the current function.
-
- (gdb) n
- 882 set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\
- : nil,
-
-`set_quotes' looks like a promising subroutine. We can go into it by
-using the command `s' (`step') instead of `next'. `step' goes to the
-next line to be executed in _any_ subroutine, so it steps into
-`set_quotes'.
-
- (gdb) s
- set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
- at input.c:530
- 530 if (lquote != def_lquote)
-
-The display that shows the subroutine where `m4' is now suspended (and
-its arguments) is called a stack frame display. It shows a summary of
-the stack. We can use the `backtrace' command (which can also be
-spelled `bt'), to see where we are in the stack as a whole: the
-`backtrace' command displays a stack frame for each active subroutine.
-
- (gdb) bt
- #0 set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
- at input.c:530
- #1 0x6344 in m4_changequote (argc=3, argv=0x33c70)
- at builtin.c:882
- #2 0x8174 in expand_macro (sym=0x33320) at macro.c:242
- #3 0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30)
- at macro.c:71
- #4 0x79dc in expand_input () at macro.c:40
- #5 0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195
-
-We step through a few more lines to see what happens. The first two
-times, we can use `s'; the next two times we use `n' to avoid falling
-into the `xstrdup' subroutine.
-
- (gdb) s
- 0x3b5c 532 if (rquote != def_rquote)
- (gdb) s
- 0x3b80 535 lquote = (lq == nil || *lq == '\0') ? \
- def_lquote : xstrdup(lq);
- (gdb) n
- 536 rquote = (rq == nil || *rq == '\0') ? def_rquote\
- : xstrdup(rq);
- (gdb) n
- 538 len_lquote = strlen(rquote);
-
-The last line displayed looks a little odd; we can examine the variables
-`lquote' and `rquote' to see if they are in fact the new left and right
-quotes we specified. We use the command `p' (`print') to see their
-values.
-
- (gdb) p lquote
- $1 = 0x35d40 "<QUOTE>"
- (gdb) p rquote
- $2 = 0x35d50 "<UNQUOTE>"
-
-`lquote' and `rquote' are indeed the new left and right quotes. To
-look at some context, we can display ten lines of source surrounding
-the current line with the `l' (`list') command.
-
- (gdb) l
- 533 xfree(rquote);
- 534
- 535 lquote = (lq == nil || *lq == '\0') ? def_lquote\
- : xstrdup (lq);
- 536 rquote = (rq == nil || *rq == '\0') ? def_rquote\
- : xstrdup (rq);
- 537
- 538 len_lquote = strlen(rquote);
- 539 len_rquote = strlen(lquote);
- 540 }
- 541
- 542 void
-
-Let us step past the two lines that set `len_lquote' and `len_rquote',
-and then examine the values of those variables.
-
- (gdb) n
- 539 len_rquote = strlen(lquote);
- (gdb) n
- 540 }
- (gdb) p len_lquote
- $3 = 9
- (gdb) p len_rquote
- $4 = 7
-
-That certainly looks wrong, assuming `len_lquote' and `len_rquote' are
-meant to be the lengths of `lquote' and `rquote' respectively. We can
-set them to better values using the `p' command, since it can print the
-value of any expression--and that expression can include subroutine
-calls and assignments.
-
- (gdb) p len_lquote=strlen(lquote)
- $5 = 7
- (gdb) p len_rquote=strlen(rquote)
- $6 = 9
-
-Is that enough to fix the problem of using the new quotes with the `m4'
-built-in `defn'? We can allow `m4' to continue executing with the `c'
-(`continue') command, and then try the example that caused trouble
-initially:
-
- (gdb) c
- Continuing.
-
- define(baz,defn(<QUOTE>foo<UNQUOTE>))
-
- baz
- 0000
-
-Success! The new quotes now work just as well as the default ones. The
-problem seems to have been just the two typos defining the wrong
-lengths. We allow `m4' exit by giving it an EOF as input:
-
- C-d
- Program exited normally.
-
-The message `Program exited normally.' is from GDB; it indicates `m4'
-has finished executing. We can end our GDB session with the GDB `quit'
-command.
-
- (gdb) quit
-
-
-File: gdb.info, Node: Invocation, Next: Commands, Prev: Sample Session, Up: Top
-
-Getting In and Out of GDB
-*************************
-
-This chapter discusses how to start GDB, and how to get out of it. The
-essentials are:
- * type `gdb' to start GDB.
-
- * type `quit' or `C-d' to exit.
-
-* Menu:
-
-* Invoking GDB:: How to start GDB
-* Quitting GDB:: How to quit GDB
-* Shell Commands:: How to use shell commands inside GDB
-* Logging output:: How to log GDB's output to a file
-
-
-File: gdb.info, Node: Invoking GDB, Next: Quitting GDB, Up: Invocation
-
-Invoking GDB
-============
-
-Invoke GDB by running the program `gdb'. Once started, GDB reads
-commands from the terminal until you tell it to exit.
-
- You can also run `gdb' with a variety of arguments and options, to
-specify more of your debugging environment at the outset.
-
- The command-line options described here are designed to cover a
-variety of situations; in some environments, some of these options may
-effectively be unavailable.
-
- The most usual way to start GDB is with one argument, specifying an
-executable program:
-
- gdb PROGRAM
-
-You can also start with both an executable program and a core file
-specified:
-
- gdb PROGRAM CORE
-
- You can, instead, specify a process ID as a second argument, if you
-want to debug a running process:
-
- gdb PROGRAM 1234
-
-would attach GDB to process `1234' (unless you also have a file named
-`1234'; GDB does check for a core file first).
-
- Taking advantage of the second command-line argument requires a
-fairly complete operating system; when you use GDB as a remote debugger
-attached to a bare board, there may not be any notion of "process", and
-there is often no way to get a core dump. GDB will warn you if it is
-unable to attach or to read core dumps.
-
- You can optionally have `gdb' pass any arguments after the
-executable file to the inferior using `--args'. This option stops
-option processing.
- gdb --args gcc -O2 -c foo.c
- This will cause `gdb' to debug `gcc', and to set `gcc''s
-command-line arguments (*note Arguments::) to `-O2 -c foo.c'.
-
- You can run `gdb' without printing the front material, which
-describes GDB's non-warranty, by specifying `-silent':
-
- gdb -silent
-
-You can further control how GDB starts up by using command-line
-options. GDB itself can remind you of the options available.
-
-Type
-
- gdb -help
-
-to display all available options and briefly describe their use (`gdb
--h' is a shorter equivalent).
-
- All options and command line arguments you give are processed in
-sequential order. The order makes a difference when the `-x' option is
-used.
-
-* Menu:
-
-* File Options:: Choosing files
-* Mode Options:: Choosing modes
-
-
-File: gdb.info, Node: File Options, Next: Mode Options, Up: Invoking GDB
-
-Choosing files
---------------
-
-When GDB starts, it reads any arguments other than options as
-specifying an executable file and core file (or process ID). This is
-the same as if the arguments were specified by the `-se' and `-c' (or
-`-p' options respectively. (GDB reads the first argument that does not
-have an associated option flag as equivalent to the `-se' option
-followed by that argument; and the second argument that does not have
-an associated option flag, if any, as equivalent to the `-c'/`-p'
-option followed by that argument.) If the second argument begins with
-a decimal digit, GDB will first attempt to attach to it as a process,
-and if that fails, attempt to open it as a corefile. If you have a
-corefile whose name begins with a digit, you can prevent GDB from
-treating it as a pid by prefixing it with `./', eg. `./12345'.
-
- If GDB has not been configured to included core file support, such
-as for most embedded targets, then it will complain about a second
-argument and ignore it.
-
- Many options have both long and short forms; both are shown in the
-following list. GDB also recognizes the long forms if you truncate
-them, so long as enough of the option is present to be unambiguous.
-(If you prefer, you can flag option arguments with `--' rather than
-`-', though we illustrate the more usual convention.)
-
-`-symbols FILE'
-`-s FILE'
- Read symbol table from file FILE.
-
-`-exec FILE'
-`-e FILE'
- Use file FILE as the executable file to execute when appropriate,
- and for examining pure data in conjunction with a core dump.
-
-`-se FILE'
- Read symbol table from file FILE and use it as the executable file.
-
-`-core FILE'
-`-c FILE'
- Use file FILE as a core dump to examine.
-
-`-c NUMBER'
-
-`-pid NUMBER'
-`-p NUMBER'
- Connect to process ID NUMBER, as with the `attach' command. If
- there is no such process, GDB will attempt to open a core file
- named NUMBER.
-
-`-command FILE'
-`-x FILE'
- Execute GDB commands from file FILE. *Note Command files: Command
- Files.
-
-`-directory DIRECTORY'
-`-d DIRECTORY'
- Add DIRECTORY to the path to search for source files.
-
-`-m'
-`-mapped'
- _Warning: this option depends on operating system facilities that
- are not supported on all systems._
- If memory-mapped files are available on your system through the
- `mmap' system call, you can use this option to have GDB write the
- symbols from your program into a reusable file in the current
- directory. If the program you are debugging is called
- `/tmp/fred', the mapped symbol file is `/tmp/fred.syms'. Future
- GDB debugging sessions notice the presence of this file, and can
- quickly map in symbol information from it, rather than reading the
- symbol table from the executable program.
-
- The `.syms' file is specific to the host machine where GDB is run.
- It holds an exact image of the internal GDB symbol table. It
- cannot be shared across multiple host platforms.
-
-`-r'
-`-readnow'
- Read each symbol file's entire symbol table immediately, rather
- than the default, which is to read it incrementally as it is
- needed. This makes startup slower, but makes future operations
- faster.
-
-
- You typically combine the `-mapped' and `-readnow' options in order
-to build a `.syms' file that contains complete symbol information.
-(*Note Commands to specify files: Files, for information on `.syms'
-files.) A simple GDB invocation to do nothing but build a `.syms' file
-for future use is:
-
- gdb -batch -nx -mapped -readnow programname
-
-
-File: gdb.info, Node: Mode Options, Prev: File Options, Up: Invoking GDB
-
-Choosing modes
---------------
-
-You can run GDB in various alternative modes--for example, in batch
-mode or quiet mode.
-
-`-nx'
-`-n'
- Do not execute commands found in any initialization files.
- Normally, GDB executes the commands in these files after all the
- command options and arguments have been processed. *Note Command
- files: Command Files.
-
-`-quiet'
-`-silent'
-`-q'
- "Quiet". Do not print the introductory and copyright messages.
- These messages are also suppressed in batch mode.
-
-`-batch'
- Run in batch mode. Exit with status `0' after processing all the
- command files specified with `-x' (and all commands from
- initialization files, if not inhibited with `-n'). Exit with
- nonzero status if an error occurs in executing the GDB commands in
- the command files.
-
- Batch mode may be useful for running GDB as a filter, for example
- to download and run a program on another computer; in order to
- make this more useful, the message
-
- Program exited normally.
-
- (which is ordinarily issued whenever a program running under GDB
- control terminates) is not issued when running in batch mode.
-
-`-nowindows'
-`-nw'
- "No windows". If GDB comes with a graphical user interface (GUI)
- built in, then this option tells GDB to only use the command-line
- interface. If no GUI is available, this option has no effect.
-
-`-windows'
-`-w'
- If GDB includes a GUI, then this option requires it to be used if
- possible.
-
-`-cd DIRECTORY'
- Run GDB using DIRECTORY as its working directory, instead of the
- current directory.
-
-`-fullname'
-`-f'
- GNU Emacs sets this option when it runs GDB as a subprocess. It
- tells GDB to output the full file name and line number in a
- standard, recognizable fashion each time a stack frame is
- displayed (which includes each time your program stops). This
- recognizable format looks like two `\032' characters, followed by
- the file name, line number and character position separated by
- colons, and a newline. The Emacs-to-GDB interface program uses
- the two `\032' characters as a signal to display the source code
- for the frame.
-
-`-epoch'
- The Epoch Emacs-GDB interface sets this option when it runs GDB as
- a subprocess. It tells GDB to modify its print routines so as to
- allow Epoch to display values of expressions in a separate window.
-
-`-annotate LEVEL'
- This option sets the "annotation level" inside GDB. Its effect is
- identical to using `set annotate LEVEL' (*note Annotations::).
- The annotation LEVEL controls how much information GDB prints
- together with its prompt, values of expressions, source lines, and
- other types of output. Level 0 is the normal, level 1 is for use
- when GDB is run as a subprocess of GNU Emacs, level 3 is the
- maximum annotation suitable for programs that control GDB, and
- level 2 has been deprecated.
-
- The annotation mechanism has largely been superseeded by GDB/MI
- (*note GDB/MI::).
-
-`-async'
- Use the asynchronous event loop for the command-line interface.
- GDB processes all events, such as user keyboard input, via a
- special event loop. This allows GDB to accept and process user
- commands in parallel with the debugged process being run(1), so
- you don't need to wait for control to return to GDB before you
- type the next command. (_Note:_ as of version 5.1, the target
- side of the asynchronous operation is not yet in place, so
- `-async' does not work fully yet.)
-
- When the standard input is connected to a terminal device, GDB
- uses the asynchronous event loop by default, unless disabled by the
- `-noasync' option.
-
-`-noasync'
- Disable the asynchronous event loop for the command-line interface.
-
-`--args'
- Change interpretation of command line so that arguments following
- the executable file are passed as command line arguments to the
- inferior. This option stops option processing.
-
-`-baud BPS'
-`-b BPS'
- Set the line speed (baud rate or bits per second) of any serial
- interface used by GDB for remote debugging.
-
-`-tty DEVICE'
-`-t DEVICE'
- Run using DEVICE for your program's standard input and output.
-
-`-tui'
- Activate the "Text User Interface" when starting. The Text User
- Interface manages several text windows on the terminal, showing
- source, assembly, registers and GDB command outputs (*note GDB
- Text User Interface: TUI.). Alternatively, the Text User
- Interface can be enabled by invoking the program `gdbtui'. Do not
- use this option if you run GDB from Emacs (*note Using GDB under
- GNU Emacs: Emacs.).
-
-`-interpreter INTERP'
- Use the interpreter INTERP for interface with the controlling
- program or device. This option is meant to be set by programs
- which communicate with GDB using it as a back end. *Note Command
- Interpreters: Interpreters.
-
- `--interpreter=mi' (or `--interpreter=mi2') causes GDB to use the
- "GDB/MI interface" (*note The GDB/MI Interface: GDB/MI.) included
- since GDBN version 6.0. The previous GDB/MI interface, included
- in GDB version 5.3 and selected with `--interpreter=mi1', is
- deprecated. Earlier GDB/MI interfaces are no longer supported.
-
-`-write'
- Open the executable and core files for both reading and writing.
- This is equivalent to the `set write on' command inside GDB (*note
- Patching::).
-
-`-statistics'
- This option causes GDB to print statistics about time and memory
- usage after it completes each command and returns to the prompt.
-
-`-version'
- This option causes GDB to print its version number and no-warranty
- blurb, and exit.
-
-
- ---------- Footnotes ----------
-
- (1) GDB built with DJGPP tools for MS-DOS/MS-Windows supports this
-mode of operation, but the event loop is suspended when the debuggee
-runs.
-
-
-File: gdb.info, Node: Quitting GDB, Next: Shell Commands, Prev: Invoking GDB, Up: Invocation
-
-Quitting GDB
-============
-
-`quit [EXPRESSION]'
-`q'
- To exit GDB, use the `quit' command (abbreviated `q'), or type an
- end-of-file character (usually `C-d'). If you do not supply
- EXPRESSION, GDB will terminate normally; otherwise it will
- terminate using the result of EXPRESSION as the error code.
-
- An interrupt (often `C-c') does not exit from GDB, but rather
-terminates the action of any GDB command that is in progress and
-returns to GDB command level. It is safe to type the interrupt
-character at any time because GDB does not allow it to take effect
-until a time when it is safe.
-
- If you have been using GDB to control an attached process or device,
-you can release it with the `detach' command (*note Debugging an
-already-running process: Attach.).
-
-
-File: gdb.info, Node: Shell Commands, Next: Logging output, Prev: Quitting GDB, Up: Invocation
-
-Shell commands
-==============
-
-If you need to execute occasional shell commands during your debugging
-session, there is no need to leave or suspend GDB; you can just use the
-`shell' command.
-
-`shell COMMAND STRING'
- Invoke a standard shell to execute COMMAND STRING. If it exists,
- the environment variable `SHELL' determines which shell to run.
- Otherwise GDB uses the default shell (`/bin/sh' on Unix systems,
- `COMMAND.COM' on MS-DOS, etc.).
-
- The utility `make' is often needed in development environments. You
-do not have to use the `shell' command for this purpose in GDB:
-
-`make MAKE-ARGS'
- Execute the `make' program with the specified arguments. This is
- equivalent to `shell make MAKE-ARGS'.
-
-
-File: gdb.info, Node: Logging output, Prev: Shell Commands, Up: Invocation
-
-Logging output
-==============
-
-You may want to save the output of GDB commands to a file. There are
-several commands to control GDB's logging.
-
-`set logging on'
- Enable logging.
-
-`set logging off'
- Disable logging.
-
-`set logging file FILE'
- Change the name of the current logfile. The default logfile is
- `gdb.txt'.
-
-`set logging overwrite [on|off]'
- By default, GDB will append to the logfile. Set `overwrite' if
- you want `set logging on' to overwrite the logfile instead.
-
-`set logging redirect [on|off]'
- By default, GDB output will go to both the terminal and the
- logfile. Set `redirect' if you want output to go only to the log
- file.
-
-`show logging'
- Show the current values of the logging settings.
-
-
-File: gdb.info, Node: Commands, Next: Running, Prev: Invocation, Up: Top
-
-GDB Commands
-************
-
-You can abbreviate a GDB command to the first few letters of the command
-name, if that abbreviation is unambiguous; and you can repeat certain
-GDB commands by typing just <RET>. You can also use the <TAB> key to
-get GDB to fill out the rest of a word in a command (or to show you the
-alternatives available, if there is more than one possibility).
-
-* Menu:
-
-* Command Syntax:: How to give commands to GDB
-* Completion:: Command completion
-* Help:: How to ask GDB for help
-
-
-File: gdb.info, Node: Command Syntax, Next: Completion, Up: Commands
-
-Command syntax
-==============
-
-A GDB command is a single line of input. There is no limit on how long
-it can be. It starts with a command name, which is followed by
-arguments whose meaning depends on the command name. For example, the
-command `step' accepts an argument which is the number of times to
-step, as in `step 5'. You can also use the `step' command with no
-arguments. Some commands do not allow any arguments.
-
- GDB command names may always be truncated if that abbreviation is
-unambiguous. Other possible command abbreviations are listed in the
-documentation for individual commands. In some cases, even ambiguous
-abbreviations are allowed; for example, `s' is specially defined as
-equivalent to `step' even though there are other commands whose names
-start with `s'. You can test abbreviations by using them as arguments
-to the `help' command.
-
- A blank line as input to GDB (typing just <RET>) means to repeat the
-previous command. Certain commands (for example, `run') will not
-repeat this way; these are commands whose unintentional repetition
-might cause trouble and which you are unlikely to want to repeat.
-
- The `list' and `x' commands, when you repeat them with <RET>,
-construct new arguments rather than repeating exactly as typed. This
-permits easy scanning of source or memory.
-
- GDB can also use <RET> in another way: to partition lengthy output,
-in a way similar to the common utility `more' (*note Screen size:
-Screen Size.). Since it is easy to press one <RET> too many in this
-situation, GDB disables command repetition after any command that
-generates this sort of display.
-
- Any text from a `#' to the end of the line is a comment; it does
-nothing. This is useful mainly in command files (*note Command files:
-Command Files.).
-
- The `C-o' binding is useful for repeating a complex sequence of
-commands. This command accepts the current line, like `RET', and then
-fetches the next line relative to the current line from the history for
-editing.
-
-
-File: gdb.info, Node: Completion, Next: Help, Prev: Command Syntax, Up: Commands
-
-Command completion
-==================
-
-GDB can fill in the rest of a word in a command for you, if there is
-only one possibility; it can also show you what the valid possibilities
-are for the next word in a command, at any time. This works for GDB
-commands, GDB subcommands, and the names of symbols in your program.
-
- Press the <TAB> key whenever you want GDB to fill out the rest of a
-word. If there is only one possibility, GDB fills in the word, and
-waits for you to finish the command (or press <RET> to enter it). For
-example, if you type
-
- (gdb) info bre <TAB>
-
-GDB fills in the rest of the word `breakpoints', since that is the only
-`info' subcommand beginning with `bre':
-
- (gdb) info breakpoints
-
-You can either press <RET> at this point, to run the `info breakpoints'
-command, or backspace and enter something else, if `breakpoints' does
-not look like the command you expected. (If you were sure you wanted
-`info breakpoints' in the first place, you might as well just type
-<RET> immediately after `info bre', to exploit command abbreviations
-rather than command completion).
-
- If there is more than one possibility for the next word when you
-press <TAB>, GDB sounds a bell. You can either supply more characters
-and try again, or just press <TAB> a second time; GDB displays all the
-possible completions for that word. For example, you might want to set
-a breakpoint on a subroutine whose name begins with `make_', but when
-you type `b make_<TAB>' GDB just sounds the bell. Typing <TAB> again
-displays all the function names in your program that begin with those
-characters, for example:
-
- (gdb) b make_ <TAB>
-GDB sounds bell; press <TAB> again, to see:
- make_a_section_from_file make_environ
- make_abs_section make_function_type
- make_blockvector make_pointer_type
- make_cleanup make_reference_type
- make_command make_symbol_completion_list
- (gdb) b make_
-
-After displaying the available possibilities, GDB copies your partial
-input (`b make_' in the example) so you can finish the command.
-
- If you just want to see the list of alternatives in the first place,
-you can press `M-?' rather than pressing <TAB> twice. `M-?' means
-`<META> ?'. You can type this either by holding down a key designated
-as the <META> shift on your keyboard (if there is one) while typing
-`?', or as <ESC> followed by `?'.
-
- Sometimes the string you need, while logically a "word", may contain
-parentheses or other characters that GDB normally excludes from its
-notion of a word. To permit word completion to work in this situation,
-you may enclose words in `'' (single quote marks) in GDB commands.
-
- The most likely situation where you might need this is in typing the
-name of a C++ function. This is because C++ allows function
-overloading (multiple definitions of the same function, distinguished
-by argument type). For example, when you want to set a breakpoint you
-may need to distinguish whether you mean the version of `name' that
-takes an `int' parameter, `name(int)', or the version that takes a
-`float' parameter, `name(float)'. To use the word-completion
-facilities in this situation, type a single quote `'' at the beginning
-of the function name. This alerts GDB that it may need to consider
-more information than usual when you press <TAB> or `M-?' to request
-word completion:
-
- (gdb) b 'bubble( M-?
- bubble(double,double) bubble(int,int)
- (gdb) b 'bubble(
-
- In some cases, GDB can tell that completing a name requires using
-quotes. When this happens, GDB inserts the quote for you (while
-completing as much as it can) if you do not type the quote in the first
-place:
-
- (gdb) b bub <TAB>
-GDB alters your input line to the following, and rings a bell:
- (gdb) b 'bubble(
-
-In general, GDB can tell that a quote is needed (and inserts it) if you
-have not yet started typing the argument list when you ask for
-completion on an overloaded symbol.
-
- For more information about overloaded functions, see *Note C++
-expressions: C plus plus expressions. You can use the command `set
-overload-resolution off' to disable overload resolution; see *Note GDB
-features for C++: Debugging C plus plus.
-
-
-File: gdb.info, Node: Help, Prev: Completion, Up: Commands
-
-Getting help
-============
-
-You can always ask GDB itself for information on its commands, using
-the command `help'.
-
-`help'
-`h'
- You can use `help' (abbreviated `h') with no arguments to display
- a short list of named classes of commands:
-
- (gdb) help
- List of classes of commands:
-
- aliases -- Aliases of other commands
- breakpoints -- Making program stop at certain points
- data -- Examining data
- files -- Specifying and examining files
- internals -- Maintenance commands
- obscure -- Obscure features
- running -- Running the program
- stack -- Examining the stack
- status -- Status inquiries
- support -- Support facilities
- tracepoints -- Tracing of program execution without
-
- stopping the program
- user-defined -- User-defined commands
-
- Type "help" followed by a class name for a list of
- commands in that class.
- Type "help" followed by command name for full
- documentation.
- Command name abbreviations are allowed if unambiguous.
- (gdb)
-
-`help CLASS'
- Using one of the general help classes as an argument, you can get a
- list of the individual commands in that class. For example, here
- is the help display for the class `status':
-
- (gdb) help status
- Status inquiries.
-
- List of commands:
-
- info -- Generic command for showing things
- about the program being debugged
- show -- Generic command for showing things
- about the debugger
-
- Type "help" followed by command name for full
- documentation.
- Command name abbreviations are allowed if unambiguous.
- (gdb)
-
-`help COMMAND'
- With a command name as `help' argument, GDB displays a short
- paragraph on how to use that command.
-
-`apropos ARGS'
- The `apropos ARGS' command searches through all of the GDB
- commands, and their documentation, for the regular expression
- specified in ARGS. It prints out all matches found. For example:
-
- apropos reload
-
- results in:
-
- set symbol-reloading -- Set dynamic symbol table reloading
- multiple times in one run
- show symbol-reloading -- Show dynamic symbol table reloading
- multiple times in one run
-
-`complete ARGS'
- The `complete ARGS' command lists all the possible completions for
- the beginning of a command. Use ARGS to specify the beginning of
- the command you want completed. For example:
-
- complete i
-
- results in:
-
- if
- ignore
- info
- inspect
-
- This is intended for use by GNU Emacs.
-
- In addition to `help', you can use the GDB commands `info' and
-`show' to inquire about the state of your program, or the state of GDB
-itself. Each command supports many topics of inquiry; this manual
-introduces each of them in the appropriate context. The listings under
-`info' and under `show' in the Index point to all the sub-commands.
-*Note Index::.
-
-`info'
- This command (abbreviated `i') is for describing the state of your
- program. For example, you can list the arguments given to your
- program with `info args', list the registers currently in use with
- `info registers', or list the breakpoints you have set with `info
- breakpoints'. You can get a complete list of the `info'
- sub-commands with `help info'.
-
-`set'
- You can assign the result of an expression to an environment
- variable with `set'. For example, you can set the GDB prompt to a
- $-sign with `set prompt $'.
-
-`show'
- In contrast to `info', `show' is for describing the state of GDB
- itself. You can change most of the things you can `show', by
- using the related command `set'; for example, you can control what
- number system is used for displays with `set radix', or simply
- inquire which is currently in use with `show radix'.
-
- To display all the settable parameters and their current values,
- you can use `show' with no arguments; you may also use `info set'.
- Both commands produce the same display.
-
- Here are three miscellaneous `show' subcommands, all of which are
-exceptional in lacking corresponding `set' commands:
-
-`show version'
- Show what version of GDB is running. You should include this
- information in GDB bug-reports. If multiple versions of GDB are
- in use at your site, you may need to determine which version of
- GDB you are running; as GDB evolves, new commands are introduced,
- and old ones may wither away. Also, many system vendors ship
- variant versions of GDB, and there are variant versions of GDB in
- GNU/Linux distributions as well. The version number is the same
- as the one announced when you start GDB.
-
-`show copying'
- Display information about permission for copying GDB.
-
-`show warranty'
- Display the GNU "NO WARRANTY" statement, or a warranty, if your
- version of GDB comes with one.
-
-
-
-File: gdb.info, Node: Running, Next: Stopping, Prev: Commands, Up: Top
-
-Running Programs Under GDB
-**************************
-
-When you run a program under GDB, you must first generate debugging
-information when you compile it.
-
- You may start GDB with its arguments, if any, in an environment of
-your choice. If you are doing native debugging, you may redirect your
-program's input and output, debug an already running process, or kill a
-child process.
-
-* Menu:
-
-* Compilation:: Compiling for debugging
-* Starting:: Starting your program
-* Arguments:: Your program's arguments
-* Environment:: Your program's environment
-
-* Working Directory:: Your program's working directory
-* Input/Output:: Your program's input and output
-* Attach:: Debugging an already-running process
-* Kill Process:: Killing the child process
-
-* Threads:: Debugging programs with multiple threads
-* Processes:: Debugging programs with multiple processes
-
-
-File: gdb.info, Node: Compilation, Next: Starting, Up: Running
-
-Compiling for debugging
-=======================
-
-In order to debug a program effectively, you need to generate debugging
-information when you compile it. This debugging information is stored
-in the object file; it describes the data type of each variable or
-function and the correspondence between source line numbers and
-addresses in the executable code.
-
- To request debugging information, specify the `-g' option when you
-run the compiler.
-
- Most compilers do not include information about preprocessor macros
-in the debugging information if you specify the `-g' flag alone,
-because this information is rather large. Version 3.1 of GCC, the GNU
-C compiler, provides macro information if you specify the options
-`-gdwarf-2' and `-g3'; the former option requests debugging information
-in the Dwarf 2 format, and the latter requests "extra information". In
-the future, we hope to find more compact ways to represent macro
-information, so that it can be included with `-g' alone.
-
- Many C compilers are unable to handle the `-g' and `-O' options
-together. Using those compilers, you cannot generate optimized
-executables containing debugging information.
-
- GCC, the GNU C compiler, supports `-g' with or without `-O', making
-it possible to debug optimized code. We recommend that you _always_
-use `-g' whenever you compile a program. You may think your program is
-correct, but there is no sense in pushing your luck.
-
- When you debug a program compiled with `-g -O', remember that the
-optimizer is rearranging your code; the debugger shows you what is
-really there. Do not be too surprised when the execution path does not
-exactly match your source file! An extreme example: if you define a
-variable, but never use it, GDB never sees that variable--because the
-compiler optimizes it out of existence.
-
- Some things do not work as well with `-g -O' as with just `-g',
-particularly on machines with instruction scheduling. If in doubt,
-recompile with `-g' alone, and if this fixes the problem, please report
-it to us as a bug (including a test case!).
-
- Older versions of the GNU C compiler permitted a variant option
-`-gg' for debugging information. GDB no longer supports this format;
-if your GNU C compiler has this option, do not use it.
-
-
-File: gdb.info, Node: Starting, Next: Arguments, Prev: Compilation, Up: Running
-
-Starting your program
-=====================
-
-`run'
-`r'
- Use the `run' command to start your program under GDB. You must
- first specify the program name (except on VxWorks) with an
- argument to GDB (*note Getting In and Out of GDB: Invocation.), or
- by using the `file' or `exec-file' command (*note Commands to
- specify files: Files.).
-
-
- If you are running your program in an execution environment that
-supports processes, `run' creates an inferior process and makes that
-process run your program. (In environments without processes, `run'
-jumps to the start of your program.)
-
- The execution of a program is affected by certain information it
-receives from its superior. GDB provides ways to specify this
-information, which you must do _before_ starting your program. (You
-can change it after starting your program, but such changes only affect
-your program the next time you start it.) This information may be
-divided into four categories:
-
-The _arguments._
- Specify the arguments to give your program as the arguments of the
- `run' command. If a shell is available on your target, the shell
- is used to pass the arguments, so that you may use normal
- conventions (such as wildcard expansion or variable substitution)
- in describing the arguments. In Unix systems, you can control
- which shell is used with the `SHELL' environment variable. *Note
- Your program's arguments: Arguments.
-
-The _environment._
- Your program normally inherits its environment from GDB, but you
- can use the GDB commands `set environment' and `unset environment'
- to change parts of the environment that affect your program.
- *Note Your program's environment: Environment.
-
-The _working directory._
- Your program inherits its working directory from GDB. You can set
- the GDB working directory with the `cd' command in GDB. *Note
- Your program's working directory: Working Directory.
-
-The _standard input and output._
- Your program normally uses the same device for standard input and
- standard output as GDB is using. You can redirect input and output
- in the `run' command line, or you can use the `tty' command to set
- a different device for your program. *Note Your program's input
- and output: Input/Output.
-
- _Warning:_ While input and output redirection work, you cannot use
- pipes to pass the output of the program you are debugging to
- another program; if you attempt this, GDB is likely to wind up
- debugging the wrong program.
-
- When you issue the `run' command, your program begins to execute
-immediately. *Note Stopping and continuing: Stopping, for discussion
-of how to arrange for your program to stop. Once your program has
-stopped, you may call functions in your program, using the `print' or
-`call' commands. *Note Examining Data: Data.
-
- If the modification time of your symbol file has changed since the
-last time GDB read its symbols, GDB discards its symbol table, and
-reads it again. When it does this, GDB tries to retain your current
-breakpoints.
-
-
-File: gdb.info, Node: Arguments, Next: Environment, Prev: Starting, Up: Running
-
-Your program's arguments
-========================
-
-The arguments to your program can be specified by the arguments of the
-`run' command. They are passed to a shell, which expands wildcard
-characters and performs redirection of I/O, and thence to your program.
-Your `SHELL' environment variable (if it exists) specifies what shell
-GDB uses. If you do not define `SHELL', GDB uses the default shell
-(`/bin/sh' on Unix).
-
- On non-Unix systems, the program is usually invoked directly by GDB,
-which emulates I/O redirection via the appropriate system calls, and
-the wildcard characters are expanded by the startup code of the
-program, not by the shell.
-
- `run' with no arguments uses the same arguments used by the previous
-`run', or those set by the `set args' command.
-
-`set args'
- Specify the arguments to be used the next time your program is
- run. If `set args' has no arguments, `run' executes your program
- with no arguments. Once you have run your program with arguments,
- using `set args' before the next `run' is the only way to run it
- again without arguments.
-
-`show args'
- Show the arguments to give your program when it is started.
-
-
-File: gdb.info, Node: Environment, Next: Working Directory, Prev: Arguments, Up: Running
-
-Your program's environment
-==========================
-
-The "environment" consists of a set of environment variables and their
-values. Environment variables conventionally record such things as
-your user name, your home directory, your terminal type, and your search
-path for programs to run. Usually you set up environment variables with
-the shell and they are inherited by all the other programs you run.
-When debugging, it can be useful to try running your program with a
-modified environment without having to start GDB over again.
-
-`path DIRECTORY'
- Add DIRECTORY to the front of the `PATH' environment variable (the
- search path for executables) that will be passed to your program.
- The value of `PATH' used by GDB does not change. You may specify
- several directory names, separated by whitespace or by a
- system-dependent separator character (`:' on Unix, `;' on MS-DOS
- and MS-Windows). If DIRECTORY is already in the path, it is moved
- to the front, so it is searched sooner.
-
- You can use the string `$cwd' to refer to whatever is the current
- working directory at the time GDB searches the path. If you use
- `.' instead, it refers to the directory where you executed the
- `path' command. GDB replaces `.' in the DIRECTORY argument (with
- the current path) before adding DIRECTORY to the search path.
-
-`show paths'
- Display the list of search paths for executables (the `PATH'
- environment variable).
-
-`show environment [VARNAME]'
- Print the value of environment variable VARNAME to be given to
- your program when it starts. If you do not supply VARNAME, print
- the names and values of all environment variables to be given to
- your program. You can abbreviate `environment' as `env'.
-
-`set environment VARNAME [=VALUE]'
- Set environment variable VARNAME to VALUE. The value changes for
- your program only, not for GDB itself. VALUE may be any string;
- the values of environment variables are just strings, and any
- interpretation is supplied by your program itself. The VALUE
- parameter is optional; if it is eliminated, the variable is set to
- a null value.
-
- For example, this command:
-
- set env USER = foo
-
- tells the debugged program, when subsequently run, that its user
- is named `foo'. (The spaces around `=' are used for clarity here;
- they are not actually required.)
-
-`unset environment VARNAME'
- Remove variable VARNAME from the environment to be passed to your
- program. This is different from `set env VARNAME ='; `unset
- environment' removes the variable from the environment, rather
- than assigning it an empty value.
-
- _Warning:_ On Unix systems, GDB runs your program using the shell
-indicated by your `SHELL' environment variable if it exists (or
-`/bin/sh' if not). If your `SHELL' variable names a shell that runs an
-initialization file--such as `.cshrc' for C-shell, or `.bashrc' for
-BASH--any variables you set in that file affect your program. You may
-wish to move setting of environment variables to files that are only
-run when you sign on, such as `.login' or `.profile'.
-
-
-File: gdb.info, Node: Working Directory, Next: Input/Output, Prev: Environment, Up: Running
-
-Your program's working directory
-================================
-
-Each time you start your program with `run', it inherits its working
-directory from the current working directory of GDB. The GDB working
-directory is initially whatever it inherited from its parent process
-(typically the shell), but you can specify a new working directory in
-GDB with the `cd' command.
-
- The GDB working directory also serves as a default for the commands
-that specify files for GDB to operate on. *Note Commands to specify
-files: Files.
-
-`cd DIRECTORY'
- Set the GDB working directory to DIRECTORY.
-
-`pwd'
- Print the GDB working directory.
-
-
-File: gdb.info, Node: Input/Output, Next: Attach, Prev: Working Directory, Up: Running
-
-Your program's input and output
-===============================
-
-By default, the program you run under GDB does input and output to the
-same terminal that GDB uses. GDB switches the terminal to its own
-terminal modes to interact with you, but it records the terminal modes
-your program was using and switches back to them when you continue
-running your program.
-
-`info terminal'
- Displays information recorded by GDB about the terminal modes your
- program is using.
-
- You can redirect your program's input and/or output using shell
-redirection with the `run' command. For example,
-
- run > outfile
-
-starts your program, diverting its output to the file `outfile'.
-
- Another way to specify where your program should do input and output
-is with the `tty' command. This command accepts a file name as
-argument, and causes this file to be the default for future `run'
-commands. It also resets the controlling terminal for the child
-process, for future `run' commands. For example,
-
- tty /dev/ttyb
-
-directs that processes started with subsequent `run' commands default
-to do input and output on the terminal `/dev/ttyb' and have that as
-their controlling terminal.
-
- An explicit redirection in `run' overrides the `tty' command's
-effect on the input/output device, but not its effect on the controlling
-terminal.
-
- When you use the `tty' command or redirect input in the `run'
-command, only the input _for your program_ is affected. The input for
-GDB still comes from your terminal.
-
-
-File: gdb.info, Node: Attach, Next: Kill Process, Prev: Input/Output, Up: Running
-
-Debugging an already-running process
-====================================
-
-`attach PROCESS-ID'
- This command attaches to a running process--one that was started
- outside GDB. (`info files' shows your active targets.) The
- command takes as argument a process ID. The usual way to find out
- the process-id of a Unix process is with the `ps' utility, or with
- the `jobs -l' shell command.
-
- `attach' does not repeat if you press <RET> a second time after
- executing the command.
-
- To use `attach', your program must be running in an environment
-which supports processes; for example, `attach' does not work for
-programs on bare-board targets that lack an operating system. You must
-also have permission to send the process a signal.
-
- When you use `attach', the debugger finds the program running in the
-process first by looking in the current working directory, then (if the
-program is not found) by using the source file search path (*note
-Specifying source directories: Source Path.). You can also use the
-`file' command to load the program. *Note Commands to Specify Files:
-Files.
-
- The first thing GDB does after arranging to debug the specified
-process is to stop it. You can examine and modify an attached process
-with all the GDB commands that are ordinarily available when you start
-processes with `run'. You can insert breakpoints; you can step and
-continue; you can modify storage. If you would rather the process
-continue running, you may use the `continue' command after attaching
-GDB to the process.
-
-`detach'
- When you have finished debugging the attached process, you can use
- the `detach' command to release it from GDB control. Detaching
- the process continues its execution. After the `detach' command,
- that process and GDB become completely independent once more, and
- you are ready to `attach' another process or start one with `run'.
- `detach' does not repeat if you press <RET> again after executing
- the command.
-
- If you exit GDB or use the `run' command while you have an attached
-process, you kill that process. By default, GDB asks for confirmation
-if you try to do either of these things; you can control whether or not
-you need to confirm by using the `set confirm' command (*note Optional
-warnings and messages: Messages/Warnings.).
-
-
-File: gdb.info, Node: Kill Process, Next: Threads, Prev: Attach, Up: Running
-
-Killing the child process
-=========================
-
-`kill'
- Kill the child process in which your program is running under GDB.
-
- This command is useful if you wish to debug a core dump instead of a
-running process. GDB ignores any core dump file while your program is
-running.
-
- On some operating systems, a program cannot be executed outside GDB
-while you have breakpoints set on it inside GDB. You can use the
-`kill' command in this situation to permit running your program outside
-the debugger.
-
- The `kill' command is also useful if you wish to recompile and
-relink your program, since on many systems it is impossible to modify an
-executable file while it is running in a process. In this case, when
-you next type `run', GDB notices that the file has changed, and reads
-the symbol table again (while trying to preserve your current
-breakpoint settings).
-
-
-File: gdb.info, Node: Threads, Next: Processes, Prev: Kill Process, Up: Running
-
-Debugging programs with multiple threads
-========================================
-
-In some operating systems, such as HP-UX and Solaris, a single program
-may have more than one "thread" of execution. The precise semantics of
-threads differ from one operating system to another, but in general the
-threads of a single program are akin to multiple processes--except that
-they share one address space (that is, they can all examine and modify
-the same variables). On the other hand, each thread has its own
-registers and execution stack, and perhaps private memory.
-
- GDB provides these facilities for debugging multi-thread programs:
-
- * automatic notification of new threads
-
- * `thread THREADNO', a command to switch among threads
-
- * `info threads', a command to inquire about existing threads
-
- * `thread apply [THREADNO] [ALL] ARGS', a command to apply a command
- to a list of threads
-
- * thread-specific breakpoints
-
- _Warning:_ These facilities are not yet available on every GDB
- configuration where the operating system supports threads. If
- your GDB does not support threads, these commands have no effect.
- For example, a system without thread support shows no output from
- `info threads', and always rejects the `thread' command, like this:
-
- (gdb) info threads
- (gdb) thread 1
- Thread ID 1 not known. Use the "info threads" command to
- see the IDs of currently known threads.
-
- The GDB thread debugging facility allows you to observe all threads
-while your program runs--but whenever GDB takes control, one thread in
-particular is always the focus of debugging. This thread is called the
-"current thread". Debugging commands show program information from the
-perspective of the current thread.
-
- Whenever GDB detects a new thread in your program, it displays the
-target system's identification for the thread with a message in the
-form `[New SYSTAG]'. SYSTAG is a thread identifier whose form varies
-depending on the particular system. For example, on LynxOS, you might
-see
-
- [New process 35 thread 27]
-
-when GDB notices a new thread. In contrast, on an SGI system, the
-SYSTAG is simply something like `process 368', with no further
-qualifier.
-
- For debugging purposes, GDB associates its own thread number--always
-a single integer--with each thread in your program.
-
-`info threads'
- Display a summary of all threads currently in your program. GDB
- displays for each thread (in this order):
-
- 1. the thread number assigned by GDB
-
- 2. the target system's thread identifier (SYSTAG)
-
- 3. the current stack frame summary for that thread
-
- An asterisk `*' to the left of the GDB thread number indicates the
- current thread.
-
- For example,
-
- (gdb) info threads
- 3 process 35 thread 27 0x34e5 in sigpause ()
- 2 process 35 thread 23 0x34e5 in sigpause ()
- * 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8)
- at threadtest.c:68
-
- On HP-UX systems:
-
- For debugging purposes, GDB associates its own thread number--a
-small integer assigned in thread-creation order--with each thread in
-your program.
-
- Whenever GDB detects a new thread in your program, it displays both
-GDB's thread number and the target system's identification for the
-thread with a message in the form `[New SYSTAG]'. SYSTAG is a thread
-identifier whose form varies depending on the particular system. For
-example, on HP-UX, you see
-
- [New thread 2 (system thread 26594)]
-
-when GDB notices a new thread.
-
-`info threads'
- Display a summary of all threads currently in your program. GDB
- displays for each thread (in this order):
-
- 1. the thread number assigned by GDB
-
- 2. the target system's thread identifier (SYSTAG)
-
- 3. the current stack frame summary for that thread
-
- An asterisk `*' to the left of the GDB thread number indicates the
- current thread.
-
- For example,
-
- (gdb) info threads
- * 3 system thread 26607 worker (wptr=0x7b09c318 "@") \
-
- at quicksort.c:137
- 2 system thread 26606 0x7b0030d8 in __ksleep () \
-
- from /usr/lib/libc.2
- 1 system thread 27905 0x7b003498 in _brk () \
-
- from /usr/lib/libc.2
-
-`thread THREADNO'
- Make thread number THREADNO the current thread. The command
- argument THREADNO is the internal GDB thread number, as shown in
- the first field of the `info threads' display. GDB responds by
- displaying the system identifier of the thread you selected, and
- its current stack frame summary:
-
- (gdb) thread 2
- [Switching to process 35 thread 23]
- 0x34e5 in sigpause ()
-
- As with the `[New ...]' message, the form of the text after
- `Switching to' depends on your system's conventions for identifying
- threads.
-
-`thread apply [THREADNO] [ALL] ARGS'
- The `thread apply' command allows you to apply a command to one or
- more threads. Specify the numbers of the threads that you want
- affected with the command argument THREADNO. THREADNO is the
- internal GDB thread number, as shown in the first field of the
- `info threads' display. To apply a command to all threads, use
- `thread apply all' ARGS.
-
- Whenever GDB stops your program, due to a breakpoint or a signal, it
-automatically selects the thread where that breakpoint or signal
-happened. GDB alerts you to the context switch with a message of the
-form `[Switching to SYSTAG]' to identify the thread.
-
- *Note Stopping and starting multi-thread programs: Thread Stops, for
-more information about how GDB behaves when you stop and start programs
-with multiple threads.
-
- *Note Setting watchpoints: Set Watchpoints, for information about
-watchpoints in programs with multiple threads.
-
-
-File: gdb.info, Node: Processes, Prev: Threads, Up: Running
-
-Debugging programs with multiple processes
-==========================================
-
-On most systems, GDB has no special support for debugging programs
-which create additional processes using the `fork' function. When a
-program forks, GDB will continue to debug the parent process and the
-child process will run unimpeded. If you have set a breakpoint in any
-code which the child then executes, the child will get a `SIGTRAP'
-signal which (unless it catches the signal) will cause it to terminate.
-
- However, if you want to debug the child process there is a workaround
-which isn't too painful. Put a call to `sleep' in the code which the
-child process executes after the fork. It may be useful to sleep only
-if a certain environment variable is set, or a certain file exists, so
-that the delay need not occur when you don't want to run GDB on the
-child. While the child is sleeping, use the `ps' program to get its
-process ID. Then tell GDB (a new invocation of GDB if you are also
-debugging the parent process) to attach to the child process (*note
-Attach::). From that point on you can debug the child process just
-like any other process which you attached to.
-
- On some systems, GDB provides support for debugging programs that
-create additional processes using the `fork' or `vfork' functions.
-Currently, the only platforms with this feature are HP-UX (11.x and
-later only?) and GNU/Linux (kernel version 2.5.60 and later).
-
- By default, when a program forks, GDB will continue to debug the
-parent process and the child process will run unimpeded.
-
- If you want to follow the child process instead of the parent
-process, use the command `set follow-fork-mode'.
-
-`set follow-fork-mode MODE'
- Set the debugger response to a program call of `fork' or `vfork'.
- A call to `fork' or `vfork' creates a new process. The MODE can
- be:
-
- `parent'
- The original process is debugged after a fork. The child
- process runs unimpeded. This is the default.
-
- `child'
- The new process is debugged after a fork. The parent process
- runs unimpeded.
-
-
-`show follow-fork-mode'
- Display the current debugger response to a `fork' or `vfork' call.
-
- If you ask to debug a child process and a `vfork' is followed by an
-`exec', GDB executes the new target up to the first breakpoint in the
-new target. If you have a breakpoint set on `main' in your original
-program, the breakpoint will also be set on the child process's `main'.
-
- When a child process is spawned by `vfork', you cannot debug the
-child or parent until an `exec' call completes.
-
- If you issue a `run' command to GDB after an `exec' call executes,
-the new target restarts. To restart the parent process, use the `file'
-command with the parent executable name as its argument.
-
- You can use the `catch' command to make GDB stop whenever a `fork',
-`vfork', or `exec' call is made. *Note Setting catchpoints: Set
-Catchpoints.
-
-
-File: gdb.info, Node: Stopping, Next: Stack, Prev: Running, Up: Top
-
-Stopping and Continuing
-***********************
-
-The principal purposes of using a debugger are so that you can stop your
-program before it terminates; or so that, if your program runs into
-trouble, you can investigate and find out why.
-
- Inside GDB, your program may stop for any of several reasons, such
-as a signal, a breakpoint, or reaching a new line after a GDB command
-such as `step'. You may then examine and change variables, set new
-breakpoints or remove old ones, and then continue execution. Usually,
-the messages shown by GDB provide ample explanation of the status of
-your program--but you can also explicitly request this information at
-any time.
-
-`info program'
- Display information about the status of your program: whether it is
- running or not, what process it is, and why it stopped.
-
-* Menu:
-
-* Breakpoints:: Breakpoints, watchpoints, and catchpoints
-* Continuing and Stepping:: Resuming execution
-* Signals:: Signals
-* Thread Stops:: Stopping and starting multi-thread programs
-
-
-File: gdb.info, Node: Breakpoints, Next: Continuing and Stepping, Up: Stopping
-
-Breakpoints, watchpoints, and catchpoints
-=========================================
-
-A "breakpoint" makes your program stop whenever a certain point in the
-program is reached. For each breakpoint, you can add conditions to
-control in finer detail whether your program stops. You can set
-breakpoints with the `break' command and its variants (*note Setting
-breakpoints: Set Breaks.), to specify the place where your program
-should stop by line number, function name or exact address in the
-program.
-
- In HP-UX, SunOS 4.x, SVR4, and Alpha OSF/1 configurations, you can
-set breakpoints in shared libraries before the executable is run.
-There is a minor limitation on HP-UX systems: you must wait until the
-executable is run in order to set breakpoints in shared library
-routines that are not called directly by the program (for example,
-routines that are arguments in a `pthread_create' call).
-
- A "watchpoint" is a special breakpoint that stops your program when
-the value of an expression changes. You must use a different command
-to set watchpoints (*note Setting watchpoints: Set Watchpoints.), but
-aside from that, you can manage a watchpoint like any other breakpoint:
-you enable, disable, and delete both breakpoints and watchpoints using
-the same commands.
-
- You can arrange to have values from your program displayed
-automatically whenever GDB stops at a breakpoint. *Note Automatic
-display: Auto Display.
-
- A "catchpoint" is another special breakpoint that stops your program
-when a certain kind of event occurs, such as the throwing of a C++
-exception or the loading of a library. As with watchpoints, you use a
-different command to set a catchpoint (*note Setting catchpoints: Set
-Catchpoints.), but aside from that, you can manage a catchpoint like any
-other breakpoint. (To stop when your program receives a signal, use the
-`handle' command; see *Note Signals: Signals.)
-
- GDB assigns a number to each breakpoint, watchpoint, or catchpoint
-when you create it; these numbers are successive integers starting with
-one. In many of the commands for controlling various features of
-breakpoints you use the breakpoint number to say which breakpoint you
-want to change. Each breakpoint may be "enabled" or "disabled"; if
-disabled, it has no effect on your program until you enable it again.
-
- Some GDB commands accept a range of breakpoints on which to operate.
-A breakpoint range is either a single breakpoint number, like `5', or
-two such numbers, in increasing order, separated by a hyphen, like
-`5-7'. When a breakpoint range is given to a command, all breakpoint
-in that range are operated on.
-
-* Menu:
-
-* Set Breaks:: Setting breakpoints
-* Set Watchpoints:: Setting watchpoints
-* Set Catchpoints:: Setting catchpoints
-* Delete Breaks:: Deleting breakpoints
-* Disabling:: Disabling breakpoints
-* Conditions:: Break conditions
-* Break Commands:: Breakpoint command lists
-* Breakpoint Menus:: Breakpoint menus
-* Error in Breakpoints:: ``Cannot insert breakpoints''
-* Breakpoint related warnings:: ``Breakpoint address adjusted...''
-
-
-File: gdb.info, Node: Set Breaks, Next: Set Watchpoints, Up: Breakpoints
-
-Setting breakpoints
--------------------
-
-Breakpoints are set with the `break' command (abbreviated `b'). The
-debugger convenience variable `$bpnum' records the number of the
-breakpoint you've set most recently; see *Note Convenience variables:
-Convenience Vars, for a discussion of what you can do with convenience
-variables.
-
- You have several ways to say where the breakpoint should go.
-
-`break FUNCTION'
- Set a breakpoint at entry to function FUNCTION. When using source
- languages that permit overloading of symbols, such as C++,
- FUNCTION may refer to more than one possible place to break.
- *Note Breakpoint menus: Breakpoint Menus, for a discussion of that
- situation.
-
-`break +OFFSET'
-`break -OFFSET'
- Set a breakpoint some number of lines forward or back from the
- position at which execution stopped in the currently selected
- "stack frame". (*Note Frames: Frames, for a description of stack
- frames.)
-
-`break LINENUM'
- Set a breakpoint at line LINENUM in the current source file. The
- current source file is the last file whose source text was printed.
- The breakpoint will stop your program just before it executes any
- of the code on that line.
-
-`break FILENAME:LINENUM'
- Set a breakpoint at line LINENUM in source file FILENAME.
-
-`break FILENAME:FUNCTION'
- Set a breakpoint at entry to function FUNCTION found in file
- FILENAME. Specifying a file name as well as a function name is
- superfluous except when multiple files contain similarly named
- functions.
-
-`break *ADDRESS'
- Set a breakpoint at address ADDRESS. You can use this to set
- breakpoints in parts of your program which do not have debugging
- information or source files.
-
-`break'
- When called without any arguments, `break' sets a breakpoint at
- the next instruction to be executed in the selected stack frame
- (*note Examining the Stack: Stack.). In any selected frame but the
- innermost, this makes your program stop as soon as control returns
- to that frame. This is similar to the effect of a `finish'
- command in the frame inside the selected frame--except that
- `finish' does not leave an active breakpoint. If you use `break'
- without an argument in the innermost frame, GDB stops the next
- time it reaches the current location; this may be useful inside
- loops.
-
- GDB normally ignores breakpoints when it resumes execution, until
- at least one instruction has been executed. If it did not do
- this, you would be unable to proceed past a breakpoint without
- first disabling the breakpoint. This rule applies whether or not
- the breakpoint already existed when your program stopped.
-
-`break ... if COND'
- Set a breakpoint with condition COND; evaluate the expression COND
- each time the breakpoint is reached, and stop only if the value is
- nonzero--that is, if COND evaluates as true. `...' stands for one
- of the possible arguments described above (or no argument)
- specifying where to break. *Note Break conditions: Conditions,
- for more information on breakpoint conditions.
-
-`tbreak ARGS'
- Set a breakpoint enabled only for one stop. ARGS are the same as
- for the `break' command, and the breakpoint is set in the same
- way, but the breakpoint is automatically deleted after the first
- time your program stops there. *Note Disabling breakpoints:
- Disabling.
-
-`hbreak ARGS'
- Set a hardware-assisted breakpoint. ARGS are the same as for the
- `break' command and the breakpoint is set in the same way, but the
- breakpoint requires hardware support and some target hardware may
- not have this support. The main purpose of this is EPROM/ROM code
- debugging, so you can set a breakpoint at an instruction without
- changing the instruction. This can be used with the new
- trap-generation provided by SPARClite DSU and some x86-based
- targets. These targets will generate traps when a program
- accesses some data or instruction address that is assigned to the
- debug registers. However the hardware breakpoint registers can
- take a limited number of breakpoints. For example, on the DSU,
- only two data breakpoints can be set at a time, and GDB will
- reject this command if more than two are used. Delete or disable
- unused hardware breakpoints before setting new ones (*note
- Disabling: Disabling.). *Note Break conditions: Conditions.
- *Note set remote hardware-breakpoint-limit::.
-
-`thbreak ARGS'
- Set a hardware-assisted breakpoint enabled only for one stop. ARGS
- are the same as for the `hbreak' command and the breakpoint is set
- in the same way. However, like the `tbreak' command, the
- breakpoint is automatically deleted after the first time your
- program stops there. Also, like the `hbreak' command, the
- breakpoint requires hardware support and some target hardware may
- not have this support. *Note Disabling breakpoints: Disabling.
- See also *Note Break conditions: Conditions.
-
-`rbreak REGEX'
- Set breakpoints on all functions matching the regular expression
- REGEX. This command sets an unconditional breakpoint on all
- matches, printing a list of all breakpoints it set. Once these
- breakpoints are set, they are treated just like the breakpoints
- set with the `break' command. You can delete them, disable them,
- or make them conditional the same way as any other breakpoint.
-
- The syntax of the regular expression is the standard one used with
- tools like `grep'. Note that this is different from the syntax
- used by shells, so for instance `foo*' matches all functions that
- include an `fo' followed by zero or more `o's. There is an
- implicit `.*' leading and trailing the regular expression you
- supply, so to match only functions that begin with `foo', use
- `^foo'.
-
- When debugging C++ programs, `rbreak' is useful for setting
- breakpoints on overloaded functions that are not members of any
- special classes.
-
-`info breakpoints [N]'
-`info break [N]'
-`info watchpoints [N]'
- Print a table of all breakpoints, watchpoints, and catchpoints set
- and not deleted, with the following columns for each breakpoint:
-
- _Breakpoint Numbers_
-
- _Type_
- Breakpoint, watchpoint, or catchpoint.
-
- _Disposition_
- Whether the breakpoint is marked to be disabled or deleted
- when hit.
-
- _Enabled or Disabled_
- Enabled breakpoints are marked with `y'. `n' marks
- breakpoints that are not enabled.
-
- _Address_
- Where the breakpoint is in your program, as a memory address.
- If the breakpoint is pending (see below for details) on a
- future load of a shared library, the address will be listed
- as `<PENDING>'.
-
- _What_
- Where the breakpoint is in the source for your program, as a
- file and line number. For a pending breakpoint, the original
- string passed to the breakpoint command will be listed as it
- cannot be resolved until the appropriate shared library is
- loaded in the future.
-
- If a breakpoint is conditional, `info break' shows the condition on
- the line following the affected breakpoint; breakpoint commands,
- if any, are listed after that. A pending breakpoint is allowed to
- have a condition specified for it. The condition is not parsed
- for validity until a shared library is loaded that allows the
- pending breakpoint to resolve to a valid location.
-
- `info break' with a breakpoint number N as argument lists only
- that breakpoint. The convenience variable `$_' and the default
- examining-address for the `x' command are set to the address of
- the last breakpoint listed (*note Examining memory: Memory.).
-
- `info break' displays a count of the number of times the breakpoint
- has been hit. This is especially useful in conjunction with the
- `ignore' command. You can ignore a large number of breakpoint
- hits, look at the breakpoint info to see how many times the
- breakpoint was hit, and then run again, ignoring one less than
- that number. This will get you quickly to the last hit of that
- breakpoint.
-
- GDB allows you to set any number of breakpoints at the same place in
-your program. There is nothing silly or meaningless about this. When
-the breakpoints are conditional, this is even useful (*note Break
-conditions: Conditions.).
-
- If a specified breakpoint location cannot be found, it may be due to
-the fact that the location is in a shared library that is yet to be
-loaded. In such a case, you may want GDB to create a special
-breakpoint (known as a "pending breakpoint") that attempts to resolve
-itself in the future when an appropriate shared library gets loaded.
-
- Pending breakpoints are useful to set at the start of your GDB
-session for locations that you know will be dynamically loaded later by
-the program being debugged. When shared libraries are loaded, a check
-is made to see if the load resolves any pending breakpoint locations.
-If a pending breakpoint location gets resolved, a regular breakpoint is
-created and the original pending breakpoint is removed.
-
- GDB provides some additional commands for controlling pending
-breakpoint support:
-
-`set breakpoint pending auto'
- This is the default behavior. When GDB cannot find the breakpoint
- location, it queries you whether a pending breakpoint should be
- created.
-
-`set breakpoint pending on'
- This indicates that an unrecognized breakpoint location should
- automatically result in a pending breakpoint being created.
-
-`set breakpoint pending off'
- This indicates that pending breakpoints are not to be created. Any
- unrecognized breakpoint location results in an error. This
- setting does not affect any pending breakpoints previously created.
-
-`show breakpoint pending'
- Show the current behavior setting for creating pending breakpoints.
-
- Normal breakpoint operations apply to pending breakpoints as well.
-You may specify a condition for a pending breakpoint and/or commands to
-run when the breakpoint is reached. You can also enable or disable the
-pending breakpoint. When you specify a condition for a pending
-breakpoint, the parsing of the condition will be deferred until the
-point where the pending breakpoint location is resolved. Disabling a
-pending breakpoint tells GDB to not attempt to resolve the breakpoint
-on any subsequent shared library load. When a pending breakpoint is
-re-enabled, GDB checks to see if the location is already resolved.
-This is done because any number of shared library loads could have
-occurred since the time the breakpoint was disabled and one or more of
-these loads could resolve the location.
-
- GDB itself sometimes sets breakpoints in your program for special
-purposes, such as proper handling of `longjmp' (in C programs). These
-internal breakpoints are assigned negative numbers, starting with `-1';
-`info breakpoints' does not display them. You can see these
-breakpoints with the GDB maintenance command `maint info breakpoints'
-(*note maint info breakpoints::).
-
-
-File: gdb.info, Node: Set Watchpoints, Next: Set Catchpoints, Prev: Set Breaks, Up: Breakpoints
-
-Setting watchpoints
--------------------
-
-You can use a watchpoint to stop execution whenever the value of an
-expression changes, without having to predict a particular place where
-this may happen.
-
- Depending on your system, watchpoints may be implemented in software
-or hardware. GDB does software watchpointing by single-stepping your
-program and testing the variable's value each time, which is hundreds of
-times slower than normal execution. (But this may still be worth it, to
-catch errors where you have no clue what part of your program is the
-culprit.)
-
- On some systems, such as HP-UX, GNU/Linux and some other x86-based
-targets, GDB includes support for hardware watchpoints, which do not
-slow down the running of your program.
-
-`watch EXPR'
- Set a watchpoint for an expression. GDB will break when EXPR is
- written into by the program and its value changes.
-
-`rwatch EXPR'
- Set a watchpoint that will break when watch EXPR is read by the
- program.
-
-`awatch EXPR'
- Set a watchpoint that will break when EXPR is either read or
- written into by the program.
-
-`info watchpoints'
- This command prints a list of watchpoints, breakpoints, and
- catchpoints; it is the same as `info break'.
-
- GDB sets a "hardware watchpoint" if possible. Hardware watchpoints
-execute very quickly, and the debugger reports a change in value at the
-exact instruction where the change occurs. If GDB cannot set a
-hardware watchpoint, it sets a software watchpoint, which executes more
-slowly and reports the change in value at the next statement, not the
-instruction, after the change occurs.
-
- When you issue the `watch' command, GDB reports
-
- Hardware watchpoint NUM: EXPR
-
-if it was able to set a hardware watchpoint.
-
- Currently, the `awatch' and `rwatch' commands can only set hardware
-watchpoints, because accesses to data that don't change the value of
-the watched expression cannot be detected without examining every
-instruction as it is being executed, and GDB does not do that
-currently. If GDB finds that it is unable to set a hardware breakpoint
-with the `awatch' or `rwatch' command, it will print a message like
-this:
-
- Expression cannot be implemented with read/access watchpoint.
-
- Sometimes, GDB cannot set a hardware watchpoint because the data
-type of the watched expression is wider than what a hardware watchpoint
-on the target machine can handle. For example, some systems can only
-watch regions that are up to 4 bytes wide; on such systems you cannot
-set hardware watchpoints for an expression that yields a
-double-precision floating-point number (which is typically 8 bytes
-wide). As a work-around, it might be possible to break the large region
-into a series of smaller ones and watch them with separate watchpoints.
-
- If you set too many hardware watchpoints, GDB might be unable to
-insert all of them when you resume the execution of your program.
-Since the precise number of active watchpoints is unknown until such
-time as the program is about to be resumed, GDB might not be able to
-warn you about this when you set the watchpoints, and the warning will
-be printed only when the program is resumed:
-
- Hardware watchpoint NUM: Could not insert watchpoint
-
-If this happens, delete or disable some of the watchpoints.
-
- The SPARClite DSU will generate traps when a program accesses some
-data or instruction address that is assigned to the debug registers.
-For the data addresses, DSU facilitates the `watch' command. However
-the hardware breakpoint registers can only take two data watchpoints,
-and both watchpoints must be the same kind. For example, you can set
-two watchpoints with `watch' commands, two with `rwatch' commands, *or*
-two with `awatch' commands, but you cannot set one watchpoint with one
-command and the other with a different command. GDB will reject the
-command if you try to mix watchpoints. Delete or disable unused
-watchpoint commands before setting new ones.
-
- If you call a function interactively using `print' or `call', any
-watchpoints you have set will be inactive until GDB reaches another
-kind of breakpoint or the call completes.
-
- GDB automatically deletes watchpoints that watch local (automatic)
-variables, or expressions that involve such variables, when they go out
-of scope, that is, when the execution leaves the block in which these
-variables were defined. In particular, when the program being debugged
-terminates, _all_ local variables go out of scope, and so only
-watchpoints that watch global variables remain set. If you rerun the
-program, you will need to set all such watchpoints again. One way of
-doing that would be to set a code breakpoint at the entry to the `main'
-function and when it breaks, set all the watchpoints.
-
- _Warning:_ In multi-thread programs, watchpoints have only limited
- usefulness. With the current watchpoint implementation, GDB can
- only watch the value of an expression _in a single thread_. If
- you are confident that the expression can only change due to the
- current thread's activity (and if you are also confident that no
- other thread can become current), then you can use watchpoints as
- usual. However, GDB may not notice when a non-current thread's
- activity changes the expression.
-
- _HP-UX Warning:_ In multi-thread programs, software watchpoints
- have only limited usefulness. If GDB creates a software
- watchpoint, it can only watch the value of an expression _in a
- single thread_. If you are confident that the expression can only
- change due to the current thread's activity (and if you are also
- confident that no other thread can become current), then you can
- use software watchpoints as usual. However, GDB may not notice
- when a non-current thread's activity changes the expression.
- (Hardware watchpoints, in contrast, watch an expression in all
- threads.)
-
- *Note set remote hardware-watchpoint-limit::.
-
-
-File: gdb.info, Node: Set Catchpoints, Next: Delete Breaks, Prev: Set Watchpoints, Up: Breakpoints
-
-Setting catchpoints
--------------------
-
-You can use "catchpoints" to cause the debugger to stop for certain
-kinds of program events, such as C++ exceptions or the loading of a
-shared library. Use the `catch' command to set a catchpoint.
-
-`catch EVENT'
- Stop when EVENT occurs. EVENT can be any of the following:
- `throw'
- The throwing of a C++ exception.
-
- `catch'
- The catching of a C++ exception.
-
- `exec'
- A call to `exec'. This is currently only available for HP-UX.
-
- `fork'
- A call to `fork'. This is currently only available for HP-UX.
-
- `vfork'
- A call to `vfork'. This is currently only available for
- HP-UX.
-
- `load'
- `load LIBNAME'
- The dynamic loading of any shared library, or the loading of
- the library LIBNAME. This is currently only available for
- HP-UX.
-
- `unload'
- `unload LIBNAME'
- The unloading of any dynamically loaded shared library, or
- the unloading of the library LIBNAME. This is currently only
- available for HP-UX.
-
-`tcatch EVENT'
- Set a catchpoint that is enabled only for one stop. The
- catchpoint is automatically deleted after the first time the event
- is caught.
-
-
- Use the `info break' command to list the current catchpoints.
-
- There are currently some limitations to C++ exception handling
-(`catch throw' and `catch catch') in GDB:
-
- * If you call a function interactively, GDB normally returns control
- to you when the function has finished executing. If the call
- raises an exception, however, the call may bypass the mechanism
- that returns control to you and cause your program either to abort
- or to simply continue running until it hits a breakpoint, catches
- a signal that GDB is listening for, or exits. This is the case
- even if you set a catchpoint for the exception; catchpoints on
- exceptions are disabled within interactive calls.
-
- * You cannot raise an exception interactively.
-
- * You cannot install an exception handler interactively.
-
- Sometimes `catch' is not the best way to debug exception handling:
-if you need to know exactly where an exception is raised, it is better
-to stop _before_ the exception handler is called, since that way you
-can see the stack before any unwinding takes place. If you set a
-breakpoint in an exception handler instead, it may not be easy to find
-out where the exception was raised.
-
- To stop just before an exception handler is called, you need some
-knowledge of the implementation. In the case of GNU C++, exceptions are
-raised by calling a library function named `__raise_exception' which
-has the following ANSI C interface:
-
- /* ADDR is where the exception identifier is stored.
- ID is the exception identifier. */
- void __raise_exception (void **addr, void *id);
-
-To make the debugger catch all exceptions before any stack unwinding
-takes place, set a breakpoint on `__raise_exception' (*note
-Breakpoints; watchpoints; and exceptions: Breakpoints.).
-
- With a conditional breakpoint (*note Break conditions: Conditions.)
-that depends on the value of ID, you can stop your program when a
-specific exception is raised. You can use multiple conditional
-breakpoints to stop your program when any of a number of exceptions are
-raised.
-
-
-File: gdb.info, Node: Delete Breaks, Next: Disabling, Prev: Set Catchpoints, Up: Breakpoints
-
-Deleting breakpoints
---------------------
-
-It is often necessary to eliminate a breakpoint, watchpoint, or
-catchpoint once it has done its job and you no longer want your program
-to stop there. This is called "deleting" the breakpoint. A breakpoint
-that has been deleted no longer exists; it is forgotten.
-
- With the `clear' command you can delete breakpoints according to
-where they are in your program. With the `delete' command you can
-delete individual breakpoints, watchpoints, or catchpoints by specifying
-their breakpoint numbers.
-
- It is not necessary to delete a breakpoint to proceed past it. GDB
-automatically ignores breakpoints on the first instruction to be
-executed when you continue execution without changing the execution
-address.
-
-`clear'
- Delete any breakpoints at the next instruction to be executed in
- the selected stack frame (*note Selecting a frame: Selection.).
- When the innermost frame is selected, this is a good way to delete
- a breakpoint where your program just stopped.
-
-`clear FUNCTION'
-`clear FILENAME:FUNCTION'
- Delete any breakpoints set at entry to the function FUNCTION.
-
-`clear LINENUM'
-`clear FILENAME:LINENUM'
- Delete any breakpoints set at or within the code of the specified
- line.
-
-`delete [breakpoints] [RANGE...]'
- Delete the breakpoints, watchpoints, or catchpoints of the
- breakpoint ranges specified as arguments. If no argument is
- specified, delete all breakpoints (GDB asks confirmation, unless
- you have `set confirm off'). You can abbreviate this command as
- `d'.
-
-
-File: gdb.info, Node: Disabling, Next: Conditions, Prev: Delete Breaks, Up: Breakpoints
-
-Disabling breakpoints
----------------------
-
-Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
-prefer to "disable" it. This makes the breakpoint inoperative as if it
-had been deleted, but remembers the information on the breakpoint so
-that you can "enable" it again later.
-
- You disable and enable breakpoints, watchpoints, and catchpoints with
-the `enable' and `disable' commands, optionally specifying one or more
-breakpoint numbers as arguments. Use `info break' or `info watch' to
-print a list of breakpoints, watchpoints, and catchpoints if you do not
-know which numbers to use.
-
- A breakpoint, watchpoint, or catchpoint can have any of four
-different states of enablement:
-
- * Enabled. The breakpoint stops your program. A breakpoint set
- with the `break' command starts out in this state.
-
- * Disabled. The breakpoint has no effect on your program.
-
- * Enabled once. The breakpoint stops your program, but then becomes
- disabled.
-
- * Enabled for deletion. The breakpoint stops your program, but
- immediately after it does so it is deleted permanently. A
- breakpoint set with the `tbreak' command starts out in this state.
-
- You can use the following commands to enable or disable breakpoints,
-watchpoints, and catchpoints:
-
-`disable [breakpoints] [RANGE...]'
- Disable the specified breakpoints--or all breakpoints, if none are
- listed. A disabled breakpoint has no effect but is not forgotten.
- All options such as ignore-counts, conditions and commands are
- remembered in case the breakpoint is enabled again later. You may
- abbreviate `disable' as `dis'.
-
-`enable [breakpoints] [RANGE...]'
- Enable the specified breakpoints (or all defined breakpoints).
- They become effective once again in stopping your program.
-
-`enable [breakpoints] once RANGE...'
- Enable the specified breakpoints temporarily. GDB disables any of
- these breakpoints immediately after stopping your program.
-
-`enable [breakpoints] delete RANGE...'
- Enable the specified breakpoints to work once, then die. GDB
- deletes any of these breakpoints as soon as your program stops
- there.
-
- Except for a breakpoint set with `tbreak' (*note Setting
-breakpoints: Set Breaks.), breakpoints that you set are initially
-enabled; subsequently, they become disabled or enabled only when you
-use one of the commands above. (The command `until' can set and delete
-a breakpoint of its own, but it does not change the state of your other
-breakpoints; see *Note Continuing and stepping: Continuing and
-Stepping.)
-
-
-File: gdb.info, Node: Conditions, Next: Break Commands, Prev: Disabling, Up: Breakpoints
-
-Break conditions
-----------------
-
-The simplest sort of breakpoint breaks every time your program reaches a
-specified place. You can also specify a "condition" for a breakpoint.
-A condition is just a Boolean expression in your programming language
-(*note Expressions: Expressions.). A breakpoint with a condition
-evaluates the expression each time your program reaches it, and your
-program stops only if the condition is _true_.
-
- This is the converse of using assertions for program validation; in
-that situation, you want to stop when the assertion is violated--that
-is, when the condition is false. In C, if you want to test an
-assertion expressed by the condition ASSERT, you should set the
-condition `! ASSERT' on the appropriate breakpoint.
-
- Conditions are also accepted for watchpoints; you may not need them,
-since a watchpoint is inspecting the value of an expression anyhow--but
-it might be simpler, say, to just set a watchpoint on a variable name,
-and specify a condition that tests whether the new value is an
-interesting one.
-
- Break conditions can have side effects, and may even call functions
-in your program. This can be useful, for example, to activate functions
-that log program progress, or to use your own print functions to format
-special data structures. The effects are completely predictable unless
-there is another enabled breakpoint at the same address. (In that
-case, GDB might see the other breakpoint first and stop your program
-without checking the condition of this one.) Note that breakpoint
-commands are usually more convenient and flexible than break conditions
-for the purpose of performing side effects when a breakpoint is reached
-(*note Breakpoint command lists: Break Commands.).
-
- Break conditions can be specified when a breakpoint is set, by using
-`if' in the arguments to the `break' command. *Note Setting
-breakpoints: Set Breaks. They can also be changed at any time with the
-`condition' command.
-
- You can also use the `if' keyword with the `watch' command. The
-`catch' command does not recognize the `if' keyword; `condition' is the
-only way to impose a further condition on a catchpoint.
-
-`condition BNUM EXPRESSION'
- Specify EXPRESSION as the break condition for breakpoint,
- watchpoint, or catchpoint number BNUM. After you set a condition,
- breakpoint BNUM stops your program only if the value of EXPRESSION
- is true (nonzero, in C). When you use `condition', GDB checks
- EXPRESSION immediately for syntactic correctness, and to determine
- whether symbols in it have referents in the context of your
- breakpoint. If EXPRESSION uses symbols not referenced in the
- context of the breakpoint, GDB prints an error message:
-
- No symbol "foo" in current context.
-
- GDB does not actually evaluate EXPRESSION at the time the
- `condition' command (or a command that sets a breakpoint with a
- condition, like `break if ...') is given, however. *Note
- Expressions: Expressions.
-
-`condition BNUM'
- Remove the condition from breakpoint number BNUM. It becomes an
- ordinary unconditional breakpoint.
-
- A special case of a breakpoint condition is to stop only when the
-breakpoint has been reached a certain number of times. This is so
-useful that there is a special way to do it, using the "ignore count"
-of the breakpoint. Every breakpoint has an ignore count, which is an
-integer. Most of the time, the ignore count is zero, and therefore has
-no effect. But if your program reaches a breakpoint whose ignore count
-is positive, then instead of stopping, it just decrements the ignore
-count by one and continues. As a result, if the ignore count value is
-N, the breakpoint does not stop the next N times your program reaches
-it.
-
-`ignore BNUM COUNT'
- Set the ignore count of breakpoint number BNUM to COUNT. The next
- COUNT times the breakpoint is reached, your program's execution
- does not stop; other than to decrement the ignore count, GDB takes
- no action.
-
- To make the breakpoint stop the next time it is reached, specify a
- count of zero.
-
- When you use `continue' to resume execution of your program from a
- breakpoint, you can specify an ignore count directly as an
- argument to `continue', rather than using `ignore'. *Note
- Continuing and stepping: Continuing and Stepping.
-
- If a breakpoint has a positive ignore count and a condition, the
- condition is not checked. Once the ignore count reaches zero, GDB
- resumes checking the condition.
-
- You could achieve the effect of the ignore count with a condition
- such as `$foo-- <= 0' using a debugger convenience variable that
- is decremented each time. *Note Convenience variables:
- Convenience Vars.
-
- Ignore counts apply to breakpoints, watchpoints, and catchpoints.
-
-
-File: gdb.info, Node: Break Commands, Next: Breakpoint Menus, Prev: Conditions, Up: Breakpoints
-
-Breakpoint command lists
-------------------------
-
-You can give any breakpoint (or watchpoint or catchpoint) a series of
-commands to execute when your program stops due to that breakpoint. For
-example, you might want to print the values of certain expressions, or
-enable other breakpoints.
-
-`commands [BNUM]'
-`... COMMAND-LIST ...'
-`end'
- Specify a list of commands for breakpoint number BNUM. The
- commands themselves appear on the following lines. Type a line
- containing just `end' to terminate the commands.
-
- To remove all commands from a breakpoint, type `commands' and
- follow it immediately with `end'; that is, give no commands.
-
- With no BNUM argument, `commands' refers to the last breakpoint,
- watchpoint, or catchpoint set (not to the breakpoint most recently
- encountered).
-
- Pressing <RET> as a means of repeating the last GDB command is
-disabled within a COMMAND-LIST.
-
- You can use breakpoint commands to start your program up again.
-Simply use the `continue' command, or `step', or any other command that
-resumes execution.
-
- Any other commands in the command list, after a command that resumes
-execution, are ignored. This is because any time you resume execution
-(even with a simple `next' or `step'), you may encounter another
-breakpoint--which could have its own command list, leading to
-ambiguities about which list to execute.
-
- If the first command you specify in a command list is `silent', the
-usual message about stopping at a breakpoint is not printed. This may
-be desirable for breakpoints that are to print a specific message and
-then continue. If none of the remaining commands print anything, you
-see no sign that the breakpoint was reached. `silent' is meaningful
-only at the beginning of a breakpoint command list.
-
- The commands `echo', `output', and `printf' allow you to print
-precisely controlled output, and are often useful in silent
-breakpoints. *Note Commands for controlled output: Output.
-
- For example, here is how you could use breakpoint commands to print
-the value of `x' at entry to `foo' whenever `x' is positive.
-
- break foo if x>0
- commands
- silent
- printf "x is %d\n",x
- cont
- end
-
- One application for breakpoint commands is to compensate for one bug
-so you can test for another. Put a breakpoint just after the erroneous
-line of code, give it a condition to detect the case in which something
-erroneous has been done, and give it commands to assign correct values
-to any variables that need them. End with the `continue' command so
-that your program does not stop, and start with the `silent' command so
-that no output is produced. Here is an example:
-
- break 403
- commands
- silent
- set x = y + 4
- cont
- end
-
-
-File: gdb.info, Node: Breakpoint Menus, Next: Error in Breakpoints, Prev: Break Commands, Up: Breakpoints
-
-Breakpoint menus
-----------------
-
-Some programming languages (notably C++ and Objective-C) permit a
-single function name to be defined several times, for application in
-different contexts. This is called "overloading". When a function
-name is overloaded, `break FUNCTION' is not enough to tell GDB where
-you want a breakpoint. If you realize this is a problem, you can use
-something like `break FUNCTION(TYPES)' to specify which particular
-version of the function you want. Otherwise, GDB offers you a menu of
-numbered choices for different possible breakpoints, and waits for your
-selection with the prompt `>'. The first two options are always `[0]
-cancel' and `[1] all'. Typing `1' sets a breakpoint at each definition
-of FUNCTION, and typing `0' aborts the `break' command without setting
-any new breakpoints.
-
- For example, the following session excerpt shows an attempt to set a
-breakpoint at the overloaded symbol `String::after'. We choose three
-particular definitions of that function name:
-
- (gdb) b String::after
- [0] cancel
- [1] all
- [2] file:String.cc; line number:867
- [3] file:String.cc; line number:860
- [4] file:String.cc; line number:875
- [5] file:String.cc; line number:853
- [6] file:String.cc; line number:846
- [7] file:String.cc; line number:735
- > 2 4 6
- Breakpoint 1 at 0xb26c: file String.cc, line 867.
- Breakpoint 2 at 0xb344: file String.cc, line 875.
- Breakpoint 3 at 0xafcc: file String.cc, line 846.
- Multiple breakpoints were set.
- Use the "delete" command to delete unwanted
- breakpoints.
- (gdb)
-
-
-File: gdb.info, Node: Error in Breakpoints, Next: Breakpoint related warnings, Prev: Breakpoint Menus, Up: Breakpoints
-
-"Cannot insert breakpoints"
----------------------------
-
-Under some operating systems, breakpoints cannot be used in a program if
-any other process is running that program. In this situation,
-attempting to run or continue a program with a breakpoint causes GDB to
-print an error message:
-
- Cannot insert breakpoints.
- The same program may be running in another process.
-
- When this happens, you have three ways to proceed:
-
- 1. Remove or disable the breakpoints, then continue.
-
- 2. Suspend GDB, and copy the file containing your program to a new
- name. Resume GDB and use the `exec-file' command to specify that
- GDB should run your program under that name. Then start your
- program again.
-
- 3. Relink your program so that the text segment is nonsharable, using
- the linker option `-N'. The operating system limitation may not
- apply to nonsharable executables.
-
- A similar message can be printed if you request too many active
-hardware-assisted breakpoints and watchpoints:
-
- Stopped; cannot insert breakpoints.
- You may have requested too many hardware breakpoints and watchpoints.
-
-This message is printed when you attempt to resume the program, since
-only then GDB knows exactly how many hardware breakpoints and
-watchpoints it needs to insert.
-
- When this message is printed, you need to disable or remove some of
-the hardware-assisted breakpoints and watchpoints, and then continue.
-
-
-File: gdb.info, Node: Breakpoint related warnings, Prev: Error in Breakpoints, Up: Breakpoints
-
-"Breakpoint address adjusted..."
---------------------------------
-
-Some processor architectures place constraints on the addresses at
-which breakpoints may be placed. For architectures thus constrained,
-GDB will attempt to adjust the breakpoint's address to comply with the
-constraints dictated by the architecture.
-
- One example of such an architecture is the Fujitsu FR-V. The FR-V is
-a VLIW architecture in which a number of RISC-like instructions may be
-bundled together for parallel execution. The FR-V architecture
-constrains the location of a breakpoint instruction within such a
-bundle to the instruction with the lowest address. GDB honors this
-constraint by adjusting a breakpoint's address to the first in the
-bundle.
-
- It is not uncommon for optimized code to have bundles which contain
-instructions from different source statements, thus it may happen that
-a breakpoint's address will be adjusted from one source statement to
-another. Since this adjustment may significantly alter GDB's
-breakpoint related behavior from what the user expects, a warning is
-printed when the breakpoint is first set and also when the breakpoint
-is hit.
-
- A warning like the one below is printed when setting a breakpoint
-that's been subject to address adjustment:
-
- warning: Breakpoint address adjusted from 0x00010414 to 0x00010410.
-
- Such warnings are printed both for user settable and GDB's internal
-breakpoints. If you see one of these warnings, you should verify that
-a breakpoint set at the adjusted address will have the desired affect.
-If not, the breakpoint in question may be removed and other breakpoints
-may be set which will have the desired behavior. E.g., it may be
-sufficient to place the breakpoint at a later instruction. A
-conditional breakpoint may also be useful in some cases to prevent the
-breakpoint from triggering too often.
-
- GDB will also issue a warning when stopping at one of these adjusted
-breakpoints:
-
- warning: Breakpoint 1 address previously adjusted from 0x00010414
- to 0x00010410.
-
- When this warning is encountered, it may be too late to take remedial
-action except in cases where the breakpoint is hit earlier or more
-frequently than expected.
-
-
-File: gdb.info, Node: Continuing and Stepping, Next: Signals, Prev: Breakpoints, Up: Stopping
-
-Continuing and stepping
-=======================
-
-"Continuing" means resuming program execution until your program
-completes normally. In contrast, "stepping" means executing just one
-more "step" of your program, where "step" may mean either one line of
-source code, or one machine instruction (depending on what particular
-command you use). Either when continuing or when stepping, your
-program may stop even sooner, due to a breakpoint or a signal. (If it
-stops due to a signal, you may want to use `handle', or use `signal 0'
-to resume execution. *Note Signals: Signals.)
-
-`continue [IGNORE-COUNT]'
-`c [IGNORE-COUNT]'
-`fg [IGNORE-COUNT]'
- Resume program execution, at the address where your program last
- stopped; any breakpoints set at that address are bypassed. The
- optional argument IGNORE-COUNT allows you to specify a further
- number of times to ignore a breakpoint at this location; its
- effect is like that of `ignore' (*note Break conditions:
- Conditions.).
-
- The argument IGNORE-COUNT is meaningful only when your program
- stopped due to a breakpoint. At other times, the argument to
- `continue' is ignored.
-
- The synonyms `c' and `fg' (for "foreground", as the debugged
- program is deemed to be the foreground program) are provided
- purely for convenience, and have exactly the same behavior as
- `continue'.
-
- To resume execution at a different place, you can use `return'
-(*note Returning from a function: Returning.) to go back to the calling
-function; or `jump' (*note Continuing at a different address: Jumping.)
-to go to an arbitrary location in your program.
-
- A typical technique for using stepping is to set a breakpoint (*note
-Breakpoints; watchpoints; and catchpoints: Breakpoints.) at the
-beginning of the function or the section of your program where a problem
-is believed to lie, run your program until it stops at that breakpoint,
-and then step through the suspect area, examining the variables that are
-interesting, until you see the problem happen.
-
-`step'
- Continue running your program until control reaches a different
- source line, then stop it and return control to GDB. This command
- is abbreviated `s'.
-
- _Warning:_ If you use the `step' command while control is
- within a function that was compiled without debugging
- information, execution proceeds until control reaches a
- function that does have debugging information. Likewise, it
- will not step into a function which is compiled without
- debugging information. To step through functions without
- debugging information, use the `stepi' command, described
- below.
-
- The `step' command only stops at the first instruction of a source
- line. This prevents the multiple stops that could otherwise occur
- in `switch' statements, `for' loops, etc. `step' continues to
- stop if a function that has debugging information is called within
- the line. In other words, `step' _steps inside_ any functions
- called within the line.
-
- Also, the `step' command only enters a function if there is line
- number information for the function. Otherwise it acts like the
- `next' command. This avoids problems when using `cc -gl' on MIPS
- machines. Previously, `step' entered subroutines if there was any
- debugging information about the routine.
-
-`step COUNT'
- Continue running as in `step', but do so COUNT times. If a
- breakpoint is reached, or a signal not related to stepping occurs
- before COUNT steps, stepping stops right away.
-
-`next [COUNT]'
- Continue to the next source line in the current (innermost) stack
- frame. This is similar to `step', but function calls that appear
- within the line of code are executed without stopping. Execution
- stops when control reaches a different line of code at the
- original stack level that was executing when you gave the `next'
- command. This command is abbreviated `n'.
-
- An argument COUNT is a repeat count, as for `step'.
-
- The `next' command only stops at the first instruction of a source
- line. This prevents multiple stops that could otherwise occur in
- `switch' statements, `for' loops, etc.
-
-`set step-mode'
-`set step-mode on'
- The `set step-mode on' command causes the `step' command to stop
- at the first instruction of a function which contains no debug line
- information rather than stepping over it.
-
- This is useful in cases where you may be interested in inspecting
- the machine instructions of a function which has no symbolic info
- and do not want GDB to automatically skip over this function.
-
-`set step-mode off'
- Causes the `step' command to step over any functions which
- contains no debug information. This is the default.
-
-`finish'
- Continue running until just after function in the selected stack
- frame returns. Print the returned value (if any).
-
- Contrast this with the `return' command (*note Returning from a
- function: Returning.).
-
-`until'
-`u'
- Continue running until a source line past the current line, in the
- current stack frame, is reached. This command is used to avoid
- single stepping through a loop more than once. It is like the
- `next' command, except that when `until' encounters a jump, it
- automatically continues execution until the program counter is
- greater than the address of the jump.
-
- This means that when you reach the end of a loop after single
- stepping though it, `until' makes your program continue execution
- until it exits the loop. In contrast, a `next' command at the end
- of a loop simply steps back to the beginning of the loop, which
- forces you to step through the next iteration.
-
- `until' always stops your program if it attempts to exit the
- current stack frame.
-
- `until' may produce somewhat counterintuitive results if the order
- of machine code does not match the order of the source lines. For
- example, in the following excerpt from a debugging session, the `f'
- (`frame') command shows that execution is stopped at line `206';
- yet when we use `until', we get to line `195':
-
- (gdb) f
- #0 main (argc=4, argv=0xf7fffae8) at m4.c:206
- 206 expand_input();
- (gdb) until
- 195 for ( ; argc > 0; NEXTARG) {
-
- This happened because, for execution efficiency, the compiler had
- generated code for the loop closure test at the end, rather than
- the start, of the loop--even though the test in a C `for'-loop is
- written before the body of the loop. The `until' command appeared
- to step back to the beginning of the loop when it advanced to this
- expression; however, it has not really gone to an earlier
- statement--not in terms of the actual machine code.
-
- `until' with no argument works by means of single instruction
- stepping, and hence is slower than `until' with an argument.
-
-`until LOCATION'
-`u LOCATION'
- Continue running your program until either the specified location
- is reached, or the current stack frame returns. LOCATION is any of
- the forms of argument acceptable to `break' (*note Setting
- breakpoints: Set Breaks.). This form of the command uses
- breakpoints, and hence is quicker than `until' without an
- argument. The specified location is actually reached only if it
- is in the current frame. This implies that `until' can be used to
- skip over recursive function invocations. For instance in the
- code below, if the current location is line `96', issuing `until
- 99' will execute the program up to line `99' in the same
- invocation of factorial, i.e. after the inner invocations have
- returned.
-
- 94 int factorial (int value)
- 95 {
- 96 if (value > 1) {
- 97 value *= factorial (value - 1);
- 98 }
- 99 return (value);
- 100 }
-
-`advance LOCATION'
- Continue running the program up to the given location. An
- argument is required, anything of the same form as arguments for
- the `break' command. Execution will also stop upon exit from the
- current stack frame. This command is similar to `until', but
- `advance' will not skip over recursive function calls, and the
- target location doesn't have to be in the same frame as the
- current one.
-
-`stepi'
-`stepi ARG'
-`si'
- Execute one machine instruction, then stop and return to the
- debugger.
-
- It is often useful to do `display/i $pc' when stepping by machine
- instructions. This makes GDB automatically display the next
- instruction to be executed, each time your program stops. *Note
- Automatic display: Auto Display.
-
- An argument is a repeat count, as in `step'.
-
-`nexti'
-`nexti ARG'
-`ni'
- Execute one machine instruction, but if it is a function call,
- proceed until the function returns.
-
- An argument is a repeat count, as in `next'.
-
-
-File: gdb.info, Node: Signals, Next: Thread Stops, Prev: Continuing and Stepping, Up: Stopping
-
-Signals
-=======
-
-A signal is an asynchronous event that can happen in a program. The
-operating system defines the possible kinds of signals, and gives each
-kind a name and a number. For example, in Unix `SIGINT' is the signal
-a program gets when you type an interrupt character (often `C-c');
-`SIGSEGV' is the signal a program gets from referencing a place in
-memory far away from all the areas in use; `SIGALRM' occurs when the
-alarm clock timer goes off (which happens only if your program has
-requested an alarm).
-
- Some signals, including `SIGALRM', are a normal part of the
-functioning of your program. Others, such as `SIGSEGV', indicate
-errors; these signals are "fatal" (they kill your program immediately)
-if the program has not specified in advance some other way to handle
-the signal. `SIGINT' does not indicate an error in your program, but
-it is normally fatal so it can carry out the purpose of the interrupt:
-to kill the program.
-
- GDB has the ability to detect any occurrence of a signal in your
-program. You can tell GDB in advance what to do for each kind of
-signal.
-
- Normally, GDB is set up to let the non-erroneous signals like
-`SIGALRM' be silently passed to your program (so as not to interfere
-with their role in the program's functioning) but to stop your program
-immediately whenever an error signal happens. You can change these
-settings with the `handle' command.
-
-`info signals'
-`info handle'
- Print a table of all the kinds of signals and how GDB has been
- told to handle each one. You can use this to see the signal
- numbers of all the defined types of signals.
-
- `info handle' is an alias for `info signals'.
-
-`handle SIGNAL KEYWORDS...'
- Change the way GDB handles signal SIGNAL. SIGNAL can be the
- number of a signal or its name (with or without the `SIG' at the
- beginning); a list of signal numbers of the form `LOW-HIGH'; or
- the word `all', meaning all the known signals. The KEYWORDS say
- what change to make.
-
- The keywords allowed by the `handle' command can be abbreviated.
-Their full names are:
-
-`nostop'
- GDB should not stop your program when this signal happens. It may
- still print a message telling you that the signal has come in.
-
-`stop'
- GDB should stop your program when this signal happens. This
- implies the `print' keyword as well.
-
-`print'
- GDB should print a message when this signal happens.
-
-`noprint'
- GDB should not mention the occurrence of the signal at all. This
- implies the `nostop' keyword as well.
-
-`pass'
-`noignore'
- GDB should allow your program to see this signal; your program can
- handle the signal, or else it may terminate if the signal is fatal
- and not handled. `pass' and `noignore' are synonyms.
-
-`nopass'
-`ignore'
- GDB should not allow your program to see this signal. `nopass'
- and `ignore' are synonyms.
-
- When a signal stops your program, the signal is not visible to the
-program until you continue. Your program sees the signal then, if
-`pass' is in effect for the signal in question _at that time_. In
-other words, after GDB reports a signal, you can use the `handle'
-command with `pass' or `nopass' to control whether your program sees
-that signal when you continue.
-
- The default is set to `nostop', `noprint', `pass' for non-erroneous
-signals such as `SIGALRM', `SIGWINCH' and `SIGCHLD', and to `stop',
-`print', `pass' for the erroneous signals.
-
- You can also use the `signal' command to prevent your program from
-seeing a signal, or cause it to see a signal it normally would not see,
-or to give it any signal at any time. For example, if your program
-stopped due to some sort of memory reference error, you might store
-correct values into the erroneous variables and continue, hoping to see
-more execution; but your program would probably terminate immediately as
-a result of the fatal signal once it saw the signal. To prevent this,
-you can continue with `signal 0'. *Note Giving your program a signal:
-Signaling.
-
-
-File: gdb.info, Node: Thread Stops, Prev: Signals, Up: Stopping
-
-Stopping and starting multi-thread programs
-===========================================
-
-When your program has multiple threads (*note Debugging programs with
-multiple threads: Threads.), you can choose whether to set breakpoints
-on all threads, or on a particular thread.
-
-`break LINESPEC thread THREADNO'
-`break LINESPEC thread THREADNO if ...'
- LINESPEC specifies source lines; there are several ways of writing
- them, but the effect is always to specify some source line.
-
- Use the qualifier `thread THREADNO' with a breakpoint command to
- specify that you only want GDB to stop the program when a
- particular thread reaches this breakpoint. THREADNO is one of the
- numeric thread identifiers assigned by GDB, shown in the first
- column of the `info threads' display.
-
- If you do not specify `thread THREADNO' when you set a breakpoint,
- the breakpoint applies to _all_ threads of your program.
-
- You can use the `thread' qualifier on conditional breakpoints as
- well; in this case, place `thread THREADNO' before the breakpoint
- condition, like this:
-
- (gdb) break frik.c:13 thread 28 if bartab > lim
-
-
- Whenever your program stops under GDB for any reason, _all_ threads
-of execution stop, not just the current thread. This allows you to
-examine the overall state of the program, including switching between
-threads, without worrying that things may change underfoot.
-
- There is an unfortunate side effect. If one thread stops for a
-breakpoint, or for some other reason, and another thread is blocked in a
-system call, then the system call may return prematurely. This is a
-consequence of the interaction between multiple threads and the signals
-that GDB uses to implement breakpoints and other events that stop
-execution.
-
- To handle this problem, your program should check the return value of
-each system call and react appropriately. This is good programming
-style anyways.
-
- For example, do not write code like this:
-
- sleep (10);
-
- The call to `sleep' will return early if a different thread stops at
-a breakpoint or for some other reason.
-
- Instead, write this:
-
- int unslept = 10;
- while (unslept > 0)
- unslept = sleep (unslept);
-
- A system call is allowed to return early, so the system is still
-conforming to its specification. But GDB does cause your
-multi-threaded program to behave differently than it would without GDB.
-
- Also, GDB uses internal breakpoints in the thread library to monitor
-certain events such as thread creation and thread destruction. When
-such an event happens, a system call in another thread may return
-prematurely, even though your program does not appear to stop.
-
- Conversely, whenever you restart the program, _all_ threads start
-executing. _This is true even when single-stepping_ with commands like
-`step' or `next'.
-
- In particular, GDB cannot single-step all threads in lockstep.
-Since thread scheduling is up to your debugging target's operating
-system (not controlled by GDB), other threads may execute more than one
-statement while the current thread completes a single step. Moreover,
-in general other threads stop in the middle of a statement, rather than
-at a clean statement boundary, when the program stops.
-
- You might even find your program stopped in another thread after
-continuing or even single-stepping. This happens whenever some other
-thread runs into a breakpoint, a signal, or an exception before the
-first thread completes whatever you requested.
-
- On some OSes, you can lock the OS scheduler and thus allow only a
-single thread to run.
-
-`set scheduler-locking MODE'
- Set the scheduler locking mode. If it is `off', then there is no
- locking and any thread may run at any time. If `on', then only the
- current thread may run when the inferior is resumed. The `step'
- mode optimizes for single-stepping. It stops other threads from
- "seizing the prompt" by preempting the current thread while you are
- stepping. Other threads will only rarely (or never) get a chance
- to run when you step. They are more likely to run when you `next'
- over a function call, and they are completely free to run when you
- use commands like `continue', `until', or `finish'. However,
- unless another thread hits a breakpoint during its timeslice, they
- will never steal the GDB prompt away from the thread that you are
- debugging.
-
-`show scheduler-locking'
- Display the current scheduler locking mode.
-
-
-File: gdb.info, Node: Stack, Next: Source, Prev: Stopping, Up: Top
-
-Examining the Stack
-*******************
-
-When your program has stopped, the first thing you need to know is
-where it stopped and how it got there.
-
- Each time your program performs a function call, information about
-the call is generated. That information includes the location of the
-call in your program, the arguments of the call, and the local
-variables of the function being called. The information is saved in a
-block of data called a "stack frame". The stack frames are allocated
-in a region of memory called the "call stack".
-
- When your program stops, the GDB commands for examining the stack
-allow you to see all of this information.
-
- One of the stack frames is "selected" by GDB and many GDB commands
-refer implicitly to the selected frame. In particular, whenever you
-ask GDB for the value of a variable in your program, the value is found
-in the selected frame. There are special GDB commands to select
-whichever frame you are interested in. *Note Selecting a frame:
-Selection.
-
- When your program stops, GDB automatically selects the currently
-executing frame and describes it briefly, similar to the `frame'
-command (*note Information about a frame: Frame Info.).
-
-* Menu:
-
-* Frames:: Stack frames
-* Backtrace:: Backtraces
-* Selection:: Selecting a frame
-* Frame Info:: Information on a frame
-
-
-File: gdb.info, Node: Frames, Next: Backtrace, Up: Stack
-
-Stack frames
-============
-
-The call stack is divided up into contiguous pieces called "stack
-frames", or "frames" for short; each frame is the data associated with
-one call to one function. The frame contains the arguments given to
-the function, the function's local variables, and the address at which
-the function is executing.
-
- When your program is started, the stack has only one frame, that of
-the function `main'. This is called the "initial" frame or the
-"outermost" frame. Each time a function is called, a new frame is
-made. Each time a function returns, the frame for that function
-invocation is eliminated. If a function is recursive, there can be
-many frames for the same function. The frame for the function in which
-execution is actually occurring is called the "innermost" frame. This
-is the most recently created of all the stack frames that still exist.
-
- Inside your program, stack frames are identified by their addresses.
-A stack frame consists of many bytes, each of which has its own
-address; each kind of computer has a convention for choosing one byte
-whose address serves as the address of the frame. Usually this address
-is kept in a register called the "frame pointer register" while
-execution is going on in that frame.
-
- GDB assigns numbers to all existing stack frames, starting with zero
-for the innermost frame, one for the frame that called it, and so on
-upward. These numbers do not really exist in your program; they are
-assigned by GDB to give you a way of designating stack frames in GDB
-commands.
-
- Some compilers provide a way to compile functions so that they
-operate without stack frames. (For example, the gcc option
- `-fomit-frame-pointer'
- generates functions without a frame.) This is occasionally done
-with heavily used library functions to save the frame setup time. GDB
-has limited facilities for dealing with these function invocations. If
-the innermost function invocation has no stack frame, GDB nevertheless
-regards it as though it had a separate frame, which is numbered zero as
-usual, allowing correct tracing of the function call chain. However,
-GDB has no provision for frameless functions elsewhere in the stack.
-
-`frame ARGS'
- The `frame' command allows you to move from one stack frame to
- another, and to print the stack frame you select. ARGS may be
- either the address of the frame or the stack frame number.
- Without an argument, `frame' prints the current stack frame.
-
-`select-frame'
- The `select-frame' command allows you to move from one stack frame
- to another without printing the frame. This is the silent version
- of `frame'.
-
-
-File: gdb.info, Node: Backtrace, Next: Selection, Prev: Frames, Up: Stack
-
-Backtraces
-==========
-
-A backtrace is a summary of how your program got where it is. It shows
-one line per frame, for many frames, starting with the currently
-executing frame (frame zero), followed by its caller (frame one), and
-on up the stack.
-
-`backtrace'
-`bt'
- Print a backtrace of the entire stack: one line per frame for all
- frames in the stack.
-
- You can stop the backtrace at any time by typing the system
- interrupt character, normally `C-c'.
-
-`backtrace N'
-`bt N'
- Similar, but print only the innermost N frames.
-
-`backtrace -N'
-`bt -N'
- Similar, but print only the outermost N frames.
-
- The names `where' and `info stack' (abbreviated `info s') are
-additional aliases for `backtrace'.
-
- Each line in the backtrace shows the frame number and the function
-name. The program counter value is also shown--unless you use `set
-print address off'. The backtrace also shows the source file name and
-line number, as well as the arguments to the function. The program
-counter value is omitted if it is at the beginning of the code for that
-line number.
-
- Here is an example of a backtrace. It was made with the command `bt
-3', so it shows the innermost three frames.
-
- #0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
- at builtin.c:993
- #1 0x6e38 in expand_macro (sym=0x2b600) at macro.c:242
- #2 0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
- at macro.c:71
- (More stack frames follow...)
-
-The display for frame zero does not begin with a program counter value,
-indicating that your program has stopped at the beginning of the code
-for line `993' of `builtin.c'.
-
- Most programs have a standard user entry point--a place where system
-libraries and startup code transition into user code. For C this is
-`main'. When GDB finds the entry function in a backtrace it will
-terminate the backtrace, to avoid tracing into highly system-specific
-(and generally uninteresting) code.
-
- If you need to examine the startup code, or limit the number of
-levels in a backtrace, you can change this behavior:
-
-`set backtrace past-main'
-`set backtrace past-main on'
- Backtraces will continue past the user entry point.
-
-`set backtrace past-main off'
- Backtraces will stop when they encounter the user entry point.
- This is the default.
-
-`show backtrace past-main'
- Display the current user entry point backtrace policy.
-
-`set backtrace limit N'
-`set backtrace limit 0'
- Limit the backtrace to N levels. A value of zero means unlimited.
-
-`show backtrace limit'
- Display the current limit on backtrace levels.
-
-
-File: gdb.info, Node: Selection, Next: Frame Info, Prev: Backtrace, Up: Stack
-
-Selecting a frame
-=================
-
-Most commands for examining the stack and other data in your program
-work on whichever stack frame is selected at the moment. Here are the
-commands for selecting a stack frame; all of them finish by printing a
-brief description of the stack frame just selected.
-
-`frame N'
-`f N'
- Select frame number N. Recall that frame zero is the innermost
- (currently executing) frame, frame one is the frame that called the
- innermost one, and so on. The highest-numbered frame is the one
- for `main'.
-
-`frame ADDR'
-`f ADDR'
- Select the frame at address ADDR. This is useful mainly if the
- chaining of stack frames has been damaged by a bug, making it
- impossible for GDB to assign numbers properly to all frames. In
- addition, this can be useful when your program has multiple stacks
- and switches between them.
-
- On the SPARC architecture, `frame' needs two addresses to select
- an arbitrary frame: a frame pointer and a stack pointer.
-
- On the MIPS and Alpha architecture, it needs two addresses: a stack
- pointer and a program counter.
-
- On the 29k architecture, it needs three addresses: a register stack
- pointer, a program counter, and a memory stack pointer.
-
-`up N'
- Move N frames up the stack. For positive numbers N, this advances
- toward the outermost frame, to higher frame numbers, to frames
- that have existed longer. N defaults to one.
-
-`down N'
- Move N frames down the stack. For positive numbers N, this
- advances toward the innermost frame, to lower frame numbers, to
- frames that were created more recently. N defaults to one. You
- may abbreviate `down' as `do'.
-
- All of these commands end by printing two lines of output describing
-the frame. The first line shows the frame number, the function name,
-the arguments, and the source file and line number of execution in that
-frame. The second line shows the text of that source line.
-
- For example:
-
- (gdb) up
- #1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
- at env.c:10
- 10 read_input_file (argv[i]);
-
- After such a printout, the `list' command with no arguments prints
-ten lines centered on the point of execution in the frame. You can
-also edit the program at the point of execution with your favorite
-editing program by typing `edit'. *Note Printing source lines: List,
-for details.
-
-`up-silently N'
-`down-silently N'
- These two commands are variants of `up' and `down', respectively;
- they differ in that they do their work silently, without causing
- display of the new frame. They are intended primarily for use in
- GDB command scripts, where the output might be unnecessary and
- distracting.
-
-
-File: gdb.info, Node: Frame Info, Prev: Selection, Up: Stack
-
-Information about a frame
-=========================
-
-There are several other commands to print information about the selected
-stack frame.
-
-`frame'
-`f'
- When used without any argument, this command does not change which
- frame is selected, but prints a brief description of the currently
- selected stack frame. It can be abbreviated `f'. With an
- argument, this command is used to select a stack frame. *Note
- Selecting a frame: Selection.
-
-`info frame'
-`info f'
- This command prints a verbose description of the selected stack
- frame, including:
-
- * the address of the frame
-
- * the address of the next frame down (called by this frame)
-
- * the address of the next frame up (caller of this frame)
-
- * the language in which the source code corresponding to this
- frame is written
-
- * the address of the frame's arguments
-
- * the address of the frame's local variables
-
- * the program counter saved in it (the address of execution in
- the caller frame)
-
- * which registers were saved in the frame
-
- The verbose description is useful when something has gone wrong
- that has made the stack format fail to fit the usual conventions.
-
-`info frame ADDR'
-`info f ADDR'
- Print a verbose description of the frame at address ADDR, without
- selecting that frame. The selected frame remains unchanged by this
- command. This requires the same kind of address (more than one
- for some architectures) that you specify in the `frame' command.
- *Note Selecting a frame: Selection.
-
-`info args'
- Print the arguments of the selected frame, each on a separate line.
-
-`info locals'
- Print the local variables of the selected frame, each on a separate
- line. These are all variables (declared either static or
- automatic) accessible at the point of execution of the selected
- frame.
-
-`info catch'
- Print a list of all the exception handlers that are active in the
- current stack frame at the current point of execution. To see
- other exception handlers, visit the associated frame (using the
- `up', `down', or `frame' commands); then type `info catch'. *Note
- Setting catchpoints: Set Catchpoints.
-
-
-
-File: gdb.info, Node: Source, Next: Data, Prev: Stack, Up: Top
-
-Examining Source Files
-**********************
-
-GDB can print parts of your program's source, since the debugging
-information recorded in the program tells GDB what source files were
-used to build it. When your program stops, GDB spontaneously prints
-the line where it stopped. Likewise, when you select a stack frame
-(*note Selecting a frame: Selection.), GDB prints the line where
-execution in that frame has stopped. You can print other portions of
-source files by explicit command.
-
- If you use GDB through its GNU Emacs interface, you may prefer to
-use Emacs facilities to view source; see *Note Using GDB under GNU
-Emacs: Emacs.
-
-* Menu:
-
-* List:: Printing source lines
-* Edit:: Editing source files
-* Search:: Searching source files
-* Source Path:: Specifying source directories
-* Machine Code:: Source and machine code
-
-
-File: gdb.info, Node: List, Next: Edit, Up: Source
-
-Printing source lines
-=====================
-
-To print lines from a source file, use the `list' command (abbreviated
-`l'). By default, ten lines are printed. There are several ways to
-specify what part of the file you want to print.
-
- Here are the forms of the `list' command most commonly used:
-
-`list LINENUM'
- Print lines centered around line number LINENUM in the current
- source file.
-
-`list FUNCTION'
- Print lines centered around the beginning of function FUNCTION.
-
-`list'
- Print more lines. If the last lines printed were printed with a
- `list' command, this prints lines following the last lines
- printed; however, if the last line printed was a solitary line
- printed as part of displaying a stack frame (*note Examining the
- Stack: Stack.), this prints lines centered around that line.
-
-`list -'
- Print lines just before the lines last printed.
-
- By default, GDB prints ten source lines with any of these forms of
-the `list' command. You can change this using `set listsize':
-
-`set listsize COUNT'
- Make the `list' command display COUNT source lines (unless the
- `list' argument explicitly specifies some other number).
-
-`show listsize'
- Display the number of lines that `list' prints.
-
- Repeating a `list' command with <RET> discards the argument, so it
-is equivalent to typing just `list'. This is more useful than listing
-the same lines again. An exception is made for an argument of `-';
-that argument is preserved in repetition so that each repetition moves
-up in the source file.
-
- In general, the `list' command expects you to supply zero, one or two
-"linespecs". Linespecs specify source lines; there are several ways of
-writing them, but the effect is always to specify some source line.
-Here is a complete description of the possible arguments for `list':
-
-`list LINESPEC'
- Print lines centered around the line specified by LINESPEC.
-
-`list FIRST,LAST'
- Print lines from FIRST to LAST. Both arguments are linespecs.
-
-`list ,LAST'
- Print lines ending with LAST.
-
-`list FIRST,'
- Print lines starting with FIRST.
-
-`list +'
- Print lines just after the lines last printed.
-
-`list -'
- Print lines just before the lines last printed.
-
-`list'
- As described in the preceding table.
-
- Here are the ways of specifying a single source line--all the kinds
-of linespec.
-
-`NUMBER'
- Specifies line NUMBER of the current source file. When a `list'
- command has two linespecs, this refers to the same source file as
- the first linespec.
-
-`+OFFSET'
- Specifies the line OFFSET lines after the last line printed. When
- used as the second linespec in a `list' command that has two, this
- specifies the line OFFSET lines down from the first linespec.
-
-`-OFFSET'
- Specifies the line OFFSET lines before the last line printed.
-
-`FILENAME:NUMBER'
- Specifies line NUMBER in the source file FILENAME.
-
-`FUNCTION'
- Specifies the line that begins the body of the function FUNCTION.
- For example: in C, this is the line with the open brace.
-
-`FILENAME:FUNCTION'
- Specifies the line of the open-brace that begins the body of the
- function FUNCTION in the file FILENAME. You only need the file
- name with a function name to avoid ambiguity when there are
- identically named functions in different source files.
-
-`*ADDRESS'
- Specifies the line containing the program address ADDRESS.
- ADDRESS may be any expression.
-
-
-File: gdb.info, Node: Edit, Next: Search, Prev: List, Up: Source
-
-Editing source files
-====================
-
-To edit the lines in a source file, use the `edit' command. The
-editing program of your choice is invoked with the current line set to
-the active line in the program. Alternatively, there are several ways
-to specify what part of the file you want to print if you want to see
-other parts of the program.
-
- Here are the forms of the `edit' command most commonly used:
-
-`edit'
- Edit the current source file at the active line number in the
- program.
-
-`edit NUMBER'
- Edit the current source file with NUMBER as the active line number.
-
-`edit FUNCTION'
- Edit the file containing FUNCTION at the beginning of its
- definition.
-
-`edit FILENAME:NUMBER'
- Specifies line NUMBER in the source file FILENAME.
-
-`edit FILENAME:FUNCTION'
- Specifies the line that begins the body of the function FUNCTION
- in the file FILENAME. You only need the file name with a function
- name to avoid ambiguity when there are identically named functions
- in different source files.
-
-`edit *ADDRESS'
- Specifies the line containing the program address ADDRESS.
- ADDRESS may be any expression.
-
-Choosing your editor
---------------------
-
-You can customize GDB to use any editor you want (1). By default, it
-is /bin/ex, but you can change this by setting the environment variable
-`EDITOR' before using GDB. For example, to configure GDB to use the
-`vi' editor, you could use these commands with the `sh' shell:
- EDITOR=/usr/bin/vi
- export EDITOR
- gdb ...
- or in the `csh' shell,
- setenv EDITOR /usr/bin/vi
- gdb ...
-
- ---------- Footnotes ----------
-
- (1) The only restriction is that your editor (say `ex'), recognizes
-the following command-line syntax:
- ex +NUMBER file
- The optional numeric value +NUMBER designates the active line in the
-file.
-
-
-File: gdb.info, Node: Search, Next: Source Path, Prev: Edit, Up: Source
-
-Searching source files
-======================
-
-There are two commands for searching through the current source file
-for a regular expression.
-
-`forward-search REGEXP'
-`search REGEXP'
- The command `forward-search REGEXP' checks each line, starting
- with the one following the last line listed, for a match for
- REGEXP. It lists the line that is found. You can use the synonym
- `search REGEXP' or abbreviate the command name as `fo'.
-
-`reverse-search REGEXP'
- The command `reverse-search REGEXP' checks each line, starting
- with the one before the last line listed and going backward, for a
- match for REGEXP. It lists the line that is found. You can
- abbreviate this command as `rev'.
-
-
-File: gdb.info, Node: Source Path, Next: Machine Code, Prev: Search, Up: Source
-
-Specifying source directories
-=============================
-
-Executable programs sometimes do not record the directories of the
-source files from which they were compiled, just the names. Even when
-they do, the directories could be moved between the compilation and
-your debugging session. GDB has a list of directories to search for
-source files; this is called the "source path". Each time GDB wants a
-source file, it tries all the directories in the list, in the order
-they are present in the list, until it finds a file with the desired
-name. Note that the executable search path is _not_ used for this
-purpose. Neither is the current working directory, unless it happens
-to be in the source path.
-
- If GDB cannot find a source file in the source path, and the object
-program records a directory, GDB tries that directory too. If the
-source path is empty, and there is no record of the compilation
-directory, GDB looks in the current directory as a last resort.
-
- Whenever you reset or rearrange the source path, GDB clears out any
-information it has cached about where source files are found and where
-each line is in the file.
-
- When you start GDB, its source path includes only `cdir' and `cwd',
-in that order. To add other directories, use the `directory' command.
-
-`directory DIRNAME ...'
-
-`dir DIRNAME ...'
- Add directory DIRNAME to the front of the source path. Several
- directory names may be given to this command, separated by `:'
- (`;' on MS-DOS and MS-Windows, where `:' usually appears as part
- of absolute file names) or whitespace. You may specify a
- directory that is already in the source path; this moves it
- forward, so GDB searches it sooner.
-
- You can use the string `$cdir' to refer to the compilation
- directory (if one is recorded), and `$cwd' to refer to the current
- working directory. `$cwd' is not the same as `.'--the former
- tracks the current working directory as it changes during your GDB
- session, while the latter is immediately expanded to the current
- directory at the time you add an entry to the source path.
-
-`directory'
- Reset the source path to empty again. This requires confirmation.
-
-`show directories'
- Print the source path: show which directories it contains.
-
- If your source path is cluttered with directories that are no longer
-of interest, GDB may sometimes cause confusion by finding the wrong
-versions of source. You can correct the situation as follows:
-
- 1. Use `directory' with no argument to reset the source path to empty.
-
- 2. Use `directory' with suitable arguments to reinstall the
- directories you want in the source path. You can add all the
- directories in one command.
-
-
-File: gdb.info, Node: Machine Code, Prev: Source Path, Up: Source
-
-Source and machine code
-=======================
-
-You can use the command `info line' to map source lines to program
-addresses (and vice versa), and the command `disassemble' to display a
-range of addresses as machine instructions. When run under GNU Emacs
-mode, the `info line' command causes the arrow to point to the line
-specified. Also, `info line' prints addresses in symbolic form as well
-as hex.
-
-`info line LINESPEC'
- Print the starting and ending addresses of the compiled code for
- source line LINESPEC. You can specify source lines in any of the
- ways understood by the `list' command (*note Printing source
- lines: List.).
-
- For example, we can use `info line' to discover the location of the
-object code for the first line of function `m4_changequote':
-
- (gdb) info line m4_changequote
- Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
-
-We can also inquire (using `*ADDR' as the form for LINESPEC) what
-source line covers a particular address:
- (gdb) info line *0x63ff
- Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
-
- After `info line', the default address for the `x' command is
-changed to the starting address of the line, so that `x/i' is
-sufficient to begin examining the machine code (*note Examining memory:
-Memory.). Also, this address is saved as the value of the convenience
-variable `$_' (*note Convenience variables: Convenience Vars.).
-
-`disassemble'
- This specialized command dumps a range of memory as machine
- instructions. The default memory range is the function
- surrounding the program counter of the selected frame. A single
- argument to this command is a program counter value; GDB dumps the
- function surrounding this value. Two arguments specify a range of
- addresses (first inclusive, second exclusive) to dump.
-
- The following example shows the disassembly of a range of addresses
-of HP PA-RISC 2.0 code:
-
- (gdb) disas 0x32c4 0x32e4
- Dump of assembler code from 0x32c4 to 0x32e4:
- 0x32c4 <main+204>: addil 0,dp
- 0x32c8 <main+208>: ldw 0x22c(sr0,r1),r26
- 0x32cc <main+212>: ldil 0x3000,r31
- 0x32d0 <main+216>: ble 0x3f8(sr4,r31)
- 0x32d4 <main+220>: ldo 0(r31),rp
- 0x32d8 <main+224>: addil -0x800,dp
- 0x32dc <main+228>: ldo 0x588(r1),r26
- 0x32e0 <main+232>: ldil 0x3000,r31
- End of assembler dump.
-
- Some architectures have more than one commonly-used set of
-instruction mnemonics or other syntax.
-
-`set disassembly-flavor INSTRUCTION-SET'
- Select the instruction set to use when disassembling the program
- via the `disassemble' or `x/i' commands.
-
- Currently this command is only defined for the Intel x86 family.
- You can set INSTRUCTION-SET to either `intel' or `att'. The
- default is `att', the AT&T flavor used by default by Unix
- assemblers for x86-based targets.
-
-
-File: gdb.info, Node: Data, Next: Macros, Prev: Source, Up: Top
-
-Examining Data
-**************
-
-The usual way to examine data in your program is with the `print'
-command (abbreviated `p'), or its synonym `inspect'. It evaluates and
-prints the value of an expression of the language your program is
-written in (*note Using GDB with Different Languages: Languages.).
-
-`print EXPR'
-`print /F EXPR'
- EXPR is an expression (in the source language). By default the
- value of EXPR is printed in a format appropriate to its data type;
- you can choose a different format by specifying `/F', where F is a
- letter specifying the format; see *Note Output formats: Output
- Formats.
-
-`print'
-`print /F'
- If you omit EXPR, GDB displays the last value again (from the
- "value history"; *note Value history: Value History.). This
- allows you to conveniently inspect the same value in an
- alternative format.
-
- A more low-level way of examining data is with the `x' command. It
-examines data in memory at a specified address and prints it in a
-specified format. *Note Examining memory: Memory.
-
- If you are interested in information about types, or about how the
-fields of a struct or a class are declared, use the `ptype EXP' command
-rather than `print'. *Note Examining the Symbol Table: Symbols.
-
-* Menu:
-
-* Expressions:: Expressions
-* Variables:: Program variables
-* Arrays:: Artificial arrays
-* Output Formats:: Output formats
-* Memory:: Examining memory
-* Auto Display:: Automatic display
-* Print Settings:: Print settings
-* Value History:: Value history
-* Convenience Vars:: Convenience variables
-* Registers:: Registers
-* Floating Point Hardware:: Floating point hardware
-* Vector Unit:: Vector Unit
-* Auxiliary Vector:: Auxiliary data provided by operating system
-* Memory Region Attributes:: Memory region attributes
-* Dump/Restore Files:: Copy between memory and a file
-* Character Sets:: Debugging programs that use a different
- character set than GDB does
-
-
-File: gdb.info, Node: Expressions, Next: Variables, Up: Data
-
-Expressions
-===========
-
-`print' and many other GDB commands accept an expression and compute
-its value. Any kind of constant, variable or operator defined by the
-programming language you are using is valid in an expression in GDB.
-This includes conditional expressions, function calls, casts, and
-string constants. It also includes preprocessor macros, if you
-compiled your program to include this information; see *Note
-Compilation::.
-
- GDB supports array constants in expressions input by the user. The
-syntax is {ELEMENT, ELEMENT...}. For example, you can use the command
-`print {1, 2, 3}' to build up an array in memory that is `malloc'ed in
-the target program.
-
- Because C is so widespread, most of the expressions shown in
-examples in this manual are in C. *Note Using GDB with Different
-Languages: Languages, for information on how to use expressions in other
-languages.
-
- In this section, we discuss operators that you can use in GDB
-expressions regardless of your programming language.
-
- Casts are supported in all languages, not just in C, because it is so
-useful to cast a number into a pointer in order to examine a structure
-at that address in memory.
-
- GDB supports these operators, in addition to those common to
-programming languages:
-
-`@'
- `@' is a binary operator for treating parts of memory as arrays.
- *Note Artificial arrays: Arrays, for more information.
-
-`::'
- `::' allows you to specify a variable in terms of the file or
- function where it is defined. *Note Program variables: Variables.
-
-`{TYPE} ADDR'
- Refers to an object of type TYPE stored at address ADDR in memory.
- ADDR may be any expression whose value is an integer or pointer
- (but parentheses are required around binary operators, just as in
- a cast). This construct is allowed regardless of what kind of
- data is normally supposed to reside at ADDR.
-
-
-File: gdb.info, Node: Variables, Next: Arrays, Prev: Expressions, Up: Data
-
-Program variables
-=================
-
-The most common kind of expression to use is the name of a variable in
-your program.
-
- Variables in expressions are understood in the selected stack frame
-(*note Selecting a frame: Selection.); they must be either:
-
- * global (or file-static)
-
-or
-
- * visible according to the scope rules of the programming language
- from the point of execution in that frame
-
-This means that in the function
-
- foo (a)
- int a;
- {
- bar (a);
- {
- int b = test ();
- bar (b);
- }
- }
-
-you can examine and use the variable `a' whenever your program is
-executing within the function `foo', but you can only use or examine
-the variable `b' while your program is executing inside the block where
-`b' is declared.
-
- There is an exception: you can refer to a variable or function whose
-scope is a single source file even if the current execution point is not
-in this file. But it is possible to have more than one such variable or
-function with the same name (in different source files). If that
-happens, referring to that name has unpredictable effects. If you wish,
-you can specify a static variable in a particular function or file,
-using the colon-colon notation:
-
- FILE::VARIABLE
- FUNCTION::VARIABLE
-
-Here FILE or FUNCTION is the name of the context for the static
-VARIABLE. In the case of file names, you can use quotes to make sure
-GDB parses the file name as a single word--for example, to print a
-global value of `x' defined in `f2.c':
-
- (gdb) p 'f2.c'::x
-
- This use of `::' is very rarely in conflict with the very similar
-use of the same notation in C++. GDB also supports use of the C++
-scope resolution operator in GDB expressions.
-
- _Warning:_ Occasionally, a local variable may appear to have the
- wrong value at certain points in a function--just after entry to a
- new scope, and just before exit.
- You may see this problem when you are stepping by machine
-instructions. This is because, on most machines, it takes more than
-one instruction to set up a stack frame (including local variable
-definitions); if you are stepping by machine instructions, variables
-may appear to have the wrong values until the stack frame is completely
-built. On exit, it usually also takes more than one machine
-instruction to destroy a stack frame; after you begin stepping through
-that group of instructions, local variable definitions may be gone.
-
- This may also happen when the compiler does significant
-optimizations. To be sure of always seeing accurate values, turn off
-all optimization when compiling.
-
- Another possible effect of compiler optimizations is to optimize
-unused variables out of existence, or assign variables to registers (as
-opposed to memory addresses). Depending on the support for such cases
-offered by the debug info format used by the compiler, GDB might not be
-able to display values for such local variables. If that happens, GDB
-will print a message like this:
-
- No symbol "foo" in current context.
-
- To solve such problems, either recompile without optimizations, or
-use a different debug info format, if the compiler supports several such
-formats. For example, GCC, the GNU C/C++ compiler usually supports the
-`-gstabs+' option. `-gstabs+' produces debug info in a format that is
-superior to formats such as COFF. You may be able to use DWARF 2
-(`-gdwarf-2'), which is also an effective form for debug info. *Note
-Options for Debugging Your Program or GNU CC: (gcc.info)Debugging
-Options.
-
-
-File: gdb.info, Node: Arrays, Next: Output Formats, Prev: Variables, Up: Data
-
-Artificial arrays
-=================
-
-It is often useful to print out several successive objects of the same
-type in memory; a section of an array, or an array of dynamically
-determined size for which only a pointer exists in the program.
-
- You can do this by referring to a contiguous span of memory as an
-"artificial array", using the binary operator `@'. The left operand of
-`@' should be the first element of the desired array and be an
-individual object. The right operand should be the desired length of
-the array. The result is an array value whose elements are all of the
-type of the left argument. The first element is actually the left
-argument; the second element comes from bytes of memory immediately
-following those that hold the first element, and so on. Here is an
-example. If a program says
-
- int *array = (int *) malloc (len * sizeof (int));
-
-you can print the contents of `array' with
-
- p *array@len
-
- The left operand of `@' must reside in memory. Array values made
-with `@' in this way behave just like other arrays in terms of
-subscripting, and are coerced to pointers when used in expressions.
-Artificial arrays most often appear in expressions via the value history
-(*note Value history: Value History.), after printing one out.
-
- Another way to create an artificial array is to use a cast. This
-re-interprets a value as if it were an array. The value need not be in
-memory:
- (gdb) p/x (short[2])0x12345678
- $1 = {0x1234, 0x5678}
-
- As a convenience, if you leave the array length out (as in
-`(TYPE[])VALUE') GDB calculates the size to fill the value (as
-`sizeof(VALUE)/sizeof(TYPE)':
- (gdb) p/x (short[])0x12345678
- $2 = {0x1234, 0x5678}
-
- Sometimes the artificial array mechanism is not quite enough; in
-moderately complex data structures, the elements of interest may not
-actually be adjacent--for example, if you are interested in the values
-of pointers in an array. One useful work-around in this situation is
-to use a convenience variable (*note Convenience variables: Convenience
-Vars.) as a counter in an expression that prints the first interesting
-value, and then repeat that expression via <RET>. For instance,
-suppose you have an array `dtab' of pointers to structures, and you are
-interested in the values of a field `fv' in each structure. Here is an
-example of what you might type:
-
- set $i = 0
- p dtab[$i++]->fv
- <RET>
- <RET>
- ...
-
-
-File: gdb.info, Node: Output Formats, Next: Memory, Prev: Arrays, Up: Data
-
-Output formats
-==============
-
-By default, GDB prints a value according to its data type. Sometimes
-this is not what you want. For example, you might want to print a
-number in hex, or a pointer in decimal. Or you might want to view data
-in memory at a certain address as a character string or as an
-instruction. To do these things, specify an "output format" when you
-print a value.
-
- The simplest use of output formats is to say how to print a value
-already computed. This is done by starting the arguments of the
-`print' command with a slash and a format letter. The format letters
-supported are:
-
-`x'
- Regard the bits of the value as an integer, and print the integer
- in hexadecimal.
-
-`d'
- Print as integer in signed decimal.
-
-`u'
- Print as integer in unsigned decimal.
-
-`o'
- Print as integer in octal.
-
-`t'
- Print as integer in binary. The letter `t' stands for "two". (1)
-
-`a'
- Print as an address, both absolute in hexadecimal and as an offset
- from the nearest preceding symbol. You can use this format used
- to discover where (in what function) an unknown address is located:
-
- (gdb) p/a 0x54320
- $3 = 0x54320 <_initialize_vx+396>
-
- The command `info symbol 0x54320' yields similar results. *Note
- info symbol: Symbols.
-
-`c'
- Regard as an integer and print it as a character constant.
-
-`f'
- Regard the bits of the value as a floating point number and print
- using typical floating point syntax.
-
- For example, to print the program counter in hex (*note
-Registers::), type
-
- p/x $pc
-
-Note that no space is required before the slash; this is because command
-names in GDB cannot contain a slash.
-
- To reprint the last value in the value history with a different
-format, you can use the `print' command with just a format and no
-expression. For example, `p/x' reprints the last value in hex.
-
- ---------- Footnotes ----------
-
- (1) `b' cannot be used because these format letters are also used
-with the `x' command, where `b' stands for "byte"; see *Note Examining
-memory: Memory.
-
-
-File: gdb.info, Node: Memory, Next: Auto Display, Prev: Output Formats, Up: Data
-
-Examining memory
-================
-
-You can use the command `x' (for "examine") to examine memory in any of
-several formats, independently of your program's data types.
-
-`x/NFU ADDR'
-`x ADDR'
-`x'
- Use the `x' command to examine memory.
-
- N, F, and U are all optional parameters that specify how much memory
-to display and how to format it; ADDR is an expression giving the
-address where you want to start displaying memory. If you use defaults
-for NFU, you need not type the slash `/'. Several commands set
-convenient defaults for ADDR.
-
-N, the repeat count
- The repeat count is a decimal integer; the default is 1. It
- specifies how much memory (counting by units U) to display.
-
-F, the display format
- The display format is one of the formats used by `print', `s'
- (null-terminated string), or `i' (machine instruction). The
- default is `x' (hexadecimal) initially. The default changes each
- time you use either `x' or `print'.
-
-U, the unit size
- The unit size is any of
-
- `b'
- Bytes.
-
- `h'
- Halfwords (two bytes).
-
- `w'
- Words (four bytes). This is the initial default.
-
- `g'
- Giant words (eight bytes).
-
- Each time you specify a unit size with `x', that size becomes the
- default unit the next time you use `x'. (For the `s' and `i'
- formats, the unit size is ignored and is normally not written.)
-
-ADDR, starting display address
- ADDR is the address where you want GDB to begin displaying memory.
- The expression need not have a pointer value (though it may); it
- is always interpreted as an integer address of a byte of memory.
- *Note Expressions: Expressions, for more information on
- expressions. The default for ADDR is usually just after the last
- address examined--but several other commands also set the default
- address: `info breakpoints' (to the address of the last breakpoint
- listed), `info line' (to the starting address of a line), and
- `print' (if you use it to display a value from memory).
-
- For example, `x/3uh 0x54320' is a request to display three halfwords
-(`h') of memory, formatted as unsigned decimal integers (`u'), starting
-at address `0x54320'. `x/4xw $sp' prints the four words (`w') of
-memory above the stack pointer (here, `$sp'; *note Registers:
-Registers.) in hexadecimal (`x').
-
- Since the letters indicating unit sizes are all distinct from the
-letters specifying output formats, you do not have to remember whether
-unit size or format comes first; either order works. The output
-specifications `4xw' and `4wx' mean exactly the same thing. (However,
-the count N must come first; `wx4' does not work.)
-
- Even though the unit size U is ignored for the formats `s' and `i',
-you might still want to use a count N; for example, `3i' specifies that
-you want to see three machine instructions, including any operands.
-The command `disassemble' gives an alternative way of inspecting
-machine instructions; see *Note Source and machine code: Machine Code.
-
- All the defaults for the arguments to `x' are designed to make it
-easy to continue scanning memory with minimal specifications each time
-you use `x'. For example, after you have inspected three machine
-instructions with `x/3i ADDR', you can inspect the next seven with just
-`x/7'. If you use <RET> to repeat the `x' command, the repeat count N
-is used again; the other arguments default as for successive uses of
-`x'.
-
- The addresses and contents printed by the `x' command are not saved
-in the value history because there is often too much of them and they
-would get in the way. Instead, GDB makes these values available for
-subsequent use in expressions as values of the convenience variables
-`$_' and `$__'. After an `x' command, the last address examined is
-available for use in expressions in the convenience variable `$_'. The
-contents of that address, as examined, are available in the convenience
-variable `$__'.
-
- If the `x' command has a repeat count, the address and contents saved
-are from the last memory unit printed; this is not the same as the last
-address printed if several units were printed on the last line of
-output.
-
-
-File: gdb.info, Node: Auto Display, Next: Print Settings, Prev: Memory, Up: Data
-
-Automatic display
-=================
-
-If you find that you want to print the value of an expression frequently
-(to see how it changes), you might want to add it to the "automatic
-display list" so that GDB prints its value each time your program stops.
-Each expression added to the list is given a number to identify it; to
-remove an expression from the list, you specify that number. The
-automatic display looks like this:
-
- 2: foo = 38
- 3: bar[5] = (struct hack *) 0x3804
-
-This display shows item numbers, expressions and their current values.
-As with displays you request manually using `x' or `print', you can
-specify the output format you prefer; in fact, `display' decides
-whether to use `print' or `x' depending on how elaborate your format
-specification is--it uses `x' if you specify a unit size, or one of the
-two formats (`i' and `s') that are only supported by `x'; otherwise it
-uses `print'.
-
-`display EXPR'
- Add the expression EXPR to the list of expressions to display each
- time your program stops. *Note Expressions: Expressions.
-
- `display' does not repeat if you press <RET> again after using it.
-
-`display/FMT EXPR'
- For FMT specifying only a display format and not a size or count,
- add the expression EXPR to the auto-display list but arrange to
- display it each time in the specified format FMT. *Note Output
- formats: Output Formats.
-
-`display/FMT ADDR'
- For FMT `i' or `s', or including a unit-size or a number of units,
- add the expression ADDR as a memory address to be examined each
- time your program stops. Examining means in effect doing `x/FMT
- ADDR'. *Note Examining memory: Memory.
-
- For example, `display/i $pc' can be helpful, to see the machine
-instruction about to be executed each time execution stops (`$pc' is a
-common name for the program counter; *note Registers: Registers.).
-
-`undisplay DNUMS...'
-`delete display DNUMS...'
- Remove item numbers DNUMS from the list of expressions to display.
-
- `undisplay' does not repeat if you press <RET> after using it.
- (Otherwise you would just get the error `No display number ...'.)
-
-`disable display DNUMS...'
- Disable the display of item numbers DNUMS. A disabled display
- item is not printed automatically, but is not forgotten. It may be
- enabled again later.
-
-`enable display DNUMS...'
- Enable display of item numbers DNUMS. It becomes effective once
- again in auto display of its expression, until you specify
- otherwise.
-
-`display'
- Display the current values of the expressions on the list, just as
- is done when your program stops.
-
-`info display'
- Print the list of expressions previously set up to display
- automatically, each one with its item number, but without showing
- the values. This includes disabled expressions, which are marked
- as such. It also includes expressions which would not be
- displayed right now because they refer to automatic variables not
- currently available.
-
- If a display expression refers to local variables, then it does not
-make sense outside the lexical context for which it was set up. Such an
-expression is disabled when execution enters a context where one of its
-variables is not defined. For example, if you give the command
-`display last_char' while inside a function with an argument
-`last_char', GDB displays this argument while your program continues to
-stop inside that function. When it stops elsewhere--where there is no
-variable `last_char'--the display is disabled automatically. The next
-time your program stops where `last_char' is meaningful, you can enable
-the display expression once again.
-
-
-File: gdb.info, Node: Print Settings, Next: Value History, Prev: Auto Display, Up: Data
-
-Print settings
-==============
-
-GDB provides the following ways to control how arrays, structures, and
-symbols are printed.
-
-These settings are useful for debugging programs in any language:
-
-`set print address'
-`set print address on'
- GDB prints memory addresses showing the location of stack traces,
- structure values, pointer values, breakpoints, and so forth, even
- when it also displays the contents of those addresses. The default
- is `on'. For example, this is what a stack frame display looks
- like with `set print address on':
-
- (gdb) f
- #0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
- at input.c:530
- 530 if (lquote != def_lquote)
-
-`set print address off'
- Do not print addresses when displaying their contents. For
- example, this is the same stack frame displayed with `set print
- address off':
-
- (gdb) set print addr off
- (gdb) f
- #0 set_quotes (lq="<<", rq=">>") at input.c:530
- 530 if (lquote != def_lquote)
-
- You can use `set print address off' to eliminate all machine
- dependent displays from the GDB interface. For example, with
- `print address off', you should get the same text for backtraces on
- all machines--whether or not they involve pointer arguments.
-
-`show print address'
- Show whether or not addresses are to be printed.
-
- When GDB prints a symbolic address, it normally prints the closest
-earlier symbol plus an offset. If that symbol does not uniquely
-identify the address (for example, it is a name whose scope is a single
-source file), you may need to clarify. One way to do this is with
-`info line', for example `info line *0x4537'. Alternately, you can set
-GDB to print the source file and line number when it prints a symbolic
-address:
-
-`set print symbol-filename on'
- Tell GDB to print the source file name and line number of a symbol
- in the symbolic form of an address.
-
-`set print symbol-filename off'
- Do not print source file name and line number of a symbol. This
- is the default.
-
-`show print symbol-filename'
- Show whether or not GDB will print the source file name and line
- number of a symbol in the symbolic form of an address.
-
- Another situation where it is helpful to show symbol filenames and
-line numbers is when disassembling code; GDB shows you the line number
-and source file that corresponds to each instruction.
-
- Also, you may wish to see the symbolic form only if the address being
-printed is reasonably close to the closest earlier symbol:
-
-`set print max-symbolic-offset MAX-OFFSET'
- Tell GDB to only display the symbolic form of an address if the
- offset between the closest earlier symbol and the address is less
- than MAX-OFFSET. The default is 0, which tells GDB to always
- print the symbolic form of an address if any symbol precedes it.
-
-`show print max-symbolic-offset'
- Ask how large the maximum offset is that GDB prints in a symbolic
- address.
-
- If you have a pointer and you are not sure where it points, try `set
-print symbol-filename on'. Then you can determine the name and source
-file location of the variable where it points, using `p/a POINTER'.
-This interprets the address in symbolic form. For example, here GDB
-shows that a variable `ptt' points at another variable `t', defined in
-`hi2.c':
-
- (gdb) set print symbol-filename on
- (gdb) p/a ptt
- $4 = 0xe008 <t in hi2.c>
-
- _Warning:_ For pointers that point to a local variable, `p/a' does
- not show the symbol name and filename of the referent, even with
- the appropriate `set print' options turned on.
-
- Other settings control how different kinds of objects are printed:
-
-`set print array'
-`set print array on'
- Pretty print arrays. This format is more convenient to read, but
- uses more space. The default is off.
-
-`set print array off'
- Return to compressed format for arrays.
-
-`show print array'
- Show whether compressed or pretty format is selected for displaying
- arrays.
-
-`set print elements NUMBER-OF-ELEMENTS'
- Set a limit on how many elements of an array GDB will print. If
- GDB is printing a large array, it stops printing after it has
- printed the number of elements set by the `set print elements'
- command. This limit also applies to the display of strings. When
- GDB starts, this limit is set to 200. Setting NUMBER-OF-ELEMENTS
- to zero means that the printing is unlimited.
-
-`show print elements'
- Display the number of elements of a large array that GDB will
- print. If the number is 0, then the printing is unlimited.
-
-`set print null-stop'
- Cause GDB to stop printing the characters of an array when the
- first NULL is encountered. This is useful when large arrays
- actually contain only short strings. The default is off.
-
-`set print pretty on'
- Cause GDB to print structures in an indented format with one member
- per line, like this:
-
- $1 = {
- next = 0x0,
- flags = {
- sweet = 1,
- sour = 1
- },
- meat = 0x54 "Pork"
- }
-
-`set print pretty off'
- Cause GDB to print structures in a compact format, like this:
-
- $1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \
- meat = 0x54 "Pork"}
-
- This is the default format.
-
-`show print pretty'
- Show which format GDB is using to print structures.
-
-`set print sevenbit-strings on'
- Print using only seven-bit characters; if this option is set, GDB
- displays any eight-bit characters (in strings or character values)
- using the notation `\'NNN. This setting is best if you are
- working in English (ASCII) and you use the high-order bit of
- characters as a marker or "meta" bit.
-
-`set print sevenbit-strings off'
- Print full eight-bit characters. This allows the use of more
- international character sets, and is the default.
-
-`show print sevenbit-strings'
- Show whether or not GDB is printing only seven-bit characters.
-
-`set print union on'
- Tell GDB to print unions which are contained in structures. This
- is the default setting.
-
-`set print union off'
- Tell GDB not to print unions which are contained in structures.
-
-`show print union'
- Ask GDB whether or not it will print unions which are contained in
- structures.
-
- For example, given the declarations
-
- typedef enum {Tree, Bug} Species;
- typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
- typedef enum {Caterpillar, Cocoon, Butterfly}
- Bug_forms;
-
- struct thing {
- Species it;
- union {
- Tree_forms tree;
- Bug_forms bug;
- } form;
- };
-
- struct thing foo = {Tree, {Acorn}};
-
- with `set print union on' in effect `p foo' would print
-
- $1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
-
- and with `set print union off' in effect it would print
-
- $1 = {it = Tree, form = {...}}
-
-These settings are of interest when debugging C++ programs:
-
-`set print demangle'
-`set print demangle on'
- Print C++ names in their source form rather than in the encoded
- ("mangled") form passed to the assembler and linker for type-safe
- linkage. The default is on.
-
-`show print demangle'
- Show whether C++ names are printed in mangled or demangled form.
-
-`set print asm-demangle'
-`set print asm-demangle on'
- Print C++ names in their source form rather than their mangled
- form, even in assembler code printouts such as instruction
- disassemblies. The default is off.
-
-`show print asm-demangle'
- Show whether C++ names in assembly listings are printed in mangled
- or demangled form.
-
-`set demangle-style STYLE'
- Choose among several encoding schemes used by different compilers
- to represent C++ names. The choices for STYLE are currently:
-
- `auto'
- Allow GDB to choose a decoding style by inspecting your
- program.
-
- `gnu'
- Decode based on the GNU C++ compiler (`g++') encoding
- algorithm. This is the default.
-
- `hp'
- Decode based on the HP ANSI C++ (`aCC') encoding algorithm.
-
- `lucid'
- Decode based on the Lucid C++ compiler (`lcc') encoding
- algorithm.
-
- `arm'
- Decode using the algorithm in the `C++ Annotated Reference
- Manual'. *Warning:* this setting alone is not sufficient to
- allow debugging `cfront'-generated executables. GDB would
- require further enhancement to permit that.
-
- If you omit STYLE, you will see a list of possible formats.
-
-`show demangle-style'
- Display the encoding style currently in use for decoding C++
- symbols.
-
-`set print object'
-`set print object on'
- When displaying a pointer to an object, identify the _actual_
- (derived) type of the object rather than the _declared_ type, using
- the virtual function table.
-
-`set print object off'
- Display only the declared type of objects, without reference to the
- virtual function table. This is the default setting.
-
-`show print object'
- Show whether actual, or declared, object types are displayed.
-
-`set print static-members'
-`set print static-members on'
- Print static members when displaying a C++ object. The default is
- on.
-
-`set print static-members off'
- Do not print static members when displaying a C++ object.
-
-`show print static-members'
- Show whether C++ static members are printed, or not.
-
-`set print vtbl'
-`set print vtbl on'
- Pretty print C++ virtual function tables. The default is off.
- (The `vtbl' commands do not work on programs compiled with the HP
- ANSI C++ compiler (`aCC').)
-
-`set print vtbl off'
- Do not pretty print C++ virtual function tables.
-
-`show print vtbl'
- Show whether C++ virtual function tables are pretty printed, or
- not.
-
-
-File: gdb.info, Node: Value History, Next: Convenience Vars, Prev: Print Settings, Up: Data
-
-Value history
-=============
-
-Values printed by the `print' command are saved in the GDB "value
-history". This allows you to refer to them in other expressions.
-Values are kept until the symbol table is re-read or discarded (for
-example with the `file' or `symbol-file' commands). When the symbol
-table changes, the value history is discarded, since the values may
-contain pointers back to the types defined in the symbol table.
-
- The values printed are given "history numbers" by which you can
-refer to them. These are successive integers starting with one.
-`print' shows you the history number assigned to a value by printing
-`$NUM = ' before the value; here NUM is the history number.
-
- To refer to any previous value, use `$' followed by the value's
-history number. The way `print' labels its output is designed to
-remind you of this. Just `$' refers to the most recent value in the
-history, and `$$' refers to the value before that. `$$N' refers to the
-Nth value from the end; `$$2' is the value just prior to `$$', `$$1' is
-equivalent to `$$', and `$$0' is equivalent to `$'.
-
- For example, suppose you have just printed a pointer to a structure
-and want to see the contents of the structure. It suffices to type
-
- p *$
-
- If you have a chain of structures where the component `next' points
-to the next one, you can print the contents of the next one with this:
-
- p *$.next
-
-You can print successive links in the chain by repeating this
-command--which you can do by just typing <RET>.
-
- Note that the history records values, not expressions. If the value
-of `x' is 4 and you type these commands:
-
- print x
- set x=5
-
-then the value recorded in the value history by the `print' command
-remains 4 even though the value of `x' has changed.
-
-`show values'
- Print the last ten values in the value history, with their item
- numbers. This is like `p $$9' repeated ten times, except that
- `show values' does not change the history.
-
-`show values N'
- Print ten history values centered on history item number N.
-
-`show values +'
- Print ten history values just after the values last printed. If
- no more values are available, `show values +' produces no display.
-
- Pressing <RET> to repeat `show values N' has exactly the same effect
-as `show values +'.
-
-
-File: gdb.info, Node: Convenience Vars, Next: Registers, Prev: Value History, Up: Data
-
-Convenience variables
-=====================
-
-GDB provides "convenience variables" that you can use within GDB to
-hold on to a value and refer to it later. These variables exist
-entirely within GDB; they are not part of your program, and setting a
-convenience variable has no direct effect on further execution of your
-program. That is why you can use them freely.
-
- Convenience variables are prefixed with `$'. Any name preceded by
-`$' can be used for a convenience variable, unless it is one of the
-predefined machine-specific register names (*note Registers:
-Registers.). (Value history references, in contrast, are _numbers_
-preceded by `$'. *Note Value history: Value History.)
-
- You can save a value in a convenience variable with an assignment
-expression, just as you would set a variable in your program. For
-example:
-
- set $foo = *object_ptr
-
-would save in `$foo' the value contained in the object pointed to by
-`object_ptr'.
-
- Using a convenience variable for the first time creates it, but its
-value is `void' until you assign a new value. You can alter the value
-with another assignment at any time.
-
- Convenience variables have no fixed types. You can assign a
-convenience variable any type of value, including structures and
-arrays, even if that variable already has a value of a different type.
-The convenience variable, when used as an expression, has the type of
-its current value.
-
-`show convenience'
- Print a list of convenience variables used so far, and their
- values. Abbreviated `show conv'.
-
- One of the ways to use a convenience variable is as a counter to be
-incremented or a pointer to be advanced. For example, to print a field
-from successive elements of an array of structures:
-
- set $i = 0
- print bar[$i++]->contents
-
-Repeat that command by typing <RET>.
-
- Some convenience variables are created automatically by GDB and given
-values likely to be useful.
-
-`$_'
- The variable `$_' is automatically set by the `x' command to the
- last address examined (*note Examining memory: Memory.). Other
- commands which provide a default address for `x' to examine also
- set `$_' to that address; these commands include `info line' and
- `info breakpoint'. The type of `$_' is `void *' except when set
- by the `x' command, in which case it is a pointer to the type of
- `$__'.
-
-`$__'
- The variable `$__' is automatically set by the `x' command to the
- value found in the last address examined. Its type is chosen to
- match the format in which the data was printed.
-
-`$_exitcode'
- The variable `$_exitcode' is automatically set to the exit code
- when the program being debugged terminates.
-
- On HP-UX systems, if you refer to a function or variable name that
-begins with a dollar sign, GDB searches for a user or system name
-first, before it searches for a convenience variable.
-
-
-File: gdb.info, Node: Registers, Next: Floating Point Hardware, Prev: Convenience Vars, Up: Data
-
-Registers
-=========
-
-You can refer to machine register contents, in expressions, as variables
-with names starting with `$'. The names of registers are different for
-each machine; use `info registers' to see the names used on your
-machine.
-
-`info registers'
- Print the names and values of all registers except floating-point
- and vector registers (in the selected stack frame).
-
-`info all-registers'
- Print the names and values of all registers, including
- floating-point and vector registers (in the selected stack frame).
-
-`info registers REGNAME ...'
- Print the "relativized" value of each specified register REGNAME.
- As discussed in detail below, register values are normally
- relative to the selected stack frame. REGNAME may be any register
- name valid on the machine you are using, with or without the
- initial `$'.
-
- GDB has four "standard" register names that are available (in
-expressions) on most machines--whenever they do not conflict with an
-architecture's canonical mnemonics for registers. The register names
-`$pc' and `$sp' are used for the program counter register and the stack
-pointer. `$fp' is used for a register that contains a pointer to the
-current stack frame, and `$ps' is used for a register that contains the
-processor status. For example, you could print the program counter in
-hex with
-
- p/x $pc
-
-or print the instruction to be executed next with
-
- x/i $pc
-
-or add four to the stack pointer(1) with
-
- set $sp += 4
-
- Whenever possible, these four standard register names are available
-on your machine even though the machine has different canonical
-mnemonics, so long as there is no conflict. The `info registers'
-command shows the canonical names. For example, on the SPARC, `info
-registers' displays the processor status register as `$psr' but you can
-also refer to it as `$ps'; and on x86-based machines `$ps' is an alias
-for the EFLAGS register.
-
- GDB always considers the contents of an ordinary register as an
-integer when the register is examined in this way. Some machines have
-special registers which can hold nothing but floating point; these
-registers are considered to have floating point values. There is no way
-to refer to the contents of an ordinary register as floating point value
-(although you can _print_ it as a floating point value with `print/f
-$REGNAME').
-
- Some registers have distinct "raw" and "virtual" data formats. This
-means that the data format in which the register contents are saved by
-the operating system is not the same one that your program normally
-sees. For example, the registers of the 68881 floating point
-coprocessor are always saved in "extended" (raw) format, but all C
-programs expect to work with "double" (virtual) format. In such cases,
-GDB normally works with the virtual format only (the format that makes
-sense for your program), but the `info registers' command prints the
-data in both formats.
-
- Normally, register values are relative to the selected stack frame
-(*note Selecting a frame: Selection.). This means that you get the
-value that the register would contain if all stack frames farther in
-were exited and their saved registers restored. In order to see the
-true contents of hardware registers, you must select the innermost
-frame (with `frame 0').
-
- However, GDB must deduce where registers are saved, from the machine
-code generated by your compiler. If some registers are not saved, or if
-GDB is unable to locate the saved registers, the selected stack frame
-makes no difference.
-
- ---------- Footnotes ----------
-
- (1) This is a way of removing one word from the stack, on machines
-where stacks grow downward in memory (most machines, nowadays). This
-assumes that the innermost stack frame is selected; setting `$sp' is
-not allowed when other stack frames are selected. To pop entire frames
-off the stack, regardless of machine architecture, use `return'; see
-*Note Returning from a function: Returning.
-
-
-File: gdb.info, Node: Floating Point Hardware, Next: Vector Unit, Prev: Registers, Up: Data
-
-Floating point hardware
-=======================
-
-Depending on the configuration, GDB may be able to give you more
-information about the status of the floating point hardware.
-
-`info float'
- Display hardware-dependent information about the floating point
- unit. The exact contents and layout vary depending on the
- floating point chip. Currently, `info float' is supported on the
- ARM and x86 machines.
-
-
-File: gdb.info, Node: Vector Unit, Next: Auxiliary Vector, Prev: Floating Point Hardware, Up: Data
-
-Vector Unit
-===========
-
-Depending on the configuration, GDB may be able to give you more
-information about the status of the vector unit.
-
-`info vector'
- Display information about the vector unit. The exact contents and
- layout vary depending on the hardware.
-
-
-File: gdb.info, Node: Auxiliary Vector, Next: Memory Region Attributes, Prev: Vector Unit, Up: Data
-
-Operating system auxiliary vector
-=================================
-
-Some operating systems supply an "auxiliary vector" to programs at
-startup. This is akin to the arguments and environment that you
-specify for a program, but contains a system-dependent variety of
-binary values that tell system libraries important details about the
-hardware, operating system, and process. Each value's purpose is
-identified by an integer tag; the meanings are well-known but
-system-specific. Depending on the configuration and operating system
-facilities, GDB may be able to show you this information.
-
-`info auxv'
- Display the auxiliary vector of the inferior, which can be either a
- live process or a core dump file. GDB prints each tag value
- numerically, and also shows names and text descriptions for
- recognized tags. Some values in the vector are numbers, some bit
- masks, and some pointers to strings or other data. GDB displays
- each value in the most appropriate form for a recognized tag, and
- in hexadecimal for an unrecognized tag.
-
-
-File: gdb.info, Node: Memory Region Attributes, Next: Dump/Restore Files, Prev: Auxiliary Vector, Up: Data
-
-Memory region attributes
-========================
-
-"Memory region attributes" allow you to describe special handling
-required by regions of your target's memory. GDB uses attributes to
-determine whether to allow certain types of memory accesses; whether to
-use specific width accesses; and whether to cache target memory.
-
- Defined memory regions can be individually enabled and disabled.
-When a memory region is disabled, GDB uses the default attributes when
-accessing memory in that region. Similarly, if no memory regions have
-been defined, GDB uses the default attributes when accessing all memory.
-
- When a memory region is defined, it is given a number to identify it;
-to enable, disable, or remove a memory region, you specify that number.
-
-`mem LOWER UPPER ATTRIBUTES...'
- Define memory region bounded by LOWER and UPPER with attributes
- ATTRIBUTES.... Note that UPPER == 0 is a special case: it is
- treated as the the target's maximum memory address. (0xffff on 16
- bit targets, 0xffffffff on 32 bit targets, etc.)
-
-`delete mem NUMS...'
- Remove memory regions NUMS....
-
-`disable mem NUMS...'
- Disable memory regions NUMS.... A disabled memory region is not
- forgotten. It may be enabled again later.
-
-`enable mem NUMS...'
- Enable memory regions NUMS....
-
-`info mem'
- Print a table of all defined memory regions, with the following
- columns for each region.
-
- _Memory Region Number_
-
- _Enabled or Disabled._
- Enabled memory regions are marked with `y'. Disabled memory
- regions are marked with `n'.
-
- _Lo Address_
- The address defining the inclusive lower bound of the memory
- region.
-
- _Hi Address_
- The address defining the exclusive upper bound of the memory
- region.
-
- _Attributes_
- The list of attributes set for this memory region.
-
-Attributes
-----------
-
-Memory Access Mode
-..................
-
-The access mode attributes set whether GDB may make read or write
-accesses to a memory region.
-
- While these attributes prevent GDB from performing invalid memory
-accesses, they do nothing to prevent the target system, I/O DMA, etc.
-from accessing memory.
-
-`ro'
- Memory is read only.
-
-`wo'
- Memory is write only.
-
-`rw'
- Memory is read/write. This is the default.
-
-Memory Access Size
-..................
-
-The acccess size attributes tells GDB to use specific sized accesses in
-the memory region. Often memory mapped device registers require
-specific sized accesses. If no access size attribute is specified, GDB
-may use accesses of any size.
-
-`8'
- Use 8 bit memory accesses.
-
-`16'
- Use 16 bit memory accesses.
-
-`32'
- Use 32 bit memory accesses.
-
-`64'
- Use 64 bit memory accesses.
-
-Data Cache
-..........
-
-The data cache attributes set whether GDB will cache target memory.
-While this generally improves performance by reducing debug protocol
-overhead, it can lead to incorrect results because GDB does not know
-about volatile variables or memory mapped device registers.
-
-`cache'
- Enable GDB to cache target memory.
-
-`nocache'
- Disable GDB from caching target memory. This is the default.
-
-
-File: gdb.info, Node: Dump/Restore Files, Next: Character Sets, Prev: Memory Region Attributes, Up: Data
-
-Copy between memory and a file
-==============================
-
-You can use the commands `dump', `append', and `restore' to copy data
-between target memory and a file. The `dump' and `append' commands
-write data to a file, and the `restore' command reads data from a file
-back into the inferior's memory. Files may be in binary, Motorola
-S-record, Intel hex, or Tektronix Hex format; however, GDB can only
-append to binary files.
-
-`dump [FORMAT] memory FILENAME START_ADDR END_ADDR'
-`dump [FORMAT] value FILENAME EXPR'
- Dump the contents of memory from START_ADDR to END_ADDR, or the
- value of EXPR, to FILENAME in the given format.
-
- The FORMAT parameter may be any one of:
- `binary'
- Raw binary form.
-
- `ihex'
- Intel hex format.
-
- `srec'
- Motorola S-record format.
-
- `tekhex'
- Tektronix Hex format.
-
- GDB uses the same definitions of these formats as the GNU binary
- utilities, like `objdump' and `objcopy'. If FORMAT is omitted,
- GDB dumps the data in raw binary form.
-
-`append [binary] memory FILENAME START_ADDR END_ADDR'
-`append [binary] value FILENAME EXPR'
- Append the contents of memory from START_ADDR to END_ADDR, or the
- value of EXPR, to FILENAME, in raw binary form. (GDB can only
- append data to files in raw binary form.)
-
-`restore FILENAME [binary] BIAS START END'
- Restore the contents of file FILENAME into memory. The `restore'
- command can automatically recognize any known BFD file format,
- except for raw binary. To restore a raw binary file you must
- specify the optional keyword `binary' after the filename.
-
- If BIAS is non-zero, its value will be added to the addresses
- contained in the file. Binary files always start at address zero,
- so they will be restored at address BIAS. Other bfd files have a
- built-in location; they will be restored at offset BIAS from that
- location.
-
- If START and/or END are non-zero, then only data between file
- offset START and file offset END will be restored. These offsets
- are relative to the addresses in the file, before the BIAS
- argument is applied.
-
-
-
-File: gdb.info, Node: Character Sets, Prev: Dump/Restore Files, Up: Data
-
-Character Sets
-==============
-
-If the program you are debugging uses a different character set to
-represent characters and strings than the one GDB uses itself, GDB can
-automatically translate between the character sets for you. The
-character set GDB uses we call the "host character set"; the one the
-inferior program uses we call the "target character set".
-
- For example, if you are running GDB on a GNU/Linux system, which
-uses the ISO Latin 1 character set, but you are using GDB's remote
-protocol (*note Remote Debugging: Remote.) to debug a program running
-on an IBM mainframe, which uses the EBCDIC character set, then the host
-character set is Latin-1, and the target character set is EBCDIC. If
-you give GDB the command `set target-charset EBCDIC-US', then GDB
-translates between EBCDIC and Latin 1 as you print character or string
-values, or use character and string literals in expressions.
-
- GDB has no way to automatically recognize which character set the
-inferior program uses; you must tell it, using the `set target-charset'
-command, described below.
-
- Here are the commands for controlling GDB's character set support:
-
-`set target-charset CHARSET'
- Set the current target character set to CHARSET. We list the
- character set names GDB recognizes below, but if you type `set
- target-charset' followed by <TAB><TAB>, GDB will list the target
- character sets it supports.
-
-`set host-charset CHARSET'
- Set the current host character set to CHARSET.
-
- By default, GDB uses a host character set appropriate to the
- system it is running on; you can override that default using the
- `set host-charset' command.
-
- GDB can only use certain character sets as its host character set.
- We list the character set names GDB recognizes below, and
- indicate which can be host character sets, but if you type `set
- target-charset' followed by <TAB><TAB>, GDB will list the host
- character sets it supports.
-
-`set charset CHARSET'
- Set the current host and target character sets to CHARSET. As
- above, if you type `set charset' followed by <TAB><TAB>, GDB will
- list the name of the character sets that can be used for both host
- and target.
-
-`show charset'
- Show the names of the current host and target charsets.
-
-`show host-charset'
- Show the name of the current host charset.
-
-`show target-charset'
- Show the name of the current target charset.
-
-
- GDB currently includes support for the following character sets:
-
-`ASCII'
- Seven-bit U.S. ASCII. GDB can use this as its host character set.
-
-`ISO-8859-1'
- The ISO Latin 1 character set. This extends ASCII with accented
- characters needed for French, German, and Spanish. GDB can use
- this as its host character set.
-
-`EBCDIC-US'
-`IBM1047'
- Variants of the EBCDIC character set, used on some of IBM's
- mainframe operating systems. (GNU/Linux on the S/390 uses U.S.
- ASCII.) GDB cannot use these as its host character set.
-
-
- Note that these are all single-byte character sets. More work inside
-GDB is needed to support multi-byte or variable-width character
-encodings, like the UTF-8 and UCS-2 encodings of Unicode.
-
- Here is an example of GDB's character set support in action. Assume
-that the following source code has been placed in the file
-`charset-test.c':
-
- #include <stdio.h>
-
- char ascii_hello[]
- = {72, 101, 108, 108, 111, 44, 32, 119,
- 111, 114, 108, 100, 33, 10, 0};
- char ibm1047_hello[]
- = {200, 133, 147, 147, 150, 107, 64, 166,
- 150, 153, 147, 132, 90, 37, 0};
-
- main ()
- {
- printf ("Hello, world!\n");
- }
-
- In this program, `ascii_hello' and `ibm1047_hello' are arrays
-containing the string `Hello, world!' followed by a newline, encoded in
-the ASCII and IBM1047 character sets.
-
- We compile the program, and invoke the debugger on it:
-
- $ gcc -g charset-test.c -o charset-test
- $ gdb -nw charset-test
- GNU gdb 2001-12-19-cvs
- Copyright 2001 Free Software Foundation, Inc.
- ...
- (gdb)
-
- We can use the `show charset' command to see what character sets GDB
-is currently using to interpret and display characters and strings:
-
- (gdb) show charset
- The current host and target character set is `ISO-8859-1'.
- (gdb)
-
- For the sake of printing this manual, let's use ASCII as our initial
-character set:
- (gdb) set charset ASCII
- (gdb) show charset
- The current host and target character set is `ASCII'.
- (gdb)
-
- Let's assume that ASCII is indeed the correct character set for our
-host system -- in other words, let's assume that if GDB prints
-characters using the ASCII character set, our terminal will display
-them properly. Since our current target character set is also ASCII,
-the contents of `ascii_hello' print legibly:
-
- (gdb) print ascii_hello
- $1 = 0x401698 "Hello, world!\n"
- (gdb) print ascii_hello[0]
- $2 = 72 'H'
- (gdb)
-
- GDB uses the target character set for character and string literals
-you use in expressions:
-
- (gdb) print '+'
- $3 = 43 '+'
- (gdb)
-
- The ASCII character set uses the number 43 to encode the `+'
-character.
-
- GDB relies on the user to tell it which character set the target
-program uses. If we print `ibm1047_hello' while our target character
-set is still ASCII, we get jibberish:
-
- (gdb) print ibm1047_hello
- $4 = 0x4016a8 "\310\205\223\223\226k@\246\226\231\223\204Z%"
- (gdb) print ibm1047_hello[0]
- $5 = 200 '\310'
- (gdb)
-
- If we invoke the `set target-charset' followed by <TAB><TAB>, GDB
-tells us the character sets it supports:
-
- (gdb) set target-charset
- ASCII EBCDIC-US IBM1047 ISO-8859-1
- (gdb) set target-charset
-
- We can select IBM1047 as our target character set, and examine the
-program's strings again. Now the ASCII string is wrong, but GDB
-translates the contents of `ibm1047_hello' from the target character
-set, IBM1047, to the host character set, ASCII, and they display
-correctly:
-
- (gdb) set target-charset IBM1047
- (gdb) show charset
- The current host character set is `ASCII'.
- The current target character set is `IBM1047'.
- (gdb) print ascii_hello
- $6 = 0x401698 "\110\145%%?\054\040\167?\162%\144\041\012"
- (gdb) print ascii_hello[0]
- $7 = 72 '\110'
- (gdb) print ibm1047_hello
- $8 = 0x4016a8 "Hello, world!\n"
- (gdb) print ibm1047_hello[0]
- $9 = 200 'H'
- (gdb)
-
- As above, GDB uses the target character set for character and string
-literals you use in expressions:
-
- (gdb) print '+'
- $10 = 78 '+'
- (gdb)
-
- The IBM1047 character set uses the number 78 to encode the `+'
-character.
-
-
-File: gdb.info, Node: Macros, Next: Tracepoints, Prev: Data, Up: Top
-
-C Preprocessor Macros
-*********************
-
-Some languages, such as C and C++, provide a way to define and invoke
-"preprocessor macros" which expand into strings of tokens. GDB can
-evaluate expressions containing macro invocations, show the result of
-macro expansion, and show a macro's definition, including where it was
-defined.
-
- You may need to compile your program specially to provide GDB with
-information about preprocessor macros. Most compilers do not include
-macros in their debugging information, even when you compile with the
-`-g' flag. *Note Compilation::.
-
- A program may define a macro at one point, remove that definition
-later, and then provide a different definition after that. Thus, at
-different points in the program, a macro may have different
-definitions, or have no definition at all. If there is a current stack
-frame, GDB uses the macros in scope at that frame's source code line.
-Otherwise, GDB uses the macros in scope at the current listing location;
-see *Note List::.
-
- At the moment, GDB does not support the `##' token-splicing
-operator, the `#' stringification operator, or variable-arity macros.
-
- Whenever GDB evaluates an expression, it always expands any macro
-invocations present in the expression. GDB also provides the following
-commands for working with macros explicitly.
-
-`macro expand EXPRESSION'
-`macro exp EXPRESSION'
- Show the results of expanding all preprocessor macro invocations in
- EXPRESSION. Since GDB simply expands macros, but does not parse
- the result, EXPRESSION need not be a valid expression; it can be
- any string of tokens.
-
-`macro expand-once EXPRESSION'
-`macro exp1 EXPRESSION'
- (This command is not yet implemented.) Show the results of
- expanding those preprocessor macro invocations that appear
- explicitly in EXPRESSION. Macro invocations appearing in that
- expansion are left unchanged. This command allows you to see the
- effect of a particular macro more clearly, without being confused
- by further expansions. Since GDB simply expands macros, but does
- not parse the result, EXPRESSION need not be a valid expression; it
- can be any string of tokens.
-
-`info macro MACRO'
- Show the definition of the macro named MACRO, and describe the
- source location where that definition was established.
-
-`macro define MACRO REPLACEMENT-LIST'
-`macro define MACRO(ARGLIST) REPLACEMENT-LIST'
- (This command is not yet implemented.) Introduce a definition for
- a preprocessor macro named MACRO, invocations of which are replaced
- by the tokens given in REPLACEMENT-LIST. The first form of this
- command defines an "object-like" macro, which takes no arguments;
- the second form defines a "function-like" macro, which takes the
- arguments given in ARGLIST.
-
- A definition introduced by this command is in scope in every
- expression evaluated in GDB, until it is removed with the `macro
- undef' command, described below. The definition overrides all
- definitions for MACRO present in the program being debugged, as
- well as any previous user-supplied definition.
-
-`macro undef MACRO'
- (This command is not yet implemented.) Remove any user-supplied
- definition for the macro named MACRO. This command only affects
- definitions provided with the `macro define' command, described
- above; it cannot remove definitions present in the program being
- debugged.
-
-
- Here is a transcript showing the above commands in action. First, we
-show our source files:
-
- $ cat sample.c
- #include <stdio.h>
- #include "sample.h"
-
- #define M 42
- #define ADD(x) (M + x)
-
- main ()
- {
- #define N 28
- printf ("Hello, world!\n");
- #undef N
- printf ("We're so creative.\n");
- #define N 1729
- printf ("Goodbye, world!\n");
- }
- $ cat sample.h
- #define Q <
- $
-
- Now, we compile the program using the GNU C compiler, GCC. We pass
-the `-gdwarf-2' and `-g3' flags to ensure the compiler includes
-information about preprocessor macros in the debugging information.
-
- $ gcc -gdwarf-2 -g3 sample.c -o sample
- $
-
- Now, we start GDB on our sample program:
-
- $ gdb -nw sample
- GNU gdb 2002-05-06-cvs
- Copyright 2002 Free Software Foundation, Inc.
- GDB is free software, ...
- (gdb)
-
- We can expand macros and examine their definitions, even when the
-program is not running. GDB uses the current listing position to
-decide which macro definitions are in scope:
-
- (gdb) list main
- 3
- 4 #define M 42
- 5 #define ADD(x) (M + x)
- 6
- 7 main ()
- 8 {
- 9 #define N 28
- 10 printf ("Hello, world!\n");
- 11 #undef N
- 12 printf ("We're so creative.\n");
- (gdb) info macro ADD
- Defined at /home/jimb/gdb/macros/play/sample.c:5
- #define ADD(x) (M + x)
- (gdb) info macro Q
- Defined at /home/jimb/gdb/macros/play/sample.h:1
- included at /home/jimb/gdb/macros/play/sample.c:2
- #define Q <
- (gdb) macro expand ADD(1)
- expands to: (42 + 1)
- (gdb) macro expand-once ADD(1)
- expands to: once (M + 1)
- (gdb)
-
- In the example above, note that `macro expand-once' expands only the
-macro invocation explicit in the original text -- the invocation of
-`ADD' -- but does not expand the invocation of the macro `M', which was
-introduced by `ADD'.
-
- Once the program is running, GDB uses the macro definitions in force
-at the source line of the current stack frame:
-
- (gdb) break main
- Breakpoint 1 at 0x8048370: file sample.c, line 10.
- (gdb) run
- Starting program: /home/jimb/gdb/macros/play/sample
-
- Breakpoint 1, main () at sample.c:10
- 10 printf ("Hello, world!\n");
- (gdb)
-
- At line 10, the definition of the macro `N' at line 9 is in force:
-
- (gdb) info macro N
- Defined at /home/jimb/gdb/macros/play/sample.c:9
- #define N 28
- (gdb) macro expand N Q M
- expands to: 28 < 42
- (gdb) print N Q M
- $1 = 1
- (gdb)
-
- As we step over directives that remove `N''s definition, and then
-give it a new definition, GDB finds the definition (or lack thereof) in
-force at each point:
-
- (gdb) next
- Hello, world!
- 12 printf ("We're so creative.\n");
- (gdb) info macro N
- The symbol `N' has no definition as a C/C++ preprocessor macro
- at /home/jimb/gdb/macros/play/sample.c:12
- (gdb) next
- We're so creative.
- 14 printf ("Goodbye, world!\n");
- (gdb) info macro N
- Defined at /home/jimb/gdb/macros/play/sample.c:13
- #define N 1729
- (gdb) macro expand N Q M
- expands to: 1729 < 42
- (gdb) print N Q M
- $2 = 0
- (gdb)
-
-
-File: gdb.info, Node: Tracepoints, Next: Overlays, Prev: Macros, Up: Top
-
-Tracepoints
-***********
-
-In some applications, it is not feasible for the debugger to interrupt
-the program's execution long enough for the developer to learn anything
-helpful about its behavior. If the program's correctness depends on
-its real-time behavior, delays introduced by a debugger might cause the
-program to change its behavior drastically, or perhaps fail, even when
-the code itself is correct. It is useful to be able to observe the
-program's behavior without interrupting it.
-
- Using GDB's `trace' and `collect' commands, you can specify
-locations in the program, called "tracepoints", and arbitrary
-expressions to evaluate when those tracepoints are reached. Later,
-using the `tfind' command, you can examine the values those expressions
-had when the program hit the tracepoints. The expressions may also
-denote objects in memory--structures or arrays, for example--whose
-values GDB should record; while visiting a particular tracepoint, you
-may inspect those objects as if they were in memory at that moment.
-However, because GDB records these values without interacting with you,
-it can do so quickly and unobtrusively, hopefully not disturbing the
-program's behavior.
-
- The tracepoint facility is currently available only for remote
-targets. *Note Targets::. In addition, your remote target must know
-how to collect trace data. This functionality is implemented in the
-remote stub; however, none of the stubs distributed with GDB support
-tracepoints as of this writing.
-
- This chapter describes the tracepoint commands and features.
-
-* Menu:
-
-* Set Tracepoints::
-* Analyze Collected Data::
-* Tracepoint Variables::
-
-
-File: gdb.info, Node: Set Tracepoints, Next: Analyze Collected Data, Up: Tracepoints
-
-Commands to Set Tracepoints
-===========================
-
-Before running such a "trace experiment", an arbitrary number of
-tracepoints can be set. Like a breakpoint (*note Set Breaks::), a
-tracepoint has a number assigned to it by GDB. Like with breakpoints,
-tracepoint numbers are successive integers starting from one. Many of
-the commands associated with tracepoints take the tracepoint number as
-their argument, to identify which tracepoint to work on.
-
- For each tracepoint, you can specify, in advance, some arbitrary set
-of data that you want the target to collect in the trace buffer when it
-hits that tracepoint. The collected data can include registers, local
-variables, or global data. Later, you can use GDB commands to examine
-the values these data had at the time the tracepoint was hit.
-
- This section describes commands to set tracepoints and associated
-conditions and actions.
-
-* Menu:
-
-* Create and Delete Tracepoints::
-* Enable and Disable Tracepoints::
-* Tracepoint Passcounts::
-* Tracepoint Actions::
-* Listing Tracepoints::
-* Starting and Stopping Trace Experiment::
-
-
-File: gdb.info, Node: Create and Delete Tracepoints, Next: Enable and Disable Tracepoints, Up: Set Tracepoints
-
-Create and Delete Tracepoints
------------------------------
-
-`trace'
- The `trace' command is very similar to the `break' command. Its
- argument can be a source line, a function name, or an address in
- the target program. *Note Set Breaks::. The `trace' command
- defines a tracepoint, which is a point in the target program where
- the debugger will briefly stop, collect some data, and then allow
- the program to continue. Setting a tracepoint or changing its
- commands doesn't take effect until the next `tstart' command;
- thus, you cannot change the tracepoint attributes once a trace
- experiment is running.
-
- Here are some examples of using the `trace' command:
-
- (gdb) trace foo.c:121 // a source file and line number
-
- (gdb) trace +2 // 2 lines forward
-
- (gdb) trace my_function // first source line of function
-
- (gdb) trace *my_function // EXACT start address of function
-
- (gdb) trace *0x2117c4 // an address
-
- You can abbreviate `trace' as `tr'.
-
- The convenience variable `$tpnum' records the tracepoint number of
- the most recently set tracepoint.
-
-`delete tracepoint [NUM]'
- Permanently delete one or more tracepoints. With no argument, the
- default is to delete all tracepoints.
-
- Examples:
-
- (gdb) delete trace 1 2 3 // remove three tracepoints
-
- (gdb) delete trace // remove all tracepoints
-
- You can abbreviate this command as `del tr'.
-
-
-File: gdb.info, Node: Enable and Disable Tracepoints, Next: Tracepoint Passcounts, Prev: Create and Delete Tracepoints, Up: Set Tracepoints
-
-Enable and Disable Tracepoints
-------------------------------
-
-`disable tracepoint [NUM]'
- Disable tracepoint NUM, or all tracepoints if no argument NUM is
- given. A disabled tracepoint will have no effect during the next
- trace experiment, but it is not forgotten. You can re-enable a
- disabled tracepoint using the `enable tracepoint' command.
-
-`enable tracepoint [NUM]'
- Enable tracepoint NUM, or all tracepoints. The enabled
- tracepoints will become effective the next time a trace experiment
- is run.
-
-
-File: gdb.info, Node: Tracepoint Passcounts, Next: Tracepoint Actions, Prev: Enable and Disable Tracepoints, Up: Set Tracepoints
-
-Tracepoint Passcounts
----------------------
-
-`passcount [N [NUM]]'
- Set the "passcount" of a tracepoint. The passcount is a way to
- automatically stop a trace experiment. If a tracepoint's
- passcount is N, then the trace experiment will be automatically
- stopped on the N'th time that tracepoint is hit. If the
- tracepoint number NUM is not specified, the `passcount' command
- sets the passcount of the most recently defined tracepoint. If no
- passcount is given, the trace experiment will run until stopped
- explicitly by the user.
-
- Examples:
-
- (gdb) passcount 5 2 // Stop on the 5th execution of
- `// tracepoint 2'
-
- (gdb) passcount 12 // Stop on the 12th execution of the
- `// most recently defined tracepoint.'
- (gdb) trace foo
- (gdb) pass 3
- (gdb) trace bar
- (gdb) pass 2
- (gdb) trace baz
- (gdb) pass 1 // Stop tracing when foo has been
- `// executed 3 times OR when bar has'
- `// been executed 2 times'
- `// OR when baz has been executed 1 time.'
-
-
-
-File: gdb.info, Node: Tracepoint Actions, Next: Listing Tracepoints, Prev: Tracepoint Passcounts, Up: Set Tracepoints
-
-Tracepoint Action Lists
------------------------
-
-`actions [NUM]'
- This command will prompt for a list of actions to be taken when the
- tracepoint is hit. If the tracepoint number NUM is not specified,
- this command sets the actions for the one that was most recently
- defined (so that you can define a tracepoint and then say
- `actions' without bothering about its number). You specify the
- actions themselves on the following lines, one action at a time,
- and terminate the actions list with a line containing just `end'.
- So far, the only defined actions are `collect' and
- `while-stepping'.
-
- To remove all actions from a tracepoint, type `actions NUM' and
- follow it immediately with `end'.
-
- (gdb) collect DATA // collect some data
-
- (gdb) while-stepping 5 // single-step 5 times, collect data
-
- (gdb) end // signals the end of actions.
-
- In the following example, the action list begins with `collect'
- commands indicating the things to be collected when the tracepoint
- is hit. Then, in order to single-step and collect additional data
- following the tracepoint, a `while-stepping' command is used,
- followed by the list of things to be collected while stepping. The
- `while-stepping' command is terminated by its own separate `end'
- command. Lastly, the action list is terminated by an `end'
- command.
-
- (gdb) trace foo
- (gdb) actions
- Enter actions for tracepoint 1, one per line:
- > collect bar,baz
- > collect $regs
- > while-stepping 12
- > collect $fp, $sp
- > end
- end
-
-`collect EXPR1, EXPR2, ...'
- Collect values of the given expressions when the tracepoint is hit.
- This command accepts a comma-separated list of any valid
- expressions. In addition to global, static, or local variables,
- the following special arguments are supported:
-
- `$regs'
- collect all registers
-
- `$args'
- collect all function arguments
-
- `$locals'
- collect all local variables.
-
- You can give several consecutive `collect' commands, each one with
- a single argument, or one `collect' command with several arguments
- separated by commas: the effect is the same.
-
- The command `info scope' (*note info scope: Symbols.) is
- particularly useful for figuring out what data to collect.
-
-`while-stepping N'
- Perform N single-step traces after the tracepoint, collecting new
- data at each step. The `while-stepping' command is followed by
- the list of what to collect while stepping (followed by its own
- `end' command):
-
- > while-stepping 12
- > collect $regs, myglobal
- > end
- >
-
- You may abbreviate `while-stepping' as `ws' or `stepping'.
-
-
-File: gdb.info, Node: Listing Tracepoints, Next: Starting and Stopping Trace Experiment, Prev: Tracepoint Actions, Up: Set Tracepoints
-
-Listing Tracepoints
--------------------
-
-`info tracepoints [NUM]'
- Display information about the tracepoint NUM. If you don't specify
- a tracepoint number, displays information about all the tracepoints
- defined so far. For each tracepoint, the following information is
- shown:
-
- * its number
-
- * whether it is enabled or disabled
-
- * its address
-
- * its passcount as given by the `passcount N' command
-
- * its step count as given by the `while-stepping N' command
-
- * where in the source files is the tracepoint set
-
- * its action list as given by the `actions' command
-
- (gdb) info trace
- Num Enb Address PassC StepC What
- 1 y 0x002117c4 0 0 <gdb_asm>
- 2 y 0x0020dc64 0 0 in g_test at g_test.c:1375
- 3 y 0x0020b1f4 0 0 in get_data at ../foo.c:41
- (gdb)
-
- This command can be abbreviated `info tp'.
-
-
-File: gdb.info, Node: Starting and Stopping Trace Experiment, Prev: Listing Tracepoints, Up: Set Tracepoints
-
-Starting and Stopping Trace Experiment
---------------------------------------
-
-`tstart'
- This command takes no arguments. It starts the trace experiment,
- and begins collecting data. This has the side effect of
- discarding all the data collected in the trace buffer during the
- previous trace experiment.
-
-`tstop'
- This command takes no arguments. It ends the trace experiment, and
- stops collecting data.
-
- *Note:* a trace experiment and data collection may stop
- automatically if any tracepoint's passcount is reached (*note
- Tracepoint Passcounts::), or if the trace buffer becomes full.
-
-`tstatus'
- This command displays the status of the current trace data
- collection.
-
- Here is an example of the commands we described so far:
-
- (gdb) trace gdb_c_test
- (gdb) actions
- Enter actions for tracepoint #1, one per line.
- > collect $regs,$locals,$args
- > while-stepping 11
- > collect $regs
- > end
- > end
- (gdb) tstart
- [time passes ...]
- (gdb) tstop
-
-
-File: gdb.info, Node: Analyze Collected Data, Next: Tracepoint Variables, Prev: Set Tracepoints, Up: Tracepoints
-
-Using the collected data
-========================
-
-After the tracepoint experiment ends, you use GDB commands for
-examining the trace data. The basic idea is that each tracepoint
-collects a trace "snapshot" every time it is hit and another snapshot
-every time it single-steps. All these snapshots are consecutively
-numbered from zero and go into a buffer, and you can examine them
-later. The way you examine them is to "focus" on a specific trace
-snapshot. When the remote stub is focused on a trace snapshot, it will
-respond to all GDB requests for memory and registers by reading from
-the buffer which belongs to that snapshot, rather than from _real_
-memory or registers of the program being debugged. This means that
-*all* GDB commands (`print', `info registers', `backtrace', etc.) will
-behave as if we were currently debugging the program state as it was
-when the tracepoint occurred. Any requests for data that are not in
-the buffer will fail.
-
-* Menu:
-
-* tfind:: How to select a trace snapshot
-* tdump:: How to display all data for a snapshot
-* save-tracepoints:: How to save tracepoints for a future run
-
-
-File: gdb.info, Node: tfind, Next: tdump, Up: Analyze Collected Data
-
-`tfind N'
----------
-
-The basic command for selecting a trace snapshot from the buffer is
-`tfind N', which finds trace snapshot number N, counting from zero. If
-no argument N is given, the next snapshot is selected.
-
- Here are the various forms of using the `tfind' command.
-
-`tfind start'
- Find the first snapshot in the buffer. This is a synonym for
- `tfind 0' (since 0 is the number of the first snapshot).
-
-`tfind none'
- Stop debugging trace snapshots, resume _live_ debugging.
-
-`tfind end'
- Same as `tfind none'.
-
-`tfind'
- No argument means find the next trace snapshot.
-
-`tfind -'
- Find the previous trace snapshot before the current one. This
- permits retracing earlier steps.
-
-`tfind tracepoint NUM'
- Find the next snapshot associated with tracepoint NUM. Search
- proceeds forward from the last examined trace snapshot. If no
- argument NUM is given, it means find the next snapshot collected
- for the same tracepoint as the current snapshot.
-
-`tfind pc ADDR'
- Find the next snapshot associated with the value ADDR of the
- program counter. Search proceeds forward from the last examined
- trace snapshot. If no argument ADDR is given, it means find the
- next snapshot with the same value of PC as the current snapshot.
-
-`tfind outside ADDR1, ADDR2'
- Find the next snapshot whose PC is outside the given range of
- addresses.
-
-`tfind range ADDR1, ADDR2'
- Find the next snapshot whose PC is between ADDR1 and ADDR2.
-
-`tfind line [FILE:]N'
- Find the next snapshot associated with the source line N. If the
- optional argument FILE is given, refer to line N in that source
- file. Search proceeds forward from the last examined trace
- snapshot. If no argument N is given, it means find the next line
- other than the one currently being examined; thus saying `tfind
- line' repeatedly can appear to have the same effect as stepping
- from line to line in a _live_ debugging session.
-
- The default arguments for the `tfind' commands are specifically
-designed to make it easy to scan through the trace buffer. For
-instance, `tfind' with no argument selects the next trace snapshot, and
-`tfind -' with no argument selects the previous trace snapshot. So, by
-giving one `tfind' command, and then simply hitting <RET> repeatedly
-you can examine all the trace snapshots in order. Or, by saying `tfind
--' and then hitting <RET> repeatedly you can examine the snapshots in
-reverse order. The `tfind line' command with no argument selects the
-snapshot for the next source line executed. The `tfind pc' command with
-no argument selects the next snapshot with the same program counter
-(PC) as the current frame. The `tfind tracepoint' command with no
-argument selects the next trace snapshot collected by the same
-tracepoint as the current one.
-
- In addition to letting you scan through the trace buffer manually,
-these commands make it easy to construct GDB scripts that scan through
-the trace buffer and print out whatever collected data you are
-interested in. Thus, if we want to examine the PC, FP, and SP
-registers from each trace frame in the buffer, we can say this:
-
- (gdb) tfind start
- (gdb) while ($trace_frame != -1)
- > printf "Frame %d, PC = %08X, SP = %08X, FP = %08X\n", \
- $trace_frame, $pc, $sp, $fp
- > tfind
- > end
-
- Frame 0, PC = 0020DC64, SP = 0030BF3C, FP = 0030BF44
- Frame 1, PC = 0020DC6C, SP = 0030BF38, FP = 0030BF44
- Frame 2, PC = 0020DC70, SP = 0030BF34, FP = 0030BF44
- Frame 3, PC = 0020DC74, SP = 0030BF30, FP = 0030BF44
- Frame 4, PC = 0020DC78, SP = 0030BF2C, FP = 0030BF44
- Frame 5, PC = 0020DC7C, SP = 0030BF28, FP = 0030BF44
- Frame 6, PC = 0020DC80, SP = 0030BF24, FP = 0030BF44
- Frame 7, PC = 0020DC84, SP = 0030BF20, FP = 0030BF44
- Frame 8, PC = 0020DC88, SP = 0030BF1C, FP = 0030BF44
- Frame 9, PC = 0020DC8E, SP = 0030BF18, FP = 0030BF44
- Frame 10, PC = 00203F6C, SP = 0030BE3C, FP = 0030BF14
-
- Or, if we want to examine the variable `X' at each source line in
-the buffer:
-
- (gdb) tfind start
- (gdb) while ($trace_frame != -1)
- > printf "Frame %d, X == %d\n", $trace_frame, X
- > tfind line
- > end
-
- Frame 0, X = 1
- Frame 7, X = 2
- Frame 13, X = 255
-
-
-File: gdb.info, Node: tdump, Next: save-tracepoints, Prev: tfind, Up: Analyze Collected Data
-
-`tdump'
--------
-
-This command takes no arguments. It prints all the data collected at
-the current trace snapshot.
-
- (gdb) trace 444
- (gdb) actions
- Enter actions for tracepoint #2, one per line:
- > collect $regs, $locals, $args, gdb_long_test
- > end
-
- (gdb) tstart
-
- (gdb) tfind line 444
- #0 gdb_test (p1=0x11, p2=0x22, p3=0x33, p4=0x44, p5=0x55, p6=0x66)
- at gdb_test.c:444
- 444 printp( "%s: arguments = 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X\n", )
-
- (gdb) tdump
- Data collected at tracepoint 2, trace frame 1:
- d0 0xc4aa0085 -995491707
- d1 0x18 24
- d2 0x80 128
- d3 0x33 51
- d4 0x71aea3d 119204413
- d5 0x22 34
- d6 0xe0 224
- d7 0x380035 3670069
- a0 0x19e24a 1696330
- a1 0x3000668 50333288
- a2 0x100 256
- a3 0x322000 3284992
- a4 0x3000698 50333336
- a5 0x1ad3cc 1758156
- fp 0x30bf3c 0x30bf3c
- sp 0x30bf34 0x30bf34
- ps 0x0 0
- pc 0x20b2c8 0x20b2c8
- fpcontrol 0x0 0
- fpstatus 0x0 0
- fpiaddr 0x0 0
- p = 0x20e5b4 "gdb-test"
- p1 = (void *) 0x11
- p2 = (void *) 0x22
- p3 = (void *) 0x33
- p4 = (void *) 0x44
- p5 = (void *) 0x55
- p6 = (void *) 0x66
- gdb_long_test = 17 '\021'
-
- (gdb)
-
-
-File: gdb.info, Node: save-tracepoints, Prev: tdump, Up: Analyze Collected Data
-
-`save-tracepoints FILENAME'
----------------------------
-
-This command saves all current tracepoint definitions together with
-their actions and passcounts, into a file `FILENAME' suitable for use
-in a later debugging session. To read the saved tracepoint
-definitions, use the `source' command (*note Command Files::).
-
-
-File: gdb.info, Node: Tracepoint Variables, Prev: Analyze Collected Data, Up: Tracepoints
-
-Convenience Variables for Tracepoints
-=====================================
-
-`(int) $trace_frame'
- The current trace snapshot (a.k.a. "frame") number, or -1 if no
- snapshot is selected.
-
-`(int) $tracepoint'
- The tracepoint for the current trace snapshot.
-
-`(int) $trace_line'
- The line number for the current trace snapshot.
-
-`(char []) $trace_file'
- The source file for the current trace snapshot.
-
-`(char []) $trace_func'
- The name of the function containing `$tracepoint'.
-
- Note: `$trace_file' is not suitable for use in `printf', use
-`output' instead.
-
- Here's a simple example of using these convenience variables for
-stepping through all the trace snapshots and printing some of their
-data.
-
- (gdb) tfind start
-
- (gdb) while $trace_frame != -1
- > output $trace_file
- > printf ", line %d (tracepoint #%d)\n", $trace_line, $tracepoint
- > tfind
- > end
-
-
-File: gdb.info, Node: Overlays, Next: Languages, Prev: Tracepoints, Up: Top
-
-Debugging Programs That Use Overlays
-************************************
-
-If your program is too large to fit completely in your target system's
-memory, you can sometimes use "overlays" to work around this problem.
-GDB provides some support for debugging programs that use overlays.
-
-* Menu:
-
-* How Overlays Work:: A general explanation of overlays.
-* Overlay Commands:: Managing overlays in GDB.
-* Automatic Overlay Debugging:: GDB can find out which overlays are
- mapped by asking the inferior.
-* Overlay Sample Program:: A sample program using overlays.
-
-
-File: gdb.info, Node: How Overlays Work, Next: Overlay Commands, Up: Overlays
-
-How Overlays Work
-=================
-
-Suppose you have a computer whose instruction address space is only 64
-kilobytes long, but which has much more memory which can be accessed by
-other means: special instructions, segment registers, or memory
-management hardware, for example. Suppose further that you want to
-adapt a program which is larger than 64 kilobytes to run on this system.
-
- One solution is to identify modules of your program which are
-relatively independent, and need not call each other directly; call
-these modules "overlays". Separate the overlays from the main program,
-and place their machine code in the larger memory. Place your main
-program in instruction memory, but leave at least enough space there to
-hold the largest overlay as well.
-
- Now, to call a function located in an overlay, you must first copy
-that overlay's machine code from the large memory into the space set
-aside for it in the instruction memory, and then jump to its entry point
-there.
-
- Data Instruction Larger
- Address Space Address Space Address Space
- +-----------+ +-----------+ +-----------+
- | | | | | |
- +-----------+ +-----------+ +-----------+<-- overlay 1
- | program | | main | .----| overlay 1 | load address
- | variables | | program | | +-----------+
- | and heap | | | | | |
- +-----------+ | | | +-----------+<-- overlay 2
- | | +-----------+ | | | load address
- +-----------+ | | | .-| overlay 2 |
- | | | | | |
- mapped --->+-----------+ | | +-----------+
- address | | | | | |
- | overlay | <-' | | |
- | area | <---' +-----------+<-- overlay 3
- | | <---. | | load address
- +-----------+ `--| overlay 3 |
- | | | |
- +-----------+ | |
- +-----------+
- | |
- +-----------+
-
- A code overlay
-
- The diagram (*note A code overlay::) shows a system with separate
-data and instruction address spaces. To map an overlay, the program
-copies its code from the larger address space to the instruction
-address space. Since the overlays shown here all use the same mapped
-address, only one may be mapped at a time. For a system with a single
-address space for data and instructions, the diagram would be similar,
-except that the program variables and heap would share an address space
-with the main program and the overlay area.
-
- An overlay loaded into instruction memory and ready for use is
-called a "mapped" overlay; its "mapped address" is its address in the
-instruction memory. An overlay not present (or only partially present)
-in instruction memory is called "unmapped"; its "load address" is its
-address in the larger memory. The mapped address is also called the
-"virtual memory address", or "VMA"; the load address is also called the
-"load memory address", or "LMA".
-
- Unfortunately, overlays are not a completely transparent way to
-adapt a program to limited instruction memory. They introduce a new
-set of global constraints you must keep in mind as you design your
-program:
-
- * Before calling or returning to a function in an overlay, your
- program must make sure that overlay is actually mapped.
- Otherwise, the call or return will transfer control to the right
- address, but in the wrong overlay, and your program will probably
- crash.
-
- * If the process of mapping an overlay is expensive on your system,
- you will need to choose your overlays carefully to minimize their
- effect on your program's performance.
-
- * The executable file you load onto your system must contain each
- overlay's instructions, appearing at the overlay's load address,
- not its mapped address. However, each overlay's instructions must
- be relocated and its symbols defined as if the overlay were at its
- mapped address. You can use GNU linker scripts to specify
- different load and relocation addresses for pieces of your
- program; see *Note Overlay Description: (ld.info)Overlay
- Description.
-
- * The procedure for loading executable files onto your system must
- be able to load their contents into the larger address space as
- well as the instruction and data spaces.
-
-
- The overlay system described above is rather simple, and could be
-improved in many ways:
-
- * If your system has suitable bank switch registers or memory
- management hardware, you could use those facilities to make an
- overlay's load area contents simply appear at their mapped address
- in instruction space. This would probably be faster than copying
- the overlay to its mapped area in the usual way.
-
- * If your overlays are small enough, you could set aside more than
- one overlay area, and have more than one overlay mapped at a time.
-
- * You can use overlays to manage data, as well as instructions. In
- general, data overlays are even less transparent to your design
- than code overlays: whereas code overlays only require care when
- you call or return to functions, data overlays require care every
- time you access the data. Also, if you change the contents of a
- data overlay, you must copy its contents back out to its load
- address before you can copy a different data overlay into the same
- mapped area.
-
-
-
-File: gdb.info, Node: Overlay Commands, Next: Automatic Overlay Debugging, Prev: How Overlays Work, Up: Overlays
-
-Overlay Commands
-================
-
-To use GDB's overlay support, each overlay in your program must
-correspond to a separate section of the executable file. The section's
-virtual memory address and load memory address must be the overlay's
-mapped and load addresses. Identifying overlays with sections allows
-GDB to determine the appropriate address of a function or variable,
-depending on whether the overlay is mapped or not.
-
- GDB's overlay commands all start with the word `overlay'; you can
-abbreviate this as `ov' or `ovly'. The commands are:
-
-`overlay off'
- Disable GDB's overlay support. When overlay support is disabled,
- GDB assumes that all functions and variables are always present at
- their mapped addresses. By default, GDB's overlay support is
- disabled.
-
-`overlay manual'
- Enable "manual" overlay debugging. In this mode, GDB relies on
- you to tell it which overlays are mapped, and which are not, using
- the `overlay map-overlay' and `overlay unmap-overlay' commands
- described below.
-
-`overlay map-overlay OVERLAY'
-`overlay map OVERLAY'
- Tell GDB that OVERLAY is now mapped; OVERLAY must be the name of
- the object file section containing the overlay. When an overlay
- is mapped, GDB assumes it can find the overlay's functions and
- variables at their mapped addresses. GDB assumes that any other
- overlays whose mapped ranges overlap that of OVERLAY are now
- unmapped.
-
-`overlay unmap-overlay OVERLAY'
-`overlay unmap OVERLAY'
- Tell GDB that OVERLAY is no longer mapped; OVERLAY must be the
- name of the object file section containing the overlay. When an
- overlay is unmapped, GDB assumes it can find the overlay's
- functions and variables at their load addresses.
-
-`overlay auto'
- Enable "automatic" overlay debugging. In this mode, GDB consults
- a data structure the overlay manager maintains in the inferior to
- see which overlays are mapped. For details, see *Note Automatic
- Overlay Debugging::.
-
-`overlay load-target'
-`overlay load'
- Re-read the overlay table from the inferior. Normally, GDB
- re-reads the table GDB automatically each time the inferior stops,
- so this command should only be necessary if you have changed the
- overlay mapping yourself using GDB. This command is only useful
- when using automatic overlay debugging.
-
-`overlay list-overlays'
-`overlay list'
- Display a list of the overlays currently mapped, along with their
- mapped addresses, load addresses, and sizes.
-
-
- Normally, when GDB prints a code address, it includes the name of
-the function the address falls in:
-
- (gdb) print main
- $3 = {int ()} 0x11a0 <main>
-
-When overlay debugging is enabled, GDB recognizes code in unmapped
-overlays, and prints the names of unmapped functions with asterisks
-around them. For example, if `foo' is a function in an unmapped
-overlay, GDB prints it this way:
-
- (gdb) overlay list
- No sections are mapped.
- (gdb) print foo
- $5 = {int (int)} 0x100000 <*foo*>
-
-When `foo''s overlay is mapped, GDB prints the function's name normally:
-
- (gdb) overlay list
- Section .ov.foo.text, loaded at 0x100000 - 0x100034,
- mapped at 0x1016 - 0x104a
- (gdb) print foo
- $6 = {int (int)} 0x1016 <foo>
-
- When overlay debugging is enabled, GDB can find the correct address
-for functions and variables in an overlay, whether or not the overlay
-is mapped. This allows most GDB commands, like `break' and
-`disassemble', to work normally, even on unmapped code. However, GDB's
-breakpoint support has some limitations:
-
- * You can set breakpoints in functions in unmapped overlays, as long
- as GDB can write to the overlay at its load address.
-
- * GDB can not set hardware or simulator-based breakpoints in
- unmapped overlays. However, if you set a breakpoint at the end of
- your overlay manager (and tell GDB which overlays are now mapped,
- if you are using manual overlay management), GDB will re-set its
- breakpoints properly.
-
-
-File: gdb.info, Node: Automatic Overlay Debugging, Next: Overlay Sample Program, Prev: Overlay Commands, Up: Overlays
-
-Automatic Overlay Debugging
-===========================
-
-GDB can automatically track which overlays are mapped and which are
-not, given some simple co-operation from the overlay manager in the
-inferior. If you enable automatic overlay debugging with the `overlay
-auto' command (*note Overlay Commands::), GDB looks in the inferior's
-memory for certain variables describing the current state of the
-overlays.
-
- Here are the variables your overlay manager must define to support
-GDB's automatic overlay debugging:
-
-`_ovly_table':
- This variable must be an array of the following structures:
-
- struct
- {
- /* The overlay's mapped address. */
- unsigned long vma;
-
- /* The size of the overlay, in bytes. */
- unsigned long size;
-
- /* The overlay's load address. */
- unsigned long lma;
-
- /* Non-zero if the overlay is currently mapped;
- zero otherwise. */
- unsigned long mapped;
- }
-
-`_novlys':
- This variable must be a four-byte signed integer, holding the total
- number of elements in `_ovly_table'.
-
-
- To decide whether a particular overlay is mapped or not, GDB looks
-for an entry in `_ovly_table' whose `vma' and `lma' members equal the
-VMA and LMA of the overlay's section in the executable file. When GDB
-finds a matching entry, it consults the entry's `mapped' member to
-determine whether the overlay is currently mapped.
-
- In addition, your overlay manager may define a function called
-`_ovly_debug_event'. If this function is defined, GDB will silently
-set a breakpoint there. If the overlay manager then calls this
-function whenever it has changed the overlay table, this will enable
-GDB to accurately keep track of which overlays are in program memory,
-and update any breakpoints that may be set in overlays. This will
-allow breakpoints to work even if the overlays are kept in ROM or other
-non-writable memory while they are not being executed.
-
-
-File: gdb.info, Node: Overlay Sample Program, Prev: Automatic Overlay Debugging, Up: Overlays
-
-Overlay Sample Program
-======================
-
-When linking a program which uses overlays, you must place the overlays
-at their load addresses, while relocating them to run at their mapped
-addresses. To do this, you must write a linker script (*note Overlay
-Description: (ld.info)Overlay Description.). Unfortunately, since
-linker scripts are specific to a particular host system, target
-architecture, and target memory layout, this manual cannot provide
-portable sample code demonstrating GDB's overlay support.
-
- However, the GDB source distribution does contain an overlaid
-program, with linker scripts for a few systems, as part of its test
-suite. The program consists of the following files from
-`gdb/testsuite/gdb.base':
-
-`overlays.c'
- The main program file.
-
-`ovlymgr.c'
- A simple overlay manager, used by `overlays.c'.
-
-`foo.c'
-`bar.c'
-`baz.c'
-`grbx.c'
- Overlay modules, loaded and used by `overlays.c'.
-
-`d10v.ld'
-`m32r.ld'
- Linker scripts for linking the test program on the `d10v-elf' and
- `m32r-elf' targets.
-
- You can build the test program using the `d10v-elf' GCC
-cross-compiler like this:
-
- $ d10v-elf-gcc -g -c overlays.c
- $ d10v-elf-gcc -g -c ovlymgr.c
- $ d10v-elf-gcc -g -c foo.c
- $ d10v-elf-gcc -g -c bar.c
- $ d10v-elf-gcc -g -c baz.c
- $ d10v-elf-gcc -g -c grbx.c
- $ d10v-elf-gcc -g overlays.o ovlymgr.o foo.o bar.o \
- baz.o grbx.o -Wl,-Td10v.ld -o overlays
-
- The build process is identical for any other architecture, except
-that you must substitute the appropriate compiler and linker script for
-the target system for `d10v-elf-gcc' and `d10v.ld'.
-
-
-File: gdb.info, Node: Languages, Next: Symbols, Prev: Overlays, Up: Top
-
-Using GDB with Different Languages
-**********************************
-
-Although programming languages generally have common aspects, they are
-rarely expressed in the same manner. For instance, in ANSI C,
-dereferencing a pointer `p' is accomplished by `*p', but in Modula-2,
-it is accomplished by `p^'. Values can also be represented (and
-displayed) differently. Hex numbers in C appear as `0x1ae', while in
-Modula-2 they appear as `1AEH'.
-
- Language-specific information is built into GDB for some languages,
-allowing you to express operations like the above in your program's
-native language, and allowing GDB to output values in a manner
-consistent with the syntax of your program's native language. The
-language you use to build expressions is called the "working language".
-
-* Menu:
-
-* Setting:: Switching between source languages
-* Show:: Displaying the language
-* Checks:: Type and range checks
-* Support:: Supported languages
-* Unsupported languages:: Unsupported languages
-
-
-File: gdb.info, Node: Setting, Next: Show, Up: Languages
-
-Switching between source languages
-==================================
-
-There are two ways to control the working language--either have GDB set
-it automatically, or select it manually yourself. You can use the `set
-language' command for either purpose. On startup, GDB defaults to
-setting the language automatically. The working language is used to
-determine how expressions you type are interpreted, how values are
-printed, etc.
-
- In addition to the working language, every source file that GDB
-knows about has its own working language. For some object file
-formats, the compiler might indicate which language a particular source
-file is in. However, most of the time GDB infers the language from the
-name of the file. The language of a source file controls whether C++
-names are demangled--this way `backtrace' can show each frame
-appropriately for its own language. There is no way to set the
-language of a source file from within GDB, but you can set the language
-associated with a filename extension. *Note Displaying the language:
-Show.
-
- This is most commonly a problem when you use a program, such as
-`cfront' or `f2c', that generates C but is written in another language.
-In that case, make the program use `#line' directives in its C output;
-that way GDB will know the correct language of the source code of the
-original program, and will display that source code, not the generated
-C code.
-
-* Menu:
-
-* Filenames:: Filename extensions and languages.
-* Manually:: Setting the working language manually
-* Automatically:: Having GDB infer the source language
-
-
-File: gdb.info, Node: Filenames, Next: Manually, Up: Setting
-
-List of filename extensions and languages
------------------------------------------
-
-If a source file name ends in one of the following extensions, then GDB
-infers that its language is the one indicated.
-
-`.c'
- C source file
-
-`.C'
-`.cc'
-`.cp'
-`.cpp'
-`.cxx'
-`.c++'
- C++ source file
-
-`.m'
- Objective-C source file
-
-`.f'
-`.F'
- Fortran source file
-
-`.mod'
- Modula-2 source file
-
-`.s'
-`.S'
- Assembler source file. This actually behaves almost like C, but
- GDB does not skip over function prologues when stepping.
-
- In addition, you may set the language associated with a filename
-extension. *Note Displaying the language: Show.
-
-
-File: gdb.info, Node: Manually, Next: Automatically, Prev: Filenames, Up: Setting
-
-Setting the working language
-----------------------------
-
-If you allow GDB to set the language automatically, expressions are
-interpreted the same way in your debugging session and your program.
-
- If you wish, you may set the language manually. To do this, issue
-the command `set language LANG', where LANG is the name of a language,
-such as `c' or `modula-2'. For a list of the supported languages, type
-`set language'.
-
- Setting the language manually prevents GDB from updating the working
-language automatically. This can lead to confusion if you try to debug
-a program when the working language is not the same as the source
-language, when an expression is acceptable to both languages--but means
-different things. For instance, if the current source file were
-written in C, and GDB was parsing Modula-2, a command such as:
-
- print a = b + c
-
-might not have the effect you intended. In C, this means to add `b'
-and `c' and place the result in `a'. The result printed would be the
-value of `a'. In Modula-2, this means to compare `a' to the result of
-`b+c', yielding a `BOOLEAN' value.
-
-
-File: gdb.info, Node: Automatically, Prev: Manually, Up: Setting
-
-Having GDB infer the source language
-------------------------------------
-
-To have GDB set the working language automatically, use `set language
-local' or `set language auto'. GDB then infers the working language.
-That is, when your program stops in a frame (usually by encountering a
-breakpoint), GDB sets the working language to the language recorded for
-the function in that frame. If the language for a frame is unknown
-(that is, if the function or block corresponding to the frame was
-defined in a source file that does not have a recognized extension),
-the current working language is not changed, and GDB issues a warning.
-
- This may not seem necessary for most programs, which are written
-entirely in one source language. However, program modules and libraries
-written in one source language can be used by a main program written in
-a different source language. Using `set language auto' in this case
-frees you from having to set the working language manually.
-
-
-File: gdb.info, Node: Show, Next: Checks, Prev: Setting, Up: Languages
-
-Displaying the language
-=======================
-
-The following commands help you find out which language is the working
-language, and also what language source files were written in.
-
-`show language'
- Display the current working language. This is the language you
- can use with commands such as `print' to build and compute
- expressions that may involve variables in your program.
-
-`info frame'
- Display the source language for this frame. This language becomes
- the working language if you use an identifier from this frame.
- *Note Information about a frame: Frame Info, to identify the other
- information listed here.
-
-`info source'
- Display the source language of this source file. *Note Examining
- the Symbol Table: Symbols, to identify the other information
- listed here.
-
- In unusual circumstances, you may have source files with extensions
-not in the standard list. You can then set the extension associated
-with a language explicitly:
-
-`set extension-language .EXT LANGUAGE'
- Set source files with extension .EXT to be assumed to be in the
- source language LANGUAGE.
-
-`info extensions'
- List all the filename extensions and the associated languages.
-
-
-File: gdb.info, Node: Checks, Next: Support, Prev: Show, Up: Languages
-
-Type and range checking
-=======================
-
- _Warning:_ In this release, the GDB commands for type and range
- checking are included, but they do not yet have any effect. This
- section documents the intended facilities.
-
- Some languages are designed to guard you against making seemingly
-common errors through a series of compile- and run-time checks. These
-include checking the type of arguments to functions and operators, and
-making sure mathematical overflows are caught at run time. Checks such
-as these help to ensure a program's correctness once it has been
-compiled by eliminating type mismatches, and providing active checks
-for range errors when your program is running.
-
- GDB can check for conditions like the above if you wish. Although
-GDB does not check the statements in your program, it can check
-expressions entered directly into GDB for evaluation via the `print'
-command, for example. As with the working language, GDB can also
-decide whether or not to check automatically based on your program's
-source language. *Note Supported languages: Support, for the default
-settings of supported languages.
-
-* Menu:
-
-* Type Checking:: An overview of type checking
-* Range Checking:: An overview of range checking
-
-
-File: gdb.info, Node: Type Checking, Next: Range Checking, Up: Checks
-
-An overview of type checking
-----------------------------
-
-Some languages, such as Modula-2, are strongly typed, meaning that the
-arguments to operators and functions have to be of the correct type,
-otherwise an error occurs. These checks prevent type mismatch errors
-from ever causing any run-time problems. For example,
-
- 1 + 2 => 3
-but
- error--> 1 + 2.3
-
- The second example fails because the `CARDINAL' 1 is not
-type-compatible with the `REAL' 2.3.
-
- For the expressions you use in GDB commands, you can tell the GDB
-type checker to skip checking; to treat any mismatches as errors and
-abandon the expression; or to only issue warnings when type mismatches
-occur, but evaluate the expression anyway. When you choose the last of
-these, GDB evaluates expressions like the second example above, but
-also issues a warning.
-
- Even if you turn type checking off, there may be other reasons
-related to type that prevent GDB from evaluating an expression. For
-instance, GDB does not know how to add an `int' and a `struct foo'.
-These particular type errors have nothing to do with the language in
-use, and usually arise from expressions, such as the one described
-above, which make little sense to evaluate anyway.
-
- Each language defines to what degree it is strict about type. For
-instance, both Modula-2 and C require the arguments to arithmetical
-operators to be numbers. In C, enumerated types and pointers can be
-represented as numbers, so that they are valid arguments to mathematical
-operators. *Note Supported languages: Support, for further details on
-specific languages.
-
- GDB provides some additional commands for controlling the type
-checker:
-
-`set check type auto'
- Set type checking on or off based on the current working language.
- *Note Supported languages: Support, for the default settings for
- each language.
-
-`set check type on'
-`set check type off'
- Set type checking on or off, overriding the default setting for the
- current working language. Issue a warning if the setting does not
- match the language default. If any type mismatches occur in
- evaluating an expression while type checking is on, GDB prints a
- message and aborts evaluation of the expression.
-
-`set check type warn'
- Cause the type checker to issue warnings, but to always attempt to
- evaluate the expression. Evaluating the expression may still be
- impossible for other reasons. For example, GDB cannot add numbers
- and structures.
-
-`show type'
- Show the current setting of the type checker, and whether or not
- GDB is setting it automatically.
-
-
-File: gdb.info, Node: Range Checking, Prev: Type Checking, Up: Checks
-
-An overview of range checking
------------------------------
-
-In some languages (such as Modula-2), it is an error to exceed the
-bounds of a type; this is enforced with run-time checks. Such range
-checking is meant to ensure program correctness by making sure
-computations do not overflow, or indices on an array element access do
-not exceed the bounds of the array.
-
- For expressions you use in GDB commands, you can tell GDB to treat
-range errors in one of three ways: ignore them, always treat them as
-errors and abandon the expression, or issue warnings but evaluate the
-expression anyway.
-
- A range error can result from numerical overflow, from exceeding an
-array index bound, or when you type a constant that is not a member of
-any type. Some languages, however, do not treat overflows as an error.
-In many implementations of C, mathematical overflow causes the result
-to "wrap around" to lower values--for example, if M is the largest
-integer value, and S is the smallest, then
-
- M + 1 => S
-
- This, too, is specific to individual languages, and in some cases
-specific to individual compilers or machines. *Note Supported
-languages: Support, for further details on specific languages.
-
- GDB provides some additional commands for controlling the range
-checker:
-
-`set check range auto'
- Set range checking on or off based on the current working language.
- *Note Supported languages: Support, for the default settings for
- each language.
-
-`set check range on'
-`set check range off'
- Set range checking on or off, overriding the default setting for
- the current working language. A warning is issued if the setting
- does not match the language default. If a range error occurs and
- range checking is on, then a message is printed and evaluation of
- the expression is aborted.
-
-`set check range warn'
- Output messages when the GDB range checker detects a range error,
- but attempt to evaluate the expression anyway. Evaluating the
- expression may still be impossible for other reasons, such as
- accessing memory that the process does not own (a typical example
- from many Unix systems).
-
-`show range'
- Show the current setting of the range checker, and whether or not
- it is being set automatically by GDB.
-
-
-File: gdb.info, Node: Support, Next: Unsupported languages, Prev: Checks, Up: Languages
-
-Supported languages
-===================
-
-GDB supports C, C++, Objective-C, Fortran, Java, assembly, and Modula-2.
-Some GDB features may be used in expressions regardless of the language
-you use: the GDB `@' and `::' operators, and the `{type}addr' construct
-(*note Expressions: Expressions.) can be used with the constructs of
-any supported language.
-
- The following sections detail to what degree each source language is
-supported by GDB. These sections are not meant to be language
-tutorials or references, but serve only as a reference guide to what the
-GDB expression parser accepts, and what input and output formats should
-look like for different languages. There are many good books written
-on each of these languages; please look to these for a language
-reference or tutorial.
-
-* Menu:
-
-* C:: C and C++
-* Objective-C:: Objective-C
-* Modula-2:: Modula-2
-
-
-File: gdb.info, Node: C, Next: Objective-C, Up: Support
-
-C and C++
----------
-
-Since C and C++ are so closely related, many features of GDB apply to
-both languages. Whenever this is the case, we discuss those languages
-together.
-
- The C++ debugging facilities are jointly implemented by the C++
-compiler and GDB. Therefore, to debug your C++ code effectively, you
-must compile your C++ programs with a supported C++ compiler, such as
-GNU `g++', or the HP ANSI C++ compiler (`aCC').
-
- For best results when using GNU C++, use the DWARF 2 debugging
-format; if it doesn't work on your system, try the stabs+ debugging
-format. You can select those formats explicitly with the `g++'
-command-line options `-gdwarf-2' and `-gstabs+'. *Note Options for
-Debugging Your Program or GNU CC: (gcc.info)Debugging Options.
-
-* Menu:
-
-* C Operators:: C and C++ operators
-* C Constants:: C and C++ constants
-* C plus plus expressions:: C++ expressions
-* C Defaults:: Default settings for C and C++
-* C Checks:: C and C++ type and range checks
-* Debugging C:: GDB and C
-* Debugging C plus plus:: GDB features for C++
-
-
-File: gdb.info, Node: C Operators, Next: C Constants, Up: C
-
-C and C++ operators
-...................
-
-Operators must be defined on values of specific types. For instance,
-`+' is defined on numbers, but not on structures. Operators are often
-defined on groups of types.
-
- For the purposes of C and C++, the following definitions hold:
-
- * _Integral types_ include `int' with any of its storage-class
- specifiers; `char'; `enum'; and, for C++, `bool'.
-
- * _Floating-point types_ include `float', `double', and `long
- double' (if supported by the target platform).
-
- * _Pointer types_ include all types defined as `(TYPE *)'.
-
- * _Scalar types_ include all of the above.
-
-
-The following operators are supported. They are listed here in order
-of increasing precedence:
-
-`,'
- The comma or sequencing operator. Expressions in a
- comma-separated list are evaluated from left to right, with the
- result of the entire expression being the last expression
- evaluated.
-
-`='
- Assignment. The value of an assignment expression is the value
- assigned. Defined on scalar types.
-
-`OP='
- Used in an expression of the form `A OP= B', and translated to
- `A = A OP B'. `OP=' and `=' have the same precedence. OP is any
- one of the operators `|', `^', `&', `<<', `>>', `+', `-', `*',
- `/', `%'.
-
-`?:'
- The ternary operator. `A ? B : C' can be thought of as: if A
- then B else C. A should be of an integral type.
-
-`||'
- Logical OR. Defined on integral types.
-
-`&&'
- Logical AND. Defined on integral types.
-
-`|'
- Bitwise OR. Defined on integral types.
-
-`^'
- Bitwise exclusive-OR. Defined on integral types.
-
-`&'
- Bitwise AND. Defined on integral types.
-
-`==, !='
- Equality and inequality. Defined on scalar types. The value of
- these expressions is 0 for false and non-zero for true.
-
-`<, >, <=, >='
- Less than, greater than, less than or equal, greater than or equal.
- Defined on scalar types. The value of these expressions is 0 for
- false and non-zero for true.
-
-`<<, >>'
- left shift, and right shift. Defined on integral types.
-
-`@'
- The GDB "artificial array" operator (*note Expressions:
- Expressions.).
-
-`+, -'
- Addition and subtraction. Defined on integral types,
- floating-point types and pointer types.
-
-`*, /, %'
- Multiplication, division, and modulus. Multiplication and
- division are defined on integral and floating-point types.
- Modulus is defined on integral types.
-
-`++, --'
- Increment and decrement. When appearing before a variable, the
- operation is performed before the variable is used in an
- expression; when appearing after it, the variable's value is used
- before the operation takes place.
-
-`*'
- Pointer dereferencing. Defined on pointer types. Same precedence
- as `++'.
-
-`&'
- Address operator. Defined on variables. Same precedence as `++'.
-
- For debugging C++, GDB implements a use of `&' beyond what is
- allowed in the C++ language itself: you can use `&(&REF)' (or, if
- you prefer, simply `&&REF') to examine the address where a C++
- reference variable (declared with `&REF') is stored.
-
-`-'
- Negative. Defined on integral and floating-point types. Same
- precedence as `++'.
-
-`!'
- Logical negation. Defined on integral types. Same precedence as
- `++'.
-
-`~'
- Bitwise complement operator. Defined on integral types. Same
- precedence as `++'.
-
-`., ->'
- Structure member, and pointer-to-structure member. For
- convenience, GDB regards the two as equivalent, choosing whether
- to dereference a pointer based on the stored type information.
- Defined on `struct' and `union' data.
-
-`.*, ->*'
- Dereferences of pointers to members.
-
-`[]'
- Array indexing. `A[I]' is defined as `*(A+I)'. Same precedence
- as `->'.
-
-`()'
- Function parameter list. Same precedence as `->'.
-
-`::'
- C++ scope resolution operator. Defined on `struct', `union', and
- `class' types.
-
-`::'
- Doubled colons also represent the GDB scope operator (*note
- Expressions: Expressions.). Same precedence as `::', above.
-
- If an operator is redefined in the user code, GDB usually attempts
-to invoke the redefined version instead of using the operator's
-predefined meaning.
-
-* Menu:
-
-* C Constants::
-
-
-File: gdb.info, Node: C Constants, Next: C plus plus expressions, Prev: C Operators, Up: C
-
-C and C++ constants
-...................
-
-GDB allows you to express the constants of C and C++ in the following
-ways:
-
- * Integer constants are a sequence of digits. Octal constants are
- specified by a leading `0' (i.e. zero), and hexadecimal constants
- by a leading `0x' or `0X'. Constants may also end with a letter
- `l', specifying that the constant should be treated as a `long'
- value.
-
- * Floating point constants are a sequence of digits, followed by a
- decimal point, followed by a sequence of digits, and optionally
- followed by an exponent. An exponent is of the form:
- `e[[+]|-]NNN', where NNN is another sequence of digits. The `+'
- is optional for positive exponents. A floating-point constant may
- also end with a letter `f' or `F', specifying that the constant
- should be treated as being of the `float' (as opposed to the
- default `double') type; or with a letter `l' or `L', which
- specifies a `long double' constant.
-
- * Enumerated constants consist of enumerated identifiers, or their
- integral equivalents.
-
- * Character constants are a single character surrounded by single
- quotes (`''), or a number--the ordinal value of the corresponding
- character (usually its ASCII value). Within quotes, the single
- character may be represented by a letter or by "escape sequences",
- which are of the form `\NNN', where NNN is the octal representation
- of the character's ordinal value; or of the form `\X', where `X'
- is a predefined special character--for example, `\n' for newline.
-
- * String constants are a sequence of character constants surrounded
- by double quotes (`"'). Any valid character constant (as described
- above) may appear. Double quotes within the string must be
- preceded by a backslash, so for instance `"a\"b'c"' is a string of
- five characters.
-
- * Pointer constants are an integral value. You can also write
- pointers to constants using the C operator `&'.
-
- * Array constants are comma-separated lists surrounded by braces `{'
- and `}'; for example, `{1,2,3}' is a three-element array of
- integers, `{{1,2}, {3,4}, {5,6}}' is a three-by-two array, and
- `{&"hi", &"there", &"fred"}' is a three-element array of pointers.
-
-* Menu:
-
-* C plus plus expressions::
-* C Defaults::
-* C Checks::
-
-* Debugging C::
-
-
-File: gdb.info, Node: C plus plus expressions, Next: C Defaults, Prev: C Constants, Up: C
-
-C++ expressions
-...............
-
-GDB expression handling can interpret most C++ expressions.
-
- _Warning:_ GDB can only debug C++ code if you use the proper
- compiler and the proper debug format. Currently, GDB works best
- when debugging C++ code that is compiled with GCC 2.95.3 or with
- GCC 3.1 or newer, using the options `-gdwarf-2' or `-gstabs+'.
- DWARF 2 is preferred over stabs+. Most configurations of GCC emit
- either DWARF 2 or stabs+ as their default debug format, so you
- usually don't need to specify a debug format explicitly. Other
- compilers and/or debug formats are likely to work badly or not at
- all when using GDB to debug C++ code.
-
- 1. Member function calls are allowed; you can use expressions like
-
- count = aml->GetOriginal(x, y)
-
- 2. While a member function is active (in the selected stack frame),
- your expressions have the same namespace available as the member
- function; that is, GDB allows implicit references to the class
- instance pointer `this' following the same rules as C++.
-
- 3. You can call overloaded functions; GDB resolves the function call
- to the right definition, with some restrictions. GDB does not
- perform overload resolution involving user-defined type
- conversions, calls to constructors, or instantiations of templates
- that do not exist in the program. It also cannot handle ellipsis
- argument lists or default arguments.
-
- It does perform integral conversions and promotions, floating-point
- promotions, arithmetic conversions, pointer conversions,
- conversions of class objects to base classes, and standard
- conversions such as those of functions or arrays to pointers; it
- requires an exact match on the number of function arguments.
-
- Overload resolution is always performed, unless you have specified
- `set overload-resolution off'. *Note GDB features for C++:
- Debugging C plus plus.
-
- You must specify `set overload-resolution off' in order to use an
- explicit function signature to call an overloaded function, as in
- p 'foo(char,int)'('x', 13)
-
- The GDB command-completion facility can simplify this; see *Note
- Command completion: Completion.
-
- 4. GDB understands variables declared as C++ references; you can use
- them in expressions just as you do in C++ source--they are
- automatically dereferenced.
-
- In the parameter list shown when GDB displays a frame, the values
- of reference variables are not displayed (unlike other variables);
- this avoids clutter, since references are often used for large
- structures. The _address_ of a reference variable is always
- shown, unless you have specified `set print address off'.
-
- 5. GDB supports the C++ name resolution operator `::'--your
- expressions can use it just as expressions in your program do.
- Since one scope may be defined in another, you can use `::'
- repeatedly if necessary, for example in an expression like
- `SCOPE1::SCOPE2::NAME'. GDB also allows resolving name scope by
- reference to source files, in both C and C++ debugging (*note
- Program variables: Variables.).
-
- In addition, when used with HP's C++ compiler, GDB supports calling
-virtual functions correctly, printing out virtual bases of objects,
-calling functions in a base subobject, casting objects, and invoking
-user-defined operators.
-
-
-File: gdb.info, Node: C Defaults, Next: C Checks, Prev: C plus plus expressions, Up: C
-
-C and C++ defaults
-..................
-
-If you allow GDB to set type and range checking automatically, they
-both default to `off' whenever the working language changes to C or
-C++. This happens regardless of whether you or GDB selects the working
-language.
-
- If you allow GDB to set the language automatically, it recognizes
-source files whose names end with `.c', `.C', or `.cc', etc, and when
-GDB enters code compiled from one of these files, it sets the working
-language to C or C++. *Note Having GDB infer the source language:
-Automatically, for further details.
-
-
-File: gdb.info, Node: C Checks, Next: Debugging C, Prev: C Defaults, Up: C
-
-C and C++ type and range checks
-...............................
-
-By default, when GDB parses C or C++ expressions, type checking is not
-used. However, if you turn type checking on, GDB considers two
-variables type equivalent if:
-
- * The two variables are structured and have the same structure,
- union, or enumerated tag.
-
- * The two variables have the same type name, or types that have been
- declared equivalent through `typedef'.
-
-
- Range checking, if turned on, is done on mathematical operations.
-Array indices are not checked, since they are often used to index a
-pointer that is not itself an array.
-
-
-File: gdb.info, Node: Debugging C, Next: Debugging C plus plus, Prev: C Checks, Up: C
-
-GDB and C
-.........
-
-The `set print union' and `show print union' commands apply to the
-`union' type. When set to `on', any `union' that is inside a `struct'
-or `class' is also printed. Otherwise, it appears as `{...}'.
-
- The `@' operator aids in the debugging of dynamic arrays, formed
-with pointers and a memory allocation function. *Note Expressions:
-Expressions.
-
-* Menu:
-
-* Debugging C plus plus::
-
-
-File: gdb.info, Node: Debugging C plus plus, Prev: Debugging C, Up: C
-
-GDB features for C++
-....................
-
-Some GDB commands are particularly useful with C++, and some are
-designed specifically for use with C++. Here is a summary:
-
-`breakpoint menus'
- When you want a breakpoint in a function whose name is overloaded,
- GDB breakpoint menus help you specify which function definition
- you want. *Note Breakpoint menus: Breakpoint Menus.
-
-`rbreak REGEX'
- Setting breakpoints using regular expressions is helpful for
- setting breakpoints on overloaded functions that are not members
- of any special classes. *Note Setting breakpoints: Set Breaks.
-
-`catch throw'
-`catch catch'
- Debug C++ exception handling using these commands. *Note Setting
- catchpoints: Set Catchpoints.
-
-`ptype TYPENAME'
- Print inheritance relationships as well as other information for
- type TYPENAME. *Note Examining the Symbol Table: Symbols.
-
-`set print demangle'
-`show print demangle'
-`set print asm-demangle'
-`show print asm-demangle'
- Control whether C++ symbols display in their source form, both when
- displaying code as C++ source and when displaying disassemblies.
- *Note Print settings: Print Settings.
-
-`set print object'
-`show print object'
- Choose whether to print derived (actual) or declared types of
- objects. *Note Print settings: Print Settings.
-
-`set print vtbl'
-`show print vtbl'
- Control the format for printing virtual function tables. *Note
- Print settings: Print Settings. (The `vtbl' commands do not work
- on programs compiled with the HP ANSI C++ compiler (`aCC').)
-
-`set overload-resolution on'
- Enable overload resolution for C++ expression evaluation. The
- default is on. For overloaded functions, GDB evaluates the
- arguments and searches for a function whose signature matches the
- argument types, using the standard C++ conversion rules (see *Note
- C++ expressions: C plus plus expressions, for details). If it
- cannot find a match, it emits a message.
-
-`set overload-resolution off'
- Disable overload resolution for C++ expression evaluation. For
- overloaded functions that are not class member functions, GDB
- chooses the first function of the specified name that it finds in
- the symbol table, whether or not its arguments are of the correct
- type. For overloaded functions that are class member functions,
- GDB searches for a function whose signature _exactly_ matches the
- argument types.
-
-`Overloaded symbol names'
- You can specify a particular definition of an overloaded symbol,
- using the same notation that is used to declare such symbols in
- C++: type `SYMBOL(TYPES)' rather than just SYMBOL. You can also
- use the GDB command-line word completion facilities to list the
- available choices, or to finish the type list for you. *Note
- Command completion: Completion, for details on how to do this.
-
-
-File: gdb.info, Node: Objective-C, Next: Modula-2, Prev: C, Up: Support
-
-Objective-C
------------
-
-This section provides information about some commands and command
-options that are useful for debugging Objective-C code.
-
-* Menu:
-
-* Method Names in Commands::
-* The Print Command with Objective-C::
-
-
-File: gdb.info, Node: Method Names in Commands, Next: The Print Command with Objective-C, Prev: Objective-C, Up: Objective-C
-
-Method Names in Commands
-........................
-
-The following commands have been extended to accept Objective-C method
-names as line specifications:
-
- * `clear'
-
- * `break'
-
- * `info line'
-
- * `jump'
-
- * `list'
-
- A fully qualified Objective-C method name is specified as
-
- -[CLASS METHODNAME]
-
- where the minus sign is used to indicate an instance method and a
-plus sign (not shown) is used to indicate a class method. The class
-name CLASS and method name METHODNAME are enclosed in brackets, similar
-to the way messages are specified in Objective-C source code. For
-example, to set a breakpoint at the `create' instance method of class
-`Fruit' in the program currently being debugged, enter:
-
- break -[Fruit create]
-
- To list ten program lines around the `initialize' class method,
-enter:
-
- list +[NSText initialize]
-
- In the current version of GDB, the plus or minus sign is required.
-In future versions of GDB, the plus or minus sign will be optional, but
-you can use it to narrow the search. It is also possible to specify
-just a method name:
-
- break create
-
- You must specify the complete method name, including any colons. If
-your program's source files contain more than one `create' method,
-you'll be presented with a numbered list of classes that implement that
-method. Indicate your choice by number, or type `0' to exit if none
-apply.
-
- As another example, to clear a breakpoint established at the
-`makeKeyAndOrderFront:' method of the `NSWindow' class, enter:
-
- clear -[NSWindow makeKeyAndOrderFront:]
-
-
-File: gdb.info, Node: The Print Command with Objective-C, Prev: Method Names in Commands, Up: Objective-C
-
-The Print Command With Objective-C
-..................................
-
-The print command has also been extended to accept methods. For
-example:
-
- print -[OBJECT hash]
-
-will tell GDB to send the `hash' message to OBJECT and print the
-result. Also, an additional command has been added, `print-object' or
-`po' for short, which is meant to print the description of an object.
-However, this command may only work with certain Objective-C libraries
-that have a particular hook function, `_NSPrintForDebugger', defined.
-
-
-File: gdb.info, Node: Modula-2, Prev: Objective-C, Up: Support
-
-Modula-2
---------
-
-The extensions made to GDB to support Modula-2 only support output from
-the GNU Modula-2 compiler (which is currently being developed). Other
-Modula-2 compilers are not currently supported, and attempting to debug
-executables produced by them is most likely to give an error as GDB
-reads in the executable's symbol table.
-
-* Menu:
-
-* M2 Operators:: Built-in operators
-* Built-In Func/Proc:: Built-in functions and procedures
-* M2 Constants:: Modula-2 constants
-* M2 Defaults:: Default settings for Modula-2
-* Deviations:: Deviations from standard Modula-2
-* M2 Checks:: Modula-2 type and range checks
-* M2 Scope:: The scope operators `::' and `.'
-* GDB/M2:: GDB and Modula-2
-
-
-File: gdb.info, Node: M2 Operators, Next: Built-In Func/Proc, Up: Modula-2
-
-Operators
-.........
-
-Operators must be defined on values of specific types. For instance,
-`+' is defined on numbers, but not on structures. Operators are often
-defined on groups of types. For the purposes of Modula-2, the
-following definitions hold:
-
- * _Integral types_ consist of `INTEGER', `CARDINAL', and their
- subranges.
-
- * _Character types_ consist of `CHAR' and its subranges.
-
- * _Floating-point types_ consist of `REAL'.
-
- * _Pointer types_ consist of anything declared as `POINTER TO TYPE'.
-
- * _Scalar types_ consist of all of the above.
-
- * _Set types_ consist of `SET' and `BITSET' types.
-
- * _Boolean types_ consist of `BOOLEAN'.
-
-The following operators are supported, and appear in order of
-increasing precedence:
-
-`,'
- Function argument or array index separator.
-
-`:='
- Assignment. The value of VAR `:=' VALUE is VALUE.
-
-`<, >'
- Less than, greater than on integral, floating-point, or enumerated
- types.
-
-`<=, >='
- Less than or equal to, greater than or equal to on integral,
- floating-point and enumerated types, or set inclusion on set
- types. Same precedence as `<'.
-
-`=, <>, #'
- Equality and two ways of expressing inequality, valid on scalar
- types. Same precedence as `<'. In GDB scripts, only `<>' is
- available for inequality, since `#' conflicts with the script
- comment character.
-
-`IN'
- Set membership. Defined on set types and the types of their
- members. Same precedence as `<'.
-
-`OR'
- Boolean disjunction. Defined on boolean types.
-
-`AND, &'
- Boolean conjunction. Defined on boolean types.
-
-`@'
- The GDB "artificial array" operator (*note Expressions:
- Expressions.).
-
-`+, -'
- Addition and subtraction on integral and floating-point types, or
- union and difference on set types.
-
-`*'
- Multiplication on integral and floating-point types, or set
- intersection on set types.
-
-`/'
- Division on floating-point types, or symmetric set difference on
- set types. Same precedence as `*'.
-
-`DIV, MOD'
- Integer division and remainder. Defined on integral types. Same
- precedence as `*'.
-
-`-'
- Negative. Defined on `INTEGER' and `REAL' data.
-
-`^'
- Pointer dereferencing. Defined on pointer types.
-
-`NOT'
- Boolean negation. Defined on boolean types. Same precedence as
- `^'.
-
-`.'
- `RECORD' field selector. Defined on `RECORD' data. Same
- precedence as `^'.
-
-`[]'
- Array indexing. Defined on `ARRAY' data. Same precedence as `^'.
-
-`()'
- Procedure argument list. Defined on `PROCEDURE' objects. Same
- precedence as `^'.
-
-`::, .'
- GDB and Modula-2 scope operators.
-
- _Warning:_ Sets and their operations are not yet supported, so GDB
- treats the use of the operator `IN', or the use of operators `+',
- `-', `*', `/', `=', , `<>', `#', `<=', and `>=' on sets as an
- error.
-
-
-File: gdb.info, Node: Built-In Func/Proc, Next: M2 Constants, Prev: M2 Operators, Up: Modula-2
-
-Built-in functions and procedures
-.................................
-
-Modula-2 also makes available several built-in procedures and functions.
-In describing these, the following metavariables are used:
-
-A
- represents an `ARRAY' variable.
-
-C
- represents a `CHAR' constant or variable.
-
-I
- represents a variable or constant of integral type.
-
-M
- represents an identifier that belongs to a set. Generally used in
- the same function with the metavariable S. The type of S should
- be `SET OF MTYPE' (where MTYPE is the type of M).
-
-N
- represents a variable or constant of integral or floating-point
- type.
-
-R
- represents a variable or constant of floating-point type.
-
-T
- represents a type.
-
-V
- represents a variable.
-
-X
- represents a variable or constant of one of many types. See the
- explanation of the function for details.
-
- All Modula-2 built-in procedures also return a result, described
-below.
-
-`ABS(N)'
- Returns the absolute value of N.
-
-`CAP(C)'
- If C is a lower case letter, it returns its upper case equivalent,
- otherwise it returns its argument.
-
-`CHR(I)'
- Returns the character whose ordinal value is I.
-
-`DEC(V)'
- Decrements the value in the variable V by one. Returns the new
- value.
-
-`DEC(V,I)'
- Decrements the value in the variable V by I. Returns the new
- value.
-
-`EXCL(M,S)'
- Removes the element M from the set S. Returns the new set.
-
-`FLOAT(I)'
- Returns the floating point equivalent of the integer I.
-
-`HIGH(A)'
- Returns the index of the last member of A.
-
-`INC(V)'
- Increments the value in the variable V by one. Returns the new
- value.
-
-`INC(V,I)'
- Increments the value in the variable V by I. Returns the new
- value.
-
-`INCL(M,S)'
- Adds the element M to the set S if it is not already there.
- Returns the new set.
-
-`MAX(T)'
- Returns the maximum value of the type T.
-
-`MIN(T)'
- Returns the minimum value of the type T.
-
-`ODD(I)'
- Returns boolean TRUE if I is an odd number.
-
-`ORD(X)'
- Returns the ordinal value of its argument. For example, the
- ordinal value of a character is its ASCII value (on machines
- supporting the ASCII character set). X must be of an ordered
- type, which include integral, character and enumerated types.
-
-`SIZE(X)'
- Returns the size of its argument. X can be a variable or a type.
-
-`TRUNC(R)'
- Returns the integral part of R.
-
-`VAL(T,I)'
- Returns the member of the type T whose ordinal value is I.
-
- _Warning:_ Sets and their operations are not yet supported, so
- GDB treats the use of procedures `INCL' and `EXCL' as an error.
-
diff --git a/gnu/usr.bin/binutils/gdb/doc/gdb.info-2 b/gnu/usr.bin/binutils/gdb/doc/gdb.info-2
deleted file mode 100644
index a79712238c6..00000000000
--- a/gnu/usr.bin/binutils/gdb/doc/gdb.info-2
+++ /dev/null
@@ -1,9133 +0,0 @@
-This is gdb.info, produced by makeinfo version 4.6 from ./gdb.texinfo.
-
-INFO-DIR-SECTION Programming & development tools.
-START-INFO-DIR-ENTRY
-* Gdb: (gdb). The GNU debugger.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU debugger GDB.
-
- This is the Ninth Edition, of `Debugging with GDB: the GNU
-Source-Level Debugger' for GDB Version 6.1.
-
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
-1998,
-1999, 2000, 2001, 2002, 2003, 2004 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.1 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 Free Software Foundation's Back-Cover Text is: "You have
-freedom to copy and modify this GNU Manual, like GNU software. Copies
-published by the Free Software Foundation raise funds for GNU
-development."
-
-
-File: gdb.info, Node: M2 Constants, Next: M2 Defaults, Prev: Built-In Func/Proc, Up: Modula-2
-
-Constants
-.........
-
-GDB allows you to express the constants of Modula-2 in the following
-ways:
-
- * Integer constants are simply a sequence of digits. When used in an
- expression, a constant is interpreted to be type-compatible with
- the rest of the expression. Hexadecimal integers are specified by
- a trailing `H', and octal integers by a trailing `B'.
-
- * Floating point constants appear as a sequence of digits, followed
- by a decimal point and another sequence of digits. An optional
- exponent can then be specified, in the form `E[+|-]NNN', where
- `[+|-]NNN' is the desired exponent. All of the digits of the
- floating point constant must be valid decimal (base 10) digits.
-
- * Character constants consist of a single character enclosed by a
- pair of like quotes, either single (`'') or double (`"'). They may
- also be expressed by their ordinal value (their ASCII value,
- usually) followed by a `C'.
-
- * String constants consist of a sequence of characters enclosed by a
- pair of like quotes, either single (`'') or double (`"'). Escape
- sequences in the style of C are also allowed. *Note C and C++
- constants: C Constants, for a brief explanation of escape
- sequences.
-
- * Enumerated constants consist of an enumerated identifier.
-
- * Boolean constants consist of the identifiers `TRUE' and `FALSE'.
-
- * Pointer constants consist of integral values only.
-
- * Set constants are not yet supported.
-
-
-File: gdb.info, Node: M2 Defaults, Next: Deviations, Prev: M2 Constants, Up: Modula-2
-
-Modula-2 defaults
-.................
-
-If type and range checking are set automatically by GDB, they both
-default to `on' whenever the working language changes to Modula-2.
-This happens regardless of whether you or GDB selected the working
-language.
-
- If you allow GDB to set the language automatically, then entering
-code compiled from a file whose name ends with `.mod' sets the working
-language to Modula-2. *Note Having GDB set the language automatically:
-Automatically, for further details.
-
-
-File: gdb.info, Node: Deviations, Next: M2 Checks, Prev: M2 Defaults, Up: Modula-2
-
-Deviations from standard Modula-2
-.................................
-
-A few changes have been made to make Modula-2 programs easier to debug.
-This is done primarily via loosening its type strictness:
-
- * Unlike in standard Modula-2, pointer constants can be formed by
- integers. This allows you to modify pointer variables during
- debugging. (In standard Modula-2, the actual address contained in
- a pointer variable is hidden from you; it can only be modified
- through direct assignment to another pointer variable or
- expression that returned a pointer.)
-
- * C escape sequences can be used in strings and characters to
- represent non-printable characters. GDB prints out strings with
- these escape sequences embedded. Single non-printable characters
- are printed using the `CHR(NNN)' format.
-
- * The assignment operator (`:=') returns the value of its right-hand
- argument.
-
- * All built-in procedures both modify _and_ return their argument.
-
-
-File: gdb.info, Node: M2 Checks, Next: M2 Scope, Prev: Deviations, Up: Modula-2
-
-Modula-2 type and range checks
-..............................
-
- _Warning:_ in this release, GDB does not yet perform type or range
- checking.
-
- GDB considers two Modula-2 variables type equivalent if:
-
- * They are of types that have been declared equivalent via a `TYPE
- T1 = T2' statement
-
- * They have been declared on the same line. (Note: This is true of
- the GNU Modula-2 compiler, but it may not be true of other
- compilers.)
-
- As long as type checking is enabled, any attempt to combine variables
-whose types are not equivalent is an error.
-
- Range checking is done on all mathematical operations, assignment,
-array index bounds, and all built-in functions and procedures.
-
-
-File: gdb.info, Node: M2 Scope, Next: GDB/M2, Prev: M2 Checks, Up: Modula-2
-
-The scope operators `::' and `.'
-................................
-
-There are a few subtle differences between the Modula-2 scope operator
-(`.') and the GDB scope operator (`::'). The two have similar syntax:
-
-
- MODULE . ID
- SCOPE :: ID
-
-where SCOPE is the name of a module or a procedure, MODULE the name of
-a module, and ID is any declared identifier within your program, except
-another module.
-
- Using the `::' operator makes GDB search the scope specified by
-SCOPE for the identifier ID. If it is not found in the specified
-scope, then GDB searches all scopes enclosing the one specified by
-SCOPE.
-
- Using the `.' operator makes GDB search the current scope for the
-identifier specified by ID that was imported from the definition module
-specified by MODULE. With this operator, it is an error if the
-identifier ID was not imported from definition module MODULE, or if ID
-is not an identifier in MODULE.
-
-
-File: gdb.info, Node: GDB/M2, Prev: M2 Scope, Up: Modula-2
-
-GDB and Modula-2
-................
-
-Some GDB commands have little use when debugging Modula-2 programs.
-Five subcommands of `set print' and `show print' apply specifically to
-C and C++: `vtbl', `demangle', `asm-demangle', `object', and `union'.
-The first four apply to C++, and the last to the C `union' type, which
-has no direct analogue in Modula-2.
-
- The `@' operator (*note Expressions: Expressions.), while available
-with any language, is not useful with Modula-2. Its intent is to aid
-the debugging of "dynamic arrays", which cannot be created in Modula-2
-as they can in C or C++. However, because an address can be specified
-by an integral constant, the construct `{TYPE}ADREXP' is still useful.
-
- In GDB scripts, the Modula-2 inequality operator `#' is interpreted
-as the beginning of a comment. Use `<>' instead.
-
-
-File: gdb.info, Node: Unsupported languages, Prev: Support, Up: Languages
-
-Unsupported languages
-=====================
-
-In addition to the other fully-supported programming languages, GDB
-also provides a pseudo-language, called `minimal'. It does not
-represent a real programming language, but provides a set of
-capabilities close to what the C or assembly languages provide. This
-should allow most simple operations to be performed while debugging an
-application that uses a language currently not supported by GDB.
-
- If the language is set to `auto', GDB will automatically select this
-language if the current frame corresponds to an unsupported language.
-
-
-File: gdb.info, Node: Symbols, Next: Altering, Prev: Languages, Up: Top
-
-Examining the Symbol Table
-**************************
-
-The commands described in this chapter allow you to inquire about the
-symbols (names of variables, functions and types) defined in your
-program. This information is inherent in the text of your program and
-does not change as your program executes. GDB finds it in your
-program's symbol table, in the file indicated when you started GDB
-(*note Choosing files: File Options.), or by one of the file-management
-commands (*note Commands to specify files: Files.).
-
- Occasionally, you may need to refer to symbols that contain unusual
-characters, which GDB ordinarily treats as word delimiters. The most
-frequent case is in referring to static variables in other source files
-(*note Program variables: Variables.). File names are recorded in
-object files as debugging symbols, but GDB would ordinarily parse a
-typical file name, like `foo.c', as the three words `foo' `.' `c'. To
-allow GDB to recognize `foo.c' as a single symbol, enclose it in single
-quotes; for example,
-
- p 'foo.c'::x
-
-looks up the value of `x' in the scope of the file `foo.c'.
-
-`info address SYMBOL'
- Describe where the data for SYMBOL is stored. For a register
- variable, this says which register it is kept in. For a
- non-register local variable, this prints the stack-frame offset at
- which the variable is always stored.
-
- Note the contrast with `print &SYMBOL', which does not work at all
- for a register variable, and for a stack local variable prints the
- exact address of the current instantiation of the variable.
-
-`info symbol ADDR'
- Print the name of a symbol which is stored at the address ADDR.
- If no symbol is stored exactly at ADDR, GDB prints the nearest
- symbol and an offset from it:
-
- (gdb) info symbol 0x54320
- _initialize_vx + 396 in section .text
-
- This is the opposite of the `info address' command. You can use
- it to find out the name of a variable or a function given its
- address.
-
-`whatis EXPR'
- Print the data type of expression EXPR. EXPR is not actually
- evaluated, and any side-effecting operations (such as assignments
- or function calls) inside it do not take place. *Note
- Expressions: Expressions.
-
-`whatis'
- Print the data type of `$', the last value in the value history.
-
-`ptype TYPENAME'
- Print a description of data type TYPENAME. TYPENAME may be the
- name of a type, or for C code it may have the form `class
- CLASS-NAME', `struct STRUCT-TAG', `union UNION-TAG' or `enum
- ENUM-TAG'.
-
-`ptype EXPR'
-`ptype'
- Print a description of the type of expression EXPR. `ptype'
- differs from `whatis' by printing a detailed description, instead
- of just the name of the type.
-
- For example, for this variable declaration:
-
- struct complex {double real; double imag;} v;
-
- the two commands give this output:
-
- (gdb) whatis v
- type = struct complex
- (gdb) ptype v
- type = struct complex {
- double real;
- double imag;
- }
-
- As with `whatis', using `ptype' without an argument refers to the
- type of `$', the last value in the value history.
-
-`info types REGEXP'
-`info types'
- Print a brief description of all types whose names match REGEXP
- (or all types in your program, if you supply no argument). Each
- complete typename is matched as though it were a complete line;
- thus, `i type value' gives information on all types in your
- program whose names include the string `value', but `i type
- ^value$' gives information only on types whose complete name is
- `value'.
-
- This command differs from `ptype' in two ways: first, like
- `whatis', it does not print a detailed description; second, it
- lists all source files where a type is defined.
-
-`info scope ADDR'
- List all the variables local to a particular scope. This command
- accepts a location--a function name, a source line, or an address
- preceded by a `*', and prints all the variables local to the scope
- defined by that location. For example:
-
- (gdb) info scope command_line_handler
- Scope for command_line_handler:
- Symbol rl is an argument at stack/frame offset 8, length 4.
- Symbol linebuffer is in static storage at address 0x150a18, length 4.
- Symbol linelength is in static storage at address 0x150a1c, length 4.
- Symbol p is a local variable in register $esi, length 4.
- Symbol p1 is a local variable in register $ebx, length 4.
- Symbol nline is a local variable in register $edx, length 4.
- Symbol repeat is a local variable at frame offset -8, length 4.
-
- This command is especially useful for determining what data to
- collect during a "trace experiment", see *Note collect: Tracepoint
- Actions.
-
-`info source'
- Show information about the current source file--that is, the
- source file for the function containing the current point of
- execution:
- * the name of the source file, and the directory containing it,
-
- * the directory it was compiled in,
-
- * its length, in lines,
-
- * which programming language it is written in,
-
- * whether the executable includes debugging information for
- that file, and if so, what format the information is in
- (e.g., STABS, Dwarf 2, etc.), and
-
- * whether the debugging information includes information about
- preprocessor macros.
-
-`info sources'
- Print the names of all source files in your program for which
- there is debugging information, organized into two lists: files
- whose symbols have already been read, and files whose symbols will
- be read when needed.
-
-`info functions'
- Print the names and data types of all defined functions.
-
-`info functions REGEXP'
- Print the names and data types of all defined functions whose
- names contain a match for regular expression REGEXP. Thus, `info
- fun step' finds all functions whose names include `step'; `info
- fun ^step' finds those whose names start with `step'. If a
- function name contains characters that conflict with the regular
- expression language (eg. `operator*()'), they may be quoted with
- a backslash.
-
-`info variables'
- Print the names and data types of all variables that are declared
- outside of functions (i.e. excluding local variables).
-
-`info variables REGEXP'
- Print the names and data types of all variables (except for local
- variables) whose names contain a match for regular expression
- REGEXP.
-
-`info classes'
-`info classes REGEXP'
- Display all Objective-C classes in your program, or (with the
- REGEXP argument) all those matching a particular regular
- expression.
-
-`info selectors'
-`info selectors REGEXP'
- Display all Objective-C selectors in your program, or (with the
- REGEXP argument) all those matching a particular regular
- expression.
-
- Some systems allow individual object files that make up your
- program to be replaced without stopping and restarting your
- program. For example, in VxWorks you can simply recompile a
- defective object file and keep on running. If you are running on
- one of these systems, you can allow GDB to reload the symbols for
- automatically relinked modules:
-
- `set symbol-reloading on'
- Replace symbol definitions for the corresponding source file
- when an object file with a particular name is seen again.
-
- `set symbol-reloading off'
- Do not replace symbol definitions when encountering object
- files of the same name more than once. This is the default
- state; if you are not running on a system that permits
- automatic relinking of modules, you should leave
- `symbol-reloading' off, since otherwise GDB may discard
- symbols when linking large programs, that may contain several
- modules (from different directories or libraries) with the
- same name.
-
- `show symbol-reloading'
- Show the current `on' or `off' setting.
-
-`set opaque-type-resolution on'
- Tell GDB to resolve opaque types. An opaque type is a type
- declared as a pointer to a `struct', `class', or `union'--for
- example, `struct MyType *'--that is used in one source file
- although the full declaration of `struct MyType' is in another
- source file. The default is on.
-
- A change in the setting of this subcommand will not take effect
- until the next time symbols for a file are loaded.
-
-`set opaque-type-resolution off'
- Tell GDB not to resolve opaque types. In this case, the type is
- printed as follows:
- {<no data fields>}
-
-`show opaque-type-resolution'
- Show whether opaque types are resolved or not.
-
-`maint print symbols FILENAME'
-`maint print psymbols FILENAME'
-`maint print msymbols FILENAME'
- Write a dump of debugging symbol data into the file FILENAME.
- These commands are used to debug the GDB symbol-reading code. Only
- symbols with debugging data are included. If you use `maint print
- symbols', GDB includes all the symbols for which it has already
- collected full details: that is, FILENAME reflects symbols for
- only those files whose symbols GDB has read. You can use the
- command `info sources' to find out which files these are. If you
- use `maint print psymbols' instead, the dump shows information
- about symbols that GDB only knows partially--that is, symbols
- defined in files that GDB has skimmed, but not yet read
- completely. Finally, `maint print msymbols' dumps just the
- minimal symbol information required for each object file from
- which GDB has read some symbols. *Note Commands to specify files:
- Files, for a discussion of how GDB reads symbols (in the
- description of `symbol-file').
-
-`maint info symtabs [ REGEXP ]'
-`maint info psymtabs [ REGEXP ]'
- List the `struct symtab' or `struct partial_symtab' structures
- whose names match REGEXP. If REGEXP is not given, list them all.
- The output includes expressions which you can copy into a GDB
- debugging this one to examine a particular structure in more
- detail. For example:
-
- (gdb) maint info psymtabs dwarf2read
- { objfile /home/gnu/build/gdb/gdb
- ((struct objfile *) 0x82e69d0)
- { psymtab /home/gnu/src/gdb/dwarf2read.c
- ((struct partial_symtab *) 0x8474b10)
- readin no
- fullname (null)
- text addresses 0x814d3c8 -- 0x8158074
- globals (* (struct partial_symbol **) 0x8507a08 @ 9)
- statics (* (struct partial_symbol **) 0x40e95b78 @ 2882)
- dependencies (none)
- }
- }
- (gdb) maint info symtabs
- (gdb)
-
- We see that there is one partial symbol table whose filename
- contains the string `dwarf2read', belonging to the `gdb'
- executable; and we see that GDB has not read in any symtabs yet at
- all. If we set a breakpoint on a function, that will cause GDB to
- read the symtab for the compilation unit containing that function:
-
- (gdb) break dwarf2_psymtab_to_symtab
- Breakpoint 1 at 0x814e5da: file /home/gnu/src/gdb/dwarf2read.c,
- line 1574.
- (gdb) maint info symtabs
- { objfile /home/gnu/build/gdb/gdb
- ((struct objfile *) 0x82e69d0)
- { symtab /home/gnu/src/gdb/dwarf2read.c
- ((struct symtab *) 0x86c1f38)
- dirname (null)
- fullname (null)
- blockvector ((struct blockvector *) 0x86c1bd0) (primary)
- debugformat DWARF 2
- }
- }
- (gdb)
-
-
-File: gdb.info, Node: Altering, Next: GDB Files, Prev: Symbols, Up: Top
-
-Altering Execution
-******************
-
-Once you think you have found an error in your program, you might want
-to find out for certain whether correcting the apparent error would
-lead to correct results in the rest of the run. You can find the
-answer by experiment, using the GDB features for altering execution of
-the program.
-
- For example, you can store new values into variables or memory
-locations, give your program a signal, restart it at a different
-address, or even return prematurely from a function.
-
-* Menu:
-
-* Assignment:: Assignment to variables
-* Jumping:: Continuing at a different address
-* Signaling:: Giving your program a signal
-* Returning:: Returning from a function
-* Calling:: Calling your program's functions
-* Patching:: Patching your program
-
-
-File: gdb.info, Node: Assignment, Next: Jumping, Up: Altering
-
-Assignment to variables
-=======================
-
-To alter the value of a variable, evaluate an assignment expression.
-*Note Expressions: Expressions. For example,
-
- print x=4
-
-stores the value 4 into the variable `x', and then prints the value of
-the assignment expression (which is 4). *Note Using GDB with Different
-Languages: Languages, for more information on operators in supported
-languages.
-
- If you are not interested in seeing the value of the assignment, use
-the `set' command instead of the `print' command. `set' is really the
-same as `print' except that the expression's value is not printed and
-is not put in the value history (*note Value history: Value History.).
-The expression is evaluated only for its effects.
-
- If the beginning of the argument string of the `set' command appears
-identical to a `set' subcommand, use the `set variable' command instead
-of just `set'. This command is identical to `set' except for its lack
-of subcommands. For example, if your program has a variable `width',
-you get an error if you try to set a new value with just `set
-width=13', because GDB has the command `set width':
-
- (gdb) whatis width
- type = double
- (gdb) p width
- $4 = 13
- (gdb) set width=47
- Invalid syntax in expression.
-
-The invalid expression, of course, is `=47'. In order to actually set
-the program's variable `width', use
-
- (gdb) set var width=47
-
- Because the `set' command has many subcommands that can conflict
-with the names of program variables, it is a good idea to use the `set
-variable' command instead of just `set'. For example, if your program
-has a variable `g', you run into problems if you try to set a new value
-with just `set g=4', because GDB has the command `set gnutarget',
-abbreviated `set g':
-
- (gdb) whatis g
- type = double
- (gdb) p g
- $1 = 1
- (gdb) set g=4
- (gdb) p g
- $2 = 1
- (gdb) r
- The program being debugged has been started already.
- Start it from the beginning? (y or n) y
- Starting program: /home/smith/cc_progs/a.out
- "/home/smith/cc_progs/a.out": can't open to read symbols:
- Invalid bfd target.
- (gdb) show g
- The current BFD target is "=4".
-
-The program variable `g' did not change, and you silently set the
-`gnutarget' to an invalid value. In order to set the variable `g', use
-
- (gdb) set var g=4
-
- GDB allows more implicit conversions in assignments than C; you can
-freely store an integer value into a pointer variable or vice versa,
-and you can convert any structure to any other structure that is the
-same length or shorter.
-
- To store values into arbitrary places in memory, use the `{...}'
-construct to generate a value of specified type at a specified address
-(*note Expressions: Expressions.). For example, `{int}0x83040' refers
-to memory location `0x83040' as an integer (which implies a certain size
-and representation in memory), and
-
- set {int}0x83040 = 4
-
-stores the value 4 into that memory location.
-
-
-File: gdb.info, Node: Jumping, Next: Signaling, Prev: Assignment, Up: Altering
-
-Continuing at a different address
-=================================
-
-Ordinarily, when you continue your program, you do so at the place where
-it stopped, with the `continue' command. You can instead continue at
-an address of your own choosing, with the following commands:
-
-`jump LINESPEC'
- Resume execution at line LINESPEC. Execution stops again
- immediately if there is a breakpoint there. *Note Printing source
- lines: List, for a description of the different forms of LINESPEC.
- It is common practice to use the `tbreak' command in conjunction
- with `jump'. *Note Setting breakpoints: Set Breaks.
-
- The `jump' command does not change the current stack frame, or the
- stack pointer, or the contents of any memory location or any
- register other than the program counter. If line LINESPEC is in a
- different function from the one currently executing, the results
- may be bizarre if the two functions expect different patterns of
- arguments or of local variables. For this reason, the `jump'
- command requests confirmation if the specified line is not in the
- function currently executing. However, even bizarre results are
- predictable if you are well acquainted with the machine-language
- code of your program.
-
-`jump *ADDRESS'
- Resume execution at the instruction at address ADDRESS.
-
- On many systems, you can get much the same effect as the `jump'
-command by storing a new value into the register `$pc'. The difference
-is that this does not start your program running; it only changes the
-address of where it _will_ run when you continue. For example,
-
- set $pc = 0x485
-
-makes the next `continue' command or stepping command execute at
-address `0x485', rather than at the address where your program stopped.
-*Note Continuing and stepping: Continuing and Stepping.
-
- The most common occasion to use the `jump' command is to back
-up--perhaps with more breakpoints set--over a portion of a program that
-has already executed, in order to examine its execution in more detail.
-
-
-File: gdb.info, Node: Signaling, Next: Returning, Prev: Jumping, Up: Altering
-
-Giving your program a signal
-============================
-
-`signal SIGNAL'
- Resume execution where your program stopped, but immediately give
- it the signal SIGNAL. SIGNAL can be the name or the number of a
- signal. For example, on many systems `signal 2' and `signal
- SIGINT' are both ways of sending an interrupt signal.
-
- Alternatively, if SIGNAL is zero, continue execution without
- giving a signal. This is useful when your program stopped on
- account of a signal and would ordinary see the signal when resumed
- with the `continue' command; `signal 0' causes it to resume
- without a signal.
-
- `signal' does not repeat when you press <RET> a second time after
- executing the command.
-
- Invoking the `signal' command is not the same as invoking the `kill'
-utility from the shell. Sending a signal with `kill' causes GDB to
-decide what to do with the signal depending on the signal handling
-tables (*note Signals::). The `signal' command passes the signal
-directly to your program.
-
-
-File: gdb.info, Node: Returning, Next: Calling, Prev: Signaling, Up: Altering
-
-Returning from a function
-=========================
-
-`return'
-`return EXPRESSION'
- You can cancel execution of a function call with the `return'
- command. If you give an EXPRESSION argument, its value is used as
- the function's return value.
-
- When you use `return', GDB discards the selected stack frame (and
-all frames within it). You can think of this as making the discarded
-frame return prematurely. If you wish to specify a value to be
-returned, give that value as the argument to `return'.
-
- This pops the selected stack frame (*note Selecting a frame:
-Selection.), and any other frames inside of it, leaving its caller as
-the innermost remaining frame. That frame becomes selected. The
-specified value is stored in the registers used for returning values of
-functions.
-
- The `return' command does not resume execution; it leaves the
-program stopped in the state that would exist if the function had just
-returned. In contrast, the `finish' command (*note Continuing and
-stepping: Continuing and Stepping.) resumes execution until the
-selected stack frame returns naturally.
-
-
-File: gdb.info, Node: Calling, Next: Patching, Prev: Returning, Up: Altering
-
-Calling program functions
-=========================
-
-`call EXPR'
- Evaluate the expression EXPR without displaying `void' returned
- values.
-
- You can use this variant of the `print' command if you want to
-execute a function from your program, but without cluttering the output
-with `void' returned values. If the result is not void, it is printed
-and saved in the value history.
-
-
-File: gdb.info, Node: Patching, Prev: Calling, Up: Altering
-
-Patching programs
-=================
-
-By default, GDB opens the file containing your program's executable
-code (or the corefile) read-only. This prevents accidental alterations
-to machine code; but it also prevents you from intentionally patching
-your program's binary.
-
- If you'd like to be able to patch the binary, you can specify that
-explicitly with the `set write' command. For example, you might want
-to turn on internal debugging flags, or even to make emergency repairs.
-
-`set write on'
-`set write off'
- If you specify `set write on', GDB opens executable and core files
- for both reading and writing; if you specify `set write off' (the
- default), GDB opens them read-only.
-
- If you have already loaded a file, you must load it again (using
- the `exec-file' or `core-file' command) after changing `set
- write', for your new setting to take effect.
-
-`show write'
- Display whether executable files and core files are opened for
- writing as well as reading.
-
-
-File: gdb.info, Node: GDB Files, Next: Targets, Prev: Altering, Up: Top
-
-GDB Files
-*********
-
-GDB needs to know the file name of the program to be debugged, both in
-order to read its symbol table and in order to start your program. To
-debug a core dump of a previous run, you must also tell GDB the name of
-the core dump file.
-
-* Menu:
-
-* Files:: Commands to specify files
-* Separate Debug Files:: Debugging information in separate files
-* Symbol Errors:: Errors reading symbol files
-
-
-File: gdb.info, Node: Files, Next: Separate Debug Files, Up: GDB Files
-
-Commands to specify files
-=========================
-
-You may want to specify executable and core dump file names. The usual
-way to do this is at start-up time, using the arguments to GDB's
-start-up commands (*note Getting In and Out of GDB: Invocation.).
-
- Occasionally it is necessary to change to a different file during a
-GDB session. Or you may run GDB and forget to specify a file you want
-to use. In these situations the GDB commands to specify new files are
-useful.
-
-`file FILENAME'
- Use FILENAME as the program to be debugged. It is read for its
- symbols and for the contents of pure memory. It is also the
- program executed when you use the `run' command. If you do not
- specify a directory and the file is not found in the GDB working
- directory, GDB uses the environment variable `PATH' as a list of
- directories to search, just as the shell does when looking for a
- program to run. You can change the value of this variable, for
- both GDB and your program, using the `path' command.
-
- On systems with memory-mapped files, an auxiliary file named
- `FILENAME.syms' may hold symbol table information for FILENAME.
- If so, GDB maps in the symbol table from `FILENAME.syms', starting
- up more quickly. See the descriptions of the file options
- `-mapped' and `-readnow' (available on the command line, and with
- the commands `file', `symbol-file', or `add-symbol-file',
- described below), for more information.
-
-`file'
- `file' with no argument makes GDB discard any information it has
- on both executable file and the symbol table.
-
-`exec-file [ FILENAME ]'
- Specify that the program to be run (but not the symbol table) is
- found in FILENAME. GDB searches the environment variable `PATH'
- if necessary to locate your program. Omitting FILENAME means to
- discard information on the executable file.
-
-`symbol-file [ FILENAME ]'
- Read symbol table information from file FILENAME. `PATH' is
- searched when necessary. Use the `file' command to get both symbol
- table and program to run from the same file.
-
- `symbol-file' with no argument clears out GDB information on your
- program's symbol table.
-
- The `symbol-file' command causes GDB to forget the contents of its
- convenience variables, the value history, and all breakpoints and
- auto-display expressions. This is because they may contain
- pointers to the internal data recording symbols and data types,
- which are part of the old symbol table data being discarded inside
- GDB.
-
- `symbol-file' does not repeat if you press <RET> again after
- executing it once.
-
- When GDB is configured for a particular environment, it
- understands debugging information in whatever format is the
- standard generated for that environment; you may use either a GNU
- compiler, or other compilers that adhere to the local conventions.
- Best results are usually obtained from GNU compilers; for example,
- using `gcc' you can generate debugging information for optimized
- code.
-
- For most kinds of object files, with the exception of old SVR3
- systems using COFF, the `symbol-file' command does not normally
- read the symbol table in full right away. Instead, it scans the
- symbol table quickly to find which source files and which symbols
- are present. The details are read later, one source file at a
- time, as they are needed.
-
- The purpose of this two-stage reading strategy is to make GDB
- start up faster. For the most part, it is invisible except for
- occasional pauses while the symbol table details for a particular
- source file are being read. (The `set verbose' command can turn
- these pauses into messages if desired. *Note Optional warnings
- and messages: Messages/Warnings.)
-
- We have not implemented the two-stage strategy for COFF yet. When
- the symbol table is stored in COFF format, `symbol-file' reads the
- symbol table data in full right away. Note that "stabs-in-COFF"
- still does the two-stage strategy, since the debug info is actually
- in stabs format.
-
-`symbol-file FILENAME [ -readnow ] [ -mapped ]'
-`file FILENAME [ -readnow ] [ -mapped ]'
- You can override the GDB two-stage strategy for reading symbol
- tables by using the `-readnow' option with any of the commands that
- load symbol table information, if you want to be sure GDB has the
- entire symbol table available.
-
- If memory-mapped files are available on your system through the
- `mmap' system call, you can use another option, `-mapped', to
- cause GDB to write the symbols for your program into a reusable
- file. Future GDB debugging sessions map in symbol information
- from this auxiliary symbol file (if the program has not changed),
- rather than spending time reading the symbol table from the
- executable program. Using the `-mapped' option has the same
- effect as starting GDB with the `-mapped' command-line option.
-
- You can use both options together, to make sure the auxiliary
- symbol file has all the symbol information for your program.
-
- The auxiliary symbol file for a program called MYPROG is called
- `MYPROG.syms'. Once this file exists (so long as it is newer than
- the corresponding executable), GDB always attempts to use it when
- you debug MYPROG; no special options or commands are needed.
-
- The `.syms' file is specific to the host machine where you run
- GDB. It holds an exact image of the internal GDB symbol table.
- It cannot be shared across multiple host platforms.
-
-`core-file [ FILENAME ]'
- Specify the whereabouts of a core dump file to be used as the
- "contents of memory". Traditionally, core files contain only some
- parts of the address space of the process that generated them; GDB
- can access the executable file itself for other parts.
-
- `core-file' with no argument specifies that no core file is to be
- used.
-
- Note that the core file is ignored when your program is actually
- running under GDB. So, if you have been running your program and
- you wish to debug a core file instead, you must kill the
- subprocess in which the program is running. To do this, use the
- `kill' command (*note Killing the child process: Kill Process.).
-
-`add-symbol-file FILENAME ADDRESS'
-`add-symbol-file FILENAME ADDRESS [ -readnow ] [ -mapped ]'
-`add-symbol-file FILENAME -sSECTION ADDRESS ...'
- The `add-symbol-file' command reads additional symbol table
- information from the file FILENAME. You would use this command
- when FILENAME has been dynamically loaded (by some other means)
- into the program that is running. ADDRESS should be the memory
- address at which the file has been loaded; GDB cannot figure this
- out for itself. You can additionally specify an arbitrary number
- of `-sSECTION ADDRESS' pairs, to give an explicit section name and
- base address for that section. You can specify any ADDRESS as an
- expression.
-
- The symbol table of the file FILENAME is added to the symbol table
- originally read with the `symbol-file' command. You can use the
- `add-symbol-file' command any number of times; the new symbol data
- thus read keeps adding to the old. To discard all old symbol data
- instead, use the `symbol-file' command without any arguments.
-
- Although FILENAME is typically a shared library file, an
- executable file, or some other object file which has been fully
- relocated for loading into a process, you can also load symbolic
- information from relocatable `.o' files, as long as:
-
- * the file's symbolic information refers only to linker symbols
- defined in that file, not to symbols defined by other object
- files,
-
- * every section the file's symbolic information refers to has
- actually been loaded into the inferior, as it appears in the
- file, and
-
- * you can determine the address at which every section was
- loaded, and provide these to the `add-symbol-file' command.
-
- Some embedded operating systems, like Sun Chorus and VxWorks, can
- load relocatable files into an already running program; such
- systems typically make the requirements above easy to meet.
- However, it's important to recognize that many native systems use
- complex link procedures (`.linkonce' section factoring and C++
- constructor table assembly, for example) that make the
- requirements difficult to meet. In general, one cannot assume
- that using `add-symbol-file' to read a relocatable object file's
- symbolic information will have the same effect as linking the
- relocatable object file into the program in the normal way.
-
- `add-symbol-file' does not repeat if you press <RET> after using
- it.
-
- You can use the `-mapped' and `-readnow' options just as with the
- `symbol-file' command, to change how GDB manages the symbol table
- information for FILENAME.
-
-`add-shared-symbol-file'
- The `add-shared-symbol-file' command can be used only under
- Harris' CXUX operating system for the Motorola 88k. GDB
- automatically looks for shared libraries, however if GDB does not
- find yours, you can run `add-shared-symbol-file'. It takes no
- arguments.
-
-`section'
- The `section' command changes the base address of section SECTION
- of the exec file to ADDR. This can be used if the exec file does
- not contain section addresses, (such as in the a.out format), or
- when the addresses specified in the file itself are wrong. Each
- section must be changed separately. The `info files' command,
- described below, lists all the sections and their addresses.
-
-`info files'
-`info target'
- `info files' and `info target' are synonymous; both print the
- current target (*note Specifying a Debugging Target: Targets.),
- including the names of the executable and core dump files
- currently in use by GDB, and the files from which symbols were
- loaded. The command `help target' lists all possible targets
- rather than current ones.
-
-`maint info sections'
- Another command that can give you extra information about program
- sections is `maint info sections'. In addition to the section
- information displayed by `info files', this command displays the
- flags and file offset of each section in the executable and core
- dump files. In addition, `maint info sections' provides the
- following command options (which may be arbitrarily combined):
-
- `ALLOBJ'
- Display sections for all loaded object files, including
- shared libraries.
-
- `SECTIONS'
- Display info only for named SECTIONS.
-
- `SECTION-FLAGS'
- Display info only for sections for which SECTION-FLAGS are
- true. The section flags that GDB currently knows about are:
- `ALLOC'
- Section will have space allocated in the process when
- loaded. Set for all sections except those containing
- debug information.
-
- `LOAD'
- Section will be loaded from the file into the child
- process memory. Set for pre-initialized code and data,
- clear for `.bss' sections.
-
- `RELOC'
- Section needs to be relocated before loading.
-
- `READONLY'
- Section cannot be modified by the child process.
-
- `CODE'
- Section contains executable code only.
-
- `DATA'
- Section contains data only (no executable code).
-
- `ROM'
- Section will reside in ROM.
-
- `CONSTRUCTOR'
- Section contains data for constructor/destructor lists.
-
- `HAS_CONTENTS'
- Section is not empty.
-
- `NEVER_LOAD'
- An instruction to the linker to not output the section.
-
- `COFF_SHARED_LIBRARY'
- A notification to the linker that the section contains
- COFF shared library information.
-
- `IS_COMMON'
- Section contains common symbols.
-
-`set trust-readonly-sections on'
- Tell GDB that readonly sections in your object file really are
- read-only (i.e. that their contents will not change). In that
- case, GDB can fetch values from these sections out of the object
- file, rather than from the target program. For some targets
- (notably embedded ones), this can be a significant enhancement to
- debugging performance.
-
- The default is off.
-
-`set trust-readonly-sections off'
- Tell GDB not to trust readonly sections. This means that the
- contents of the section might change while the program is running,
- and must therefore be fetched from the target when needed.
-
- All file-specifying commands allow both absolute and relative file
-names as arguments. GDB always converts the file name to an absolute
-file name and remembers it that way.
-
- GDB supports HP-UX, SunOS, SVr4, Irix 5, and IBM RS/6000 shared
-libraries.
-
- GDB automatically loads symbol definitions from shared libraries
-when you use the `run' command, or when you examine a core file.
-(Before you issue the `run' command, GDB does not understand references
-to a function in a shared library, however--unless you are debugging a
-core file).
-
- On HP-UX, if the program loads a library explicitly, GDB
-automatically loads the symbols at the time of the `shl_load' call.
-
- There are times, however, when you may wish to not automatically load
-symbol definitions from shared libraries, such as when they are
-particularly large or there are many of them.
-
- To control the automatic loading of shared library symbols, use the
-commands:
-
-`set auto-solib-add MODE'
- If MODE is `on', symbols from all shared object libraries will be
- loaded automatically when the inferior begins execution, you
- attach to an independently started inferior, or when the dynamic
- linker informs GDB that a new library has been loaded. If MODE is
- `off', symbols must be loaded manually, using the `sharedlibrary'
- command. The default value is `on'.
-
-`show auto-solib-add'
- Display the current autoloading mode.
-
- To explicitly load shared library symbols, use the `sharedlibrary'
-command:
-
-`info share'
-`info sharedlibrary'
- Print the names of the shared libraries which are currently loaded.
-
-`sharedlibrary REGEX'
-`share REGEX'
- Load shared object library symbols for files matching a Unix
- regular expression. As with files loaded automatically, it only
- loads shared libraries required by your program for a core file or
- after typing `run'. If REGEX is omitted all shared libraries
- required by your program are loaded.
-
- On some systems, such as HP-UX systems, GDB supports autoloading
-shared library symbols until a limiting threshold size is reached.
-This provides the benefit of allowing autoloading to remain on by
-default, but avoids autoloading excessively large shared libraries, up
-to a threshold that is initially set, but which you can modify if you
-wish.
-
- Beyond that threshold, symbols from shared libraries must be
-explicitly loaded. To load these symbols, use the command
-`sharedlibrary FILENAME'. The base address of the shared library is
-determined automatically by GDB and need not be specified.
-
- To display or set the threshold, use the commands:
-
-`set auto-solib-limit THRESHOLD'
- Set the autoloading size threshold, in an integral number of
- megabytes. If THRESHOLD is nonzero and shared library autoloading
- is enabled, symbols from all shared object libraries will be
- loaded until the total size of the loaded shared library symbols
- exceeds this threshold. Otherwise, symbols must be loaded
- manually, using the `sharedlibrary' command. The default
- threshold is 100 (i.e. 100 Mb).
-
-`show auto-solib-limit'
- Display the current autoloading size threshold, in megabytes.
-
- Shared libraries are also supported in many cross or remote debugging
-configurations. A copy of the target's libraries need to be present on
-the host system; they need to be the same as the target libraries,
-although the copies on the target can be stripped as long as the copies
-on the host are not.
-
- You need to tell GDB where the target libraries are, so that it can
-load the correct copies--otherwise, it may try to load the host's
-libraries. GDB has two variables to specify the search directories for
-target libraries.
-
-`set solib-absolute-prefix PATH'
- If this variable is set, PATH will be used as a prefix for any
- absolute shared library paths; many runtime loaders store the
- absolute paths to the shared library in the target program's
- memory. If you use `solib-absolute-prefix' to find shared
- libraries, they need to be laid out in the same way that they are
- on the target, with e.g. a `/usr/lib' hierarchy under PATH.
-
- You can set the default value of `solib-absolute-prefix' by using
- the configure-time `--with-sysroot' option.
-
-`show solib-absolute-prefix'
- Display the current shared library prefix.
-
-`set solib-search-path PATH'
- If this variable is set, PATH is a colon-separated list of
- directories to search for shared libraries. `solib-search-path'
- is used after `solib-absolute-prefix' fails to locate the library,
- or if the path to the library is relative instead of absolute. If
- you want to use `solib-search-path' instead of
- `solib-absolute-prefix', be sure to set `solib-absolute-prefix' to
- a nonexistant directory to prevent GDB from finding your host's
- libraries.
-
-`show solib-search-path'
- Display the current shared library search path.
-
-
-File: gdb.info, Node: Separate Debug Files, Next: Symbol Errors, Prev: Files, Up: GDB Files
-
-Debugging Information in Separate Files
-=======================================
-
-GDB allows you to put a program's debugging information in a file
-separate from the executable itself, in a way that allows GDB to find
-and load the debugging information automatically. Since debugging
-information can be very large -- sometimes larger than the executable
-code itself -- some systems distribute debugging information for their
-executables in separate files, which users can install only when they
-need to debug a problem.
-
- If an executable's debugging information has been extracted to a
-separate file, the executable should contain a "debug link" giving the
-name of the debugging information file (with no directory components),
-and a checksum of its contents. (The exact form of a debug link is
-described below.) If the full name of the directory containing the
-executable is EXECDIR, and the executable has a debug link that
-specifies the name DEBUGFILE, then GDB will automatically search for
-the debugging information file in three places:
-
- * the directory containing the executable file (that is, it will look
- for a file named `EXECDIR/DEBUGFILE',
-
- * a subdirectory of that directory named `.debug' (that is, the file
- `EXECDIR/.debug/DEBUGFILE', and
-
- * a subdirectory of the global debug file directory that includes the
- executable's full path, and the name from the link (that is, the
- file `GLOBALDEBUGDIR/EXECDIR/DEBUGFILE', where GLOBALDEBUGDIR is
- the global debug file directory, and EXECDIR has been turned into
- a relative path).
-
-GDB checks under each of these names for a debugging information file
-whose checksum matches that given in the link, and reads the debugging
-information from the first one it finds.
-
- So, for example, if you ask GDB to debug `/usr/bin/ls', which has a
-link containing the name `ls.debug', and the global debug directory is
-`/usr/lib/debug', then GDB will look for debug information in
-`/usr/bin/ls.debug', `/usr/bin/.debug/ls.debug', and
-`/usr/lib/debug/usr/bin/ls.debug'.
-
- You can set the global debugging info directory's name, and view the
-name GDB is currently using.
-
-`set debug-file-directory DIRECTORY'
- Set the directory which GDB searches for separate debugging
- information files to DIRECTORY.
-
-`show debug-file-directory'
- Show the directory GDB searches for separate debugging information
- files.
-
-
- A debug link is a special section of the executable file named
-`.gnu_debuglink'. The section must contain:
-
- * A filename, with any leading directory components removed,
- followed by a zero byte,
-
- * zero to three bytes of padding, as needed to reach the next
- four-byte boundary within the section, and
-
- * a four-byte CRC checksum, stored in the same endianness used for
- the executable file itself. The checksum is computed on the
- debugging information file's full contents by the function given
- below, passing zero as the CRC argument.
-
- Any executable file format can carry a debug link, as long as it can
-contain a section named `.gnu_debuglink' with the contents described
-above.
-
- The debugging information file itself should be an ordinary
-executable, containing a full set of linker symbols, sections, and
-debugging information. The sections of the debugging information file
-should have the same names, addresses and sizes as the original file,
-but they need not contain any data -- much like a `.bss' section in an
-ordinary executable.
-
- As of December 2002, there is no standard GNU utility to produce
-separated executable / debugging information file pairs. Ulrich
-Drepper's `elfutils' package, starting with version 0.53, contains a
-version of the `strip' command such that the command `strip foo -f
-foo.debug' removes the debugging information from the executable file
-`foo', places it in the file `foo.debug', and leaves behind a debug
-link in `foo'.
-
- Since there are many different ways to compute CRC's (different
-polynomials, reversals, byte ordering, etc.), the simplest way to
-describe the CRC used in `.gnu_debuglink' sections is to give the
-complete code for a function that computes it:
-
- unsigned long
- gnu_debuglink_crc32 (unsigned long crc,
- unsigned char *buf, size_t len)
- {
- static const unsigned long crc32_table[256] =
- {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
- 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
- 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
- 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
- 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
- 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
- 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
- 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
- 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
- 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
- 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
- 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
- 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
- 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
- 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
- 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
- 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
- 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
- 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
- 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
- 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
- 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
- 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
- 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
- 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
- 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
- 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
- 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
- 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
- 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
- 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
- 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
- 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
- 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
- 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
- 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
- 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
- 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
- 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
- 0x2d02ef8d
- };
- unsigned char *end;
-
- crc = ~crc & 0xffffffff;
- for (end = buf + len; buf < end; ++buf)
- crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
- return ~crc & 0xffffffff;
- }
-
-
-File: gdb.info, Node: Symbol Errors, Prev: Separate Debug Files, Up: GDB Files
-
-Errors reading symbol files
-===========================
-
-While reading a symbol file, GDB occasionally encounters problems, such
-as symbol types it does not recognize, or known bugs in compiler
-output. By default, GDB does not notify you of such problems, since
-they are relatively common and primarily of interest to people
-debugging compilers. If you are interested in seeing information about
-ill-constructed symbol tables, you can either ask GDB to print only one
-message about each such type of problem, no matter how many times the
-problem occurs; or you can ask GDB to print more messages, to see how
-many times the problems occur, with the `set complaints' command (*note
-Optional warnings and messages: Messages/Warnings.).
-
- The messages currently printed, and their meanings, include:
-
-`inner block not inside outer block in SYMBOL'
- The symbol information shows where symbol scopes begin and end
- (such as at the start of a function or a block of statements).
- This error indicates that an inner scope block is not fully
- contained in its outer scope blocks.
-
- GDB circumvents the problem by treating the inner block as if it
- had the same scope as the outer block. In the error message,
- SYMBOL may be shown as "`(don't know)'" if the outer block is not a
- function.
-
-`block at ADDRESS out of order'
- The symbol information for symbol scope blocks should occur in
- order of increasing addresses. This error indicates that it does
- not do so.
-
- GDB does not circumvent this problem, and has trouble locating
- symbols in the source file whose symbols it is reading. (You can
- often determine what source file is affected by specifying `set
- verbose on'. *Note Optional warnings and messages:
- Messages/Warnings.)
-
-`bad block start address patched'
- The symbol information for a symbol scope block has a start address
- smaller than the address of the preceding source line. This is
- known to occur in the SunOS 4.1.1 (and earlier) C compiler.
-
- GDB circumvents the problem by treating the symbol scope block as
- starting on the previous source line.
-
-`bad string table offset in symbol N'
- Symbol number N contains a pointer into the string table which is
- larger than the size of the string table.
-
- GDB circumvents the problem by considering the symbol to have the
- name `foo', which may cause other problems if many symbols end up
- with this name.
-
-`unknown symbol type `0xNN''
- The symbol information contains new data types that GDB does not
- yet know how to read. `0xNN' is the symbol type of the
- uncomprehended information, in hexadecimal.
-
- GDB circumvents the error by ignoring this symbol information.
- This usually allows you to debug your program, though certain
- symbols are not accessible. If you encounter such a problem and
- feel like debugging it, you can debug `gdb' with itself, breakpoint
- on `complain', then go up to the function `read_dbx_symtab' and
- examine `*bufp' to see the symbol.
-
-`stub type has NULL name'
- GDB could not find the full definition for a struct or class.
-
-`const/volatile indicator missing (ok if using g++ v1.x), got...'
- The symbol information for a C++ member function is missing some
- information that recent versions of the compiler should have
- output for it.
-
-`info mismatch between compiler and debugger'
- GDB could not parse a type specification output by the compiler.
-
-
-
-File: gdb.info, Node: Targets, Next: Remote Debugging, Prev: GDB Files, Up: Top
-
-Specifying a Debugging Target
-*****************************
-
-A "target" is the execution environment occupied by your program.
-
- Often, GDB runs in the same host environment as your program; in
-that case, the debugging target is specified as a side effect when you
-use the `file' or `core' commands. When you need more flexibility--for
-example, running GDB on a physically separate host, or controlling a
-standalone system over a serial port or a realtime system over a TCP/IP
-connection--you can use the `target' command to specify one of the
-target types configured for GDB (*note Commands for managing targets:
-Target Commands.).
-
-* Menu:
-
-* Active Targets:: Active targets
-* Target Commands:: Commands for managing targets
-* Byte Order:: Choosing target byte order
-* Remote:: Remote debugging
-* KOD:: Kernel Object Display
-
-
-File: gdb.info, Node: Active Targets, Next: Target Commands, Up: Targets
-
-Active targets
-==============
-
-There are three classes of targets: processes, core files, and
-executable files. GDB can work concurrently on up to three active
-targets, one in each class. This allows you to (for example) start a
-process and inspect its activity without abandoning your work on a core
-file.
-
- For example, if you execute `gdb a.out', then the executable file
-`a.out' is the only active target. If you designate a core file as
-well--presumably from a prior run that crashed and coredumped--then GDB
-has two active targets and uses them in tandem, looking first in the
-corefile target, then in the executable file, to satisfy requests for
-memory addresses. (Typically, these two classes of target are
-complementary, since core files contain only a program's read-write
-memory--variables and so on--plus machine status, while executable
-files contain only the program text and initialized data.)
-
- When you type `run', your executable file becomes an active process
-target as well. When a process target is active, all GDB commands
-requesting memory addresses refer to that target; addresses in an
-active core file or executable file target are obscured while the
-process target is active.
-
- Use the `core-file' and `exec-file' commands to select a new core
-file or executable target (*note Commands to specify files: Files.).
-To specify as a target a process that is already running, use the
-`attach' command (*note Debugging an already-running process: Attach.).
-
-
-File: gdb.info, Node: Target Commands, Next: Byte Order, Prev: Active Targets, Up: Targets
-
-Commands for managing targets
-=============================
-
-`target TYPE PARAMETERS'
- Connects the GDB host environment to a target machine or process.
- A target is typically a protocol for talking to debugging
- facilities. You use the argument TYPE to specify the type or
- protocol of the target machine.
-
- Further PARAMETERS are interpreted by the target protocol, but
- typically include things like device names or host names to connect
- with, process numbers, and baud rates.
-
- The `target' command does not repeat if you press <RET> again
- after executing the command.
-
-`help target'
- Displays the names of all targets available. To display targets
- currently selected, use either `info target' or `info files'
- (*note Commands to specify files: Files.).
-
-`help target NAME'
- Describe a particular target, including any parameters necessary to
- select it.
-
-`set gnutarget ARGS'
- GDB uses its own library BFD to read your files. GDB knows
- whether it is reading an "executable", a "core", or a ".o" file;
- however, you can specify the file format with the `set gnutarget'
- command. Unlike most `target' commands, with `gnutarget' the
- `target' refers to a program, not a machine.
-
- _Warning:_ To specify a file format with `set gnutarget', you
- must know the actual BFD name.
-
- *Note Commands to specify files: Files.
-
-`show gnutarget'
- Use the `show gnutarget' command to display what file format
- `gnutarget' is set to read. If you have not set `gnutarget', GDB
- will determine the file format for each file automatically, and
- `show gnutarget' displays `The current BDF target is "auto"'.
-
- Here are some common targets (available, or not, depending on the GDB
-configuration):
-
-`target exec PROGRAM'
- An executable file. `target exec PROGRAM' is the same as
- `exec-file PROGRAM'.
-
-`target core FILENAME'
- A core dump file. `target core FILENAME' is the same as
- `core-file FILENAME'.
-
-`target remote DEV'
- Remote serial target in GDB-specific protocol. The argument DEV
- specifies what serial device to use for the connection (e.g.
- `/dev/ttya'). *Note Remote debugging: Remote. `target remote'
- supports the `load' command. This is only useful if you have some
- other way of getting the stub to the target system, and you can put
- it somewhere in memory where it won't get clobbered by the
- download.
-
-`target sim'
- Builtin CPU simulator. GDB includes simulators for most
- architectures. In general,
- target sim
- load
- run
-
- works; however, you cannot assume that a specific memory map,
- device drivers, or even basic I/O is available, although some
- simulators do provide these. For info about any
- processor-specific simulator details, see the appropriate section
- in *Note Embedded Processors: Embedded Processors.
-
-
- Some configurations may include these targets as well:
-
-`target nrom DEV'
- NetROM ROM emulator. This target only supports downloading.
-
-
- Different targets are available on different configurations of GDB;
-your configuration may have more or fewer targets.
-
- Many remote targets require you to download the executable's code
-once you've successfully established a connection.
-
-`load FILENAME'
- Depending on what remote debugging facilities are configured into
- GDB, the `load' command may be available. Where it exists, it is
- meant to make FILENAME (an executable) available for debugging on
- the remote system--by downloading, or dynamic linking, for example.
- `load' also records the FILENAME symbol table in GDB, like the
- `add-symbol-file' command.
-
- If your GDB does not have a `load' command, attempting to execute
- it gets the error message "`You can't do that when your target is
- ...'"
-
- The file is loaded at whatever address is specified in the
- executable. For some object file formats, you can specify the
- load address when you link the program; for other formats, like
- a.out, the object file format specifies a fixed address.
-
- `load' does not repeat if you press <RET> again after using it.
-
-
-File: gdb.info, Node: Byte Order, Next: Remote, Prev: Target Commands, Up: Targets
-
-Choosing target byte order
-==========================
-
-Some types of processors, such as the MIPS, PowerPC, and Renesas SH,
-offer the ability to run either big-endian or little-endian byte
-orders. Usually the executable or symbol will include a bit to
-designate the endian-ness, and you will not need to worry about which
-to use. However, you may still find it useful to adjust GDB's idea of
-processor endian-ness manually.
-
-`set endian big'
- Instruct GDB to assume the target is big-endian.
-
-`set endian little'
- Instruct GDB to assume the target is little-endian.
-
-`set endian auto'
- Instruct GDB to use the byte order associated with the executable.
-
-`show endian'
- Display GDB's current idea of the target byte order.
-
-
- Note that these commands merely adjust interpretation of symbolic
-data on the host, and that they have absolutely no effect on the target
-system.
-
-
-File: gdb.info, Node: Remote, Next: KOD, Prev: Byte Order, Up: Targets
-
-Remote debugging
-================
-
-If you are trying to debug a program running on a machine that cannot
-run GDB in the usual way, it is often useful to use remote debugging.
-For example, you might use remote debugging on an operating system
-kernel, or on a small system which does not have a general purpose
-operating system powerful enough to run a full-featured debugger.
-
- Some configurations of GDB have special serial or TCP/IP interfaces
-to make this work with particular debugging targets. In addition, GDB
-comes with a generic serial protocol (specific to GDB, but not specific
-to any particular target system) which you can use if you write the
-remote stubs--the code that runs on the remote system to communicate
-with GDB.
-
- Other remote targets may be available in your configuration of GDB;
-use `help target' to list them.
-
-
-File: gdb.info, Node: KOD, Prev: Remote, Up: Targets
-
-Kernel Object Display
-=====================
-
-Some targets support kernel object display. Using this facility, GDB
-communicates specially with the underlying operating system and can
-display information about operating system-level objects such as
-mutexes and other synchronization objects. Exactly which objects can be
-displayed is determined on a per-OS basis.
-
- Use the `set os' command to set the operating system. This tells
-GDB which kernel object display module to initialize:
-
- (gdb) set os cisco
-
- The associated command `show os' displays the operating system set
-with the `set os' command; if no operating system has been set, `show
-os' will display an empty string `""'.
-
- If `set os' succeeds, GDB will display some information about the
-operating system, and will create a new `info' command which can be
-used to query the target. The `info' command is named after the
-operating system:
-
- (gdb) info cisco
- List of Cisco Kernel Objects
- Object Description
- any Any and all objects
-
- Further subcommands can be used to query about particular objects
-known by the kernel.
-
- There is currently no way to determine whether a given operating
-system is supported other than to try setting it with `set os NAME',
-where NAME is the name of the operating system you want to try.
-
-
-File: gdb.info, Node: Remote Debugging, Next: Configurations, Prev: Targets, Up: Top
-
-Debugging remote programs
-*************************
-
-* Menu:
-
-* Connecting:: Connecting to a remote target
-* Server:: Using the gdbserver program
-* NetWare:: Using the gdbserve.nlm program
-* Remote configuration:: Remote configuration
-* remote stub:: Implementing a remote stub
-
-
-File: gdb.info, Node: Connecting, Next: Server, Up: Remote Debugging
-
-Connecting to a remote target
-=============================
-
-On the GDB host machine, you will need an unstripped copy of your
-program, since GDB needs symobl and debugging information. Start up
-GDB as usual, using the name of the local copy of your program as the
-first argument.
-
- If you're using a serial line, you may want to give GDB the `--baud'
-option, or use the `set remotebaud' command before the `target' command.
-
- After that, use `target remote' to establish communications with the
-target machine. Its argument specifies how to communicate--either via
-a devicename attached to a direct serial line, or a TCP or UDP port
-(possibly to a terminal server which in turn has a serial line to the
-target). For example, to use a serial line connected to the device
-named `/dev/ttyb':
-
- target remote /dev/ttyb
-
- To use a TCP connection, use an argument of the form `HOST:PORT' or
-`tcp:HOST:PORT'. For example, to connect to port 2828 on a terminal
-server named `manyfarms':
-
- target remote manyfarms:2828
-
- If your remote target is actually running on the same machine as
-your debugger session (e.g. a simulator of your target running on the
-same host), you can omit the hostname. For example, to connect to port
-1234 on your local machine:
-
- target remote :1234
-
-Note that the colon is still required here.
-
- To use a UDP connection, use an argument of the form
-`udp:HOST:PORT'. For example, to connect to UDP port 2828 on a
-terminal server named `manyfarms':
-
- target remote udp:manyfarms:2828
-
- When using a UDP connection for remote debugging, you should keep in
-mind that the `U' stands for "Unreliable". UDP can silently drop
-packets on busy or unreliable networks, which will cause havoc with
-your debugging session.
-
- Now you can use all the usual commands to examine and change data
-and to step and continue the remote program.
-
- Whenever GDB is waiting for the remote program, if you type the
-interrupt character (often <C-C>), GDB attempts to stop the program.
-This may or may not succeed, depending in part on the hardware and the
-serial drivers the remote system uses. If you type the interrupt
-character once again, GDB displays this prompt:
-
- Interrupted while waiting for the program.
- Give up (and stop debugging it)? (y or n)
-
- If you type `y', GDB abandons the remote debugging session. (If you
-decide you want to try again later, you can use `target remote' again
-to connect once more.) If you type `n', GDB goes back to waiting.
-
-`detach'
- When you have finished debugging the remote program, you can use
- the `detach' command to release it from GDB control. Detaching
- from the target normally resumes its execution, but the results
- will depend on your particular remote stub. After the `detach'
- command, GDB is free to connect to another target.
-
-`disconnect'
- The `disconnect' command behaves like `detach', except that the
- target is generally not resumed. It will wait for GDB (this
- instance or another one) to connect and continue debugging. After
- the `disconnect' command, GDB is again free to connect to another
- target.
-
-
-File: gdb.info, Node: Server, Next: NetWare, Prev: Connecting, Up: Remote Debugging
-
-Using the `gdbserver' program
-=============================
-
-`gdbserver' is a control program for Unix-like systems, which allows
-you to connect your program with a remote GDB via `target remote'--but
-without linking in the usual debugging stub.
-
- `gdbserver' is not a complete replacement for the debugging stubs,
-because it requires essentially the same operating-system facilities
-that GDB itself does. In fact, a system that can run `gdbserver' to
-connect to a remote GDB could also run GDB locally! `gdbserver' is
-sometimes useful nevertheless, because it is a much smaller program
-than GDB itself. It is also easier to port than all of GDB, so you may
-be able to get started more quickly on a new system by using
-`gdbserver'. Finally, if you develop code for real-time systems, you
-may find that the tradeoffs involved in real-time operation make it
-more convenient to do as much development work as possible on another
-system, for example by cross-compiling. You can use `gdbserver' to
-make a similar choice for debugging.
-
- GDB and `gdbserver' communicate via either a serial line or a TCP
-connection, using the standard GDB remote serial protocol.
-
-_On the target machine,_
- you need to have a copy of the program you want to debug.
- `gdbserver' does not need your program's symbol table, so you can
- strip the program if necessary to save space. GDB on the host
- system does all the symbol handling.
-
- To use the server, you must tell it how to communicate with GDB;
- the name of your program; and the arguments for your program. The
- usual syntax is:
-
- target> gdbserver COMM PROGRAM [ ARGS ... ]
-
- COMM is either a device name (to use a serial line) or a TCP
- hostname and portnumber. For example, to debug Emacs with the
- argument `foo.txt' and communicate with GDB over the serial port
- `/dev/com1':
-
- target> gdbserver /dev/com1 emacs foo.txt
-
- `gdbserver' waits passively for the host GDB to communicate with
- it.
-
- To use a TCP connection instead of a serial line:
-
- target> gdbserver host:2345 emacs foo.txt
-
- The only difference from the previous example is the first
- argument, specifying that you are communicating with the host GDB
- via TCP. The `host:2345' argument means that `gdbserver' is to
- expect a TCP connection from machine `host' to local TCP port 2345.
- (Currently, the `host' part is ignored.) You can choose any number
- you want for the port number as long as it does not conflict with
- any TCP ports already in use on the target system (for example,
- `23' is reserved for `telnet').(1) You must use the same port
- number with the host GDB `target remote' command.
-
- On some targets, `gdbserver' can also attach to running programs.
- This is accomplished via the `--attach' argument. The syntax is:
-
- target> gdbserver COMM --attach PID
-
- PID is the process ID of a currently running process. It isn't
- necessary to point `gdbserver' at a binary for the running process.
-
- You can debug processes by name instead of process ID if your
- target has the `pidof' utility:
-
- target> gdbserver COMM --attach `pidof PROGRAM`
-
- In case more than one copy of PROGRAM is running, or PROGRAM has
- multiple threads, most versions of `pidof' support the `-s' option
- to only return the first process ID.
-
-_On the host machine,_
- connect to your target (*note Connecting to a remote target:
- Connecting.). For TCP connections, you must start up `gdbserver'
- prior to using the `target remote' command. Otherwise you may get
- an error whose text depends on the host system, but which usually
- looks something like `Connection refused'. You don't need to use
- the `load' command in GDB when using gdbserver, since the program
- is already on the target.
-
-
- ---------- Footnotes ----------
-
- (1) If you choose a port number that conflicts with another service,
-`gdbserver' prints an error message and exits.
-
-
-File: gdb.info, Node: NetWare, Next: Remote configuration, Prev: Server, Up: Remote Debugging
-
-Using the `gdbserve.nlm' program
-================================
-
-`gdbserve.nlm' is a control program for NetWare systems, which allows
-you to connect your program with a remote GDB via `target remote'.
-
- GDB and `gdbserve.nlm' communicate via a serial line, using the
-standard GDB remote serial protocol.
-
-_On the target machine,_
- you need to have a copy of the program you want to debug.
- `gdbserve.nlm' does not need your program's symbol table, so you
- can strip the program if necessary to save space. GDB on the host
- system does all the symbol handling.
-
- To use the server, you must tell it how to communicate with GDB;
- the name of your program; and the arguments for your program. The
- syntax is:
-
- load gdbserve [ BOARD=BOARD ] [ PORT=PORT ]
- [ BAUD=BAUD ] PROGRAM [ ARGS ... ]
-
- BOARD and PORT specify the serial line; BAUD specifies the baud
- rate used by the connection. PORT and NODE default to 0, BAUD
- defaults to 9600bps.
-
- For example, to debug Emacs with the argument `foo.txt'and
- communicate with GDB over serial port number 2 or board 1 using a
- 19200bps connection:
-
- load gdbserve BOARD=1 PORT=2 BAUD=19200 emacs foo.txt
-
-__
- On the GDB host machine, connect to your target (*note Connecting
- to a remote target: Connecting.).
-
-
-
-File: gdb.info, Node: Remote configuration, Next: remote stub, Prev: NetWare, Up: Remote Debugging
-
-Remote configuration
-====================
-
-The following configuration options are available when debugging remote
-programs:
-
-`set remote hardware-watchpoint-limit LIMIT'
-`set remote hardware-breakpoint-limit LIMIT'
- Restrict GDB to using LIMIT remote hardware breakpoint or
- watchpoints. A limit of -1, the default, is treated as unlimited.
-
-
-File: gdb.info, Node: remote stub, Prev: Remote configuration, Up: Remote Debugging
-
-Implementing a remote stub
-==========================
-
-The stub files provided with GDB implement the target side of the
-communication protocol, and the GDB side is implemented in the GDB
-source file `remote.c'. Normally, you can simply allow these
-subroutines to communicate, and ignore the details. (If you're
-implementing your own stub file, you can still ignore the details: start
-with one of the existing stub files. `sparc-stub.c' is the best
-organized, and therefore the easiest to read.)
-
- To debug a program running on another machine (the debugging
-"target" machine), you must first arrange for all the usual
-prerequisites for the program to run by itself. For example, for a C
-program, you need:
-
- 1. A startup routine to set up the C runtime environment; these
- usually have a name like `crt0'. The startup routine may be
- supplied by your hardware supplier, or you may have to write your
- own.
-
- 2. A C subroutine library to support your program's subroutine calls,
- notably managing input and output.
-
- 3. A way of getting your program to the other machine--for example, a
- download program. These are often supplied by the hardware
- manufacturer, but you may have to write your own from hardware
- documentation.
-
- The next step is to arrange for your program to use a serial port to
-communicate with the machine where GDB is running (the "host" machine).
-In general terms, the scheme looks like this:
-
-_On the host,_
- GDB already understands how to use this protocol; when everything
- else is set up, you can simply use the `target remote' command
- (*note Specifying a Debugging Target: Targets.).
-
-_On the target,_
- you must link with your program a few special-purpose subroutines
- that implement the GDB remote serial protocol. The file
- containing these subroutines is called a "debugging stub".
-
- On certain remote targets, you can use an auxiliary program
- `gdbserver' instead of linking a stub into your program. *Note
- Using the `gdbserver' program: Server, for details.
-
- The debugging stub is specific to the architecture of the remote
-machine; for example, use `sparc-stub.c' to debug programs on SPARC
-boards.
-
- These working remote stubs are distributed with GDB:
-
-`i386-stub.c'
- For Intel 386 and compatible architectures.
-
-`m68k-stub.c'
- For Motorola 680x0 architectures.
-
-`sh-stub.c'
- For Renesas SH architectures.
-
-`sparc-stub.c'
- For SPARC architectures.
-
-`sparcl-stub.c'
- For Fujitsu SPARCLITE architectures.
-
-
- The `README' file in the GDB distribution may list other recently
-added stubs.
-
-* Menu:
-
-* Stub Contents:: What the stub can do for you
-* Bootstrapping:: What you must do for the stub
-* Debug Session:: Putting it all together
-
-
-File: gdb.info, Node: Stub Contents, Next: Bootstrapping, Up: remote stub
-
-What the stub can do for you
-----------------------------
-
-The debugging stub for your architecture supplies these three
-subroutines:
-
-`set_debug_traps'
- This routine arranges for `handle_exception' to run when your
- program stops. You must call this subroutine explicitly near the
- beginning of your program.
-
-`handle_exception'
- This is the central workhorse, but your program never calls it
- explicitly--the setup code arranges for `handle_exception' to run
- when a trap is triggered.
-
- `handle_exception' takes control when your program stops during
- execution (for example, on a breakpoint), and mediates
- communications with GDB on the host machine. This is where the
- communications protocol is implemented; `handle_exception' acts as
- the GDB representative on the target machine. It begins by
- sending summary information on the state of your program, then
- continues to execute, retrieving and transmitting any information
- GDB needs, until you execute a GDB command that makes your program
- resume; at that point, `handle_exception' returns control to your
- own code on the target machine.
-
-`breakpoint'
- Use this auxiliary subroutine to make your program contain a
- breakpoint. Depending on the particular situation, this may be
- the only way for GDB to get control. For instance, if your target
- machine has some sort of interrupt button, you won't need to call
- this; pressing the interrupt button transfers control to
- `handle_exception'--in effect, to GDB. On some machines, simply
- receiving characters on the serial port may also trigger a trap;
- again, in that situation, you don't need to call `breakpoint' from
- your own program--simply running `target remote' from the host GDB
- session gets control.
-
- Call `breakpoint' if none of these is true, or if you simply want
- to make certain your program stops at a predetermined point for the
- start of your debugging session.
-
-
-File: gdb.info, Node: Bootstrapping, Next: Debug Session, Prev: Stub Contents, Up: remote stub
-
-What you must do for the stub
------------------------------
-
-The debugging stubs that come with GDB are set up for a particular chip
-architecture, but they have no information about the rest of your
-debugging target machine.
-
- First of all you need to tell the stub how to communicate with the
-serial port.
-
-`int getDebugChar()'
- Write this subroutine to read a single character from the serial
- port. It may be identical to `getchar' for your target system; a
- different name is used to allow you to distinguish the two if you
- wish.
-
-`void putDebugChar(int)'
- Write this subroutine to write a single character to the serial
- port. It may be identical to `putchar' for your target system; a
- different name is used to allow you to distinguish the two if you
- wish.
-
- If you want GDB to be able to stop your program while it is running,
-you need to use an interrupt-driven serial driver, and arrange for it
-to stop when it receives a `^C' (`\003', the control-C character).
-That is the character which GDB uses to tell the remote system to stop.
-
- Getting the debugging target to return the proper status to GDB
-probably requires changes to the standard stub; one quick and dirty way
-is to just execute a breakpoint instruction (the "dirty" part is that
-GDB reports a `SIGTRAP' instead of a `SIGINT').
-
- Other routines you need to supply are:
-
-`void exceptionHandler (int EXCEPTION_NUMBER, void *EXCEPTION_ADDRESS)'
- Write this function to install EXCEPTION_ADDRESS in the exception
- handling tables. You need to do this because the stub does not
- have any way of knowing what the exception handling tables on your
- target system are like (for example, the processor's table might
- be in ROM, containing entries which point to a table in RAM).
- EXCEPTION_NUMBER is the exception number which should be changed;
- its meaning is architecture-dependent (for example, different
- numbers might represent divide by zero, misaligned access, etc).
- When this exception occurs, control should be transferred directly
- to EXCEPTION_ADDRESS, and the processor state (stack, registers,
- and so on) should be just as it is when a processor exception
- occurs. So if you want to use a jump instruction to reach
- EXCEPTION_ADDRESS, it should be a simple jump, not a jump to
- subroutine.
-
- For the 386, EXCEPTION_ADDRESS should be installed as an interrupt
- gate so that interrupts are masked while the handler runs. The
- gate should be at privilege level 0 (the most privileged level).
- The SPARC and 68k stubs are able to mask interrupts themselves
- without help from `exceptionHandler'.
-
-`void flush_i_cache()'
- On SPARC and SPARCLITE only, write this subroutine to flush the
- instruction cache, if any, on your target machine. If there is no
- instruction cache, this subroutine may be a no-op.
-
- On target machines that have instruction caches, GDB requires this
- function to make certain that the state of your program is stable.
-
-You must also make sure this library routine is available:
-
-`void *memset(void *, int, int)'
- This is the standard library function `memset' that sets an area of
- memory to a known value. If you have one of the free versions of
- `libc.a', `memset' can be found there; otherwise, you must either
- obtain it from your hardware manufacturer, or write your own.
-
- If you do not use the GNU C compiler, you may need other standard
-library subroutines as well; this varies from one stub to another, but
-in general the stubs are likely to use any of the common library
-subroutines which `gcc' generates as inline code.
-
-
-File: gdb.info, Node: Debug Session, Prev: Bootstrapping, Up: remote stub
-
-Putting it all together
------------------------
-
-In summary, when your program is ready to debug, you must follow these
-steps.
-
- 1. Make sure you have defined the supporting low-level routines
- (*note What you must do for the stub: Bootstrapping.):
- `getDebugChar', `putDebugChar',
- `flush_i_cache', `memset', `exceptionHandler'.
-
- 2. Insert these lines near the top of your program:
-
- set_debug_traps();
- breakpoint();
-
- 3. For the 680x0 stub only, you need to provide a variable called
- `exceptionHook'. Normally you just use:
-
- void (*exceptionHook)() = 0;
-
- but if before calling `set_debug_traps', you set it to point to a
- function in your program, that function is called when `GDB'
- continues after stopping on a trap (for example, bus error). The
- function indicated by `exceptionHook' is called with one
- parameter: an `int' which is the exception number.
-
- 4. Compile and link together: your program, the GDB debugging stub for
- your target architecture, and the supporting subroutines.
-
- 5. Make sure you have a serial connection between your target machine
- and the GDB host, and identify the serial port on the host.
-
- 6. Download your program to your target machine (or get it there by
- whatever means the manufacturer provides), and start it.
-
- 7. Start GDB on the host, and connect to the target (*note Connecting
- to a remote target: Connecting.).
-
-
-
-File: gdb.info, Node: Configurations, Next: Controlling GDB, Prev: Remote Debugging, Up: Top
-
-Configuration-Specific Information
-**********************************
-
-While nearly all GDB commands are available for all native and cross
-versions of the debugger, there are some exceptions. This chapter
-describes things that are only available in certain configurations.
-
- There are three major categories of configurations: native
-configurations, where the host and target are the same, embedded
-operating system configurations, which are usually the same for several
-different processor architectures, and bare embedded processors, which
-are quite different from each other.
-
-* Menu:
-
-* Native::
-* Embedded OS::
-* Embedded Processors::
-* Architectures::
-
-
-File: gdb.info, Node: Native, Next: Embedded OS, Up: Configurations
-
-Native
-======
-
-This section describes details specific to particular native
-configurations.
-
-* Menu:
-
-* HP-UX:: HP-UX
-* SVR4 Process Information:: SVR4 process information
-* DJGPP Native:: Features specific to the DJGPP port
-* Cygwin Native:: Features specific to the Cygwin port
-
-
-File: gdb.info, Node: HP-UX, Next: SVR4 Process Information, Up: Native
-
-HP-UX
------
-
-On HP-UX systems, if you refer to a function or variable name that
-begins with a dollar sign, GDB searches for a user or system name
-first, before it searches for a convenience variable.
-
-
-File: gdb.info, Node: SVR4 Process Information, Next: DJGPP Native, Prev: HP-UX, Up: Native
-
-SVR4 process information
-------------------------
-
-Many versions of SVR4 provide a facility called `/proc' that can be
-used to examine the image of a running process using file-system
-subroutines. If GDB is configured for an operating system with this
-facility, the command `info proc' is available to report on several
-kinds of information about the process running your program. `info
-proc' works only on SVR4 systems that include the `procfs' code. This
-includes OSF/1 (Digital Unix), Solaris, Irix, and Unixware, but not
-HP-UX or GNU/Linux, for example.
-
-`info proc'
- Summarize available information about the process.
-
-`info proc mappings'
- Report on the address ranges accessible in the program, with
- information on whether your program may read, write, or execute
- each range.
-
-
-File: gdb.info, Node: DJGPP Native, Next: Cygwin Native, Prev: SVR4 Process Information, Up: Native
-
-Features for Debugging DJGPP Programs
--------------------------------------
-
-DJGPP is the port of GNU development tools to MS-DOS and MS-Windows.
-DJGPP programs are 32-bit protected-mode programs that use the "DPMI"
-(DOS Protected-Mode Interface) API to run on top of real-mode DOS
-systems and their emulations.
-
- GDB supports native debugging of DJGPP programs, and defines a few
-commands specific to the DJGPP port. This subsection describes those
-commands.
-
-`info dos'
- This is a prefix of DJGPP-specific commands which print
- information about the target system and important OS structures.
-
-`info dos sysinfo'
- 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.
-
-`info dos gdt'
-`info dos ldt'
-`info dos idt'
- 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.
-
- A typical DJGPP 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.
-
- 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:
-
- `(gdb) info dos ldt $ds'
- `0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)'
-
-
- This comes in handy when you want to see whether a pointer is
- outside the data segment's limit (i.e. "garbled").
-
-`info dos pde'
-`info dos pte'
- 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.
-
- Without an argument, `info dos pde' displays the entire Page
- Directory, and `info dos pte' displays all the entries in all of
- the Page Tables. An argument, an integer expression, given to the
- `info dos pde' command means display only that entry from the Page
- Directory table. An argument given to the `info dos pte' command
- means display entries from a single Page Table, the one pointed to
- by the specified entry in the Page Directory.
-
- These commands are useful when your program uses "DMA" (Direct
- Memory Access), which needs physical addresses to program the DMA
- controller.
-
- These commands are supported only with some DPMI servers.
-
-`info dos address-pte ADDR'
- This command displays the Page Table entry for a specified linear
- address. The argument linear address ADDR should already have the
- appropriate segment's base address added to it, because this
- command accepts addresses which may belong to _any_ segment. For
- example, here's how to display the Page Table entry for the page
- where the variable `i' is stored:
-
- `(gdb) info dos address-pte __djgpp_base_address + (char *)&i'
- `Page Table entry for address 0x11a00d30:'
- `Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30'
-
-
- This says that `i' is stored at offset `0xd30' from the page whose
- physical base address is `0x02698000', and prints all the
- attributes of that page.
-
- Note that you must cast the addresses of variables to a `char *',
- since otherwise the value of `__djgpp_base_address', the base
- address of all variables and functions in a DJGPP program, will be
- added using the rules of C pointer arithmetics: if `i' is declared
- an `int', GDB will add 4 times the value of `__djgpp_base_address'
- to the address of `i'.
-
- Here's another example, it displays the Page Table entry for the
- transfer buffer:
-
- `(gdb) info dos address-pte *((unsigned *)&_go32_info_block + 3)'
- `Page Table entry for address 0x29110:'
- `Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110'
-
-
- (The `+ 3' offset is because the transfer buffer's address is the
- 3rd member of the `_go32_info_block' structure.) The output of
- this command clearly shows that addresses in conventional memory
- are mapped 1:1, i.e. the physical and linear addresses are
- identical.
-
- This command is supported only with some DPMI servers.
-
-
-File: gdb.info, Node: Cygwin Native, Prev: DJGPP Native, Up: Native
-
-Features for Debugging MS Windows PE executables
-------------------------------------------------
-
-GDB supports native debugging of MS Windows programs, including DLLs
-with and without symbolic debugging information. There are various
-additional Cygwin-specific commands, described in this subsection. The
-subsubsection *note Non-debug DLL symbols:: describes working with DLLs
-that have no debugging symbols.
-
-`info w32'
- This is a prefix of MS Windows specific commands which print
- information about the target system and important OS structures.
-
-`info w32 selector'
- This command displays information returned by the Win32 API
- `GetThreadSelectorEntry' function. It takes an optional argument
- that is evaluated to a long value to give the information about
- this given selector. Without argument, this command displays
- information about the the six segment registers.
-
-`info dll'
- This is a Cygwin specific alias of info shared.
-
-`dll-symbols'
- This command loads symbols from a dll similarly to add-sym command
- but without the need to specify a base address.
-
-`set new-console MODE'
- If MODE is `on' the debuggee will be started in a new console on
- next start. If MODE is `off'i, the debuggee will be started in
- the same console as the debugger.
-
-`show new-console'
- Displays whether a new console is used when the debuggee is
- started.
-
-`set new-group MODE'
- This boolean value controls whether the debuggee should start a
- new group or stay in the same group as the debugger. This affects
- the way the Windows OS handles Ctrl-C.
-
-`show new-group'
- Displays current value of new-group boolean.
-
-`set debugevents'
- This boolean value adds debug output concerning events seen by the
- debugger.
-
-`set debugexec'
- This boolean value adds debug output concerning execute events
- seen by the debugger.
-
-`set debugexceptions'
- This boolean value adds debug ouptut concerning exception events
- seen by the debugger.
-
-`set debugmemory'
- This boolean value adds debug ouptut concerning memory events seen
- by the debugger.
-
-`set shell'
- This boolean values specifies whether the debuggee is called via a
- shell or directly (default value is on).
-
-`show shell'
- Displays if the debuggee will be started with a shell.
-
-
-* Menu:
-
-* Non-debug DLL symbols:: Support for DLLs without debugging symbols
-
-
-File: gdb.info, Node: Non-debug DLL symbols, Up: Cygwin Native
-
-Support for DLLs without debugging symbols
-..........................................
-
-Very often on windows, some of the DLLs that your program relies on do
-not include symbolic debugging information (for example,
-`kernel32.dll'). When GDB doesn't recognize any debugging symbols in a
-DLL, it relies on the minimal amount of symbolic information contained
-in the DLL's export table. This subsubsection describes working with
-such symbols, known internally to GDB as "minimal symbols".
-
- Note that before the debugged program has started execution, no DLLs
-will have been loaded. The easiest way around this problem is simply to
-start the program -- either by setting a breakpoint or letting the
-program run once to completion. It is also possible to force GDB to
-load a particular DLL before starting the executable -- see the shared
-library information in *note Files:: or the `dll-symbols' command in
-*note Cygwin Native::. Currently, explicitly loading symbols from a DLL
-with no debugging information will cause the symbol names to be
-duplicated in GDB's lookup table, which may adversely affect symbol
-lookup performance.
-
-DLL name prefixes
-.................
-
-In keeping with the naming conventions used by the Microsoft debugging
-tools, DLL export symbols are made available with a prefix based on the
-DLL name, for instance `KERNEL32!CreateFileA'. The plain name is also
-entered into the symbol table, so `CreateFileA' is often sufficient. In
-some cases there will be name clashes within a program (particularly if
-the executable itself includes full debugging symbols) necessitating
-the use of the fully qualified name when referring to the contents of
-the DLL. Use single-quotes around the name to avoid the exclamation
-mark ("!") being interpreted as a language operator.
-
- Note that the internal name of the DLL may be all upper-case, even
-though the file name of the DLL is lower-case, or vice-versa. Since
-symbols within GDB are _case-sensitive_ this may cause some confusion.
-If in doubt, try the `info functions' and `info variables' commands or
-even `maint print msymbols' (see *note Symbols::). Here's an example:
-
- (gdb) info function CreateFileA
- All functions matching regular expression "CreateFileA":
-
- Non-debugging symbols:
- 0x77e885f4 CreateFileA
- 0x77e885f4 KERNEL32!CreateFileA
-
- (gdb) info function !
- All functions matching regular expression "!":
-
- Non-debugging symbols:
- 0x6100114c cygwin1!__assert
- 0x61004034 cygwin1!_dll_crt0@0
- 0x61004240 cygwin1!dll_crt0(per_process *)
- [etc...]
-
-Working with minimal symbols
-............................
-
-Symbols extracted from a DLL's export table do not contain very much
-type information. All that GDB can do is guess whether a symbol refers
-to a function or variable depending on the linker section that contains
-the symbol. Also note that the actual contents of the memory contained
-in a DLL are not available unless the program is running. This means
-that you cannot examine the contents of a variable or disassemble a
-function within a DLL without a running program.
-
- Variables are generally treated as pointers and dereferenced
-automatically. For this reason, it is often necessary to prefix a
-variable name with the address-of operator ("&") and provide explicit
-type information in the command. Here's an example of the type of
-problem:
-
- (gdb) print 'cygwin1!__argv'
- $1 = 268572168
-
- (gdb) x 'cygwin1!__argv'
- 0x10021610: "\230y\""
-
- And two possible solutions:
-
- (gdb) print ((char **)'cygwin1!__argv')[0]
- $2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram"
-
- (gdb) x/2x &'cygwin1!__argv'
- 0x610c0aa8 <cygwin1!__argv>: 0x10021608 0x00000000
- (gdb) x/x 0x10021608
- 0x10021608: 0x0022fd98
- (gdb) x/s 0x0022fd98
- 0x22fd98: "/cygdrive/c/mydirectory/myprogram"
-
- Setting a break point within a DLL is possible even before the
-program starts execution. However, under these circumstances, GDB can't
-examine the initial instructions of the function in order to skip the
-function's frame set-up code. You can work around this by using "*&" to
-set the breakpoint at a raw memory address:
-
- (gdb) break *&'python22!PyOS_Readline'
- Breakpoint 1 at 0x1e04eff0
-
- The author of these extensions is not entirely convinced that
-setting a break point within a shared DLL like `kernel32.dll' is
-completely safe.
-
-
-File: gdb.info, Node: Embedded OS, Next: Embedded Processors, Prev: Native, Up: Configurations
-
-Embedded Operating Systems
-==========================
-
-This section describes configurations involving the debugging of
-embedded operating systems that are available for several different
-architectures.
-
-* Menu:
-
-* VxWorks:: Using GDB with VxWorks
-
- GDB includes the ability to debug programs running on various
-real-time operating systems.
-
-
-File: gdb.info, Node: VxWorks, Up: Embedded OS
-
-Using GDB with VxWorks
-----------------------
-
-`target vxworks MACHINENAME'
- A VxWorks system, attached via TCP/IP. The argument MACHINENAME
- is the target system's machine name or IP address.
-
-
- On VxWorks, `load' links FILENAME dynamically on the current target
-system as well as adding its symbols in GDB.
-
- GDB enables developers to spawn and debug tasks running on networked
-VxWorks targets from a Unix host. Already-running tasks spawned from
-the VxWorks shell can also be debugged. GDB uses code that runs on
-both the Unix host and on the VxWorks target. The program `gdb' is
-installed and executed on the Unix host. (It may be installed with the
-name `vxgdb', to distinguish it from a GDB for debugging programs on
-the host itself.)
-
-`VxWorks-timeout ARGS'
- All VxWorks-based targets now support the option `vxworks-timeout'.
- This option is set by the user, and ARGS represents the number of
- seconds GDB waits for responses to rpc's. You might use this if
- your VxWorks target is a slow software simulator or is on the far
- side of a thin network line.
-
- The following information on connecting to VxWorks was current when
-this manual was produced; newer releases of VxWorks may use revised
-procedures.
-
- To use GDB with VxWorks, you must rebuild your VxWorks kernel to
-include the remote debugging interface routines in the VxWorks library
-`rdb.a'. To do this, define `INCLUDE_RDB' in the VxWorks configuration
-file `configAll.h' and rebuild your VxWorks kernel. The resulting
-kernel contains `rdb.a', and spawns the source debugging task
-`tRdbTask' when VxWorks is booted. For more information on configuring
-and remaking VxWorks, see the manufacturer's manual.
-
- Once you have included `rdb.a' in your VxWorks system image and set
-your Unix execution search path to find GDB, you are ready to run GDB.
-From your Unix host, run `gdb' (or `vxgdb', depending on your
-installation).
-
- GDB comes up showing the prompt:
-
- (vxgdb)
-
-* Menu:
-
-* VxWorks Connection:: Connecting to VxWorks
-* VxWorks Download:: VxWorks download
-* VxWorks Attach:: Running tasks
-
-
-File: gdb.info, Node: VxWorks Connection, Next: VxWorks Download, Up: VxWorks
-
-Connecting to VxWorks
-.....................
-
-The GDB command `target' lets you connect to a VxWorks target on the
-network. To connect to a target whose host name is "`tt'", type:
-
- (vxgdb) target vxworks tt
-
- GDB displays messages like these:
-
- Attaching remote machine across net...
- Connected to tt.
-
- GDB then attempts to read the symbol tables of any object modules
-loaded into the VxWorks target since it was last booted. GDB locates
-these files by searching the directories listed in the command search
-path (*note Your program's environment: Environment.); if it fails to
-find an object file, it displays a message such as:
-
- prog.o: No such file or directory.
-
- When this happens, add the appropriate directory to the search path
-with the GDB command `path', and execute the `target' command again.
-
-
-File: gdb.info, Node: VxWorks Download, Next: VxWorks Attach, Prev: VxWorks Connection, Up: VxWorks
-
-VxWorks download
-................
-
-If you have connected to the VxWorks target and you want to debug an
-object that has not yet been loaded, you can use the GDB `load' command
-to download a file from Unix to VxWorks incrementally. The object file
-given as an argument to the `load' command is actually opened twice:
-first by the VxWorks target in order to download the code, then by GDB
-in order to read the symbol table. This can lead to problems if the
-current working directories on the two systems differ. If both systems
-have NFS mounted the same filesystems, you can avoid these problems by
-using absolute paths. Otherwise, it is simplest to set the working
-directory on both systems to the directory in which the object file
-resides, and then to reference the file by its name, without any path.
-For instance, a program `prog.o' may reside in `VXPATH/vw/demo/rdb' in
-VxWorks and in `HOSTPATH/vw/demo/rdb' on the host. To load this
-program, type this on VxWorks:
-
- -> cd "VXPATH/vw/demo/rdb"
-
-Then, in GDB, type:
-
- (vxgdb) cd HOSTPATH/vw/demo/rdb
- (vxgdb) load prog.o
-
- GDB displays a response similar to this:
-
- Reading symbol data from wherever/vw/demo/rdb/prog.o... done.
-
- You can also use the `load' command to reload an object module after
-editing and recompiling the corresponding source file. Note that this
-makes GDB delete all currently-defined breakpoints, auto-displays, and
-convenience variables, and to clear the value history. (This is
-necessary in order to preserve the integrity of debugger's data
-structures that reference the target system's symbol table.)
-
-
-File: gdb.info, Node: VxWorks Attach, Prev: VxWorks Download, Up: VxWorks
-
-Running tasks
-.............
-
-You can also attach to an existing task using the `attach' command as
-follows:
-
- (vxgdb) attach TASK
-
-where TASK is the VxWorks hexadecimal task ID. The task can be running
-or suspended when you attach to it. Running tasks are suspended at the
-time of attachment.
-
-
-File: gdb.info, Node: Embedded Processors, Next: Architectures, Prev: Embedded OS, Up: Configurations
-
-Embedded Processors
-===================
-
-This section goes into details specific to particular embedded
-configurations.
-
-* Menu:
-
-* ARM:: ARM
-* H8/300:: Renesas H8/300
-* H8/500:: Renesas H8/500
-* M32R/D:: Renesas M32R/D
-* M68K:: Motorola M68K
-* MIPS Embedded:: MIPS Embedded
-* OpenRISC 1000:: OpenRisc 1000
-* PA:: HP PA Embedded
-* PowerPC: PowerPC
-* SH:: Renesas SH
-* Sparclet:: Tsqware Sparclet
-* Sparclite:: Fujitsu Sparclite
-* ST2000:: Tandem ST2000
-* Z8000:: Zilog Z8000
-
-
-File: gdb.info, Node: ARM, Next: H8/300, Up: Embedded Processors
-
-ARM
----
-
-`target rdi DEV'
- ARM Angel monitor, via RDI library interface to ADP protocol. You
- may use this target to communicate with both boards running the
- Angel monitor, or with the EmbeddedICE JTAG debug device.
-
-`target rdp DEV'
- ARM Demon monitor.
-
-
-
-File: gdb.info, Node: H8/300, Next: H8/500, Prev: ARM, Up: Embedded Processors
-
-Renesas H8/300
---------------
-
-`target hms DEV'
- A Renesas SH, H8/300, or H8/500 board, attached via serial line to
- your host. Use special commands `device' and `speed' to control
- the serial line and the communications speed used.
-
-`target e7000 DEV'
- E7000 emulator for Renesas H8 and SH.
-
-`target sh3 DEV'
-`target sh3e DEV'
- Renesas SH-3 and SH-3E target systems.
-
-
- When you select remote debugging to a Renesas SH, H8/300, or H8/500
-board, the `load' command downloads your program to the Renesas board
-and also opens it as the current executable target for GDB on your host
-(like the `file' command).
-
- GDB needs to know these things to talk to your Renesas SH, H8/300,
-or H8/500:
-
- 1. that you want to use `target hms', the remote debugging interface
- for Renesas microprocessors, or `target e7000', the in-circuit
- emulator for the Renesas SH and the Renesas 300H. (`target hms' is
- the default when GDB is configured specifically for the Renesas SH,
- H8/300, or H8/500.)
-
- 2. what serial device connects your host to your Renesas board (the
- first serial device available on your host is the default).
-
- 3. what speed to use over the serial device.
-
-* Menu:
-
-* Renesas Boards:: Connecting to Renesas boards.
-* Renesas ICE:: Using the E7000 In-Circuit Emulator.
-* Renesas Special:: Special GDB commands for Renesas micros.
-
-
-File: gdb.info, Node: Renesas Boards, Next: Renesas ICE, Up: H8/300
-
-Connecting to Renesas boards
-............................
-
-Use the special `GDB' command `device PORT' if you need to explicitly
-set the serial device. The default PORT is the first available port on
-your host. This is only necessary on Unix hosts, where it is typically
-something like `/dev/ttya'.
-
- `GDB' has another special command to set the communications speed:
-`speed BPS'. This command also is only used from Unix hosts; on DOS
-hosts, set the line speed as usual from outside GDB with the DOS `mode'
-command (for instance, `mode com2:9600,n,8,1,p' for a 9600bps
-connection).
-
- The `device' and `speed' commands are available only when you use a
-Unix host to debug your Renesas microprocessor programs. If you use a
-DOS host, GDB depends on an auxiliary terminate-and-stay-resident
-program called `asynctsr' to communicate with the development board
-through a PC serial port. You must also use the DOS `mode' command to
-set up the serial port on the DOS side.
-
- The following sample session illustrates the steps needed to start a
-program under GDB control on an H8/300. The example uses a sample
-H8/300 program called `t.x'. The procedure is the same for the Renesas
-SH and the H8/500.
-
- First hook up your development board. In this example, we use a
-board attached to serial port `COM2'; if you use a different serial
-port, substitute its name in the argument of the `mode' command. When
-you call `asynctsr', the auxiliary comms program used by the debugger,
-you give it just the numeric part of the serial port's name; for
-example, `asyncstr 2' below runs `asyncstr' on `COM2'.
-
- C:\H8300\TEST> asynctsr 2
- C:\H8300\TEST> mode com2:9600,n,8,1,p
-
- Resident portion of MODE loaded
-
- COM2: 9600, n, 8, 1, p
-
- _Warning:_ We have noticed a bug in PC-NFS that conflicts with
- `asynctsr'. If you also run PC-NFS on your DOS host, you may need
- to disable it, or even boot without it, to use `asynctsr' to
- control your development board.
-
- Now that serial communications are set up, and the development board
-is connected, you can start up GDB. Call `gdb' with the name of your
-program as the argument. `GDB' prompts you, as usual, with the prompt
-`(gdb)'. Use two special commands to begin your debugging session:
-`target hms' to specify cross-debugging to the Renesas board, and the
-`load' command to download your program to the board. `load' displays
-the names of the program's sections, and a `*' for each 2K of data
-downloaded. (If you want to refresh GDB data on symbols or on the
-executable file without downloading, use the GDB commands `file' or
-`symbol-file'. These commands, and `load' itself, are described in
-*Note Commands to specify files: Files.)
-
- (eg-C:\H8300\TEST) gdb t.x
- GDB is free software and you are welcome to distribute copies
- of it under certain conditions; type "show copying" to see
- the conditions.
- There is absolutely no warranty for GDB; type "show warranty"
- for details.
- GDB 6.1, Copyright 1992 Free Software Foundation, Inc...
- (gdb) target hms
- Connected to remote H8/300 HMS system.
- (gdb) load t.x
- .text : 0x8000 .. 0xabde ***********
- .data : 0xabde .. 0xad30 *
- .stack : 0xf000 .. 0xf014 *
-
- At this point, you're ready to run or debug your program. From here
-on, you can use all the usual GDB commands. The `break' command sets
-breakpoints; the `run' command starts your program; `print' or `x'
-display data; the `continue' command resumes execution after stopping
-at a breakpoint. You can use the `help' command at any time to find
-out more about GDB commands.
-
- Remember, however, that _operating system_ facilities aren't
-available on your development board; for example, if your program hangs,
-you can't send an interrupt--but you can press the RESET switch!
-
- Use the RESET button on the development board
- * to interrupt your program (don't use `ctl-C' on the DOS host--it
- has no way to pass an interrupt signal to the development board);
- and
-
- * to return to the GDB command prompt after your program finishes
- normally. The communications protocol provides no other way for
- GDB to detect program completion.
-
- In either case, GDB sees the effect of a RESET on the development
-board as a "normal exit" of your program.
-
-
-File: gdb.info, Node: Renesas ICE, Next: Renesas Special, Prev: Renesas Boards, Up: H8/300
-
-Using the E7000 in-circuit emulator
-...................................
-
-You can use the E7000 in-circuit emulator to develop code for either the
-Renesas SH or the H8/300H. Use one of these forms of the `target
-e7000' command to connect GDB to your E7000:
-
-`target e7000 PORT SPEED'
- Use this form if your E7000 is connected to a serial port. The
- PORT argument identifies what serial port to use (for example,
- `com2'). The third argument is the line speed in bits per second
- (for example, `9600').
-
-`target e7000 HOSTNAME'
- If your E7000 is installed as a host on a TCP/IP network, you can
- just specify its hostname; GDB uses `telnet' to connect.
-
-
-File: gdb.info, Node: Renesas Special, Prev: Renesas ICE, Up: H8/300
-
-Special GDB commands for Renesas micros
-.......................................
-
-Some GDB commands are available only for the H8/300:
-
-`set machine h8300'
-`set machine h8300h'
- Condition GDB for one of the two variants of the H8/300
- architecture with `set machine'. You can use `show machine' to
- check which variant is currently in effect.
-
-
-
-File: gdb.info, Node: H8/500, Next: M32R/D, Prev: H8/300, Up: Embedded Processors
-
-H8/500
-------
-
-`set memory MOD'
-`show memory'
- Specify which H8/500 memory model (MOD) you are using with `set
- memory'; check which memory model is in effect with `show memory'.
- The accepted values for MOD are `small', `big', `medium', and
- `compact'.
-
-
-
-File: gdb.info, Node: M32R/D, Next: M68K, Prev: H8/500, Up: Embedded Processors
-
-Renesas M32R/D
---------------
-
-`target m32r DEV'
- Renesas M32R/D ROM monitor.
-
-`target m32rsdi DEV'
- Renesas M32R SDI server, connected via parallel port to the board.
-
-
-
-File: gdb.info, Node: M68K, Next: MIPS Embedded, Prev: M32R/D, Up: Embedded Processors
-
-M68k
-----
-
-The Motorola m68k configuration includes ColdFire support, and target
-command for the following ROM monitors.
-
-`target abug DEV'
- ABug ROM monitor for M68K.
-
-`target cpu32bug DEV'
- CPU32BUG monitor, running on a CPU32 (M68K) board.
-
-`target dbug DEV'
- dBUG ROM monitor for Motorola ColdFire.
-
-`target est DEV'
- EST-300 ICE monitor, running on a CPU32 (M68K) board.
-
-`target rom68k DEV'
- ROM 68K monitor, running on an M68K IDP board.
-
-
-`target rombug DEV'
- ROMBUG ROM monitor for OS/9000.
-
-
-
-File: gdb.info, Node: MIPS Embedded, Next: OpenRISC 1000, Prev: M68K, Up: Embedded Processors
-
-MIPS Embedded
--------------
-
-GDB can use the MIPS remote debugging protocol to talk to a MIPS board
-attached to a serial line. This is available when you configure GDB
-with `--target=mips-idt-ecoff'.
-
- Use these GDB commands to specify the connection to your target
-board:
-
-`target mips PORT'
- To run a program on the board, start up `gdb' with the name of
- your program as the argument. To connect to the board, use the
- command `target mips PORT', where PORT is the name of the serial
- port connected to the board. If the program has not already been
- downloaded to the board, you may use the `load' command to
- download it. You can then use all the usual GDB commands.
-
- For example, this sequence connects to the target board through a
- serial port, and loads and runs a program called PROG through the
- debugger:
-
- host$ gdb PROG
- GDB is free software and ...
- (gdb) target mips /dev/ttyb
- (gdb) load PROG
- (gdb) run
-
-`target mips HOSTNAME:PORTNUMBER'
- On some GDB host configurations, you can specify a TCP connection
- (for instance, to a serial line managed by a terminal
- concentrator) instead of a serial port, using the syntax
- `HOSTNAME:PORTNUMBER'.
-
-`target pmon PORT'
- PMON ROM monitor.
-
-`target ddb PORT'
- NEC's DDB variant of PMON for Vr4300.
-
-`target lsi PORT'
- LSI variant of PMON.
-
-`target r3900 DEV'
- Densan DVE-R3900 ROM monitor for Toshiba R3900 Mips.
-
-`target array DEV'
- Array Tech LSI33K RAID controller board.
-
-
-GDB also supports these special commands for MIPS targets:
-
-`set processor ARGS'
-`show processor'
- Use the `set processor' command to set the type of MIPS processor
- when you want to access processor-type-specific registers. For
- example, `set processor R3041' tells GDB to use the CPU registers
- appropriate for the 3041 chip. Use the `show processor' command
- to see what MIPS processor GDB is using. Use the `info reg'
- command to see what registers GDB is using.
-
-`set mipsfpu double'
-`set mipsfpu single'
-`set mipsfpu none'
-`show mipsfpu'
- If your target board does not support the MIPS floating point
- coprocessor, you should use the command `set mipsfpu none' (if you
- need this, you may wish to put the command in your GDB init file).
- This tells GDB how to find the return value of functions which
- return floating point values. It also allows GDB to avoid saving
- the floating point registers when calling functions on the board.
- If you are using a floating point coprocessor with only single
- precision floating point support, as on the R4650 processor, use
- the command `set mipsfpu single'. The default double precision
- floating point coprocessor may be selected using `set mipsfpu
- double'.
-
- In previous versions the only choices were double precision or no
- floating point, so `set mipsfpu on' will select double precision
- and `set mipsfpu off' will select no floating point.
-
- As usual, you can inquire about the `mipsfpu' variable with `show
- mipsfpu'.
-
-`set remotedebug N'
-`show remotedebug'
- You can see some debugging information about communications with
- the board by setting the `remotedebug' variable. If you set it to
- `1' using `set remotedebug 1', every packet is displayed. If you
- set it to `2', every character is displayed. You can check the
- current value at any time with the command `show remotedebug'.
-
-`set timeout SECONDS'
-`set retransmit-timeout SECONDS'
-`show timeout'
-`show retransmit-timeout'
- You can control the timeout used while waiting for a packet, in
- the MIPS remote protocol, with the `set timeout SECONDS' command.
- The default is 5 seconds. Similarly, you can control the timeout
- used while waiting for an acknowledgement of a packet with the `set
- retransmit-timeout SECONDS' command. The default is 3 seconds.
- You can inspect both values with `show timeout' and `show
- retransmit-timeout'. (These commands are _only_ available when
- GDB is configured for `--target=mips-idt-ecoff'.)
-
- The timeout set by `set timeout' does not apply when GDB is
- waiting for your program to stop. In that case, GDB waits forever
- because it has no way of knowing how long the program is going to
- run before stopping.
-
-
-File: gdb.info, Node: OpenRISC 1000, Next: PA, Prev: MIPS Embedded, Up: Embedded Processors
-
-OpenRISC 1000
--------------
-
-See OR1k Architecture document (`www.opencores.org') for more
-information about platform and commands.
-
-`target jtag jtag://HOST:PORT'
- Connects to remote JTAG server. JTAG remote server can be either
- an or1ksim or JTAG server, connected via parallel port to the
- board.
-
- Example: `target jtag jtag://localhost:9999'
-
-`or1ksim COMMAND'
- If connected to `or1ksim' OpenRISC 1000 Architectural Simulator,
- proprietary commands can be executed.
-
-`info or1k spr'
- Displays spr groups.
-
-`info or1k spr GROUP'
-`info or1k spr GROUPNO'
- Displays register names in selected group.
-
-`info or1k spr GROUP REGISTER'
-`info or1k spr REGISTER'
-`info or1k spr GROUPNO REGISTERNO'
-`info or1k spr REGISTERNO'
- Shows information about specified spr register.
-
-`spr GROUP REGISTER VALUE'
-`spr REGISTER VALUE'
-`spr GROUPNO REGISTERNO VALUE'
-`spr REGISTERNO VALUE'
- Writes VALUE to specified spr register.
-
- Some implementations of OpenRISC 1000 Architecture also have
-hardware trace. It is very similar to GDB trace, except it does not
-interfere with normal program execution and is thus much faster.
-Hardware breakpoints/watchpoint triggers can be set using:
-`$LEA/$LDATA'
- Load effective address/data
-
-`$SEA/$SDATA'
- Store effective address/data
-
-`$AEA/$ADATA'
- Access effective address ($SEA or $LEA) or data ($SDATA/$LDATA)
-
-`$FETCH'
- Fetch data
-
- When triggered, it can capture low level data, like: `PC', `LSEA',
-`LDATA', `SDATA', `READSPR', `WRITESPR', `INSTR'.
-
- `htrace' commands:
-`hwatch CONDITIONAL'
- Set hardware watchpoint on combination of Load/Store Effecive
- Address(es) or Data. For example:
-
- `hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) &&
- ($SDATA >= 50)'
-
- `hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) &&
- ($SDATA >= 50)'
-
-`htrace info'
- Display information about current HW trace configuration.
-
-`htrace trigger CONDITIONAL'
- Set starting criteria for HW trace.
-
-`htrace qualifier CONDITIONAL'
- Set acquisition qualifier for HW trace.
-
-`htrace stop CONDITIONAL'
- Set HW trace stopping criteria.
-
-`htrace record [DATA]*'
- Selects the data to be recorded, when qualifier is met and HW
- trace was triggered.
-
-`htrace enable'
-`htrace disable'
- Enables/disables the HW trace.
-
-`htrace rewind [FILENAME]'
- Clears currently recorded trace data.
-
- If filename is specified, new trace file is made and any newly
- collected data will be written there.
-
-`htrace print [START [LEN]]'
- Prints trace buffer, using current record configuration.
-
-`htrace mode continuous'
- Set continuous trace mode.
-
-`htrace mode suspend'
- Set suspend trace mode.
-
-
-
-File: gdb.info, Node: PowerPC, Next: SH, Prev: PA, Up: Embedded Processors
-
-PowerPC
--------
-
-`target dink32 DEV'
- DINK32 ROM monitor.
-
-`target ppcbug DEV'
-
-`target ppcbug1 DEV'
- PPCBUG ROM monitor for PowerPC.
-
-`target sds DEV'
- SDS monitor, running on a PowerPC board (such as Motorola's ADS).
-
-
-
-File: gdb.info, Node: PA, Next: PowerPC, Prev: OpenRISC 1000, Up: Embedded Processors
-
-HP PA Embedded
---------------
-
-`target op50n DEV'
- OP50N monitor, running on an OKI HPPA board.
-
-`target w89k DEV'
- W89K monitor, running on a Winbond HPPA board.
-
-
-
-File: gdb.info, Node: SH, Next: Sparclet, Prev: PowerPC, Up: Embedded Processors
-
-Renesas SH
-----------
-
-`target hms DEV'
- A Renesas SH board attached via serial line to your host. Use
- special commands `device' and `speed' to control the serial line
- and the communications speed used.
-
-`target e7000 DEV'
- E7000 emulator for Renesas SH.
-
-`target sh3 DEV'
-
-`target sh3e DEV'
- Renesas SH-3 and SH-3E target systems.
-
-
-
-File: gdb.info, Node: Sparclet, Next: Sparclite, Prev: SH, Up: Embedded Processors
-
-Tsqware Sparclet
-----------------
-
-GDB enables developers to debug tasks running on Sparclet targets from
-a Unix host. GDB uses code that runs on both the Unix host and on the
-Sparclet target. The program `gdb' is installed and executed on the
-Unix host.
-
-`remotetimeout ARGS'
- GDB supports the option `remotetimeout'. This option is set by
- the user, and ARGS represents the number of seconds GDB waits for
- responses.
-
- When compiling for debugging, include the options `-g' to get debug
-information and `-Ttext' to relocate the program to where you wish to
-load it on the target. You may also want to add the options `-n' or
-`-N' in order to reduce the size of the sections. Example:
-
- sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N
-
- You can use `objdump' to verify that the addresses are what you
-intended:
-
- sparclet-aout-objdump --headers --syms prog
-
- Once you have set your Unix execution search path to find GDB, you
-are ready to run GDB. From your Unix host, run `gdb' (or
-`sparclet-aout-gdb', depending on your installation).
-
- GDB comes up showing the prompt:
-
- (gdbslet)
-
-* Menu:
-
-* Sparclet File:: Setting the file to debug
-* Sparclet Connection:: Connecting to Sparclet
-* Sparclet Download:: Sparclet download
-* Sparclet Execution:: Running and debugging
-
-
-File: gdb.info, Node: Sparclet File, Next: Sparclet Connection, Up: Sparclet
-
-Setting file to debug
-.....................
-
-The GDB command `file' lets you choose with program to debug.
-
- (gdbslet) file prog
-
- GDB then attempts to read the symbol table of `prog'. GDB locates
-the file by searching the directories listed in the command search path.
-If the file was compiled with debug information (option "-g"), source
-files will be searched as well. GDB locates the source files by
-searching the directories listed in the directory search path (*note
-Your program's environment: Environment.). If it fails to find a file,
-it displays a message such as:
-
- prog: No such file or directory.
-
- When this happens, add the appropriate directories to the search
-paths with the GDB commands `path' and `dir', and execute the `target'
-command again.
-
-
-File: gdb.info, Node: Sparclet Connection, Next: Sparclet Download, Prev: Sparclet File, Up: Sparclet
-
-Connecting to Sparclet
-......................
-
-The GDB command `target' lets you connect to a Sparclet target. To
-connect to a target on serial port "`ttya'", type:
-
- (gdbslet) target sparclet /dev/ttya
- Remote target sparclet connected to /dev/ttya
- main () at ../prog.c:3
-
- GDB displays messages like these:
-
- Connected to ttya.
-
-
-File: gdb.info, Node: Sparclet Download, Next: Sparclet Execution, Prev: Sparclet Connection, Up: Sparclet
-
-Sparclet download
-.................
-
-Once connected to the Sparclet target, you can use the GDB `load'
-command to download the file from the host to the target. The file
-name and load offset should be given as arguments to the `load' command.
-Since the file format is aout, the program must be loaded to the
-starting address. You can use `objdump' to find out what this value
-is. The load offset is an offset which is added to the VMA (virtual
-memory address) of each of the file's sections. For instance, if the
-program `prog' was linked to text address 0x1201000, with data at
-0x12010160 and bss at 0x12010170, in GDB, type:
-
- (gdbslet) load prog 0x12010000
- Loading section .text, size 0xdb0 vma 0x12010000
-
- If the code is loaded at a different address then what the program
-was linked to, you may need to use the `section' and `add-symbol-file'
-commands to tell GDB where to map the symbol table.
-
-
-File: gdb.info, Node: Sparclet Execution, Prev: Sparclet Download, Up: Sparclet
-
-Running and debugging
-.....................
-
-You can now begin debugging the task using GDB's execution control
-commands, `b', `step', `run', etc. See the GDB manual for the list of
-commands.
-
- (gdbslet) b main
- Breakpoint 1 at 0x12010000: file prog.c, line 3.
- (gdbslet) run
- Starting program: prog
- Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3
- 3 char *symarg = 0;
- (gdbslet) step
- 4 char *execarg = "hello!";
- (gdbslet)
-
-
-File: gdb.info, Node: Sparclite, Next: ST2000, Prev: Sparclet, Up: Embedded Processors
-
-Fujitsu Sparclite
------------------
-
-`target sparclite DEV'
- Fujitsu sparclite boards, used only for the purpose of loading.
- You must use an additional command to debug the program. For
- example: target remote DEV using GDB standard remote protocol.
-
-
-
-File: gdb.info, Node: ST2000, Next: Z8000, Prev: Sparclite, Up: Embedded Processors
-
-Tandem ST2000
--------------
-
-GDB may be used with a Tandem ST2000 phone switch, running Tandem's
-STDBUG protocol.
-
- To connect your ST2000 to the host system, see the manufacturer's
-manual. Once the ST2000 is physically attached, you can run:
-
- target st2000 DEV SPEED
-
-to establish it as your debugging environment. DEV is normally the
-name of a serial device, such as `/dev/ttya', connected to the ST2000
-via a serial line. You can instead specify DEV as a TCP connection
-(for example, to a serial line attached via a terminal concentrator)
-using the syntax `HOSTNAME:PORTNUMBER'.
-
- The `load' and `attach' commands are _not_ defined for this target;
-you must load your program into the ST2000 as you normally would for
-standalone operation. GDB reads debugging information (such as
-symbols) from a separate, debugging version of the program available on
-your host computer.
-
- These auxiliary GDB commands are available to help you with the
-ST2000 environment:
-
-`st2000 COMMAND'
- Send a COMMAND to the STDBUG monitor. See the manufacturer's
- manual for available commands.
-
-`connect'
- Connect the controlling terminal to the STDBUG command monitor.
- When you are done interacting with STDBUG, typing either of two
- character sequences gets you back to the GDB command prompt:
- `<RET>~.' (Return, followed by tilde and period) or `<RET>~<C-d>'
- (Return, followed by tilde and control-D).
-
-
-File: gdb.info, Node: Z8000, Prev: ST2000, Up: Embedded Processors
-
-Zilog Z8000
------------
-
-When configured for debugging Zilog Z8000 targets, GDB includes a Z8000
-simulator.
-
- For the Z8000 family, `target sim' simulates either the Z8002 (the
-unsegmented variant of the Z8000 architecture) or the Z8001 (the
-segmented variant). The simulator recognizes which architecture is
-appropriate by inspecting the object code.
-
-`target sim ARGS'
- Debug programs on a simulated CPU. If the simulator supports setup
- options, specify them via ARGS.
-
-After specifying this target, you can debug programs for the simulated
-CPU in the same style as programs for your host computer; use the
-`file' command to load a new program image, the `run' command to run
-your program, and so on.
-
- As well as making available all the usual machine registers (*note
-Registers: Registers.), the Z8000 simulator provides three additional
-items of information as specially named registers:
-
-`cycles'
- Counts clock-ticks in the simulator.
-
-`insts'
- Counts instructions run in the simulator.
-
-`time'
- Execution time in 60ths of a second.
-
-
- You can refer to these values in GDB expressions with the usual
-conventions; for example, `b fputc if $cycles>5000' sets a conditional
-breakpoint that suspends only after at least 5000 simulated clock ticks.
-
-
-File: gdb.info, Node: Architectures, Prev: Embedded Processors, Up: Configurations
-
-Architectures
-=============
-
-This section describes characteristics of architectures that affect all
-uses of GDB with the architecture, both native and cross.
-
-* Menu:
-
-* A29K::
-* Alpha::
-* MIPS::
-
-
-File: gdb.info, Node: A29K, Next: Alpha, Up: Architectures
-
-A29K
-----
-
-`set rstack_high_address ADDRESS'
- On AMD 29000 family processors, registers are saved in a separate
- "register stack". There is no way for GDB to determine the extent
- of this stack. Normally, GDB just assumes that the stack is
- "large enough". This may result in GDB referencing memory
- locations that do not exist. If necessary, you can get around
- this problem by specifying the ending address of the register
- stack with the `set rstack_high_address' command. The argument
- should be an address, which you probably want to precede with `0x'
- to specify in hexadecimal.
-
-`show rstack_high_address'
- Display the current limit of the register stack, on AMD 29000
- family processors.
-
-
-
-File: gdb.info, Node: Alpha, Next: MIPS, Prev: A29K, Up: Architectures
-
-Alpha
------
-
-See the following section.
-
-
-File: gdb.info, Node: MIPS, Prev: Alpha, Up: Architectures
-
-MIPS
-----
-
-Alpha- and MIPS-based computers use an unusual stack frame, which
-sometimes requires GDB to search backward in the object code to find
-the beginning of a function.
-
- To improve response time (especially for embedded applications, where
-GDB may be restricted to a slow serial line for this search) you may
-want to limit the size of this search, using one of these commands:
-
-`set heuristic-fence-post LIMIT'
- Restrict GDB to examining at most LIMIT bytes in its search for
- the beginning of a function. A value of 0 (the default) means
- there is no limit. However, except for 0, the larger the limit
- the more bytes `heuristic-fence-post' must search and therefore
- the longer it takes to run.
-
-`show heuristic-fence-post'
- Display the current limit.
-
-These commands are available _only_ when GDB is configured for
-debugging programs on Alpha or MIPS processors.
-
-
-File: gdb.info, Node: Controlling GDB, Next: Sequences, Prev: Configurations, Up: Top
-
-Controlling GDB
-***************
-
-You can alter the way GDB interacts with you by using the `set'
-command. For commands controlling how GDB displays data, see *Note
-Print settings: Print Settings. Other settings are described here.
-
-* Menu:
-
-* Prompt:: Prompt
-* Editing:: Command editing
-* History:: Command history
-* Screen Size:: Screen size
-* Numbers:: Numbers
-* ABI:: Configuring the current ABI
-* Messages/Warnings:: Optional warnings and messages
-* Debugging Output:: Optional messages about internal happenings
-
-
-File: gdb.info, Node: Prompt, Next: Editing, Up: Controlling GDB
-
-Prompt
-======
-
-GDB indicates its readiness to read a command by printing a string
-called the "prompt". This string is normally `(gdb)'. You can change
-the prompt string with the `set prompt' command. For instance, when
-debugging GDB with GDB, it is useful to change the prompt in one of the
-GDB sessions so that you can always tell which one you are talking to.
-
- _Note:_ `set prompt' does not add a space for you after the prompt
-you set. This allows you to set a prompt which ends in a space or a
-prompt that does not.
-
-`set prompt NEWPROMPT'
- Directs GDB to use NEWPROMPT as its prompt string henceforth.
-
-`show prompt'
- Prints a line of the form: `Gdb's prompt is: YOUR-PROMPT'
-
-
-File: gdb.info, Node: Editing, Next: History, Prev: Prompt, Up: Controlling GDB
-
-Command editing
-===============
-
-GDB reads its input commands via the "readline" interface. This GNU
-library provides consistent behavior for programs which provide a
-command line interface to the user. Advantages are GNU Emacs-style or
-"vi"-style inline editing of commands, `csh'-like history substitution,
-and a storage and recall of command history across debugging sessions.
-
- You may control the behavior of command line editing in GDB with the
-command `set'.
-
-`set editing'
-`set editing on'
- Enable command line editing (enabled by default).
-
-`set editing off'
- Disable command line editing.
-
-`show editing'
- Show whether command line editing is enabled.
-
-
-File: gdb.info, Node: History, Next: Screen Size, Prev: Editing, Up: Controlling GDB
-
-Command history
-===============
-
-GDB can keep track of the commands you type during your debugging
-sessions, so that you can be certain of precisely what happened. Use
-these commands to manage the GDB command history facility.
-
-`set history filename FNAME'
- Set the name of the GDB command history file to FNAME. This is
- the file where GDB reads an initial command history list, and
- where it writes the command history from this session when it
- exits. You can access this list through history expansion or
- through the history command editing characters listed below. This
- file defaults to the value of the environment variable
- `GDBHISTFILE', or to `./.gdb_history' (`./_gdb_history' on MS-DOS)
- if this variable is not set.
-
-`set history save'
-`set history save on'
- Record command history in a file, whose name may be specified with
- the `set history filename' command. By default, this option is
- disabled.
-
-`set history save off'
- Stop recording command history in a file.
-
-`set history size SIZE'
- Set the number of commands which GDB keeps in its history list.
- This defaults to the value of the environment variable `HISTSIZE',
- or to 256 if this variable is not set.
-
- History expansion assigns special meaning to the character `!'.
-
- Since `!' is also the logical not operator in C, history expansion
-is off by default. If you decide to enable history expansion with the
-`set history expansion on' command, you may sometimes need to follow
-`!' (when it is used as logical not, in an expression) with a space or
-a tab to prevent it from being expanded. The readline history
-facilities do not attempt substitution on the strings `!=' and `!(',
-even when history expansion is enabled.
-
- The commands to control history expansion are:
-
-`set history expansion on'
-`set history expansion'
- Enable history expansion. History expansion is off by default.
-
-`set history expansion off'
- Disable history expansion.
-
- The readline code comes with more complete documentation of
- editing and history expansion features. Users unfamiliar with GNU
- Emacs or `vi' may wish to read it.
-
-`show history'
-`show history filename'
-`show history save'
-`show history size'
-`show history expansion'
- These commands display the state of the GDB history parameters.
- `show history' by itself displays all four states.
-
-`show commands'
- Display the last ten commands in the command history.
-
-`show commands N'
- Print ten commands centered on command number N.
-
-`show commands +'
- Print ten commands just after the commands last printed.
-
-
-File: gdb.info, Node: Screen Size, Next: Numbers, Prev: History, Up: Controlling GDB
-
-Screen size
-===========
-
-Certain commands to GDB may produce large amounts of information output
-to the screen. To help you read all of it, GDB pauses and asks you for
-input at the end of each page of output. Type <RET> when you want to
-continue the output, or `q' to discard the remaining output. Also, the
-screen width setting determines when to wrap lines of output.
-Depending on what is being printed, GDB tries to break the line at a
-readable place, rather than simply letting it overflow onto the
-following line.
-
- Normally GDB knows the size of the screen from the terminal driver
-software. For example, on Unix GDB uses the termcap data base together
-with the value of the `TERM' environment variable and the `stty rows'
-and `stty cols' settings. If this is not correct, you can override it
-with the `set height' and `set width' commands:
-
-`set height LPP'
-`show height'
-`set width CPL'
-`show width'
- These `set' commands specify a screen height of LPP lines and a
- screen width of CPL characters. The associated `show' commands
- display the current settings.
-
- If you specify a height of zero lines, GDB does not pause during
- output no matter how long the output is. This is useful if output
- is to a file or to an editor buffer.
-
- Likewise, you can specify `set width 0' to prevent GDB from
- wrapping its output.
-
-
-File: gdb.info, Node: Numbers, Next: ABI, Prev: Screen Size, Up: Controlling GDB
-
-Numbers
-=======
-
-You can always enter numbers in octal, decimal, or hexadecimal in GDB
-by the usual conventions: octal numbers begin with `0', decimal numbers
-end with `.', and hexadecimal numbers begin with `0x'. Numbers that
-begin with none of these are, by default, entered in base 10; likewise,
-the default display for numbers--when no particular format is
-specified--is base 10. You can change the default base for both input
-and output with the `set radix' command.
-
-`set input-radix BASE'
- Set the default base for numeric input. Supported choices for
- BASE are decimal 8, 10, or 16. BASE must itself be specified
- either unambiguously or using the current default radix; for
- example, any of
-
- set radix 012
- set radix 10.
- set radix 0xa
-
- sets the base to decimal. On the other hand, `set radix 10'
- leaves the radix unchanged no matter what it was.
-
-`set output-radix BASE'
- Set the default base for numeric display. Supported choices for
- BASE are decimal 8, 10, or 16. BASE must itself be specified
- either unambiguously or using the current default radix.
-
-`show input-radix'
- Display the current default base for numeric input.
-
-`show output-radix'
- Display the current default base for numeric display.
-
-
-File: gdb.info, Node: ABI, Next: Messages/Warnings, Prev: Numbers, Up: Controlling GDB
-
-Configuring the current ABI
-===========================
-
-GDB can determine the "ABI" (Application Binary Interface) of your
-application automatically. However, sometimes you need to override its
-conclusions. Use these commands to manage GDB's view of the current
-ABI.
-
- One GDB configuration can debug binaries for multiple operating
-system targets, either via remote debugging or native emulation. GDB
-will autodetect the "OS ABI" (Operating System ABI) in use, but you can
-override its conclusion using the `set osabi' command. One example
-where this is useful is in debugging of binaries which use an alternate
-C library (e.g. UCLIBC for GNU/Linux) which does not have the same
-identifying marks that the standard C library for your platform
-provides.
-
-`show osabi'
- Show the OS ABI currently in use.
-
-`set osabi'
- With no argument, show the list of registered available OS ABI's.
-
-`set osabi ABI'
- Set the current OS ABI to ABI.
-
- Generally, the way that an argument of type `float' is passed to a
-function depends on whether the function is prototyped. For a
-prototyped (i.e. ANSI/ISO style) function, `float' arguments are passed
-unchanged, according to the architecture's convention for `float'. For
-unprototyped (i.e. K&R style) functions, `float' arguments are first
-promoted to type `double' and then passed.
-
- Unfortunately, some forms of debug information do not reliably
-indicate whether a function is prototyped. If GDB calls a function
-that is not marked as prototyped, it consults `set
-coerce-float-to-double'.
-
-`set coerce-float-to-double'
-`set coerce-float-to-double on'
- Arguments of type `float' will be promoted to `double' when passed
- to an unprototyped function. This is the default setting.
-
-`set coerce-float-to-double off'
- Arguments of type `float' will be passed directly to unprototyped
- functions.
-
- GDB needs to know the ABI used for your program's C++ objects. The
-correct C++ ABI depends on which C++ compiler was used to build your
-application. GDB only fully supports programs with a single C++ ABI;
-if your program contains code using multiple C++ ABI's or if GDB can
-not identify your program's ABI correctly, you can tell GDB which ABI
-to use. Currently supported ABI's include "gnu-v2", for `g++' versions
-before 3.0, "gnu-v3", for `g++' versions 3.0 and later, and "hpaCC" for
-the HP ANSI C++ compiler. Other C++ compilers may use the "gnu-v2" or
-"gnu-v3" ABI's as well. The default setting is "auto".
-
-`show cp-abi'
- Show the C++ ABI currently in use.
-
-`set cp-abi'
- With no argument, show the list of supported C++ ABI's.
-
-`set cp-abi ABI'
-`set cp-abi auto'
- Set the current C++ ABI to ABI, or return to automatic detection.
-
-
-File: gdb.info, Node: Messages/Warnings, Next: Debugging Output, Prev: ABI, Up: Controlling GDB
-
-Optional warnings and messages
-==============================
-
-By default, GDB is silent about its inner workings. If you are running
-on a slow machine, you may want to use the `set verbose' command. This
-makes GDB tell you when it does a lengthy internal operation, so you
-will not think it has crashed.
-
- Currently, the messages controlled by `set verbose' are those which
-announce that the symbol table for a source file is being read; see
-`symbol-file' in *Note Commands to specify files: Files.
-
-`set verbose on'
- Enables GDB output of certain informational messages.
-
-`set verbose off'
- Disables GDB output of certain informational messages.
-
-`show verbose'
- Displays whether `set verbose' is on or off.
-
- By default, if GDB encounters bugs in the symbol table of an object
-file, it is silent; but if you are debugging a compiler, you may find
-this information useful (*note Errors reading symbol files: Symbol
-Errors.).
-
-`set complaints LIMIT'
- Permits GDB to output LIMIT complaints about each type of unusual
- symbols before becoming silent about the problem. Set LIMIT to
- zero to suppress all complaints; set it to a large number to
- prevent complaints from being suppressed.
-
-`show complaints'
- Displays how many symbol complaints GDB is permitted to produce.
-
-
- By default, GDB is cautious, and asks what sometimes seems to be a
-lot of stupid questions to confirm certain commands. For example, if
-you try to run a program which is already running:
-
- (gdb) run
- The program being debugged has been started already.
- Start it from the beginning? (y or n)
-
- If you are willing to unflinchingly face the consequences of your own
-commands, you can disable this "feature":
-
-`set confirm off'
- Disables confirmation requests.
-
-`set confirm on'
- Enables confirmation requests (the default).
-
-`show confirm'
- Displays state of confirmation requests.
-
-
-
-File: gdb.info, Node: Debugging Output, Prev: Messages/Warnings, Up: Controlling GDB
-
-Optional messages about internal happenings
-===========================================
-
-`set debug arch'
- Turns on or off display of gdbarch debugging info. The default is
- off
-
-`show debug arch'
- Displays the current state of displaying gdbarch debugging info.
-
-`set debug event'
- Turns on or off display of GDB event debugging info. The default
- is off.
-
-`show debug event'
- Displays the current state of displaying GDB event debugging info.
-
-`set debug expression'
- Turns on or off display of GDB expression debugging info. The
- default is off.
-
-`show debug expression'
- Displays the current state of displaying GDB expression debugging
- info.
-
-`set debug frame'
- Turns on or off display of GDB frame debugging info. The default
- is off.
-
-`show debug frame'
- Displays the current state of displaying GDB frame debugging info.
-
-`set debug overload'
- Turns on or off display of GDB C++ overload debugging info. This
- includes info such as ranking of functions, etc. The default is
- off.
-
-`show debug overload'
- Displays the current state of displaying GDB C++ overload
- debugging info.
-
-`set debug remote'
- Turns on or off display of reports on all packets sent back and
- forth across the serial line to the remote machine. The info is
- printed on the GDB standard output stream. The default is off.
-
-`show debug remote'
- Displays the state of display of remote packets.
-
-`set debug serial'
- Turns on or off display of GDB serial debugging info. The default
- is off.
-
-`show debug serial'
- Displays the current state of displaying GDB serial debugging info.
-
-`set debug target'
- Turns on or off display of GDB target debugging info. This info
- includes what is going on at the target level of GDB, as it
- happens. The default is off.
-
-`show debug target'
- Displays the current state of displaying GDB target debugging info.
-
-`set debug varobj'
- Turns on or off display of GDB variable object debugging info. The
- default is off.
-
-`show debug varobj'
- Displays the current state of displaying GDB variable object
- debugging info.
-
-
-File: gdb.info, Node: Sequences, Next: TUI, Prev: Controlling GDB, Up: Top
-
-Canned Sequences of Commands
-****************************
-
-Aside from breakpoint commands (*note Breakpoint command lists: Break
-Commands.), GDB provides two ways to store sequences of commands for
-execution as a unit: user-defined commands and command files.
-
-* Menu:
-
-* Define:: User-defined commands
-* Hooks:: User-defined command hooks
-* Command Files:: Command files
-* Output:: Commands for controlled output
-
-
-File: gdb.info, Node: Define, Next: Hooks, Up: Sequences
-
-User-defined commands
-=====================
-
-A "user-defined command" is a sequence of GDB commands to which you
-assign a new name as a command. This is done with the `define'
-command. User commands may accept up to 10 arguments separated by
-whitespace. Arguments are accessed within the user command via
-$ARG0...$ARG9. A trivial example:
-
- define adder
- print $arg0 + $arg1 + $arg2
-
-To execute the command use:
-
- adder 1 2 3
-
-This defines the command `adder', which prints the sum of its three
-arguments. Note the arguments are text substitutions, so they may
-reference variables, use complex expressions, or even perform inferior
-functions calls.
-
-`define COMMANDNAME'
- Define a command named COMMANDNAME. If there is already a command
- by that name, you are asked to confirm that you want to redefine
- it.
-
- The definition of the command is made up of other GDB command
- lines, which are given following the `define' command. The end of
- these commands is marked by a line containing `end'.
-
-`if'
- Takes a single argument, which is an expression to evaluate. It
- is followed by a series of commands that are executed only if the
- expression is true (nonzero). There can then optionally be a line
- `else', followed by a series of commands that are only executed if
- the expression was false. The end of the list is marked by a line
- containing `end'.
-
-`while'
- The syntax is similar to `if': the command takes a single argument,
- which is an expression to evaluate, and must be followed by the
- commands to execute, one per line, terminated by an `end'. The
- commands are executed repeatedly as long as the expression
- evaluates to true.
-
-`document COMMANDNAME'
- Document the user-defined command COMMANDNAME, so that it can be
- accessed by `help'. The command COMMANDNAME must already be
- defined. This command reads lines of documentation just as
- `define' reads the lines of the command definition, ending with
- `end'. After the `document' command is finished, `help' on command
- COMMANDNAME displays the documentation you have written.
-
- You may use the `document' command again to change the
- documentation of a command. Redefining the command with `define'
- does not change the documentation.
-
-`help user-defined'
- List all user-defined commands, with the first line of the
- documentation (if any) for each.
-
-`show user'
-`show user COMMANDNAME'
- Display the GDB commands used to define COMMANDNAME (but not its
- documentation). If no COMMANDNAME is given, display the
- definitions for all user-defined commands.
-
-`show max-user-call-depth'
-`set max-user-call-depth'
- The value of `max-user-call-depth' controls how many recursion
- levels are allowed in user-defined commands before GDB suspects an
- infinite recursion and aborts the command.
-
-
- When user-defined commands are executed, the commands of the
-definition are not printed. An error in any command stops execution of
-the user-defined command.
-
- If used interactively, commands that would ask for confirmation
-proceed without asking when used inside a user-defined command. Many
-GDB commands that normally print messages to say what they are doing
-omit the messages when used in a user-defined command.
-
-
-File: gdb.info, Node: Hooks, Next: Command Files, Prev: Define, Up: Sequences
-
-User-defined command hooks
-==========================
-
-You may define "hooks", which are a special kind of user-defined
-command. Whenever you run the command `foo', if the user-defined
-command `hook-foo' exists, it is executed (with no arguments) before
-that command.
-
- A hook may also be defined which is run after the command you
-executed. Whenever you run the command `foo', if the user-defined
-command `hookpost-foo' exists, it is executed (with no arguments) after
-that command. Post-execution hooks may exist simultaneously with
-pre-execution hooks, for the same command.
-
- It is valid for a hook to call the command which it hooks. If this
-occurs, the hook is not re-executed, thereby avoiding infinte recursion.
-
- In addition, a pseudo-command, `stop' exists. Defining
-(`hook-stop') makes the associated commands execute every time
-execution stops in your program: before breakpoint commands are run,
-displays are printed, or the stack frame is printed.
-
- For example, to ignore `SIGALRM' signals while single-stepping, but
-treat them normally during normal execution, you could define:
-
- define hook-stop
- handle SIGALRM nopass
- end
-
- define hook-run
- handle SIGALRM pass
- end
-
- define hook-continue
- handle SIGLARM pass
- end
-
- As a further example, to hook at the begining and end of the `echo'
-command, and to add extra text to the beginning and end of the message,
-you could define:
-
- define hook-echo
- echo <<<---
- end
-
- define hookpost-echo
- echo --->>>\n
- end
-
- (gdb) echo Hello World
- <<<---Hello World--->>>
- (gdb)
-
- You can define a hook for any single-word command in GDB, but not
-for command aliases; you should define a hook for the basic command
-name, e.g. `backtrace' rather than `bt'. If an error occurs during
-the execution of your hook, execution of GDB commands stops and GDB
-issues a prompt (before the command that you actually typed had a
-chance to run).
-
- If you try to define a hook which does not match any known command,
-you get a warning from the `define' command.
-
-
-File: gdb.info, Node: Command Files, Next: Output, Prev: Hooks, Up: Sequences
-
-Command files
-=============
-
-A command file for GDB is a file of lines that are GDB commands.
-Comments (lines starting with `#') may also be included. An empty line
-in a command file does nothing; it does not mean to repeat the last
-command, as it would from the terminal.
-
- When you start GDB, it automatically executes commands from its
-"init files", normally called `.gdbinit'(1). During startup, GDB does
-the following:
-
- 1. Reads the init file (if any) in your home directory(2).
-
- 2. Processes command line options and operands.
-
- 3. Reads the init file (if any) in the current working directory.
-
- 4. Reads command files specified by the `-x' option.
-
- The init file in your home directory can set options (such as `set
-complaints') that affect subsequent processing of command line options
-and operands. Init files are not executed if you use the `-nx' option
-(*note Choosing modes: Mode Options.).
-
- On some configurations of GDB, the init file is known by a different
-name (these are typically environments where a specialized form of GDB
-may need to coexist with other forms, hence a different name for the
-specialized version's init file). These are the environments with
-special init file names:
-
- * VxWorks (Wind River Systems real-time OS): `.vxgdbinit'
-
- * OS68K (Enea Data Systems real-time OS): `.os68gdbinit'
-
- * ES-1800 (Ericsson Telecom AB M68000 emulator): `.esgdbinit'
-
- You can also request the execution of a command file with the
-`source' command:
-
-`source FILENAME'
- Execute the command file FILENAME.
-
- The lines in a command file are executed sequentially. They are not
-printed as they are executed. An error in any command terminates
-execution of the command file and control is returned to the console.
-
- Commands that would ask for confirmation if used interactively
-proceed without asking when used in a command file. Many GDB commands
-that normally print messages to say what they are doing omit the
-messages when called from command files.
-
- GDB also accepts command input from standard input. In this mode,
-normal output goes to standard output and error output goes to standard
-error. Errors in a command file supplied on standard input do not
-terminate execution of the command file -- execution continues with the
-next command.
-
- gdb < cmds > log 2>&1
-
- (The syntax above will vary depending on the shell used.) This
-example will execute commands from the file `cmds'. All output and
-errors would be directed to `log'.
-
- ---------- Footnotes ----------
-
- (1) The DJGPP port of GDB uses the name `gdb.ini' instead, due to the
-limitations of file names imposed by DOS filesystems.
-
- (2) On DOS/Windows systems, the home directory is the one pointed to
-by the `HOME' environment variable.
-
-
-File: gdb.info, Node: Output, Prev: Command Files, Up: Sequences
-
-Commands for controlled output
-==============================
-
-During the execution of a command file or a user-defined command, normal
-GDB output is suppressed; the only output that appears is what is
-explicitly printed by the commands in the definition. This section
-describes three commands useful for generating exactly the output you
-want.
-
-`echo TEXT'
- Print TEXT. Nonprinting characters can be included in TEXT using
- C escape sequences, such as `\n' to print a newline. *No newline
- is printed unless you specify one.* In addition to the standard C
- escape sequences, a backslash followed by a space stands for a
- space. This is useful for displaying a string with spaces at the
- beginning or the end, since leading and trailing spaces are
- otherwise trimmed from all arguments. To print ` and foo = ', use
- the command `echo \ and foo = \ '.
-
- A backslash at the end of TEXT can be used, as in C, to continue
- the command onto subsequent lines. For example,
-
- echo This is some text\n\
- which is continued\n\
- onto several lines.\n
-
- produces the same output as
-
- echo This is some text\n
- echo which is continued\n
- echo onto several lines.\n
-
-`output EXPRESSION'
- Print the value of EXPRESSION and nothing but that value: no
- newlines, no `$NN = '. The value is not entered in the value
- history either. *Note Expressions: Expressions, for more
- information on expressions.
-
-`output/FMT EXPRESSION'
- Print the value of EXPRESSION in format FMT. You can use the same
- formats as for `print'. *Note Output formats: Output Formats, for
- more information.
-
-`printf STRING, EXPRESSIONS...'
- Print the values of the EXPRESSIONS under the control of STRING.
- The EXPRESSIONS are separated by commas and may be either numbers
- or pointers. Their values are printed as specified by STRING,
- exactly as if your program were to execute the C subroutine
-
- printf (STRING, EXPRESSIONS...);
-
- For example, you can print two values in hex like this:
-
- printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo
-
- The only backslash-escape sequences that you can use in the format
- string are the simple ones that consist of backslash followed by a
- letter.
-
-
-File: gdb.info, Node: Interpreters, Next: Emacs, Prev: TUI, Up: Top
-
-Command Interpreters
-********************
-
-GDB supports multiple command interpreters, and some command
-infrastructure to allow users or user interface writers to switch
-between interpreters or run commands in other interpreters.
-
- GDB currently supports two command interpreters, the console
-interpreter (sometimes called the command-line interpreter or CLI) and
-the machine interface interpreter (or GDB/MI). This manual describes
-both of these interfaces in great detail.
-
- By default, GDB will start with the console interpreter. However,
-the user may choose to start GDB with another interpreter by specifying
-the `-i' or `--interpreter' startup options. Defined interpreters
-include:
-
-`console'
- The traditional console or command-line interpreter. This is the
- most often used interpreter with GDB. With no interpreter
- specified at runtime, GDB will use this interpreter.
-
-`mi'
- The newest GDB/MI interface (currently `mi2'). Used primarily by
- programs wishing to use GDB as a backend for a debugger GUI or an
- IDE. For more information, see *Note The GDB/MI Interface: GDB/MI.
-
-`mi2'
- The current GDB/MI interface.
-
-`mi1'
- The GDB/MI interface included in GDB 5.1, 5.2, and 5.3.
-
-
- The interpreter being used by GDB may not be dynamically switched at
-runtime. Although possible, this could lead to a very precarious
-situation. Consider an IDE using GDB/MI. If a user enters the command
-"interpreter-set console" in a console view, GDB would switch to using
-the console interpreter, rendering the IDE inoperable!
-
- Although you may only choose a single interpreter at startup, you
-may execute commands in any interpreter from the current interpreter
-using the appropriate command. If you are running the console
-interpreter, simply use the `interpreter-exec' command:
-
- interpreter-exec mi "-data-list-register-names"
-
- GDB/MI has a similar command, although it is only available in
-versions of GDB which support GDB/MI version 2 (or greater).
-
-
-File: gdb.info, Node: TUI, Next: Interpreters, Prev: Sequences, Up: Top
-
-GDB Text User Interface
-***********************
-
-* Menu:
-
-* TUI Overview:: TUI overview
-* TUI Keys:: TUI key bindings
-* TUI Single Key Mode:: TUI single key mode
-* TUI Commands:: TUI specific commands
-* TUI Configuration:: TUI configuration variables
-
- The GDB Text User Interface, TUI in short, is a terminal interface
-which uses the `curses' library to show the source file, the assembly
-output, the program registers and GDB commands in separate text windows.
-
- The TUI is enabled by invoking GDB using either `gdbtui' or `gdb
--tui'.
-
-
-File: gdb.info, Node: TUI Overview, Next: TUI Keys, Up: TUI
-
-TUI overview
-============
-
-The TUI has two display modes that can be switched while GDB runs:
-
- * A curses (or TUI) mode in which it displays several text windows
- on the terminal.
-
- * A standard mode which corresponds to the GDB configured without
- the TUI.
-
- In the TUI mode, GDB can display several text window on the terminal:
-
-_command_
- This window is the GDB command window with the GDB prompt and the
- GDB outputs. The GDB input is still managed using readline but
- through the TUI. The _command_ window is always visible.
-
-_source_
- The source window shows the source file of the program. The
- current line as well as active breakpoints are displayed in this
- window.
-
-_assembly_
- The assembly window shows the disassembly output of the program.
-
-_register_
- This window shows the processor registers. It detects when a
- register is changed and when this is the case, registers that have
- changed are highlighted.
-
-
- The source and assembly windows show the current program position by
-highlighting the current line and marking them with the `>' marker.
-Breakpoints are also indicated with two markers. A first one indicates
-the breakpoint type:
-
-`B'
- Breakpoint which was hit at least once.
-
-`b'
- Breakpoint which was never hit.
-
-`H'
- Hardware breakpoint which was hit at least once.
-
-`h'
- Hardware breakpoint which was never hit.
-
-
- The second marker indicates whether the breakpoint is enabled or not:
-
-`+'
- Breakpoint is enabled.
-
-`-'
- Breakpoint is disabled.
-
-
- The source, assembly and register windows are attached to the thread
-and the frame position. They are updated when the current thread
-changes, when the frame changes or when the program counter changes.
-These three windows are arranged by the TUI according to several
-layouts. The layout defines which of these three windows are visible.
-The following layouts are available:
-
- * source
-
- * assembly
-
- * source and assembly
-
- * source and registers
-
- * assembly and registers
-
-
- On top of the command window a status line gives various information
-concerning the current process begin debugged. The status line is
-updated when the information it shows changes. The following fields
-are displayed:
-
-_target_
- Indicates the current gdb target (*note Specifying a Debugging
- Target: Targets.).
-
-_process_
- Gives information about the current process or thread number.
- When no process is being debugged, this field is set to `No
- process'.
-
-_function_
- Gives the current function name for the selected frame. The name
- is demangled if demangling is turned on (*note Print Settings::).
- When there is no symbol corresponding to the current program
- counter the string `??' is displayed.
-
-_line_
- Indicates the current line number for the selected frame. When
- the current line number is not known the string `??' is displayed.
-
-_pc_
- Indicates the current program counter address.
-
-
-
-File: gdb.info, Node: TUI Keys, Next: TUI Single Key Mode, Prev: TUI Overview, Up: TUI
-
-TUI Key Bindings
-================
-
-The TUI installs several key bindings in the readline keymaps (*note
-Command Line Editing::). They allow to leave or enter in the TUI mode
-or they operate directly on the TUI layout and windows. The TUI also
-provides a _SingleKey_ keymap which binds several keys directly to GDB
-commands. The following key bindings are installed for both TUI mode
-and the GDB standard mode.
-
-`C-x C-a'
-`C-x a'
-`C-x A'
- Enter or leave the TUI mode. When the TUI mode is left, the
- curses window management is left and GDB operates using its
- standard mode writing on the terminal directly. When the TUI mode
- is entered, the control is given back to the curses windows. The
- screen is then refreshed.
-
-`C-x 1'
- Use a TUI layout with only one window. The layout will either be
- `source' or `assembly'. When the TUI mode is not active, it will
- switch to the TUI mode.
-
- Think of this key binding as the Emacs `C-x 1' binding.
-
-`C-x 2'
- Use a TUI layout with at least two windows. When the current
- layout shows already two windows, a next layout with two windows
- is used. When a new layout is chosen, one window will always be
- common to the previous layout and the new one.
-
- Think of it as the Emacs `C-x 2' binding.
-
-`C-x o'
- Change the active window. The TUI associates several key bindings
- (like scrolling and arrow keys) to the active window. This command
- gives the focus to the next TUI window.
-
- Think of it as the Emacs `C-x o' binding.
-
-`C-x s'
- Use the TUI _SingleKey_ keymap that binds single key to gdb
- commands (*note TUI Single Key Mode::).
-
-
- The following key bindings are handled only by the TUI mode:
-
-<PgUp>
- Scroll the active window one page up.
-
-<PgDn>
- Scroll the active window one page down.
-
-<Up>
- Scroll the active window one line up.
-
-<Down>
- Scroll the active window one line down.
-
-<Left>
- Scroll the active window one column left.
-
-<Right>
- Scroll the active window one column right.
-
-<C-L>
- Refresh the screen.
-
-
- In the TUI mode, the arrow keys are used by the active window for
-scrolling. This means they are available for readline when the active
-window is the command window. When the command window does not have
-the focus, it is necessary to use other readline key bindings such as
-<C-p>, <C-n>, <C-b> and <C-f>.
-
-
-File: gdb.info, Node: TUI Single Key Mode, Next: TUI Commands, Prev: TUI Keys, Up: TUI
-
-TUI Single Key Mode
-===================
-
-The TUI provides a _SingleKey_ mode in which it installs a particular
-key binding in the readline keymaps to connect single keys to some gdb
-commands.
-
-`c'
- continue
-
-`d'
- down
-
-`f'
- finish
-
-`n'
- next
-
-`q'
- exit the _SingleKey_ mode.
-
-`r'
- run
-
-`s'
- step
-
-`u'
- up
-
-`v'
- info locals
-
-`w'
- where
-
-
- Other keys temporarily switch to the GDB command prompt. The key
-that was pressed is inserted in the editing buffer so that it is
-possible to type most GDB commands without interaction with the TUI
-_SingleKey_ mode. Once the command is entered the TUI _SingleKey_ mode
-is restored. The only way to permanently leave this mode is by hitting
-<q> or `<C-x> <s>'.
-
-
-File: gdb.info, Node: TUI Commands, Next: TUI Configuration, Prev: TUI Single Key Mode, Up: TUI
-
-TUI specific commands
-=====================
-
-The TUI has specific commands to control the text windows. These
-commands are always available, that is they do not depend on the
-current terminal mode in which GDB runs. When GDB is in the standard
-mode, using these commands will automatically switch in the TUI mode.
-
-`info win'
- List and give the size of all displayed windows.
-
-`layout next'
- Display the next layout.
-
-`layout prev'
- Display the previous layout.
-
-`layout src'
- Display the source window only.
-
-`layout asm'
- Display the assembly window only.
-
-`layout split'
- Display the source and assembly window.
-
-`layout regs'
- Display the register window together with the source or assembly
- window.
-
-`focus next | prev | src | asm | regs | split'
- Set the focus to the named window. This command allows to change
- the active window so that scrolling keys can be affected to
- another window.
-
-`refresh'
- Refresh the screen. This is similar to using <C-L> key.
-
-`tui reg float'
- Show the floating point registers in the register window.
-
-`tui reg general'
- Show the general registers in the register window.
-
-`tui reg next'
- Show the next register group. The list of register groups as well
- as their order is target specific. The predefined register groups
- are the following: `general', `float', `system', `vector', `all',
- `save', `restore'.
-
-`tui reg system'
- Show the system registers in the register window.
-
-`update'
- Update the source window and the current execution point.
-
-`winheight NAME +COUNT'
-`winheight NAME -COUNT'
- Change the height of the window NAME by COUNT lines. Positive
- counts increase the height, while negative counts decrease it.
-
-
-
-File: gdb.info, Node: TUI Configuration, Prev: TUI Commands, Up: TUI
-
-TUI configuration variables
-===========================
-
-The TUI has several configuration variables that control the appearance
-of windows on the terminal.
-
-`set tui border-kind KIND'
- Select the border appearance for the source, assembly and register
- windows. The possible values are the following:
- `space'
- Use a space character to draw the border.
-
- `ascii'
- Use ascii characters + - and | to draw the border.
-
- `acs'
- Use the Alternate Character Set to draw the border. The
- border is drawn using character line graphics if the terminal
- supports them.
-
-
-`set tui active-border-mode MODE'
- Select the attributes to display the border of the active window.
- The possible values are `normal', `standout', `reverse', `half',
- `half-standout', `bold' and `bold-standout'.
-
-`set tui border-mode MODE'
- Select the attributes to display the border of other windows. The
- MODE can be one of the following:
- `normal'
- Use normal attributes to display the border.
-
- `standout'
- Use standout mode.
-
- `reverse'
- Use reverse video mode.
-
- `half'
- Use half bright mode.
-
- `half-standout'
- Use half bright and standout mode.
-
- `bold'
- Use extra bright or bold mode.
-
- `bold-standout'
- Use extra bright or bold and standout mode.
-
-
-
-
-File: gdb.info, Node: Emacs, Next: Annotations, Prev: Interpreters, Up: Top
-
-Using GDB under GNU Emacs
-*************************
-
-A special interface allows you to use GNU Emacs to view (and edit) the
-source files for the program you are debugging with GDB.
-
- To use this interface, use the command `M-x gdb' in Emacs. Give the
-executable file you want to debug as an argument. This command starts
-GDB as a subprocess of Emacs, with input and output through a newly
-created Emacs buffer.
-
- Using GDB under Emacs is just like using GDB normally except for two
-things:
-
- * All "terminal" input and output goes through the Emacs buffer.
-
- This applies both to GDB commands and their output, and to the input
-and output done by the program you are debugging.
-
- This is useful because it means that you can copy the text of
-previous commands and input them again; you can even use parts of the
-output in this way.
-
- All the facilities of Emacs' Shell mode are available for interacting
-with your program. In particular, you can send signals the usual
-way--for example, `C-c C-c' for an interrupt, `C-c C-z' for a stop.
-
- * GDB displays source code through Emacs.
-
- Each time GDB displays a stack frame, Emacs automatically finds the
-source file for that frame and puts an arrow (`=>') at the left margin
-of the current line. Emacs uses a separate buffer for source display,
-and splits the screen to show both your GDB session and the source.
-
- Explicit GDB `list' or search commands still produce output as
-usual, but you probably have no reason to use them from Emacs.
-
- If you specify an absolute file name when prompted for the `M-x gdb'
-argument, then Emacs sets your current working directory to where your
-program resides. If you only specify the file name, then Emacs sets
-your current working directory to to the directory associated with the
-previous buffer. In this case, GDB may find your program by searching
-your environment's `PATH' variable, but on some operating systems it
-might not find the source. So, although the GDB input and output
-session proceeds normally, the auxiliary buffer does not display the
-current source and line of execution.
-
- The initial working directory of GDB is printed on the top line of
-the GDB I/O buffer and this serves as a default for the commands that
-specify files for GDB to operate on. *Note Commands to specify files:
-Files.
-
- By default, `M-x gdb' calls the program called `gdb'. If you need
-to call GDB by a different name (for example, if you keep several
-configurations around, with different names) you can customize the
-Emacs variable `gud-gdb-command-name' to run the one you want.
-
- In the GDB I/O buffer, you can use these special Emacs commands in
-addition to the standard Shell mode commands:
-
-`C-h m'
- Describe the features of Emacs' GDB Mode.
-
-`C-c C-s'
- Execute to another source line, like the GDB `step' command; also
- update the display window to show the current file and location.
-
-`C-c C-n'
- Execute to next source line in this function, skipping all function
- calls, like the GDB `next' command. Then update the display window
- to show the current file and location.
-
-`C-c C-i'
- Execute one instruction, like the GDB `stepi' command; update
- display window accordingly.
-
-`C-c C-f'
- Execute until exit from the selected stack frame, like the GDB
- `finish' command.
-
-`C-c C-r'
- Continue execution of your program, like the GDB `continue'
- command.
-
-`C-c <'
- Go up the number of frames indicated by the numeric argument
- (*note Numeric Arguments: (Emacs)Arguments.), like the GDB `up'
- command.
-
-`C-c >'
- Go down the number of frames indicated by the numeric argument,
- like the GDB `down' command.
-
- In any source file, the Emacs command `C-x SPC' (`gud-break') tells
-GDB to set a breakpoint on the source line point is on.
-
- If you type `M-x speedbar', then Emacs displays a separate frame
-which shows a backtrace when the GDB I/O buffer is current. Move point
-to any frame in the stack and type <RET> to make it become the current
-frame and display the associated source in the source buffer.
-Alternatively, click `Mouse-2' to make the selected frame become the
-current one.
-
- If you accidentally delete the source-display buffer, an easy way to
-get it back is to type the command `f' in the GDB buffer, to request a
-frame display; when you run under Emacs, this recreates the source
-buffer if necessary to show you the context of the current frame.
-
- The source files displayed in Emacs are in ordinary Emacs buffers
-which are visiting the source files in the usual way. You can edit the
-files with these buffers if you wish; but keep in mind that GDB
-communicates with Emacs in terms of line numbers. If you add or delete
-lines from the text, the line numbers that GDB knows cease to
-correspond properly with the code.
-
- The description given here is for GNU Emacs version 21.3 and a more
-detailed description of its interaction with GDB is given in the Emacs
-manual (*note Debuggers: (Emacs)Debuggers.).
-
-
-File: gdb.info, Node: GDB/MI, Next: GDB Bugs, Prev: Annotations, Up: Top
-
-The GDB/MI Interface
-********************
-
-Function and Purpose
-====================
-
-GDB/MI is a line based machine oriented text interface to GDB. It is
-specifically intended to support the development of systems which use
-the debugger as just one small component of a larger system.
-
- This chapter is a specification of the GDB/MI interface. It is
-written in the form of a reference manual.
-
- Note that GDB/MI is still under construction, so some of the
-features described below are incomplete and subject to change.
-
-Notation and Terminology
-========================
-
-This chapter uses the following notation:
-
- * `|' separates two alternatives.
-
- * `[ SOMETHING ]' indicates that SOMETHING is optional: it may or
- may not be given.
-
- * `( GROUP )*' means that GROUP inside the parentheses may repeat
- zero or more times.
-
- * `( GROUP )+' means that GROUP inside the parentheses may repeat
- one or more times.
-
- * `"STRING"' means a literal STRING.
-
-Acknowledgments
-===============
-
-In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs and
-Elena Zannoni.
-
-* Menu:
-
-* GDB/MI Command Syntax::
-* GDB/MI Compatibility with CLI::
-* GDB/MI Output Records::
-* GDB/MI Command Description Format::
-* GDB/MI Breakpoint Table Commands::
-* GDB/MI Data Manipulation::
-* GDB/MI Program Control::
-* GDB/MI Miscellaneous Commands::
-* GDB/MI Stack Manipulation::
-* GDB/MI Symbol Query::
-* GDB/MI Target Manipulation::
-* GDB/MI Thread Commands::
-* GDB/MI Tracepoint Commands::
-* GDB/MI Variable Objects::
-
-
-File: gdb.info, Node: GDB/MI Command Syntax, Next: GDB/MI Compatibility with CLI, Up: GDB/MI
-
-GDB/MI Command Syntax
-=====================
-
-* Menu:
-
-* GDB/MI Input Syntax::
-* GDB/MI Output Syntax::
-* GDB/MI Simple Examples::
-
-
-File: gdb.info, Node: GDB/MI Input Syntax, Next: GDB/MI Output Syntax, Up: GDB/MI Command Syntax
-
-GDB/MI Input Syntax
--------------------
-
-`COMMAND ==>'
- `CLI-COMMAND | MI-COMMAND'
-
-`CLI-COMMAND ==>'
- `[ TOKEN ] CLI-COMMAND NL', where CLI-COMMAND is any existing GDB
- CLI command.
-
-`MI-COMMAND ==>'
- `[ TOKEN ] "-" OPERATION ( " " OPTION )* `[' " --" `]' ( " "
- PARAMETER )* NL'
-
-`TOKEN ==>'
- "any sequence of digits"
-
-`OPTION ==>'
- `"-" PARAMETER [ " " PARAMETER ]'
-
-`PARAMETER ==>'
- `NON-BLANK-SEQUENCE | C-STRING'
-
-`OPERATION ==>'
- _any of the operations described in this chapter_
-
-`NON-BLANK-SEQUENCE ==>'
- _anything, provided it doesn't contain special characters such as
- "-", NL, """ and of course " "_
-
-`C-STRING ==>'
- `""" SEVEN-BIT-ISO-C-STRING-CONTENT """'
-
-`NL ==>'
- `CR | CR-LF'
-
-Notes:
-
- * The CLI commands are still handled by the MI interpreter; their
- output is described below.
-
- * The `TOKEN', when present, is passed back when the command
- finishes.
-
- * Some MI commands accept optional arguments as part of the parameter
- list. Each option is identified by a leading `-' (dash) and may be
- followed by an optional argument parameter. Options occur first
- in the parameter list and can be delimited from normal parameters
- using `--' (this is useful when some parameters begin with a dash).
-
- Pragmatics:
-
- * We want easy access to the existing CLI syntax (for debugging).
-
- * We want it to be easy to spot a MI operation.
-
-
-File: gdb.info, Node: GDB/MI Output Syntax, Next: GDB/MI Simple Examples, Prev: GDB/MI Input Syntax, Up: GDB/MI Command Syntax
-
-GDB/MI Output Syntax
---------------------
-
-The output from GDB/MI consists of zero or more out-of-band records
-followed, optionally, by a single result record. This result record is
-for the most recent command. The sequence of output records is
-terminated by `(gdb)'.
-
- If an input command was prefixed with a `TOKEN' then the
-corresponding output for that command will also be prefixed by that same
-TOKEN.
-
-`OUTPUT ==>'
- `( OUT-OF-BAND-RECORD )* [ RESULT-RECORD ] "(gdb)" NL'
-
-`RESULT-RECORD ==>'
- ` [ TOKEN ] "^" RESULT-CLASS ( "," RESULT )* NL'
-
-`OUT-OF-BAND-RECORD ==>'
- `ASYNC-RECORD | STREAM-RECORD'
-
-`ASYNC-RECORD ==>'
- `EXEC-ASYNC-OUTPUT | STATUS-ASYNC-OUTPUT | NOTIFY-ASYNC-OUTPUT'
-
-`EXEC-ASYNC-OUTPUT ==>'
- `[ TOKEN ] "*" ASYNC-OUTPUT'
-
-`STATUS-ASYNC-OUTPUT ==>'
- `[ TOKEN ] "+" ASYNC-OUTPUT'
-
-`NOTIFY-ASYNC-OUTPUT ==>'
- `[ TOKEN ] "=" ASYNC-OUTPUT'
-
-`ASYNC-OUTPUT ==>'
- `ASYNC-CLASS ( "," RESULT )* NL'
-
-`RESULT-CLASS ==>'
- `"done" | "running" | "connected" | "error" | "exit"'
-
-`ASYNC-CLASS ==>'
- `"stopped" | OTHERS' (where OTHERS will be added depending on the
- needs--this is still in development).
-
-`RESULT ==>'
- ` VARIABLE "=" VALUE'
-
-`VARIABLE ==>'
- ` STRING '
-
-`VALUE ==>'
- ` CONST | TUPLE | LIST '
-
-`CONST ==>'
- `C-STRING'
-
-`TUPLE ==>'
- ` "{}" | "{" RESULT ( "," RESULT )* "}" '
-
-`LIST ==>'
- ` "[]" | "[" VALUE ( "," VALUE )* "]" | "[" RESULT ( "," RESULT )*
- "]" '
-
-`STREAM-RECORD ==>'
- `CONSOLE-STREAM-OUTPUT | TARGET-STREAM-OUTPUT | LOG-STREAM-OUTPUT'
-
-`CONSOLE-STREAM-OUTPUT ==>'
- `"~" C-STRING'
-
-`TARGET-STREAM-OUTPUT ==>'
- `"@" C-STRING'
-
-`LOG-STREAM-OUTPUT ==>'
- `"&" C-STRING'
-
-`NL ==>'
- `CR | CR-LF'
-
-`TOKEN ==>'
- _any sequence of digits_.
-
-Notes:
-
- * All output sequences end in a single line containing a period.
-
- * The `TOKEN' is from the corresponding request. If an execution
- command is interrupted by the `-exec-interrupt' command, the TOKEN
- associated with the `*stopped' message is the one of the original
- execution command, not the one of the interrupt command.
-
- * STATUS-ASYNC-OUTPUT contains on-going status information about the
- progress of a slow operation. It can be discarded. All status
- output is prefixed by `+'.
-
- * EXEC-ASYNC-OUTPUT contains asynchronous state change on the target
- (stopped, started, disappeared). All async output is prefixed by
- `*'.
-
- * NOTIFY-ASYNC-OUTPUT contains supplementary information that the
- client should handle (e.g., a new breakpoint information). All
- notify output is prefixed by `='.
-
- * CONSOLE-STREAM-OUTPUT is output that should be displayed as is in
- the console. It is the textual response to a CLI command. All
- the console output is prefixed by `~'.
-
- * TARGET-STREAM-OUTPUT is the output produced by the target program.
- All the target output is prefixed by `@'.
-
- * LOG-STREAM-OUTPUT is output text coming from GDB's internals, for
- instance messages that should be displayed as part of an error
- log. All the log output is prefixed by `&'.
-
- * New GDB/MI commands should only output LISTS containing VALUES.
-
-
- *Note GDB/MI Stream Records: GDB/MI Stream Records, for more details
-about the various output records.
-
-
-File: gdb.info, Node: GDB/MI Simple Examples, Prev: GDB/MI Output Syntax, Up: GDB/MI Command Syntax
-
-Simple Examples of GDB/MI Interaction
--------------------------------------
-
-This subsection presents several simple examples of interaction using
-the GDB/MI interface. In these examples, `->' means that the following
-line is passed to GDB/MI as input, while `<-' means the output received
-from GDB/MI.
-
-Target Stop
-...........
-
-Here's an example of stopping the inferior process:
-
- -> -stop
- <- (gdb)
-
-and later:
-
- <- *stop,reason="stop",address="0x123",source="a.c:123"
- <- (gdb)
-
-Simple CLI Command
-..................
-
-Here's an example of a simple CLI command being passed through GDB/MI
-and on to the CLI.
-
- -> print 1+2
- <- &"print 1+2\n"
- <- ~"$1 = 3\n"
- <- ^done
- <- (gdb)
-
-Command With Side Effects
-.........................
-
- -> -symbol-file xyz.exe
- <- *breakpoint,nr="3",address="0x123",source="a.c:123"
- <- (gdb)
-
-A Bad Command
-.............
-
-Here's what happens if you pass a non-existent command:
-
- -> -rubbish
- <- ^error,msg="Undefined MI command: rubbish"
- <- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Compatibility with CLI, Next: GDB/MI Output Records, Prev: GDB/MI Command Syntax, Up: GDB/MI
-
-GDB/MI Compatibility with CLI
-=============================
-
-To help users familiar with GDB's existing CLI interface, GDB/MI
-accepts existing CLI commands. As specified by the syntax, such
-commands can be directly entered into the GDB/MI interface and GDB will
-respond.
-
- This mechanism is provided as an aid to developers of GDB/MI clients
-and not as a reliable interface into the CLI. Since the command is
-being interpreteted in an environment that assumes GDB/MI behaviour,
-the exact output of such commands is likely to end up being an
-un-supported hybrid of GDB/MI and CLI output.
-
-
-File: gdb.info, Node: GDB/MI Output Records, Next: GDB/MI Command Description Format, Prev: GDB/MI Compatibility with CLI, Up: GDB/MI
-
-GDB/MI Output Records
-=====================
-
-* Menu:
-
-* GDB/MI Result Records::
-* GDB/MI Stream Records::
-* GDB/MI Out-of-band Records::
-
-
-File: gdb.info, Node: GDB/MI Result Records, Next: GDB/MI Stream Records, Up: GDB/MI Output Records
-
-GDB/MI Result Records
----------------------
-
-In addition to a number of out-of-band notifications, the response to a
-GDB/MI command includes one of the following result indications:
-
-`"^done" [ "," RESULTS ]'
- The synchronous operation was successful, `RESULTS' are the return
- values.
-
-`"^running"'
- The asynchronous operation was successfully started. The target is
- running.
-
-`"^error" "," C-STRING'
- The operation failed. The `C-STRING' contains the corresponding
- error message.
-
-
-File: gdb.info, Node: GDB/MI Stream Records, Next: GDB/MI Out-of-band Records, Prev: GDB/MI Result Records, Up: GDB/MI Output Records
-
-GDB/MI Stream Records
----------------------
-
-GDB internally maintains a number of output streams: the console, the
-target, and the log. The output intended for each of these streams is
-funneled through the GDB/MI interface using "stream records".
-
- Each stream record begins with a unique "prefix character" which
-identifies its stream (*note GDB/MI Output Syntax: GDB/MI Output
-Syntax.). In addition to the prefix, each stream record contains a
-`STRING-OUTPUT'. This is either raw text (with an implicit new line)
-or a quoted C string (which does not contain an implicit newline).
-
-`"~" STRING-OUTPUT'
- The console output stream contains text that should be displayed
- in the CLI console window. It contains the textual responses to
- CLI commands.
-
-`"@" STRING-OUTPUT'
- The target output stream contains any textual output from the
- running target.
-
-`"&" STRING-OUTPUT'
- The log stream contains debugging messages being produced by GDB's
- internals.
-
-
-File: gdb.info, Node: GDB/MI Out-of-band Records, Prev: GDB/MI Stream Records, Up: GDB/MI Output Records
-
-GDB/MI Out-of-band Records
---------------------------
-
-"Out-of-band" records are used to notify the GDB/MI client of
-additional changes that have occurred. Those changes can either be a
-consequence of GDB/MI (e.g., a breakpoint modified) or a result of
-target activity (e.g., target stopped).
-
- The following is a preliminary list of possible out-of-band records.
-
-`"*" "stop"'
-
-
-File: gdb.info, Node: GDB/MI Command Description Format, Next: GDB/MI Breakpoint Table Commands, Prev: GDB/MI Output Records, Up: GDB/MI
-
-GDB/MI Command Description Format
-=================================
-
-The remaining sections describe blocks of commands. Each block of
-commands is laid out in a fashion similar to this section.
-
- Note the the line breaks shown in the examples are here only for
-readability. They don't appear in the real output. Also note that the
-commands with a non-available example (N.A.) are not yet implemented.
-
-Motivation
-----------
-
-The motivation for this collection of commands.
-
-Introduction
-------------
-
-A brief introduction to this collection of commands as a whole.
-
-Commands
---------
-
-For each command in the block, the following is described:
-
-Synopsis
-........
-
- -command ARGS...
-
-GDB Command
-...........
-
-The corresponding GDB CLI command.
-
-Result
-......
-
-Out-of-band
-...........
-
-Notes
-.....
-
-Example
-.......
-
-
-File: gdb.info, Node: GDB/MI Breakpoint Table Commands, Next: GDB/MI Data Manipulation, Prev: GDB/MI Command Description Format, Up: GDB/MI
-
-GDB/MI Breakpoint table commands
-================================
-
-This section documents GDB/MI commands for manipulating breakpoints.
-
-The `-break-after' Command
---------------------------
-
-Synopsis
-........
-
- -break-after NUMBER COUNT
-
- The breakpoint number NUMBER is not in effect until it has been hit
-COUNT times. To see how this is reflected in the output of the
-`-break-list' command, see the description of the `-break-list' command
-below.
-
-GDB Command
-...........
-
-The corresponding GDB command is `ignore'.
-
-Example
-.......
-
- (gdb)
- -break-insert main
- ^done,bkpt={number="1",addr="0x000100d0",file="hello.c",line="5"}
- (gdb)
- -break-after 1 3
- ~
- ^done
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="1",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
- addr="0x000100d0",func="main",file="hello.c",line="5",times="0",
- ignore="3"}]}
- (gdb)
-
-The `-break-condition' Command
-------------------------------
-
-Synopsis
-........
-
- -break-condition NUMBER EXPR
-
- Breakpoint NUMBER will stop the program only if the condition in
-EXPR is true. The condition becomes part of the `-break-list' output
-(see the description of the `-break-list' command below).
-
-GDB Command
-...........
-
-The corresponding GDB command is `condition'.
-
-Example
-.......
-
- (gdb)
- -break-condition 1 1
- ^done
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="1",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
- addr="0x000100d0",func="main",file="hello.c",line="5",cond="1",
- times="0",ignore="3"}]}
- (gdb)
-
-The `-break-delete' Command
----------------------------
-
-Synopsis
-........
-
- -break-delete ( BREAKPOINT )+
-
- Delete the breakpoint(s) whose number(s) are specified in the
-argument list. This is obviously reflected in the breakpoint list.
-
-GDB command
-...........
-
-The corresponding GDB command is `delete'.
-
-Example
-.......
-
- (gdb)
- -break-delete 1
- ^done
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="0",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[]}
- (gdb)
-
-The `-break-disable' Command
-----------------------------
-
-Synopsis
-........
-
- -break-disable ( BREAKPOINT )+
-
- Disable the named BREAKPOINT(s). The field `enabled' in the break
-list is now set to `n' for the named BREAKPOINT(s).
-
-GDB Command
-...........
-
-The corresponding GDB command is `disable'.
-
-Example
-.......
-
- (gdb)
- -break-disable 2
- ^done
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="1",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="n",
- addr="0x000100d0",func="main",file="hello.c",line="5",times="0"}]}
- (gdb)
-
-The `-break-enable' Command
----------------------------
-
-Synopsis
-........
-
- -break-enable ( BREAKPOINT )+
-
- Enable (previously disabled) BREAKPOINT(s).
-
-GDB Command
-...........
-
-The corresponding GDB command is `enable'.
-
-Example
-.......
-
- (gdb)
- -break-enable 2
- ^done
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="1",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
- addr="0x000100d0",func="main",file="hello.c",line="5",times="0"}]}
- (gdb)
-
-The `-break-info' Command
--------------------------
-
-Synopsis
-........
-
- -break-info BREAKPOINT
-
- Get information about a single breakpoint.
-
-GDB command
-...........
-
-The corresponding GDB command is `info break BREAKPOINT'.
-
-Example
-.......
-
-N.A.
-
-The `-break-insert' Command
----------------------------
-
-Synopsis
-........
-
- -break-insert [ -t ] [ -h ] [ -r ]
- [ -c CONDITION ] [ -i IGNORE-COUNT ]
- [ -p THREAD ] [ LINE | ADDR ]
-
-If specified, LINE, can be one of:
-
- * function
-
- * filename:linenum
-
- * filename:function
-
- * *address
-
- The possible optional parameters of this command are:
-
-`-t'
- Insert a tempoary breakpoint.
-
-`-h'
- Insert a hardware breakpoint.
-
-`-c CONDITION'
- Make the breakpoint conditional on CONDITION.
-
-`-i IGNORE-COUNT'
- Initialize the IGNORE-COUNT.
-
-`-r'
- Insert a regular breakpoint in all the functions whose names match
- the given regular expression. Other flags are not applicable to
- regular expresson.
-
-Result
-......
-
-The result is in the form:
-
- ^done,bkptno="NUMBER",func="FUNCNAME",
- file="FILENAME",line="LINENO"
-
-where NUMBER is the GDB number for this breakpoint, FUNCNAME is the
-name of the function where the breakpoint was inserted, FILENAME is the
-name of the source file which contains this function, and LINENO is the
-source line number within that file.
-
- Note: this format is open to change.
-
-GDB Command
-...........
-
-The corresponding GDB commands are `break', `tbreak', `hbreak',
-`thbreak', and `rbreak'.
-
-Example
-.......
-
- (gdb)
- -break-insert main
- ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
- (gdb)
- -break-insert -t foo
- ^done,bkpt={number="2",addr="0x00010774",file="recursive2.c",line="11"}
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="2",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
- addr="0x0001072c", func="main",file="recursive2.c",line="4",times="0"},
- bkpt={number="2",type="breakpoint",disp="del",enabled="y",
- addr="0x00010774",func="foo",file="recursive2.c",line="11",times="0"}]}
- (gdb)
- -break-insert -r foo.*
- ~int foo(int, int);
- ^done,bkpt={number="3",addr="0x00010774",file="recursive2.c",line="11"}
- (gdb)
-
-The `-break-list' Command
--------------------------
-
-Synopsis
-........
-
- -break-list
-
- Displays the list of inserted breakpoints, showing the following
-fields:
-
-`Number'
- number of the breakpoint
-
-`Type'
- type of the breakpoint: `breakpoint' or `watchpoint'
-
-`Disposition'
- should the breakpoint be deleted or disabled when it is hit: `keep'
- or `nokeep'
-
-`Enabled'
- is the breakpoint enabled or no: `y' or `n'
-
-`Address'
- memory location at which the breakpoint is set
-
-`What'
- logical location of the breakpoint, expressed by function name,
- file name, line number
-
-`Times'
- number of times the breakpoint has been hit
-
- If there are no breakpoints or watchpoints, the `BreakpointTable'
-`body' field is an empty list.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info break'.
-
-Example
-.......
-
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="2",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
- addr="0x000100d0",func="main",file="hello.c",line="5",times="0"},
- bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
- addr="0x00010114",func="foo",file="hello.c",line="13",times="0"}]}
- (gdb)
-
- Here's an example of the result when there are no breakpoints:
-
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="0",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[]}
- (gdb)
-
-The `-break-watch' Command
---------------------------
-
-Synopsis
-........
-
- -break-watch [ -a | -r ]
-
- Create a watchpoint. With the `-a' option it will create an
-"access" watchpoint, i.e. a watchpoint that triggers either on a read
-from or on a write to the memory location. With the `-r' option, the
-watchpoint created is a "read" watchpoint, i.e. it will trigger only
-when the memory location is accessed for reading. Without either of
-the options, the watchpoint created is a regular watchpoint, i.e. it
-will trigger when the memory location is accessed for writing. *Note
-Setting watchpoints: Set Watchpoints.
-
- Note that `-break-list' will report a single list of watchpoints and
-breakpoints inserted.
-
-GDB Command
-...........
-
-The corresponding GDB commands are `watch', `awatch', and `rwatch'.
-
-Example
-.......
-
-Setting a watchpoint on a variable in the `main' function:
-
- (gdb)
- -break-watch x
- ^done,wpt={number="2",exp="x"}
- (gdb)
- -exec-continue
- ^running
- ^done,reason="watchpoint-trigger",wpt={number="2",exp="x"},
- value={old="-268439212",new="55"},
- frame={func="main",args=[],file="recursive2.c",line="5"}
- (gdb)
-
- Setting a watchpoint on a variable local to a function. GDB will
-stop the program execution twice: first for the variable changing
-value, then for the watchpoint going out of scope.
-
- (gdb)
- -break-watch C
- ^done,wpt={number="5",exp="C"}
- (gdb)
- -exec-continue
- ^running
- ^done,reason="watchpoint-trigger",
- wpt={number="5",exp="C"},value={old="-276895068",new="3"},
- frame={func="callee4",args=[],
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
- (gdb)
- -exec-continue
- ^running
- ^done,reason="watchpoint-scope",wpnum="5",
- frame={func="callee3",args=[{name="strarg",
- value="0x11940 \"A string argument.\""}],
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
- (gdb)
-
- Listing breakpoints and watchpoints, at different points in the
-program execution. Note that once the watchpoint goes out of scope, it
-is deleted.
-
- (gdb)
- -break-watch C
- ^done,wpt={number="2",exp="C"}
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="2",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
- addr="0x00010734",func="callee4",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"},
- bkpt={number="2",type="watchpoint",disp="keep",
- enabled="y",addr="",what="C",times="0"}]}
- (gdb)
- -exec-continue
- ^running
- ^done,reason="watchpoint-trigger",wpt={number="2",exp="C"},
- value={old="-276895068",new="3"},
- frame={func="callee4",args=[],
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="2",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
- addr="0x00010734",func="callee4",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"},
- bkpt={number="2",type="watchpoint",disp="keep",
- enabled="y",addr="",what="C",times="-5"}]}
- (gdb)
- -exec-continue
- ^running
- ^done,reason="watchpoint-scope",wpnum="2",
- frame={func="callee3",args=[{name="strarg",
- value="0x11940 \"A string argument.\""}],
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
- (gdb)
- -break-list
- ^done,BreakpointTable={nr_rows="1",nr_cols="6",
- hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
- {width="14",alignment="-1",col_name="type",colhdr="Type"},
- {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
- {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
- {width="10",alignment="-1",col_name="addr",colhdr="Address"},
- {width="40",alignment="2",col_name="what",colhdr="What"}],
- body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
- addr="0x00010734",func="callee4",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"}]}
- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Data Manipulation, Next: GDB/MI Program Control, Prev: GDB/MI Breakpoint Table Commands, Up: GDB/MI
-
-GDB/MI Data Manipulation
-========================
-
-This section describes the GDB/MI commands that manipulate data:
-examine memory and registers, evaluate expressions, etc.
-
-The `-data-disassemble' Command
--------------------------------
-
-Synopsis
-........
-
- -data-disassemble
- [ -s START-ADDR -e END-ADDR ]
- | [ -f FILENAME -l LINENUM [ -n LINES ] ]
- -- MODE
-
-Where:
-
-`START-ADDR'
- is the beginning address (or `$pc')
-
-`END-ADDR'
- is the end address
-
-`FILENAME'
- is the name of the file to disassemble
-
-`LINENUM'
- is the line number to disassemble around
-
-`LINES'
- is the the number of disassembly lines to be produced. If it is
- -1, the whole function will be disassembled, in case no END-ADDR is
- specified. If END-ADDR is specified as a non-zero value, and
- LINES is lower than the number of disassembly lines between
- START-ADDR and END-ADDR, only LINES lines are displayed; if LINES
- is higher than the number of lines between START-ADDR and
- END-ADDR, only the lines up to END-ADDR are displayed.
-
-`MODE'
- is either 0 (meaning only disassembly) or 1 (meaning mixed source
- and disassembly).
-
-Result
-......
-
-The output for each instruction is composed of four fields:
-
- * Address
-
- * Func-name
-
- * Offset
-
- * Instruction
-
- Note that whatever included in the instruction field, is not
-manipulated directely by GDB/MI, i.e. it is not possible to adjust its
-format.
-
-GDB Command
-...........
-
-There's no direct mapping from this command to the CLI.
-
-Example
-.......
-
-Disassemble from the current value of `$pc' to `$pc + 20':
-
- (gdb)
- -data-disassemble -s $pc -e "$pc + 20" -- 0
- ^done,
- asm_insns=[
- {address="0x000107c0",func-name="main",offset="4",
- inst="mov 2, %o0"},
- {address="0x000107c4",func-name="main",offset="8",
- inst="sethi %hi(0x11800), %o2"},
- {address="0x000107c8",func-name="main",offset="12",
- inst="or %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"},
- {address="0x000107cc",func-name="main",offset="16",
- inst="sethi %hi(0x11800), %o2"},
- {address="0x000107d0",func-name="main",offset="20",
- inst="or %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}]
- (gdb)
-
- Disassemble the whole `main' function. Line 32 is part of `main'.
-
- -data-disassemble -f basics.c -l 32 -- 0
- ^done,asm_insns=[
- {address="0x000107bc",func-name="main",offset="0",
- inst="save %sp, -112, %sp"},
- {address="0x000107c0",func-name="main",offset="4",
- inst="mov 2, %o0"},
- {address="0x000107c4",func-name="main",offset="8",
- inst="sethi %hi(0x11800), %o2"},
- [...]
- {address="0x0001081c",func-name="main",offset="96",inst="ret "},
- {address="0x00010820",func-name="main",offset="100",inst="restore "}]
- (gdb)
-
- Disassemble 3 instructions from the start of `main':
-
- (gdb)
- -data-disassemble -f basics.c -l 32 -n 3 -- 0
- ^done,asm_insns=[
- {address="0x000107bc",func-name="main",offset="0",
- inst="save %sp, -112, %sp"},
- {address="0x000107c0",func-name="main",offset="4",
- inst="mov 2, %o0"},
- {address="0x000107c4",func-name="main",offset="8",
- inst="sethi %hi(0x11800), %o2"}]
- (gdb)
-
- Disassemble 3 instructions from the start of `main' in mixed mode:
-
- (gdb)
- -data-disassemble -f basics.c -l 32 -n 3 -- 1
- ^done,asm_insns=[
- src_and_asm_line={line="31",
- file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
- testsuite/gdb.mi/basics.c",line_asm_insn=[
- {address="0x000107bc",func-name="main",offset="0",
- inst="save %sp, -112, %sp"}]},
- src_and_asm_line={line="32",
- file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
- testsuite/gdb.mi/basics.c",line_asm_insn=[
- {address="0x000107c0",func-name="main",offset="4",
- inst="mov 2, %o0"},
- {address="0x000107c4",func-name="main",offset="8",
- inst="sethi %hi(0x11800), %o2"}]}]
- (gdb)
-
-The `-data-evaluate-expression' Command
----------------------------------------
-
-Synopsis
-........
-
- -data-evaluate-expression EXPR
-
- Evaluate EXPR as an expression. The expression could contain an
-inferior function call. The function call will execute synchronously.
-If the expression contains spaces, it must be enclosed in double quotes.
-
-GDB Command
-...........
-
-The corresponding GDB commands are `print', `output', and `call'. In
-`gdbtk' only, there's a corresponding `gdb_eval' command.
-
-Example
-.......
-
-In the following example, the numbers that precede the commands are the
-"tokens" described in *Note GDB/MI Command Syntax: GDB/MI Command
-Syntax. Notice how GDB/MI returns the same tokens in its output.
-
- 211-data-evaluate-expression A
- 211^done,value="1"
- (gdb)
- 311-data-evaluate-expression &A
- 311^done,value="0xefffeb7c"
- (gdb)
- 411-data-evaluate-expression A+3
- 411^done,value="4"
- (gdb)
- 511-data-evaluate-expression "A + 3"
- 511^done,value="4"
- (gdb)
-
-The `-data-list-changed-registers' Command
-------------------------------------------
-
-Synopsis
-........
-
- -data-list-changed-registers
-
- Display a list of the registers that have changed.
-
-GDB Command
-...........
-
-GDB doesn't have a direct analog for this command; `gdbtk' has the
-corresponding command `gdb_changed_register_list'.
-
-Example
-.......
-
-On a PPC MBX board:
-
- (gdb)
- -exec-continue
- ^running
-
- (gdb)
- *stopped,reason="breakpoint-hit",bkptno="1",frame={func="main",
- args=[],file="try.c",line="5"}
- (gdb)
- -data-list-changed-registers
- ^done,changed-registers=["0","1","2","4","5","6","7","8","9",
- "10","11","13","14","15","16","17","18","19","20","21","22","23",
- "24","25","26","27","28","30","31","64","65","66","67","69"]
- (gdb)
-
-The `-data-list-register-names' Command
----------------------------------------
-
-Synopsis
-........
-
- -data-list-register-names [ ( REGNO )+ ]
-
- Show a list of register names for the current target. If no
-arguments are given, it shows a list of the names of all the registers.
-If integer numbers are given as arguments, it will print a list of the
-names of the registers corresponding to the arguments. To ensure
-consistency between a register name and its number, the output list may
-include empty register names.
-
-GDB Command
-...........
-
-GDB does not have a command which corresponds to
-`-data-list-register-names'. In `gdbtk' there is a corresponding
-command `gdb_regnames'.
-
-Example
-.......
-
-For the PPC MBX board:
- (gdb)
- -data-list-register-names
- ^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7",
- "r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18",
- "r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29",
- "r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
- "f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
- "f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
- "", "pc","ps","cr","lr","ctr","xer"]
- (gdb)
- -data-list-register-names 1 2 3
- ^done,register-names=["r1","r2","r3"]
- (gdb)
-
-The `-data-list-register-values' Command
-----------------------------------------
-
-Synopsis
-........
-
- -data-list-register-values FMT [ ( REGNO )*]
-
- Display the registers' contents. FMT is the format according to
-which the registers' contents are to be returned, followed by an
-optional list of numbers specifying the registers to display. A
-missing list of numbers indicates that the contents of all the
-registers must be returned.
-
- Allowed formats for FMT are:
-
-`x'
- Hexadecimal
-
-`o'
- Octal
-
-`t'
- Binary
-
-`d'
- Decimal
-
-`r'
- Raw
-
-`N'
- Natural
-
-GDB Command
-...........
-
-The corresponding GDB commands are `info reg', `info all-reg', and (in
-`gdbtk') `gdb_fetch_registers'.
-
-Example
-.......
-
-For a PPC MBX board (note: line breaks are for readability only, they
-don't appear in the actual output):
-
- (gdb)
- -data-list-register-values r 64 65
- ^done,register-values=[{number="64",value="0xfe00a300"},
- {number="65",value="0x00029002"}]
- (gdb)
- -data-list-register-values x
- ^done,register-values=[{number="0",value="0xfe0043c8"},
- {number="1",value="0x3fff88"},{number="2",value="0xfffffffe"},
- {number="3",value="0x0"},{number="4",value="0xa"},
- {number="5",value="0x3fff68"},{number="6",value="0x3fff58"},
- {number="7",value="0xfe011e98"},{number="8",value="0x2"},
- {number="9",value="0xfa202820"},{number="10",value="0xfa202808"},
- {number="11",value="0x1"},{number="12",value="0x0"},
- {number="13",value="0x4544"},{number="14",value="0xffdfffff"},
- {number="15",value="0xffffffff"},{number="16",value="0xfffffeff"},
- {number="17",value="0xefffffed"},{number="18",value="0xfffffffe"},
- {number="19",value="0xffffffff"},{number="20",value="0xffffffff"},
- {number="21",value="0xffffffff"},{number="22",value="0xfffffff7"},
- {number="23",value="0xffffffff"},{number="24",value="0xffffffff"},
- {number="25",value="0xffffffff"},{number="26",value="0xfffffffb"},
- {number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"},
- {number="29",value="0x0"},{number="30",value="0xfe010000"},
- {number="31",value="0x0"},{number="32",value="0x0"},
- {number="33",value="0x0"},{number="34",value="0x0"},
- {number="35",value="0x0"},{number="36",value="0x0"},
- {number="37",value="0x0"},{number="38",value="0x0"},
- {number="39",value="0x0"},{number="40",value="0x0"},
- {number="41",value="0x0"},{number="42",value="0x0"},
- {number="43",value="0x0"},{number="44",value="0x0"},
- {number="45",value="0x0"},{number="46",value="0x0"},
- {number="47",value="0x0"},{number="48",value="0x0"},
- {number="49",value="0x0"},{number="50",value="0x0"},
- {number="51",value="0x0"},{number="52",value="0x0"},
- {number="53",value="0x0"},{number="54",value="0x0"},
- {number="55",value="0x0"},{number="56",value="0x0"},
- {number="57",value="0x0"},{number="58",value="0x0"},
- {number="59",value="0x0"},{number="60",value="0x0"},
- {number="61",value="0x0"},{number="62",value="0x0"},
- {number="63",value="0x0"},{number="64",value="0xfe00a300"},
- {number="65",value="0x29002"},{number="66",value="0x202f04b5"},
- {number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"},
- {number="69",value="0x20002b03"}]
- (gdb)
-
-The `-data-read-memory' Command
--------------------------------
-
-Synopsis
-........
-
- -data-read-memory [ -o BYTE-OFFSET ]
- ADDRESS WORD-FORMAT WORD-SIZE
- NR-ROWS NR-COLS [ ASCHAR ]
-
-where:
-
-`ADDRESS'
- An expression specifying the address of the first memory word to be
- read. Complex expressions containing embedded white space should
- be quoted using the C convention.
-
-`WORD-FORMAT'
- The format to be used to print the memory words. The notation is
- the same as for GDB's `print' command (*note Output formats:
- Output Formats.).
-
-`WORD-SIZE'
- The size of each memory word in bytes.
-
-`NR-ROWS'
- The number of rows in the output table.
-
-`NR-COLS'
- The number of columns in the output table.
-
-`ASCHAR'
- If present, indicates that each row should include an ASCII dump.
- The value of ASCHAR is used as a padding character when a byte is
- not a member of the printable ASCII character set (printable ASCII
- characters are those whose code is between 32 and 126,
- inclusively).
-
-`BYTE-OFFSET'
- An offset to add to the ADDRESS before fetching memory.
-
- This command displays memory contents as a table of NR-ROWS by
-NR-COLS words, each word being WORD-SIZE bytes. In total, `NR-ROWS *
-NR-COLS * WORD-SIZE' bytes are read (returned as `total-bytes').
-Should less than the requested number of bytes be returned by the
-target, the missing words are identified using `N/A'. The number of
-bytes read from the target is returned in `nr-bytes' and the starting
-address used to read memory in `addr'.
-
- The address of the next/previous row or page is available in
-`next-row' and `prev-row', `next-page' and `prev-page'.
-
-GDB Command
-...........
-
-The corresponding GDB command is `x'. `gdbtk' has `gdb_get_mem' memory
-read command.
-
-Example
-.......
-
-Read six bytes of memory starting at `bytes+6' but then offset by `-6'
-bytes. Format as three rows of two columns. One byte per word.
-Display each word in hex.
-
- (gdb)
- 9-data-read-memory -o -6 -- bytes+6 x 1 3 2
- 9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
- next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
- prev-page="0x0000138a",memory=[
- {addr="0x00001390",data=["0x00","0x01"]},
- {addr="0x00001392",data=["0x02","0x03"]},
- {addr="0x00001394",data=["0x04","0x05"]}]
- (gdb)
-
- Read two bytes of memory starting at address `shorts + 64' and
-display as a single word formatted in decimal.
-
- (gdb)
- 5-data-read-memory shorts+64 d 2 1 1
- 5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
- next-row="0x00001512",prev-row="0x0000150e",
- next-page="0x00001512",prev-page="0x0000150e",memory=[
- {addr="0x00001510",data=["128"]}]
- (gdb)
-
- Read thirty two bytes of memory starting at `bytes+16' and format as
-eight rows of four columns. Include a string encoding with `x' used as
-the non-printable character.
-
- (gdb)
- 4-data-read-memory bytes+16 x 1 8 4 x
- 4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
- next-row="0x000013c0",prev-row="0x0000139c",
- next-page="0x000013c0",prev-page="0x00001380",memory=[
- {addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"},
- {addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"},
- {addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"},
- {addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"},
- {addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"},
- {addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"},
- {addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"},
- {addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}]
- (gdb)
-
-The `-display-delete' Command
------------------------------
-
-Synopsis
-........
-
- -display-delete NUMBER
-
- Delete the display NUMBER.
-
-GDB Command
-...........
-
-The corresponding GDB command is `delete display'.
-
-Example
-.......
-
-N.A.
-
-The `-display-disable' Command
-------------------------------
-
-Synopsis
-........
-
- -display-disable NUMBER
-
- Disable display NUMBER.
-
-GDB Command
-...........
-
-The corresponding GDB command is `disable display'.
-
-Example
-.......
-
-N.A.
-
-The `-display-enable' Command
------------------------------
-
-Synopsis
-........
-
- -display-enable NUMBER
-
- Enable display NUMBER.
-
-GDB Command
-...........
-
-The corresponding GDB command is `enable display'.
-
-Example
-.......
-
-N.A.
-
-The `-display-insert' Command
------------------------------
-
-Synopsis
-........
-
- -display-insert EXPRESSION
-
- Display EXPRESSION every time the program stops.
-
-GDB Command
-...........
-
-The corresponding GDB command is `display'.
-
-Example
-.......
-
-N.A.
-
-The `-display-list' Command
----------------------------
-
-Synopsis
-........
-
- -display-list
-
- List the displays. Do not show the current values.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info display'.
-
-Example
-.......
-
-N.A.
-
-The `-environment-cd' Command
------------------------------
-
-Synopsis
-........
-
- -environment-cd PATHDIR
-
- Set GDB's working directory.
-
-GDB Command
-...........
-
-The corresponding GDB command is `cd'.
-
-Example
-.......
-
- (gdb)
- -environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
- ^done
- (gdb)
-
-The `-environment-directory' Command
-------------------------------------
-
-Synopsis
-........
-
- -environment-directory [ -r ] [ PATHDIR ]+
-
- Add directories PATHDIR to beginning of search path for source files.
-If the `-r' option is used, the search path is reset to the default
-search path. If directories PATHDIR are supplied in addition to the
-`-r' option, the search path is first reset and then addition occurs as
-normal. Multiple directories may be specified, separated by blanks.
-Specifying multiple directories in a single command results in the
-directories added to the beginning of the search path in the same order
-they were presented in the command. If blanks are needed as part of a
-directory name, double-quotes should be used around the name. In the
-command output, the path will show up separated by the system
-directory-separator character. The directory-seperator character must
-not be used in any directory name. If no directories are specified,
-the current search path is displayed.
-
-GDB Command
-...........
-
-The corresponding GDB command is `dir'.
-
-Example
-.......
-
- (gdb)
- -environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
- ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
- (gdb)
- -environment-directory ""
- ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
- (gdb)
- -environment-directory -r /home/jjohnstn/src/gdb /usr/src
- ^done,source-path="/home/jjohnstn/src/gdb:/usr/src:$cdir:$cwd"
- (gdb)
- -environment-directory -r
- ^done,source-path="$cdir:$cwd"
- (gdb)
-
-The `-environment-path' Command
--------------------------------
-
-Synopsis
-........
-
- -environment-path [ -r ] [ PATHDIR ]+
-
- Add directories PATHDIR to beginning of search path for object files.
-If the `-r' option is used, the search path is reset to the original
-search path that existed at gdb start-up. If directories PATHDIR are
-supplied in addition to the `-r' option, the search path is first reset
-and then addition occurs as normal. Multiple directories may be
-specified, separated by blanks. Specifying multiple directories in a
-single command results in the directories added to the beginning of the
-search path in the same order they were presented in the command. If
-blanks are needed as part of a directory name, double-quotes should be
-used around the name. In the command output, the path will show up
-separated by the system directory-separator character. The
-directory-seperator character must not be used in any directory name.
-If no directories are specified, the current path is displayed.
-
-GDB Command
-...........
-
-The corresponding GDB command is `path'.
-
-Example
-.......
-
- (gdb)
- -environment-path
- ^done,path="/usr/bin"
- (gdb)
- -environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb /bin
- ^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/bin:/usr/bin"
- (gdb)
- -environment-path -r /usr/local/bin
- ^done,path="/usr/local/bin:/usr/bin"
- (gdb)
-
-The `-environment-pwd' Command
-------------------------------
-
-Synopsis
-........
-
- -environment-pwd
-
- Show the current working directory.
-
-GDB command
-...........
-
-The corresponding GDB command is `pwd'.
-
-Example
-.......
-
- (gdb)
- -environment-pwd
- ^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Program Control, Next: GDB/MI Miscellaneous Commands, Prev: GDB/MI Data Manipulation, Up: GDB/MI
-
-GDB/MI Program control
-======================
-
-Program termination
-...................
-
-As a result of execution, the inferior program can run to completion, if
-it doesn't encounter any breakpoints. In this case the output will
-include an exit code, if the program has exited exceptionally.
-
-Examples
-........
-
-Program exited normally:
-
- (gdb)
- -exec-run
- ^running
- (gdb)
- x = 55
- *stopped,reason="exited-normally"
- (gdb)
-
-Program exited exceptionally:
-
- (gdb)
- -exec-run
- ^running
- (gdb)
- x = 55
- *stopped,reason="exited",exit-code="01"
- (gdb)
-
- Another way the program can terminate is if it receives a signal
-such as `SIGINT'. In this case, GDB/MI displays this:
-
- (gdb)
- *stopped,reason="exited-signalled",signal-name="SIGINT",
- signal-meaning="Interrupt"
-
-The `-exec-abort' Command
--------------------------
-
-Synopsis
-........
-
- -exec-abort
-
- Kill the inferior running program.
-
-GDB Command
-...........
-
-The corresponding GDB command is `kill'.
-
-Example
-.......
-
-N.A.
-
-The `-exec-arguments' Command
------------------------------
-
-Synopsis
-........
-
- -exec-arguments ARGS
-
- Set the inferior program arguments, to be used in the next
-`-exec-run'.
-
-GDB Command
-...........
-
-The corresponding GDB command is `set args'.
-
-Example
-.......
-
-Don't have one around.
-
-The `-exec-continue' Command
-----------------------------
-
-Synopsis
-........
-
- -exec-continue
-
- Asynchronous command. Resumes the execution of the inferior program
-until a breakpoint is encountered, or until the inferior exits.
-
-GDB Command
-...........
-
-The corresponding GDB corresponding is `continue'.
-
-Example
-.......
-
- -exec-continue
- ^running
- (gdb)
- @Hello world
- *stopped,reason="breakpoint-hit",bkptno="2",frame={func="foo",args=[],
- file="hello.c",line="13"}
- (gdb)
-
-The `-exec-finish' Command
---------------------------
-
-Synopsis
-........
-
- -exec-finish
-
- Asynchronous command. Resumes the execution of the inferior program
-until the current function is exited. Displays the results returned by
-the function.
-
-GDB Command
-...........
-
-The corresponding GDB command is `finish'.
-
-Example
-.......
-
-Function returning `void'.
-
- -exec-finish
- ^running
- (gdb)
- @hello from foo
- *stopped,reason="function-finished",frame={func="main",args=[],
- file="hello.c",line="7"}
- (gdb)
-
- Function returning other than `void'. The name of the internal GDB
-variable storing the result is printed, together with the value itself.
-
- -exec-finish
- ^running
- (gdb)
- *stopped,reason="function-finished",frame={addr="0x000107b0",func="foo",
- args=[{name="a",value="1"],{name="b",value="9"}},
- file="recursive2.c",line="14"},
- gdb-result-var="$1",return-value="0"
- (gdb)
-
-The `-exec-interrupt' Command
------------------------------
-
-Synopsis
-........
-
- -exec-interrupt
-
- Asynchronous command. Interrupts the background execution of the
-target. Note how the token associated with the stop message is the one
-for the execution command that has been interrupted. The token for the
-interrupt itself only appears in the `^done' output. If the user is
-trying to interrupt a non-running program, an error message will be
-printed.
-
-GDB Command
-...........
-
-The corresponding GDB command is `interrupt'.
-
-Example
-.......
-
- (gdb)
- 111-exec-continue
- 111^running
-
- (gdb)
- 222-exec-interrupt
- 222^done
- (gdb)
- 111*stopped,signal-name="SIGINT",signal-meaning="Interrupt",
- frame={addr="0x00010140",func="foo",args=[],file="try.c",line="13"}
- (gdb)
-
- (gdb)
- -exec-interrupt
- ^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
- (gdb)
-
-The `-exec-next' Command
-------------------------
-
-Synopsis
-........
-
- -exec-next
-
- Asynchronous command. Resumes execution of the inferior program,
-stopping when the beginning of the next source line is reached.
-
-GDB Command
-...........
-
-The corresponding GDB command is `next'.
-
-Example
-.......
-
- -exec-next
- ^running
- (gdb)
- *stopped,reason="end-stepping-range",line="8",file="hello.c"
- (gdb)
-
-The `-exec-next-instruction' Command
-------------------------------------
-
-Synopsis
-........
-
- -exec-next-instruction
-
- Asynchronous command. Executes one machine instruction. If the
-instruction is a function call continues until the function returns. If
-the program stops at an instruction in the middle of a source line, the
-address will be printed as well.
-
-GDB Command
-...........
-
-The corresponding GDB command is `nexti'.
-
-Example
-.......
-
- (gdb)
- -exec-next-instruction
- ^running
-
- (gdb)
- *stopped,reason="end-stepping-range",
- addr="0x000100d4",line="5",file="hello.c"
- (gdb)
-
-The `-exec-return' Command
---------------------------
-
-Synopsis
-........
-
- -exec-return
-
- Makes current function return immediately. Doesn't execute the
-inferior. Displays the new current frame.
-
-GDB Command
-...........
-
-The corresponding GDB command is `return'.
-
-Example
-.......
-
- (gdb)
- 200-break-insert callee4
- 200^done,bkpt={number="1",addr="0x00010734",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
- (gdb)
- 000-exec-run
- 000^running
- (gdb)
- 000*stopped,reason="breakpoint-hit",bkptno="1",
- frame={func="callee4",args=[],
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
- (gdb)
- 205-break-delete
- 205^done
- (gdb)
- 111-exec-return
- 111^done,frame={level="0",func="callee3",
- args=[{name="strarg",
- value="0x11940 \"A string argument.\""}],
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
- (gdb)
-
-The `-exec-run' Command
------------------------
-
-Synopsis
-........
-
- -exec-run
-
- Asynchronous command. Starts execution of the inferior from the
-beginning. The inferior executes until either a breakpoint is
-encountered or the program exits.
-
-GDB Command
-...........
-
-The corresponding GDB command is `run'.
-
-Example
-.......
-
- (gdb)
- -break-insert main
- ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
- (gdb)
- -exec-run
- ^running
- (gdb)
- *stopped,reason="breakpoint-hit",bkptno="1",
- frame={func="main",args=[],file="recursive2.c",line="4"}
- (gdb)
-
-The `-exec-show-arguments' Command
-----------------------------------
-
-Synopsis
-........
-
- -exec-show-arguments
-
- Print the arguments of the program.
-
-GDB Command
-...........
-
-The corresponding GDB command is `show args'.
-
-Example
-.......
-
-N.A.
-
-The `-exec-step' Command
-------------------------
-
-Synopsis
-........
-
- -exec-step
-
- Asynchronous command. Resumes execution of the inferior program,
-stopping when the beginning of the next source line is reached, if the
-next source line is not a function call. If it is, stop at the first
-instruction of the called function.
-
-GDB Command
-...........
-
-The corresponding GDB command is `step'.
-
-Example
-.......
-
-Stepping into a function:
-
- -exec-step
- ^running
- (gdb)
- *stopped,reason="end-stepping-range",
- frame={func="foo",args=[{name="a",value="10"},
- {name="b",value="0"}],file="recursive2.c",line="11"}
- (gdb)
-
- Regular stepping:
-
- -exec-step
- ^running
- (gdb)
- *stopped,reason="end-stepping-range",line="14",file="recursive2.c"
- (gdb)
-
-The `-exec-step-instruction' Command
-------------------------------------
-
-Synopsis
-........
-
- -exec-step-instruction
-
- Asynchronous command. Resumes the inferior which executes one
-machine instruction. The output, once GDB has stopped, will vary
-depending on whether we have stopped in the middle of a source line or
-not. In the former case, the address at which the program stopped will
-be printed as well.
-
-GDB Command
-...........
-
-The corresponding GDB command is `stepi'.
-
-Example
-.......
-
- (gdb)
- -exec-step-instruction
- ^running
-
- (gdb)
- *stopped,reason="end-stepping-range",
- frame={func="foo",args=[],file="try.c",line="10"}
- (gdb)
- -exec-step-instruction
- ^running
-
- (gdb)
- *stopped,reason="end-stepping-range",
- frame={addr="0x000100f4",func="foo",args=[],file="try.c",line="10"}
- (gdb)
-
-The `-exec-until' Command
--------------------------
-
-Synopsis
-........
-
- -exec-until [ LOCATION ]
-
- Asynchronous command. Executes the inferior until the LOCATION
-specified in the argument is reached. If there is no argument, the
-inferior executes until a source line greater than the current one is
-reached. The reason for stopping in this case will be
-`location-reached'.
-
-GDB Command
-...........
-
-The corresponding GDB command is `until'.
-
-Example
-.......
-
- (gdb)
- -exec-until recursive2.c:6
- ^running
- (gdb)
- x = 55
- *stopped,reason="location-reached",frame={func="main",args=[],
- file="recursive2.c",line="6"}
- (gdb)
-
-The `-file-exec-and-symbols' Command
-------------------------------------
-
-Synopsis
-........
-
- -file-exec-and-symbols FILE
-
- Specify the executable file to be debugged. This file is the one
-from which the symbol table is also read. If no file is specified, the
-command clears the executable and symbol information. If breakpoints
-are set when using this command with no arguments, GDB will produce
-error messages. Otherwise, no output is produced, except a completion
-notification.
-
-GDB Command
-...........
-
-The corresponding GDB command is `file'.
-
-Example
-.......
-
- (gdb)
- -file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
- ^done
- (gdb)
-
-The `-file-exec-file' Command
------------------------------
-
-Synopsis
-........
-
- -file-exec-file FILE
-
- Specify the executable file to be debugged. Unlike
-`-file-exec-and-symbols', the symbol table is _not_ read from this
-file. If used without argument, GDB clears the information about the
-executable file. No output is produced, except a completion
-notification.
-
-GDB Command
-...........
-
-The corresponding GDB command is `exec-file'.
-
-Example
-.......
-
- (gdb)
- -file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
- ^done
- (gdb)
-
-The `-file-list-exec-sections' Command
---------------------------------------
-
-Synopsis
-........
-
- -file-list-exec-sections
-
- List the sections of the current executable file.
-
-GDB Command
-...........
-
-The GDB command `info file' shows, among the rest, the same information
-as this command. `gdbtk' has a corresponding command `gdb_load_info'.
-
-Example
-.......
-
-N.A.
-
-The `-file-list-exec-source-file' Command
------------------------------------------
-
-Synopsis
-........
-
- -file-list-exec-source-file
-
- List the line number, the current source file, and the absolute path
-to the current source file for the current executable.
-
-GDB Command
-...........
-
-There's no GDB command which directly corresponds to this one.
-
-Example
-.......
-
- (gdb)
- 123-file-list-exec-source-file
- 123^done,line="1",file="foo.c",fullname="/home/bar/foo.c"
- (gdb)
-
-The `-file-list-exec-source-files' Command
-------------------------------------------
-
-Synopsis
-........
-
- -file-list-exec-source-files
-
- List the source files for the current executable.
-
-GDB Command
-...........
-
-There's no GDB command which directly corresponds to this one. `gdbtk'
-has an analogous command `gdb_listfiles'.
-
-Example
-.......
-
-N.A.
-
-The `-file-list-shared-libraries' Command
------------------------------------------
-
-Synopsis
-........
-
- -file-list-shared-libraries
-
- List the shared libraries in the program.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info shared'.
-
-Example
-.......
-
-N.A.
-
-The `-file-list-symbol-files' Command
--------------------------------------
-
-Synopsis
-........
-
- -file-list-symbol-files
-
- List symbol files.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info file' (part of it).
-
-Example
-.......
-
-N.A.
-
-The `-file-symbol-file' Command
--------------------------------
-
-Synopsis
-........
-
- -file-symbol-file FILE
-
- Read symbol table info from the specified FILE argument. When used
-without arguments, clears GDB's symbol table info. No output is
-produced, except for a completion notification.
-
-GDB Command
-...........
-
-The corresponding GDB command is `symbol-file'.
-
-Example
-.......
-
- (gdb)
- -file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
- ^done
- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Miscellaneous Commands, Next: GDB/MI Stack Manipulation, Prev: GDB/MI Program Control, Up: GDB/MI
-
-Miscellaneous GDB commands in GDB/MI
-====================================
-
-The `-gdb-exit' Command
------------------------
-
-Synopsis
-........
-
- -gdb-exit
-
- Exit GDB immediately.
-
-GDB Command
-...........
-
-Approximately corresponds to `quit'.
-
-Example
-.......
-
- (gdb)
- -gdb-exit
-
-The `-gdb-set' Command
-----------------------
-
-Synopsis
-........
-
- -gdb-set
-
- Set an internal GDB variable.
-
-GDB Command
-...........
-
-The corresponding GDB command is `set'.
-
-Example
-.......
-
- (gdb)
- -gdb-set $foo=3
- ^done
- (gdb)
-
-The `-gdb-show' Command
------------------------
-
-Synopsis
-........
-
- -gdb-show
-
- Show the current value of a GDB variable.
-
-GDB command
-...........
-
-The corresponding GDB command is `show'.
-
-Example
-.......
-
- (gdb)
- -gdb-show annotate
- ^done,value="0"
- (gdb)
-
-The `-gdb-version' Command
---------------------------
-
-Synopsis
-........
-
- -gdb-version
-
- Show version information for GDB. Used mostly in testing.
-
-GDB Command
-...........
-
-There's no equivalent GDB command. GDB by default shows this
-information when you start an interactive session.
-
-Example
-.......
-
- (gdb)
- -gdb-version
- ~GNU gdb 5.2.1
- ~Copyright 2000 Free Software Foundation, Inc.
- ~GDB is free software, covered by the GNU General Public License, and
- ~you are welcome to change it and/or distribute copies of it under
- ~ certain conditions.
- ~Type "show copying" to see the conditions.
- ~There is absolutely no warranty for GDB. Type "show warranty" for
- ~ details.
- ~This GDB was configured as
- "--host=sparc-sun-solaris2.5.1 --target=ppc-eabi".
- ^done
- (gdb)
-
-The `-interpreter-exec' Command
--------------------------------
-
-Synopsis
---------
-
- -interpreter-exec INTERPRETER COMMAND
-
- Execute the specified COMMAND in the given INTERPRETER.
-
-GDB Command
------------
-
-The corresponding GDB command is `interpreter-exec'.
-
-Example
--------
-
- (gdb)
- -interpreter-exec console "break main"
- &"During symbol reading, couldn't parse type; debugger out of date?.\n"
- &"During symbol reading, bad structure-type format.\n"
- ~"Breakpoint 1 at 0x8074fc6: file ../../src/gdb/main.c, line 743.\n"
- ^done
- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Stack Manipulation, Next: GDB/MI Symbol Query, Prev: GDB/MI Miscellaneous Commands, Up: GDB/MI
-
-GDB/MI Stack Manipulation Commands
-==================================
-
-The `-stack-info-frame' Command
--------------------------------
-
-Synopsis
-........
-
- -stack-info-frame
-
- Get info on the current frame.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info frame' or `frame' (without
-arguments).
-
-Example
-.......
-
-N.A.
-
-The `-stack-info-depth' Command
--------------------------------
-
-Synopsis
-........
-
- -stack-info-depth [ MAX-DEPTH ]
-
- Return the depth of the stack. If the integer argument MAX-DEPTH is
-specified, do not count beyond MAX-DEPTH frames.
-
-GDB Command
-...........
-
-There's no equivalent GDB command.
-
-Example
-.......
-
-For a stack with frame levels 0 through 11:
-
- (gdb)
- -stack-info-depth
- ^done,depth="12"
- (gdb)
- -stack-info-depth 4
- ^done,depth="4"
- (gdb)
- -stack-info-depth 12
- ^done,depth="12"
- (gdb)
- -stack-info-depth 11
- ^done,depth="11"
- (gdb)
- -stack-info-depth 13
- ^done,depth="12"
- (gdb)
-
-The `-stack-list-arguments' Command
------------------------------------
-
-Synopsis
-........
-
- -stack-list-arguments SHOW-VALUES
- [ LOW-FRAME HIGH-FRAME ]
-
- Display a list of the arguments for the frames between LOW-FRAME and
-HIGH-FRAME (inclusive). If LOW-FRAME and HIGH-FRAME are not provided,
-list the arguments for the whole call stack.
-
- The SHOW-VALUES argument must have a value of 0 or 1. A value of 0
-means that only the names of the arguments are listed, a value of 1
-means that both names and values of the arguments are printed.
-
-GDB Command
-...........
-
-GDB does not have an equivalent command. `gdbtk' has a `gdb_get_args'
-command which partially overlaps with the functionality of
-`-stack-list-arguments'.
-
-Example
-.......
-
- (gdb)
- -stack-list-frames
- ^done,
- stack=[
- frame={level="0",addr="0x00010734",func="callee4",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"},
- frame={level="1",addr="0x0001076c",func="callee3",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="17"},
- frame={level="2",addr="0x0001078c",func="callee2",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="22"},
- frame={level="3",addr="0x000107b4",func="callee1",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="27"},
- frame={level="4",addr="0x000107e0",func="main",
- file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="32"}]
- (gdb)
- -stack-list-arguments 0
- ^done,
- stack-args=[
- frame={level="0",args=[]},
- frame={level="1",args=[name="strarg"]},
- frame={level="2",args=[name="intarg",name="strarg"]},
- frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
- frame={level="4",args=[]}]
- (gdb)
- -stack-list-arguments 1
- ^done,
- stack-args=[
- frame={level="0",args=[]},
- frame={level="1",
- args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
- frame={level="2",args=[
- {name="intarg",value="2"},
- {name="strarg",value="0x11940 \"A string argument.\""}]},
- {frame={level="3",args=[
- {name="intarg",value="2"},
- {name="strarg",value="0x11940 \"A string argument.\""},
- {name="fltarg",value="3.5"}]},
- frame={level="4",args=[]}]
- (gdb)
- -stack-list-arguments 0 2 2
- ^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
- (gdb)
- -stack-list-arguments 1 2 2
- ^done,stack-args=[frame={level="2",
- args=[{name="intarg",value="2"},
- {name="strarg",value="0x11940 \"A string argument.\""}]}]
- (gdb)
-
-The `-stack-list-frames' Command
---------------------------------
-
-Synopsis
-........
-
- -stack-list-frames [ LOW-FRAME HIGH-FRAME ]
-
- List the frames currently on the stack. For each frame it displays
-the following info:
-
-`LEVEL'
- The frame number, 0 being the topmost frame, i.e. the innermost
- function.
-
-`ADDR'
- The `$pc' value for that frame.
-
-`FUNC'
- Function name.
-
-`FILE'
- File name of the source file where the function lives.
-
-`LINE'
- Line number corresponding to the `$pc'.
-
- If invoked without arguments, this command prints a backtrace for the
-whole stack. If given two integer arguments, it shows the frames whose
-levels are between the two arguments (inclusive). If the two arguments
-are equal, it shows the single frame at the corresponding level.
-
-GDB Command
-...........
-
-The corresponding GDB commands are `backtrace' and `where'.
-
-Example
-.......
-
-Full stack backtrace:
-
- (gdb)
- -stack-list-frames
- ^done,stack=
- [frame={level="0",addr="0x0001076c",func="foo",
- file="recursive2.c",line="11"},
- frame={level="1",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="2",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="3",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="4",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="5",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="6",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="7",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="8",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="9",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="10",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="11",addr="0x00010738",func="main",
- file="recursive2.c",line="4"}]
- (gdb)
-
- Show frames between LOW_FRAME and HIGH_FRAME:
-
- (gdb)
- -stack-list-frames 3 5
- ^done,stack=
- [frame={level="3",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="4",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"},
- frame={level="5",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"}]
- (gdb)
-
- Show a single frame:
-
- (gdb)
- -stack-list-frames 3 3
- ^done,stack=
- [frame={level="3",addr="0x000107a4",func="foo",
- file="recursive2.c",line="14"}]
- (gdb)
-
-The `-stack-list-locals' Command
---------------------------------
-
-Synopsis
-........
-
- -stack-list-locals PRINT-VALUES
-
- Display the local variable names for the current frame. With an
-argument of 0 or `--no-values', prints only the names of the variables.
-With argument of 1 or `--all-values', prints also their values. With
-argument of 2 or `--simple-values', prints the name, type and value for
-simple data types and the name and type for arrays, structures and
-unions. In this last case, the idea is that the user can see the value
-of simple data types immediately and he can create variable objects for
-other data types if he wishes to explore their values in more detail.
-
-GDB Command
-...........
-
-`info locals' in GDB, `gdb_get_locals' in `gdbtk'.
-
-Example
-.......
-
- (gdb)
- -stack-list-locals 0
- ^done,locals=[name="A",name="B",name="C"]
- (gdb)
- -stack-list-locals --all-values
- ^done,locals=[{name="A",value="1"},{name="B",value="2"},
- {name="C",value="{1, 2, 3}"}]
- -stack-list-locals --simple-values
- ^done,locals=[{name="A",type="int",value="1"},
- {name="B",type="int",value="2"},{name="C",type="int [3]"}]
- (gdb)
-
-The `-stack-select-frame' Command
----------------------------------
-
-Synopsis
-........
-
- -stack-select-frame FRAMENUM
-
- Change the current frame. Select a different frame FRAMENUM on the
-stack.
-
-GDB Command
-...........
-
-The corresponding GDB commands are `frame', `up', `down',
-`select-frame', `up-silent', and `down-silent'.
-
-Example
-.......
-
- (gdb)
- -stack-select-frame 2
- ^done
- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Symbol Query, Next: GDB/MI Target Manipulation, Prev: GDB/MI Stack Manipulation, Up: GDB/MI
-
-GDB/MI Symbol Query Commands
-============================
-
-The `-symbol-info-address' Command
-----------------------------------
-
-Synopsis
-........
-
- -symbol-info-address SYMBOL
-
- Describe where SYMBOL is stored.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info address'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-info-file' Command
--------------------------------
-
-Synopsis
-........
-
- -symbol-info-file
-
- Show the file for the symbol.
-
-GDB Command
-...........
-
-There's no equivalent GDB command. `gdbtk' has `gdb_find_file'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-info-function' Command
------------------------------------
-
-Synopsis
-........
-
- -symbol-info-function
-
- Show which function the symbol lives in.
-
-GDB Command
-...........
-
-`gdb_get_function' in `gdbtk'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-info-line' Command
--------------------------------
-
-Synopsis
-........
-
- -symbol-info-line
-
- Show the core addresses of the code for a source line.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info line'. `gdbtk' has the
-`gdb_get_line' and `gdb_get_file' commands.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-info-symbol' Command
----------------------------------
-
-Synopsis
-........
-
- -symbol-info-symbol ADDR
-
- Describe what symbol is at location ADDR.
-
-GDB Command
-...........
-
-The corresponding GDB command is `info symbol'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-list-functions' Command
-------------------------------------
-
-Synopsis
-........
-
- -symbol-list-functions
-
- List the functions in the executable.
-
-GDB Command
-...........
-
-`info functions' in GDB, `gdb_listfunc' and `gdb_search' in `gdbtk'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-list-lines' Command
---------------------------------
-
-Synopsis
-........
-
- -symbol-list-lines FILENAME
-
- Print the list of lines that contain code and their associated
-program addresses for the given source filename. The entries are
-sorted in ascending PC order.
-
-GDB Command
-...........
-
-There is no corresponding GDB command.
-
-Example
-.......
-
- (gdb)
- -symbol-list-lines basics.c
- ^done,lines=[{pc="0x08048554",line="7"},{pc="0x0804855a",line="8"}]
- (gdb)
-
-The `-symbol-list-types' Command
---------------------------------
-
-Synopsis
-........
-
- -symbol-list-types
-
- List all the type names.
-
-GDB Command
-...........
-
-The corresponding commands are `info types' in GDB, `gdb_search' in
-`gdbtk'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-list-variables' Command
-------------------------------------
-
-Synopsis
-........
-
- -symbol-list-variables
-
- List all the global and static variable names.
-
-GDB Command
-...........
-
-`info variables' in GDB, `gdb_search' in `gdbtk'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-locate' Command
-----------------------------
-
-Synopsis
-........
-
- -symbol-locate
-
-GDB Command
-...........
-
-`gdb_loc' in `gdbtk'.
-
-Example
-.......
-
-N.A.
-
-The `-symbol-type' Command
---------------------------
-
-Synopsis
-........
-
- -symbol-type VARIABLE
-
- Show type of VARIABLE.
-
-GDB Command
-...........
-
-The corresponding GDB command is `ptype', `gdbtk' has
-`gdb_obj_variable'.
-
-Example
-.......
-
-N.A.
-
-
-File: gdb.info, Node: GDB/MI Target Manipulation, Next: GDB/MI Thread Commands, Prev: GDB/MI Symbol Query, Up: GDB/MI
-
-GDB/MI Target Manipulation Commands
-===================================
-
-The `-target-attach' Command
-----------------------------
-
-Synopsis
-........
-
- -target-attach PID | FILE
-
- Attach to a process PID or a file FILE outside of GDB.
-
-GDB command
-...........
-
-The corresponding GDB command is `attach'.
-
-Example
-.......
-
-N.A.
-
-The `-target-compare-sections' Command
---------------------------------------
-
-Synopsis
-........
-
- -target-compare-sections [ SECTION ]
-
- Compare data of section SECTION on target to the exec file. Without
-the argument, all sections are compared.
-
-GDB Command
-...........
-
-The GDB equivalent is `compare-sections'.
-
-Example
-.......
-
-N.A.
-
-The `-target-detach' Command
-----------------------------
-
-Synopsis
-........
-
- -target-detach
-
- Disconnect from the remote target. There's no output.
-
-GDB command
-...........
-
-The corresponding GDB command is `detach'.
-
-Example
-.......
-
- (gdb)
- -target-detach
- ^done
- (gdb)
-
-The `-target-disconnect' Command
---------------------------------
-
-Synopsis
-........
-
- -target-disconnect
-
- Disconnect from the remote target. There's no output.
-
-GDB command
-...........
-
-The corresponding GDB command is `disconnect'.
-
-Example
-.......
-
- (gdb)
- -target-disconnect
- ^done
- (gdb)
-
-The `-target-download' Command
-------------------------------
-
-Synopsis
-........
-
- -target-download
-
- Loads the executable onto the remote target. It prints out an
-update message every half second, which includes the fields:
-
-`section'
- The name of the section.
-
-`section-sent'
- The size of what has been sent so far for that section.
-
-`section-size'
- The size of the section.
-
-`total-sent'
- The total size of what was sent so far (the current and the
- previous sections).
-
-`total-size'
- The size of the overall executable to download.
-
-Each message is sent as status record (*note GDB/MI Output Syntax:
-GDB/MI Output Syntax.).
-
- In addition, it prints the name and size of the sections, as they are
-downloaded. These messages include the following fields:
-
-`section'
- The name of the section.
-
-`section-size'
- The size of the section.
-
-`total-size'
- The size of the overall executable to download.
-
-At the end, a summary is printed.
-
-GDB Command
-...........
-
-The corresponding GDB command is `load'.
-
-Example
-.......
-
-Note: each status message appears on a single line. Here the messages
-have been broken down so that they can fit onto a page.
-
- (gdb)
- -target-download
- +download,{section=".text",section-size="6668",total-size="9880"}
- +download,{section=".text",section-sent="512",section-size="6668",
- total-sent="512",total-size="9880"}
- +download,{section=".text",section-sent="1024",section-size="6668",
- total-sent="1024",total-size="9880"}
- +download,{section=".text",section-sent="1536",section-size="6668",
- total-sent="1536",total-size="9880"}
- +download,{section=".text",section-sent="2048",section-size="6668",
- total-sent="2048",total-size="9880"}
- +download,{section=".text",section-sent="2560",section-size="6668",
- total-sent="2560",total-size="9880"}
- +download,{section=".text",section-sent="3072",section-size="6668",
- total-sent="3072",total-size="9880"}
- +download,{section=".text",section-sent="3584",section-size="6668",
- total-sent="3584",total-size="9880"}
- +download,{section=".text",section-sent="4096",section-size="6668",
- total-sent="4096",total-size="9880"}
- +download,{section=".text",section-sent="4608",section-size="6668",
- total-sent="4608",total-size="9880"}
- +download,{section=".text",section-sent="5120",section-size="6668",
- total-sent="5120",total-size="9880"}
- +download,{section=".text",section-sent="5632",section-size="6668",
- total-sent="5632",total-size="9880"}
- +download,{section=".text",section-sent="6144",section-size="6668",
- total-sent="6144",total-size="9880"}
- +download,{section=".text",section-sent="6656",section-size="6668",
- total-sent="6656",total-size="9880"}
- +download,{section=".init",section-size="28",total-size="9880"}
- +download,{section=".fini",section-size="28",total-size="9880"}
- +download,{section=".data",section-size="3156",total-size="9880"}
- +download,{section=".data",section-sent="512",section-size="3156",
- total-sent="7236",total-size="9880"}
- +download,{section=".data",section-sent="1024",section-size="3156",
- total-sent="7748",total-size="9880"}
- +download,{section=".data",section-sent="1536",section-size="3156",
- total-sent="8260",total-size="9880"}
- +download,{section=".data",section-sent="2048",section-size="3156",
- total-sent="8772",total-size="9880"}
- +download,{section=".data",section-sent="2560",section-size="3156",
- total-sent="9284",total-size="9880"}
- +download,{section=".data",section-sent="3072",section-size="3156",
- total-sent="9796",total-size="9880"}
- ^done,address="0x10004",load-size="9880",transfer-rate="6586",
- write-rate="429"
- (gdb)
-
-The `-target-exec-status' Command
----------------------------------
-
-Synopsis
-........
-
- -target-exec-status
-
- Provide information on the state of the target (whether it is
-running or not, for instance).
-
-GDB Command
-...........
-
-There's no equivalent GDB command.
-
-Example
-.......
-
-N.A.
-
-The `-target-list-available-targets' Command
---------------------------------------------
-
-Synopsis
-........
-
- -target-list-available-targets
-
- List the possible targets to connect to.
-
-GDB Command
-...........
-
-The corresponding GDB command is `help target'.
-
-Example
-.......
-
-N.A.
-
-The `-target-list-current-targets' Command
-------------------------------------------
-
-Synopsis
-........
-
- -target-list-current-targets
-
- Describe the current target.
-
-GDB Command
-...........
-
-The corresponding information is printed by `info file' (among other
-things).
-
-Example
-.......
-
-N.A.
-
-The `-target-list-parameters' Command
--------------------------------------
-
-Synopsis
-........
-
- -target-list-parameters
-
-GDB Command
-...........
-
-No equivalent.
-
-Example
-.......
-
-N.A.
-
-The `-target-select' Command
-----------------------------
-
-Synopsis
-........
-
- -target-select TYPE PARAMETERS ...
-
- Connect GDB to the remote target. This command takes two args:
-
-`TYPE'
- The type of target, for instance `async', `remote', etc.
-
-`PARAMETERS'
- Device names, host names and the like. *Note Commands for
- managing targets: Target Commands, for more details.
-
- The output is a connection notification, followed by the address at
-which the target program is, in the following form:
-
- ^connected,addr="ADDRESS",func="FUNCTION NAME",
- args=[ARG LIST]
-
-GDB Command
-...........
-
-The corresponding GDB command is `target'.
-
-Example
-.......
-
- (gdb)
- -target-select async /dev/ttya
- ^connected,addr="0xfe00a300",func="??",args=[]
- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Thread Commands, Next: GDB/MI Tracepoint Commands, Prev: GDB/MI Target Manipulation, Up: GDB/MI
-
-GDB/MI Thread Commands
-======================
-
-The `-thread-info' Command
---------------------------
-
-Synopsis
-........
-
- -thread-info
-
-GDB command
-...........
-
-No equivalent.
-
-Example
-.......
-
-N.A.
-
-The `-thread-list-all-threads' Command
---------------------------------------
-
-Synopsis
-........
-
- -thread-list-all-threads
-
-GDB Command
-...........
-
-The equivalent GDB command is `info threads'.
-
-Example
-.......
-
-N.A.
-
-The `-thread-list-ids' Command
-------------------------------
-
-Synopsis
-........
-
- -thread-list-ids
-
- Produces a list of the currently known GDB thread ids. At the end
-of the list it also prints the total number of such threads.
-
-GDB Command
-...........
-
-Part of `info threads' supplies the same information.
-
-Example
-.......
-
-No threads present, besides the main process:
-
- (gdb)
- -thread-list-ids
- ^done,thread-ids={},number-of-threads="0"
- (gdb)
-
- Several threads:
-
- (gdb)
- -thread-list-ids
- ^done,thread-ids={thread-id="3",thread-id="2",thread-id="1"},
- number-of-threads="3"
- (gdb)
-
-The `-thread-select' Command
-----------------------------
-
-Synopsis
-........
-
- -thread-select THREADNUM
-
- Make THREADNUM the current thread. It prints the number of the new
-current thread, and the topmost frame for that thread.
-
-GDB Command
-...........
-
-The corresponding GDB command is `thread'.
-
-Example
-.......
-
- (gdb)
- -exec-next
- ^running
- (gdb)
- *stopped,reason="end-stepping-range",thread-id="2",line="187",
- file="../../../devo/gdb/testsuite/gdb.threads/linux-dp.c"
- (gdb)
- -thread-list-ids
- ^done,
- thread-ids={thread-id="3",thread-id="2",thread-id="1"},
- number-of-threads="3"
- (gdb)
- -thread-select 3
- ^done,new-thread-id="3",
- frame={level="0",func="vprintf",
- args=[{name="format",value="0x8048e9c \"%*s%c %d %c\\n\""},
- {name="arg",value="0x2"}],file="vprintf.c",line="31"}
- (gdb)
-
-
-File: gdb.info, Node: GDB/MI Tracepoint Commands, Next: GDB/MI Variable Objects, Prev: GDB/MI Thread Commands, Up: GDB/MI
-
-GDB/MI Tracepoint Commands
-==========================
-
-The tracepoint commands are not yet implemented.
-
-
-File: gdb.info, Node: GDB/MI Variable Objects, Prev: GDB/MI Tracepoint Commands, Up: GDB/MI
-
-GDB/MI Variable Objects
-=======================
-
-Motivation for Variable Objects in GDB/MI
------------------------------------------
-
-For the implementation of a variable debugger window (locals, watched
-expressions, etc.), we are proposing the adaptation of the existing code
-used by `Insight'.
-
- The two main reasons for that are:
-
- 1. It has been proven in practice (it is already on its second
- generation).
-
- 2. It will shorten development time (needless to say how important it
- is now).
-
- The original interface was designed to be used by Tcl code, so it was
-slightly changed so it could be used through GDB/MI. This section
-describes the GDB/MI operations that will be available and gives some
-hints about their use.
-
- _Note_: In addition to the set of operations described here, we
-expect the GUI implementation of a variable window to require, at
-least, the following operations:
-
- * `-gdb-show' `output-radix'
-
- * `-stack-list-arguments'
-
- * `-stack-list-locals'
-
- * `-stack-select-frame'
-
-Introduction to Variable Objects in GDB/MI
-------------------------------------------
-
-The basic idea behind variable objects is the creation of a named object
-to represent a variable, an expression, a memory location or even a CPU
-register. For each object created, a set of operations is available for
-examining or changing its properties.
-
- Furthermore, complex data types, such as C structures, are
-represented in a tree format. For instance, the `struct' type variable
-is the root and the children will represent the struct members. If a
-child is itself of a complex type, it will also have children of its
-own. Appropriate language differences are handled for C, C++ and Java.
-
- When returning the actual values of the objects, this facility allows
-for the individual selection of the display format used in the result
-creation. It can be chosen among: binary, decimal, hexadecimal, octal
-and natural. Natural refers to a default format automatically chosen
-based on the variable type (like decimal for an `int', hex for
-pointers, etc.).
-
- The following is the complete set of GDB/MI operations defined to
-access this functionality:
-
-*Operation* *Description*
-`-var-create' create a variable object
-`-var-delete' delete the variable object and its children
-`-var-set-format' set the display format of this variable
-`-var-show-format' show the display format of this variable
-`-var-info-num-children' tells how many children this object has
-`-var-list-children' return a list of the object's children
-`-var-info-type' show the type of this variable object
-`-var-info-expression' print what this variable object represents
-`-var-show-attributes' is this variable editable? does it exist
- here?
-`-var-evaluate-expression' get the value of this variable
-`-var-assign' set the value of this variable
-`-var-update' update the variable and its children
-
- In the next subsection we describe each operation in detail and
-suggest how it can be used.
-
-Description And Use of Operations on Variable Objects
------------------------------------------------------
-
-The `-var-create' Command
--------------------------
-
-Synopsis
-........
-
- -var-create {NAME | "-"}
- {FRAME-ADDR | "*"} EXPRESSION
-
- This operation creates a variable object, which allows the
-monitoring of a variable, the result of an expression, a memory cell or
-a CPU register.
-
- The NAME parameter is the string by which the object can be
-referenced. It must be unique. If `-' is specified, the varobj system
-will generate a string "varNNNNNN" automatically. It will be unique
-provided that one does not specify NAME on that format. The command
-fails if a duplicate name is found.
-
- The frame under which the expression should be evaluated can be
-specified by FRAME-ADDR. A `*' indicates that the current frame should
-be used.
-
- EXPRESSION is any expression valid on the current language set (must
-not begin with a `*'), or one of the following:
-
- * `*ADDR', where ADDR is the address of a memory cell
-
- * `*ADDR-ADDR' -- a memory address range (TBD)
-
- * `$REGNAME' -- a CPU register name
-
-Result
-......
-
-This operation returns the name, number of children and the type of the
-object created. Type is returned as a string as the ones generated by
-the GDB CLI:
-
- name="NAME",numchild="N",type="TYPE"
-
-The `-var-delete' Command
--------------------------
-
-Synopsis
-........
-
- -var-delete NAME
-
- Deletes a previously created variable object and all of its children.
-
- Returns an error if the object NAME is not found.
-
-The `-var-set-format' Command
------------------------------
-
-Synopsis
-........
-
- -var-set-format NAME FORMAT-SPEC
-
- Sets the output format for the value of the object NAME to be
-FORMAT-SPEC.
-
- The syntax for the FORMAT-SPEC is as follows:
-
- FORMAT-SPEC ==>
- {binary | decimal | hexadecimal | octal | natural}
-
-The `-var-show-format' Command
-------------------------------
-
-Synopsis
-........
-
- -var-show-format NAME
-
- Returns the format used to display the value of the object NAME.
-
- FORMAT ==>
- FORMAT-SPEC
-
-The `-var-info-num-children' Command
-------------------------------------
-
-Synopsis
-........
-
- -var-info-num-children NAME
-
- Returns the number of children of a variable object NAME:
-
- numchild=N
-
-The `-var-list-children' Command
---------------------------------
-
-Synopsis
-........
-
- -var-list-children [PRINT-VALUES] NAME
-
- Returns a list of the children of the specified variable object.
-With just the variable object name as an argument or with an optional
-preceding argument of 0 or `--no-values', prints only the names of the
-variables. With an optional preceding argument of 1 or `--all-values',
-also prints their values.
-
-Example
-.......
-
- (gdb)
- -var-list-children n
- numchild=N,children=[{name=NAME,
- numchild=N,type=TYPE},(repeats N times)]
- (gdb)
- -var-list-children --all-values n
- numchild=N,children=[{name=NAME,
- numchild=N,value=VALUE,type=TYPE},(repeats N times)]
-
-The `-var-info-type' Command
-----------------------------
-
-Synopsis
-........
-
- -var-info-type NAME
-
- Returns the type of the specified variable NAME. The type is
-returned as a string in the same format as it is output by the GDB CLI:
-
- type=TYPENAME
-
-The `-var-info-expression' Command
-----------------------------------
-
-Synopsis
-........
-
- -var-info-expression NAME
-
- Returns what is represented by the variable object NAME:
-
- lang=LANG-SPEC,exp=EXPRESSION
-
-where LANG-SPEC is `{"C" | "C++" | "Java"}'.
-
-The `-var-show-attributes' Command
-----------------------------------
-
-Synopsis
-........
-
- -var-show-attributes NAME
-
- List attributes of the specified variable object NAME:
-
- status=ATTR [ ( ,ATTR )* ]
-
-where ATTR is `{ { editable | noneditable } | TBD }'.
-
-The `-var-evaluate-expression' Command
---------------------------------------
-
-Synopsis
-........
-
- -var-evaluate-expression NAME
-
- Evaluates the expression that is represented by the specified
-variable object and returns its value as a string in the current format
-specified for the object:
-
- value=VALUE
-
- Note that one must invoke `-var-list-children' for a variable before
-the value of a child variable can be evaluated.
-
-The `-var-assign' Command
--------------------------
-
-Synopsis
-........
-
- -var-assign NAME EXPRESSION
-
- Assigns the value of EXPRESSION to the variable object specified by
-NAME. The object must be `editable'. If the variable's value is
-altered by the assign, the variable will show up in any subsequent
-`-var-update' list.
-
-Example
-.......
-
- (gdb)
- -var-assign var1 3
- ^done,value="3"
- (gdb)
- -var-update *
- ^done,changelist=[{name="var1",in_scope="true",type_changed="false"}]
- (gdb)
-
-The `-var-update' Command
--------------------------
-
-Synopsis
-........
-
- -var-update {NAME | "*"}
-
- Update the value of the variable object NAME by evaluating its
-expression after fetching all the new values from memory or registers.
-A `*' causes all existing variable objects to be updated.
-
-
-File: gdb.info, Node: Annotations, Next: GDB/MI, Prev: Emacs, Up: Top
-
-GDB Annotations
-***************
-
-This chapter describes annotations in GDB. Annotations were designed
-to interface GDB to graphical user interfaces or other similar programs
-which want to interact with GDB at a relatively high level.
-
- The annotation mechanism has largely been superseeded by GDB/MI
-(*note GDB/MI::).
-
-* Menu:
-
-* Annotations Overview:: What annotations are; the general syntax.
-* Server Prefix:: Issuing a command without affecting user state.
-* Prompting:: Annotations marking GDB's need for input.
-* Errors:: Annotations for error messages.
-* Invalidation:: Some annotations describe things now invalid.
-* Annotations for Running::
- Whether the program is running, how it stopped, etc.
-* Source Annotations:: Annotations describing source code.
-
-
-File: gdb.info, Node: Annotations Overview, Next: Server Prefix, Up: Annotations
-
-What is an Annotation?
-======================
-
-Annotations start with a newline character, two `control-z' characters,
-and the name of the annotation. If there is no additional information
-associated with this annotation, the name of the annotation is followed
-immediately by a newline. If there is additional information, the name
-of the annotation is followed by a space, the additional information,
-and a newline. The additional information cannot contain newline
-characters.
-
- Any output not beginning with a newline and two `control-z'
-characters denotes literal output from GDB. Currently there is no need
-for GDB to output a newline followed by two `control-z' characters, but
-if there was such a need, the annotations could be extended with an
-`escape' annotation which means those three characters as output.
-
- The annotation LEVEL, which is specified using the `--annotate'
-command line option (*note Mode Options::), controls how much
-information GDB prints together with its prompt, values of expressions,
-source lines, and other types of output. Level 0 is for no anntations,
-level 1 is for use when GDB is run as a subprocess of GNU Emacs, level
-3 is the maximum annotation suitable for programs that control GDB, and
-level 2 annotations have been made obsolete (*note Limitations of the
-Annotation Interface: (annotate)Limitations.). This chapter describes
-level 3 annotations.
-
- A simple example of starting up GDB with annotations is:
-
- $ gdb --annotate=3
- GNU gdb 6.0
- Copyright 2003 Free Software Foundation, Inc.
- GDB is free software, covered by the GNU General Public License,
- and you are welcome to change it and/or distribute copies of it
- under certain conditions.
- Type "show copying" to see the conditions.
- There is absolutely no warranty for GDB. Type "show warranty"
- for details.
- This GDB was configured as "i386-pc-linux-gnu"
-
- ^Z^Zpre-prompt
- (gdb)
- ^Z^Zprompt
- quit
-
- ^Z^Zpost-prompt
- $
-
- Here `quit' is input to GDB; the rest is output from GDB. The three
-lines beginning `^Z^Z' (where `^Z' denotes a `control-z' character) are
-annotations; the rest is output from GDB.
-
-
-File: gdb.info, Node: Server Prefix, Next: Prompting, Prev: Annotations Overview, Up: Annotations
-
-The Server Prefix
-=================
-
-To issue a command to GDB without affecting certain aspects of the
-state which is seen by users, prefix it with `server '. This means
-that this command will not affect the command history, nor will it
-affect GDB's notion of which command to repeat if <RET> is pressed on a
-line by itself.
-
- The server prefix does not affect the recording of values into the
-value history; to print a value without recording it into the value
-history, use the `output' command instead of the `print' command.
-
-
-File: gdb.info, Node: Prompting, Next: Errors, Prev: Server Prefix, Up: Annotations
-
-Annotation for GDB Input
-========================
-
-When GDB prompts for input, it annotates this fact so it is possible to
-know when to send output, when the output from a given command is over,
-etc.
-
- Different kinds of input each have a different "input type". Each
-input type has three annotations: a `pre-' annotation, which denotes
-the beginning of any prompt which is being output, a plain annotation,
-which denotes the end of the prompt, and then a `post-' annotation
-which denotes the end of any echo which may (or may not) be associated
-with the input. For example, the `prompt' input type features the
-following annotations:
-
- ^Z^Zpre-prompt
- ^Z^Zprompt
- ^Z^Zpost-prompt
-
- The input types are
-
-`prompt'
- When GDB is prompting for a command (the main GDB prompt).
-
-`commands'
- When GDB prompts for a set of commands, like in the `commands'
- command. The annotations are repeated for each command which is
- input.
-
-`overload-choice'
- When GDB wants the user to select between various overloaded
- functions.
-
-`query'
- When GDB wants the user to confirm a potentially dangerous
- operation.
-
-`prompt-for-continue'
- When GDB is asking the user to press return to continue. Note:
- Don't expect this to work well; instead use `set height 0' to
- disable prompting. This is because the counting of lines is buggy
- in the presence of annotations.
-
-
-File: gdb.info, Node: Errors, Next: Invalidation, Prev: Prompting, Up: Annotations
-
-Errors
-======
-
- ^Z^Zquit
-
- This annotation occurs right before GDB responds to an interrupt.
-
- ^Z^Zerror
-
- This annotation occurs right before GDB responds to an error.
-
- Quit and error annotations indicate that any annotations which GDB
-was in the middle of may end abruptly. For example, if a
-`value-history-begin' annotation is followed by a `error', one cannot
-expect to receive the matching `value-history-end'. One cannot expect
-not to receive it either, however; an error annotation does not
-necessarily mean that GDB is immediately returning all the way to the
-top level.
-
- A quit or error annotation may be preceded by
-
- ^Z^Zerror-begin
-
- Any output between that and the quit or error annotation is the error
-message.
-
- Warning messages are not yet annotated.
-
-
-File: gdb.info, Node: Invalidation, Next: Annotations for Running, Prev: Errors, Up: Annotations
-
-Invalidation Notices
-====================
-
-The following annotations say that certain pieces of state may have
-changed.
-
-`^Z^Zframes-invalid'
- The frames (for example, output from the `backtrace' command) may
- have changed.
-
-`^Z^Zbreakpoints-invalid'
- The breakpoints may have changed. For example, the user just
- added or deleted a breakpoint.
-
-
-File: gdb.info, Node: Annotations for Running, Next: Source Annotations, Prev: Invalidation, Up: Annotations
-
-Running the Program
-===================
-
-When the program starts executing due to a GDB command such as `step'
-or `continue',
-
- ^Z^Zstarting
-
- is output. When the program stops,
-
- ^Z^Zstopped
-
- is output. Before the `stopped' annotation, a variety of
-annotations describe how the program stopped.
-
-`^Z^Zexited EXIT-STATUS'
- The program exited, and EXIT-STATUS is the exit status (zero for
- successful exit, otherwise nonzero).
-
-`^Z^Zsignalled'
- The program exited with a signal. After the `^Z^Zsignalled', the
- annotation continues:
-
- INTRO-TEXT
- ^Z^Zsignal-name
- NAME
- ^Z^Zsignal-name-end
- MIDDLE-TEXT
- ^Z^Zsignal-string
- STRING
- ^Z^Zsignal-string-end
- END-TEXT
-
- where NAME is the name of the signal, such as `SIGILL' or
- `SIGSEGV', and STRING is the explanation of the signal, such as
- `Illegal Instruction' or `Segmentation fault'. INTRO-TEXT,
- MIDDLE-TEXT, and END-TEXT are for the user's benefit and have no
- particular format.
-
-`^Z^Zsignal'
- The syntax of this annotation is just like `signalled', but GDB is
- just saying that the program received the signal, not that it was
- terminated with it.
-
-`^Z^Zbreakpoint NUMBER'
- The program hit breakpoint number NUMBER.
-
-`^Z^Zwatchpoint NUMBER'
- The program hit watchpoint number NUMBER.
-
-
-File: gdb.info, Node: Source Annotations, Prev: Annotations for Running, Up: Annotations
-
-Displaying Source
-=================
-
-The following annotation is used instead of displaying source code:
-
- ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
-
- where FILENAME is an absolute file name indicating which source
-file, LINE is the line number within that file (where 1 is the first
-line in the file), CHARACTER is the character position within the file
-(where 0 is the first character in the file) (for most debug formats
-this will necessarily point to the beginning of a line), MIDDLE is
-`middle' if ADDR is in the middle of the line, or `beg' if ADDR is at
-the beginning of the line, and ADDR is the address in the target
-program associated with the source which is being displayed. ADDR is
-in the form `0x' followed by one or more lowercase hex digits (note
-that this does not depend on the language).
-
-
-File: gdb.info, Node: GDB Bugs, Next: Formatting Documentation, Prev: GDB/MI, Up: Top
-
-Reporting Bugs in GDB
-*********************
-
-Your bug reports play an essential role in making GDB reliable.
-
- Reporting a bug may help you by bringing a solution to your problem,
-or it may not. But in any case the principal function of a bug report
-is to help the entire community by making the next version of GDB work
-better. Bug reports are your contribution to the maintenance of GDB.
-
- In order for a bug report to serve its purpose, you must include the
-information that enables us to fix the bug.
-
-* Menu:
-
-* Bug Criteria:: Have you found a bug?
-* Bug Reporting:: How to report bugs
-
-
-File: gdb.info, Node: Bug Criteria, Next: Bug Reporting, Up: GDB Bugs
-
-Have you found a bug?
-=====================
-
-If you are not sure whether you have found a bug, here are some
-guidelines:
-
- * If the debugger gets a fatal signal, for any input whatever, that
- is a GDB bug. Reliable debuggers never crash.
-
- * If GDB produces an error message for valid input, that is a bug.
- (Note that if you're cross debugging, the problem may also be
- somewhere in the connection to the target.)
-
- * If GDB does not produce an error message for invalid input, that
- is a bug. However, you should note that your idea of "invalid
- input" might be our idea of "an extension" or "support for
- traditional practice".
-
- * If you are an experienced user of debugging tools, your suggestions
- for improvement of GDB are welcome in any case.
-
-
-File: gdb.info, Node: Bug Reporting, Prev: Bug Criteria, Up: GDB Bugs
-
-How to report bugs
-==================
-
-A number of companies and individuals offer support for GNU products.
-If you obtained GDB from a support organization, we recommend you
-contact that organization first.
-
- You can find contact information for many support companies and
-individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
-
- In any event, we also recommend that you submit bug reports for GDB.
-The prefered method is to submit them directly using GDB's Bugs web
-page (http://www.gnu.org/software/gdb/bugs/). Alternatively, the
-e-mail gateway <bug-gdb@gnu.org> can be used.
-
- *Do not send bug reports to `info-gdb', or to `help-gdb', or to any
-newsgroups.* Most users of GDB do not want to receive bug reports.
-Those that do have arranged to receive `bug-gdb'.
-
- The mailing list `bug-gdb' has a newsgroup `gnu.gdb.bug' which
-serves as a repeater. The mailing list and the newsgroup carry exactly
-the same messages. Often people think of posting bug reports to the
-newsgroup instead of mailing them. This appears to work, but it has one
-problem which can be crucial: a newsgroup posting often lacks a mail
-path back to the sender. Thus, if we need to ask for more information,
-we may be unable to reach you. For this reason, it is better to send
-bug reports to the mailing list.
-
- The fundamental principle of reporting bugs usefully is this:
-*report all the facts*. If you are not sure whether to state a fact or
-leave it out, state it!
-
- Often people omit facts because they think they know what causes the
-problem and assume that some details do not matter. Thus, you might
-assume that the name of the variable you use in an example does not
-matter. Well, probably it does not, but one cannot be sure. Perhaps
-the bug is a stray memory reference which happens to fetch from the
-location where that name is stored in memory; perhaps, if the name were
-different, the contents of that location would fool the debugger into
-doing the right thing despite the bug. Play it safe and give a
-specific, complete example. That is the easiest thing for you to do,
-and the most helpful.
-
- Keep in mind that the purpose of a bug report is to enable us to fix
-the bug. It may be that the bug has been reported previously, but
-neither you nor we can know that unless your bug report is complete and
-self-contained.
-
- Sometimes people give a few sketchy facts and ask, "Does this ring a
-bell?" Those bug reports are useless, and we urge everyone to _refuse
-to respond to them_ except to chide the sender to report bugs properly.
-
- To enable us to fix the bug, you should include all these things:
-
- * The version of GDB. GDB announces it if you start with no
- arguments; you can also print it at any time using `show version'.
-
- Without this, we will not know whether there is any point in
- looking for the bug in the current version of GDB.
-
- * The type of machine you are using, and the operating system name
- and version number.
-
- * What compiler (and its version) was used to compile GDB--e.g.
- "gcc-2.8.1".
-
- * What compiler (and its version) was used to compile the program
- you are debugging--e.g. "gcc-2.8.1", or "HP92453-01 A.10.32.03 HP
- C Compiler". For GCC, you can say `gcc --version' to get this
- information; for other compilers, see the documentation for those
- compilers.
-
- * The command arguments you gave the compiler to compile your
- example and observe the bug. For example, did you use `-O'? To
- guarantee you will not omit something important, list them all. A
- copy of the Makefile (or the output from make) is sufficient.
-
- If we were to try to guess the arguments, we would probably guess
- wrong and then we might not encounter the bug.
-
- * A complete input script, and all necessary source files, that will
- reproduce the bug.
-
- * A description of what behavior you observe that you believe is
- incorrect. For example, "It gets a fatal signal."
-
- Of course, if the bug is that GDB gets a fatal signal, then we
- will certainly notice it. But if the bug is incorrect output, we
- might not notice unless it is glaringly wrong. You might as well
- not give us a chance to make a mistake.
-
- Even if the problem you experience is a fatal signal, you should
- still say so explicitly. Suppose something strange is going on,
- such as, your copy of GDB is out of synch, or you have encountered
- a bug in the C library on your system. (This has happened!) Your
- copy might crash and ours would not. If you told us to expect a
- crash, then when ours fails to crash, we would know that the bug
- was not happening for us. If you had not told us to expect a
- crash, then we would not be able to draw any conclusion from our
- observations.
-
- * If you wish to suggest changes to the GDB source, send us context
- diffs. If you even discuss something in the GDB source, refer to
- it by context, not by line number.
-
- The line numbers in our development sources will not match those
- in your sources. Your line numbers would convey no useful
- information to us.
-
-
- Here are some things that are not necessary:
-
- * A description of the envelope of the bug.
-
- Often people who encounter a bug spend a lot of time investigating
- which changes to the input file will make the bug go away and which
- changes will not affect it.
-
- This is often time consuming and not very useful, because the way
- we will find the bug is by running a single example under the
- debugger with breakpoints, not by pure deduction from a series of
- examples. We recommend that you save your time for something else.
-
- Of course, if you can find a simpler example to report _instead_
- of the original one, that is a convenience for us. Errors in the
- output will be easier to spot, running under the debugger will take
- less time, and so on.
-
- However, simplification is not vital; if you do not want to do
- this, report the bug anyway and send us the entire test case you
- used.
-
- * A patch for the bug.
-
- A patch for the bug does help us if it is a good one. But do not
- omit the necessary information, such as the test case, on the
- assumption that a patch is all we need. We might see problems
- with your patch and decide to fix the problem another way, or we
- might not understand it at all.
-
- Sometimes with a program as complicated as GDB it is very hard to
- construct an example that will make the program follow a certain
- path through the code. If you do not send us the example, we will
- not be able to construct one, so we will not be able to verify
- that the bug is fixed.
-
- And if we cannot understand what bug you are trying to fix, or why
- your patch should be an improvement, we will not install it. A
- test case will help us to understand.
-
- * A guess about what the bug is or what it depends on.
-
- Such guesses are usually wrong. Even we cannot guess right about
- such things without first using the debugger to find the facts.
-
-
-File: gdb.info, Node: Command Line Editing, Next: Using History Interactively, Prev: Formatting Documentation, Up: Top
-
-Command Line Editing
-********************
-
-This chapter describes the basic features of the GNU command line
-editing interface.
-
-* Menu:
-
-* Introduction and Notation:: Notation used in this text.
-* Readline Interaction:: The minimum set of commands for editing a line.
-* Readline Init File:: Customizing Readline from a user's view.
-* Bindable Readline Commands:: A description of most of the Readline commands
- available for binding
-* Readline vi Mode:: A short description of how to make Readline
- behave like the vi editor.
-
-
-File: gdb.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
-
-Introduction to Line Editing
-============================
-
-The following paragraphs describe the notation used to represent
-keystrokes.
-
- The text `C-k' is read as `Control-K' and describes the character
-produced when the <k> key is pressed while the Control key is depressed.
-
- The text `M-k' is read as `Meta-K' and describes the character
-produced when the Meta key (if you have one) is depressed, and the <k>
-key is pressed. The Meta key is labeled <ALT> on many keyboards. On
-keyboards with two keys labeled <ALT> (usually to either side of the
-space bar), the <ALT> on the left side is generally set to work as a
-Meta key. The <ALT> key on the right may also be configured to work as
-a Meta key or may be configured as some other modifier, such as a
-Compose key for typing accented characters.
-
- If you do not have a Meta or <ALT> key, or another key working as a
-Meta key, the identical keystroke can be generated by typing <ESC>
-_first_, and then typing <k>. Either process is known as "metafying"
-the <k> key.
-
- The text `M-C-k' is read as `Meta-Control-k' and describes the
-character produced by "metafying" `C-k'.
-
- In addition, several keys have their own names. Specifically,
-<DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
-when seen in this text, or in an init file (*note Readline Init File::).
-If your keyboard lacks a <LFD> key, typing <C-j> will produce the
-desired character. The <RET> key may be labeled <Return> or <Enter> on
-some keyboards.
-
-
-File: gdb.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
-
-Readline Interaction
-====================
-
-Often during an interactive session you type in a long line of text,
-only to notice that the first word on the line is misspelled. The
-Readline library gives you a set of commands for manipulating the text
-as you type it in, allowing you to just fix your typo, and not forcing
-you to retype the majority of the line. Using these editing commands,
-you move the cursor to the place that needs correction, and delete or
-insert the text of the corrections. Then, when you are satisfied with
-the line, you simply press <RET>. You do not have to be at the end of
-the line to press <RET>; the entire line is accepted regardless of the
-location of the cursor within the line.
-
-* Menu:
-
-* Readline Bare Essentials:: The least you need to know about Readline.
-* Readline Movement Commands:: Moving about the input line.
-* Readline Killing Commands:: How to delete text, and how to get it back!
-* Readline Arguments:: Giving numeric arguments to commands.
-* Searching:: Searching through previous lines.
-
-
-File: gdb.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
-
-Readline Bare Essentials
-------------------------
-
-In order to enter characters into the line, simply type them. The typed
-character appears where the cursor was, and then the cursor moves one
-space to the right. If you mistype a character, you can use your erase
-character to back up and delete the mistyped character.
-
- Sometimes you may mistype a character, and not notice the error
-until you have typed several other characters. In that case, you can
-type `C-b' to move the cursor to the left, and then correct your
-mistake. Afterwards, you can move the cursor to the right with `C-f'.
-
- When you add text in the middle of a line, you will notice that
-characters to the right of the cursor are `pushed over' to make room
-for the text that you have inserted. Likewise, when you delete text
-behind the cursor, characters to the right of the cursor are `pulled
-back' to fill in the blank space created by the removal of the text. A
-list of the bare essentials for editing the text of an input line
-follows.
-
-`C-b'
- Move back one character.
-
-`C-f'
- Move forward one character.
-
-<DEL> or <Backspace>
- Delete the character to the left of the cursor.
-
-`C-d'
- Delete the character underneath the cursor.
-
-Printing characters
- Insert the character into the line at the cursor.
-
-`C-_' or `C-x C-u'
- Undo the last editing command. You can undo all the way back to an
- empty line.
-
-(Depending on your configuration, the <Backspace> key be set to delete
-the character to the left of the cursor and the <DEL> key set to delete
-the character underneath the cursor, like `C-d', rather than the
-character to the left of the cursor.)
-
-
-File: gdb.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
-
-Readline Movement Commands
---------------------------
-
-The above table describes the most basic keystrokes that you need in
-order to do editing of the input line. For your convenience, many
-other commands have been added in addition to `C-b', `C-f', `C-d', and
-<DEL>. Here are some commands for moving more rapidly about the line.
-
-`C-a'
- Move to the start of the line.
-
-`C-e'
- Move to the end of the line.
-
-`M-f'
- Move forward a word, where a word is composed of letters and
- digits.
-
-`M-b'
- Move backward a word.
-
-`C-l'
- Clear the screen, reprinting the current line at the top.
-
- Notice how `C-f' moves forward a character, while `M-f' moves
-forward a word. It is a loose convention that control keystrokes
-operate on characters while meta keystrokes operate on words.
-
-
-File: gdb.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
-
-Readline Killing Commands
--------------------------
-
-"Killing" text means to delete the text from the line, but to save it
-away for later use, usually by "yanking" (re-inserting) it back into
-the line. (`Cut' and `paste' are more recent jargon for `kill' and
-`yank'.)
-
- If the description for a command says that it `kills' text, then you
-can be sure that you can get the text back in a different (or the same)
-place later.
-
- When you use a kill command, the text is saved in a "kill-ring".
-Any number of consecutive kills save all of the killed text together, so
-that when you yank it back, you get it all. The kill ring is not line
-specific; the text that you killed on a previously typed line is
-available to be yanked back later, when you are typing another line.
-
- Here is the list of commands for killing text.
-
-`C-k'
- Kill the text from the current cursor position to the end of the
- line.
-
-`M-d'
- Kill from the cursor to the end of the current word, or, if between
- words, to the end of the next word. Word boundaries are the same
- as those used by `M-f'.
-
-`M-<DEL>'
- Kill from the cursor the start of the current word, or, if between
- words, to the start of the previous word. Word boundaries are the
- same as those used by `M-b'.
-
-`C-w'
- Kill from the cursor to the previous whitespace. This is
- different than `M-<DEL>' because the word boundaries differ.
-
-
- Here is how to "yank" the text back into the line. Yanking means to
-copy the most-recently-killed text from the kill buffer.
-
-`C-y'
- Yank the most recently killed text back into the buffer at the
- cursor.
-
-`M-y'
- Rotate the kill-ring, and yank the new top. You can only do this
- if the prior command is `C-y' or `M-y'.
-
-
-File: gdb.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction
-
-Readline Arguments
-------------------
-
-You can pass numeric arguments to Readline commands. Sometimes the
-argument acts as a repeat count, other times it is the sign of the
-argument that is significant. If you pass a negative argument to a
-command which normally acts in a forward direction, that command will
-act in a backward direction. For example, to kill text back to the
-start of the line, you might type `M-- C-k'.
-
- The general way to pass numeric arguments to a command is to type
-meta digits before the command. If the first `digit' typed is a minus
-sign (`-'), then the sign of the argument will be negative. Once you
-have typed one meta digit to get the argument started, you can type the
-remainder of the digits, and then the command. For example, to give
-the `C-d' command an argument of 10, you could type `M-1 0 C-d', which
-will delete the next ten characters on the input line.
-
diff --git a/gnu/usr.bin/binutils/gdb/doc/gdb.info-3 b/gnu/usr.bin/binutils/gdb/doc/gdb.info-3
deleted file mode 100644
index 5bf03fe067c..00000000000
--- a/gnu/usr.bin/binutils/gdb/doc/gdb.info-3
+++ /dev/null
@@ -1,6665 +0,0 @@
-This is gdb.info, produced by makeinfo version 4.6 from ./gdb.texinfo.
-
-INFO-DIR-SECTION Programming & development tools.
-START-INFO-DIR-ENTRY
-* Gdb: (gdb). The GNU debugger.
-END-INFO-DIR-ENTRY
-
- This file documents the GNU debugger GDB.
-
- This is the Ninth Edition, of `Debugging with GDB: the GNU
-Source-Level Debugger' for GDB Version 6.1.
-
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
-1998,
-1999, 2000, 2001, 2002, 2003, 2004 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.1 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 Free Software Foundation's Back-Cover Text is: "You have
-freedom to copy and modify this GNU Manual, like GNU software. Copies
-published by the Free Software Foundation raise funds for GNU
-development."
-
-
-File: gdb.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction
-
-Searching for Commands in the History
--------------------------------------
-
-Readline provides commands for searching through the command history
-for lines containing a specified string. There are two search modes:
-"incremental" and "non-incremental".
-
- Incremental searches begin before the user has finished typing the
-search string. As each character of the search string is typed,
-Readline displays the next entry from the history matching the string
-typed so far. An incremental search requires only as many characters
-as needed to find the desired history entry. To search backward in the
-history for a particular string, type `C-r'. Typing `C-s' searches
-forward through the history. The characters present in the value of
-the `isearch-terminators' variable are used to terminate an incremental
-search. If that variable has not been assigned a value, the <ESC> and
-`C-J' characters will terminate an incremental search. `C-g' will
-abort an incremental search and restore the original line. When the
-search is terminated, the history entry containing the search string
-becomes the current line.
-
- To find other matching entries in the history list, type `C-r' or
-`C-s' as appropriate. This will search backward or forward in the
-history for the next entry matching the search string typed so far.
-Any other key sequence bound to a Readline command will terminate the
-search and execute that command. For instance, a <RET> will terminate
-the search and accept the line, thereby executing the command from the
-history list. A movement command will terminate the search, make the
-last line found the current line, and begin editing.
-
- Readline remembers the last incremental search string. If two
-`C-r's are typed without any intervening characters defining a new
-search string, any remembered search string is used.
-
- Non-incremental searches read the entire search string before
-starting to search for matching history lines. The search string may be
-typed by the user or be part of the contents of the current line.
-
-
-File: gdb.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
-
-Readline Init File
-==================
-
-Although the Readline library comes with a set of Emacs-like
-keybindings installed by default, it is possible to use a different set
-of keybindings. Any user can customize programs that use Readline by
-putting commands in an "inputrc" file, conventionally in his home
-directory. The name of this file is taken from the value of the
-environment variable `INPUTRC'. If that variable is unset, the default
-is `~/.inputrc'.
-
- When a program which uses the Readline library starts up, the init
-file is read, and the key bindings are set.
-
- In addition, the `C-x C-r' command re-reads this init file, thus
-incorporating any changes that you might have made to it.
-
-* Menu:
-
-* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
-
-* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
-
-* Sample Init File:: An example inputrc file.
-
-
-File: gdb.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File
-
-Readline Init File Syntax
--------------------------
-
-There are only a few basic constructs allowed in the Readline init
-file. Blank lines are ignored. Lines beginning with a `#' are
-comments. Lines beginning with a `$' indicate conditional constructs
-(*note Conditional Init Constructs::). Other lines denote variable
-settings and key bindings.
-
-Variable Settings
- You can modify the run-time behavior of Readline by altering the
- values of variables in Readline using the `set' command within the
- init file. The syntax is simple:
-
- set VARIABLE VALUE
-
- Here, for example, is how to change from the default Emacs-like
- key binding to use `vi' line editing commands:
-
- set editing-mode vi
-
- Variable names and values, where appropriate, are recognized
- without regard to case.
-
- A great deal of run-time behavior is changeable with the following
- variables.
-
- `bell-style'
- Controls what happens when Readline wants to ring the
- terminal bell. If set to `none', Readline never rings the
- bell. If set to `visible', Readline uses a visible bell if
- one is available. If set to `audible' (the default),
- Readline attempts to ring the terminal's bell.
-
- `comment-begin'
- The string to insert at the beginning of the line when the
- `insert-comment' command is executed. The default value is
- `"#"'.
-
- `completion-ignore-case'
- If set to `on', Readline performs filename matching and
- completion in a case-insensitive fashion. The default value
- is `off'.
-
- `completion-query-items'
- The number of possible completions that determines when the
- user is asked whether he wants to see the list of
- possibilities. If the number of possible completions is
- greater than this value, Readline will ask the user whether
- or not he wishes to view them; otherwise, they are simply
- listed. This variable must be set to an integer value
- greater than or equal to 0. The default limit is `100'.
-
- `convert-meta'
- If set to `on', Readline will convert characters with the
- eighth bit set to an ASCII key sequence by stripping the
- eighth bit and prefixing an <ESC> character, converting them
- to a meta-prefixed key sequence. The default value is `on'.
-
- `disable-completion'
- If set to `On', Readline will inhibit word completion.
- Completion characters will be inserted into the line as if
- they had been mapped to `self-insert'. The default is `off'.
-
- `editing-mode'
- The `editing-mode' variable controls which default set of key
- bindings is used. By default, Readline starts up in Emacs
- editing mode, where the keystrokes are most similar to Emacs.
- This variable can be set to either `emacs' or `vi'.
-
- `enable-keypad'
- When set to `on', Readline will try to enable the application
- keypad when it is called. Some systems need this to enable
- the arrow keys. The default is `off'.
-
- `expand-tilde'
- If set to `on', tilde expansion is performed when Readline
- attempts word completion. The default is `off'.
-
- If set to `on', the history code attempts to place point at
- the same location on each history line retrived with
- `previous-history' or `next-history'.
-
- `horizontal-scroll-mode'
- This variable can be set to either `on' or `off'. Setting it
- to `on' means that the text of the lines being edited will
- scroll horizontally on a single screen line when they are
- longer than the width of the screen, instead of wrapping onto
- a new screen line. By default, this variable is set to `off'.
-
- `input-meta'
- If set to `on', Readline will enable eight-bit input (it will
- not clear the eighth bit in the characters it reads),
- regardless of what the terminal claims it can support. The
- default value is `off'. The name `meta-flag' is a synonym
- for this variable.
-
- `isearch-terminators'
- The string of characters that should terminate an incremental
- search without subsequently executing the character as a
- command (*note Searching::). If this variable has not been
- given a value, the characters <ESC> and `C-J' will terminate
- an incremental search.
-
- `keymap'
- Sets Readline's idea of the current keymap for key binding
- commands. Acceptable `keymap' names are `emacs',
- `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
- `vi-command', and `vi-insert'. `vi' is equivalent to
- `vi-command'; `emacs' is equivalent to `emacs-standard'. The
- default value is `emacs'. The value of the `editing-mode'
- variable also affects the default keymap.
-
- `mark-directories'
- If set to `on', completed directory names have a slash
- appended. The default is `on'.
-
- `mark-modified-lines'
- This variable, when set to `on', causes Readline to display an
- asterisk (`*') at the start of history lines which have been
- modified. This variable is `off' by default.
-
- `mark-symlinked-directories'
- If set to `on', completed names which are symbolic links to
- directories have a slash appended (subject to the value of
- `mark-directories'). The default is `off'.
-
- `match-hidden-files'
- This variable, when set to `on', causes Readline to match
- files whose names begin with a `.' (hidden files) when
- performing filename completion, unless the leading `.' is
- supplied by the user in the filename to be completed. This
- variable is `on' by default.
-
- `output-meta'
- If set to `on', Readline will display characters with the
- eighth bit set directly rather than as a meta-prefixed escape
- sequence. The default is `off'.
-
- `page-completions'
- If set to `on', Readline uses an internal `more'-like pager
- to display a screenful of possible completions at a time.
- This variable is `on' by default.
-
- `print-completions-horizontally'
- If set to `on', Readline will display completions with matches
- sorted horizontally in alphabetical order, rather than down
- the screen. The default is `off'.
-
- `show-all-if-ambiguous'
- This alters the default behavior of the completion functions.
- If set to `on', words which have more than one possible
- completion cause the matches to be listed immediately instead
- of ringing the bell. The default value is `off'.
-
- `visible-stats'
- If set to `on', a character denoting a file's type is
- appended to the filename when listing possible completions.
- The default is `off'.
-
-
-Key Bindings
- The syntax for controlling key bindings in the init file is
- simple. First you need to find the name of the command that you
- want to change. The following sections contain tables of the
- command name, the default keybinding, if any, and a short
- description of what the command does.
-
- Once you know the name of the command, simply place on a line in
- the init file the name of the key you wish to bind the command to,
- a colon, and then the name of the command. The name of the key
- can be expressed in different ways, depending on what you find most
- comfortable.
-
- In addition to command names, readline allows keys to be bound to
- a string that is inserted when the key is pressed (a MACRO).
-
- KEYNAME: FUNCTION-NAME or MACRO
- KEYNAME is the name of a key spelled out in English. For
- example:
- Control-u: universal-argument
- Meta-Rubout: backward-kill-word
- Control-o: "> output"
-
- In the above example, `C-u' is bound to the function
- `universal-argument', `M-DEL' is bound to the function
- `backward-kill-word', and `C-o' is bound to run the macro
- expressed on the right hand side (that is, to insert the text
- `> output' into the line).
-
- A number of symbolic character names are recognized while
- processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
- NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
-
- "KEYSEQ": FUNCTION-NAME or MACRO
- KEYSEQ differs from KEYNAME above in that strings denoting an
- entire key sequence can be specified, by placing the key
- sequence in double quotes. Some GNU Emacs style key escapes
- can be used, as in the following example, but the special
- character names are not recognized.
-
- "\C-u": universal-argument
- "\C-x\C-r": re-read-init-file
- "\e[11~": "Function Key 1"
-
- In the above example, `C-u' is again bound to the function
- `universal-argument' (just as it was in the first example),
- `C-x C-r' is bound to the function `re-read-init-file', and
- `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function
- Key 1'.
-
-
- The following GNU Emacs style escape sequences are available when
- specifying key sequences:
-
- `\C-'
- control prefix
-
- `\M-'
- meta prefix
-
- `\e'
- an escape character
-
- `\\'
- backslash
-
- `\"'
- <">, a double quotation mark
-
- `\''
- <'>, a single quote or apostrophe
-
- In addition to the GNU Emacs style escape sequences, a second set
- of backslash escapes is available:
-
- `\a'
- alert (bell)
-
- `\b'
- backspace
-
- `\d'
- delete
-
- `\f'
- form feed
-
- `\n'
- newline
-
- `\r'
- carriage return
-
- `\t'
- horizontal tab
-
- `\v'
- vertical tab
-
- `\NNN'
- the eight-bit character whose value is the octal value NNN
- (one to three digits)
-
- `\xHH'
- the eight-bit character whose value is the hexadecimal value
- HH (one or two hex digits)
-
- When entering the text of a macro, single or double quotes must be
- used to indicate a macro definition. Unquoted text is assumed to
- be a function name. In the macro body, the backslash escapes
- described above are expanded. Backslash will quote any other
- character in the macro text, including `"' and `''. For example,
- the following binding will make `C-x \' insert a single `\' into
- the line:
- "\C-x\\": "\\"
-
-
-
-File: gdb.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File
-
-Conditional Init Constructs
----------------------------
-
-Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key bindings
-and variable settings to be performed as the result of tests. There
-are four parser directives used.
-
-`$if'
- The `$if' construct allows bindings to be made based on the
- editing mode, the terminal being used, or the application using
- Readline. The text of the test extends to the end of the line; no
- characters are required to isolate it.
-
- `mode'
- The `mode=' form of the `$if' directive is used to test
- whether Readline is in `emacs' or `vi' mode. This may be
- used in conjunction with the `set keymap' command, for
- instance, to set bindings in the `emacs-standard' and
- `emacs-ctlx' keymaps only if Readline is starting out in
- `emacs' mode.
-
- `term'
- The `term=' form may be used to include terminal-specific key
- bindings, perhaps to bind the key sequences output by the
- terminal's function keys. The word on the right side of the
- `=' is tested against both the full name of the terminal and
- the portion of the terminal name before the first `-'. This
- allows `sun' to match both `sun' and `sun-cmd', for instance.
-
- `application'
- The APPLICATION construct is used to include
- application-specific settings. Each program using the
- Readline library sets the APPLICATION NAME, and you can test
- for a particular value. This could be used to bind key
- sequences to functions useful for a specific program. For
- instance, the following command adds a key sequence that
- quotes the current or previous word in Bash:
- $if Bash
- # Quote the current or previous word
- "\C-xq": "\eb\"\ef\""
- $endif
-
-`$endif'
- This command, as seen in the previous example, terminates an `$if'
- command.
-
-`$else'
- Commands in this branch of the `$if' directive are executed if the
- test fails.
-
-`$include'
- This directive takes a single filename as an argument and reads
- commands and bindings from that file. For example, the following
- directive reads from `/etc/inputrc':
- $include /etc/inputrc
-
-
-File: gdb.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File
-
-Sample Init File
-----------------
-
-Here is an example of an INPUTRC file. This illustrates key binding,
-variable assignment, and conditional syntax.
-
-
- # This file controls the behaviour of line input editing for
- # programs that use the GNU Readline library. Existing
- # programs include FTP, Bash, and GDB.
- #
- # You can re-read the inputrc file with C-x C-r.
- # Lines beginning with '#' are comments.
- #
- # First, include any systemwide bindings and variable
- # assignments from /etc/Inputrc
- $include /etc/Inputrc
-
- #
- # Set various bindings for emacs mode.
-
- set editing-mode emacs
-
- $if mode=emacs
-
- Meta-Control-h: backward-kill-word Text after the function name is ignored
-
- #
- # Arrow keys in keypad mode
- #
- #"\M-OD": backward-char
- #"\M-OC": forward-char
- #"\M-OA": previous-history
- #"\M-OB": next-history
- #
- # Arrow keys in ANSI mode
- #
- "\M-[D": backward-char
- "\M-[C": forward-char
- "\M-[A": previous-history
- "\M-[B": next-history
- #
- # Arrow keys in 8 bit keypad mode
- #
- #"\M-\C-OD": backward-char
- #"\M-\C-OC": forward-char
- #"\M-\C-OA": previous-history
- #"\M-\C-OB": next-history
- #
- # Arrow keys in 8 bit ANSI mode
- #
- #"\M-\C-[D": backward-char
- #"\M-\C-[C": forward-char
- #"\M-\C-[A": previous-history
- #"\M-\C-[B": next-history
-
- C-q: quoted-insert
-
- $endif
-
- # An old-style binding. This happens to be the default.
- TAB: complete
-
- # Macros that are convenient for shell interaction
- $if Bash
- # edit the path
- "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
- # prepare to type a quoted word --
- # insert open and close double quotes
- # and move to just after the open quote
- "\C-x\"": "\"\"\C-b"
- # insert a backslash (testing backslash escapes
- # in sequences and macros)
- "\C-x\\": "\\"
- # Quote the current or previous word
- "\C-xq": "\eb\"\ef\""
- # Add a binding to refresh the line, which is unbound
- "\C-xr": redraw-current-line
- # Edit variable on current line.
- "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
- $endif
-
- # use a visible bell if one is available
- set bell-style visible
-
- # don't strip characters to 7 bits when reading
- set input-meta on
-
- # allow iso-latin1 characters to be inserted rather
- # than converted to prefix-meta sequences
- set convert-meta off
-
- # display characters with the eighth bit set directly
- # rather than as meta-prefixed characters
- set output-meta on
-
- # if there are more than 150 possible completions for
- # a word, ask the user if he wants to see all of them
- set completion-query-items 150
-
- # For FTP
- $if Ftp
- "\C-xg": "get \M-?"
- "\C-xt": "put \M-?"
- "\M-.": yank-last-arg
- $endif
-
-
-File: gdb.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
-
-Bindable Readline Commands
-==========================
-
-* Menu:
-
-* Commands For Moving:: Moving about the line.
-* Commands For History:: Getting at previous lines.
-* Commands For Text:: Commands for changing text.
-* Commands For Killing:: Commands for killing and yanking.
-* Numeric Arguments:: Specifying numeric arguments, repeat counts.
-* Commands For Completion:: Getting Readline to do the typing for you.
-* Keyboard Macros:: Saving and re-executing typed characters
-* Miscellaneous Commands:: Other miscellaneous commands.
-
- This section describes Readline commands that may be bound to key
-sequences. Command names without an accompanying key sequence are
-unbound by default.
-
- In the following descriptions, "point" refers to the current cursor
-position, and "mark" refers to a cursor position saved by the
-`set-mark' command. The text between the point and mark is referred to
-as the "region".
-
-
-File: gdb.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
-
-Commands For Moving
--------------------
-
-`beginning-of-line (C-a)'
- Move to the start of the current line.
-
-`end-of-line (C-e)'
- Move to the end of the line.
-
-`forward-char (C-f)'
- Move forward a character.
-
-`backward-char (C-b)'
- Move back a character.
-
-`forward-word (M-f)'
- Move forward to the end of the next word. Words are composed of
- letters and digits.
-
-`backward-word (M-b)'
- Move back to the start of the current or previous word. Words are
- composed of letters and digits.
-
-`clear-screen (C-l)'
- Clear the screen and redraw the current line, leaving the current
- line at the top of the screen.
-
-`redraw-current-line ()'
- Refresh the current line. By default, this is unbound.
-
-
-
-File: gdb.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands
-
-Commands For Manipulating The History
--------------------------------------
-
-`accept-line (Newline or Return)'
- Accept the line regardless of where the cursor is. If this line is
- non-empty, it may be added to the history list for future recall
- with `add_history()'. If this line is a modified history line,
- the history line is restored to its original state.
-
-`previous-history (C-p)'
- Move `back' through the history list, fetching the previous
- command.
-
-`next-history (C-n)'
- Move `forward' through the history list, fetching the next command.
-
-`beginning-of-history (M-<)'
- Move to the first line in the history.
-
-`end-of-history (M->)'
- Move to the end of the input history, i.e., the line currently
- being entered.
-
-`reverse-search-history (C-r)'
- Search backward starting at the current line and moving `up'
- through the history as necessary. This is an incremental search.
-
-`forward-search-history (C-s)'
- Search forward starting at the current line and moving `down'
- through the the history as necessary. This is an incremental
- search.
-
-`non-incremental-reverse-search-history (M-p)'
- Search backward starting at the current line and moving `up'
- through the history as necessary using a non-incremental search
- for a string supplied by the user.
-
-`non-incremental-forward-search-history (M-n)'
- Search forward starting at the current line and moving `down'
- through the the history as necessary using a non-incremental search
- for a string supplied by the user.
-
-`history-search-forward ()'
- Search forward through the history for the string of characters
- between the start of the current line and the point. This is a
- non-incremental search. By default, this command is unbound.
-
-`history-search-backward ()'
- Search backward through the history for the string of characters
- between the start of the current line and the point. This is a
- non-incremental search. By default, this command is unbound.
-
-`yank-nth-arg (M-C-y)'
- Insert the first argument to the previous command (usually the
- second word on the previous line) at point. With an argument N,
- insert the Nth word from the previous command (the words in the
- previous command begin with word 0). A negative argument inserts
- the Nth word from the end of the previous command.
-
-`yank-last-arg (M-. or M-_)'
- Insert last argument to the previous command (the last word of the
- previous history entry). With an argument, behave exactly like
- `yank-nth-arg'. Successive calls to `yank-last-arg' move back
- through the history list, inserting the last argument of each line
- in turn.
-
-
-
-File: gdb.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
-
-Commands For Changing Text
---------------------------
-
-`delete-char (C-d)'
- Delete the character at point. If point is at the beginning of
- the line, there are no characters in the line, and the last
- character typed was not bound to `delete-char', then return EOF.
-
-`backward-delete-char (Rubout)'
- Delete the character behind the cursor. A numeric argument means
- to kill the characters instead of deleting them.
-
-`forward-backward-delete-char ()'
- Delete the character under the cursor, unless the cursor is at the
- end of the line, in which case the character behind the cursor is
- deleted. By default, this is not bound to a key.
-
-`quoted-insert (C-q or C-v)'
- Add the next character typed to the line verbatim. This is how to
- insert key sequences like `C-q', for example.
-
-`tab-insert (M-<TAB>)'
- Insert a tab character.
-
-`self-insert (a, b, A, 1, !, ...)'
- Insert yourself.
-
-`transpose-chars (C-t)'
- Drag the character before the cursor forward over the character at
- the cursor, moving the cursor forward as well. If the insertion
- point is at the end of the line, then this transposes the last two
- characters of the line. Negative arguments have no effect.
-
-`transpose-words (M-t)'
- Drag the word before point past the word after point, moving point
- past that word as well. If the insertion point is at the end of
- the line, this transposes the last two words on the line.
-
-`upcase-word (M-u)'
- Uppercase the current (or following) word. With a negative
- argument, uppercase the previous word, but do not move the cursor.
-
-`downcase-word (M-l)'
- Lowercase the current (or following) word. With a negative
- argument, lowercase the previous word, but do not move the cursor.
-
-`capitalize-word (M-c)'
- Capitalize the current (or following) word. With a negative
- argument, capitalize the previous word, but do not move the cursor.
-
-`overwrite-mode ()'
- Toggle overwrite mode. With an explicit positive numeric argument,
- switches to overwrite mode. With an explicit non-positive numeric
- argument, switches to insert mode. This command affects only
- `emacs' mode; `vi' mode does overwrite differently. Each call to
- `readline()' starts in insert mode.
-
- In overwrite mode, characters bound to `self-insert' replace the
- text at point rather than pushing the text to the right.
- Characters bound to `backward-delete-char' replace the character
- before point with a space.
-
- By default, this command is unbound.
-
-
-
-File: gdb.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
-
-Killing And Yanking
--------------------
-
-`kill-line (C-k)'
- Kill the text from point to the end of the line.
-
-`backward-kill-line (C-x Rubout)'
- Kill backward to the beginning of the line.
-
-`unix-line-discard (C-u)'
- Kill backward from the cursor to the beginning of the current line.
-
-`kill-whole-line ()'
- Kill all characters on the current line, no matter where point is.
- By default, this is unbound.
-
-`kill-word (M-d)'
- Kill from point to the end of the current word, or if between
- words, to the end of the next word. Word boundaries are the same
- as `forward-word'.
-
-`backward-kill-word (M-<DEL>)'
- Kill the word behind point. Word boundaries are the same as
- `backward-word'.
-
-`unix-word-rubout (C-w)'
- Kill the word behind point, using white space as a word boundary.
- The killed text is saved on the kill-ring.
-
-`delete-horizontal-space ()'
- Delete all spaces and tabs around point. By default, this is
- unbound.
-
-`kill-region ()'
- Kill the text in the current region. By default, this command is
- unbound.
-
-`copy-region-as-kill ()'
- Copy the text in the region to the kill buffer, so it can be yanked
- right away. By default, this command is unbound.
-
-`copy-backward-word ()'
- Copy the word before point to the kill buffer. The word
- boundaries are the same as `backward-word'. By default, this
- command is unbound.
-
-`copy-forward-word ()'
- Copy the word following point to the kill buffer. The word
- boundaries are the same as `forward-word'. By default, this
- command is unbound.
-
-`yank (C-y)'
- Yank the top of the kill ring into the buffer at point.
-
-`yank-pop (M-y)'
- Rotate the kill-ring, and yank the new top. You can only do this
- if the prior command is `yank' or `yank-pop'.
-
-
-File: gdb.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
-
-Specifying Numeric Arguments
-----------------------------
-
-`digit-argument (M-0, M-1, ... M--)'
- Add this digit to the argument already accumulating, or start a new
- argument. `M--' starts a negative argument.
-
-`universal-argument ()'
- This is another way to specify an argument. If this command is
- followed by one or more digits, optionally with a leading minus
- sign, those digits define the argument. If the command is
- followed by digits, executing `universal-argument' again ends the
- numeric argument, but is otherwise ignored. As a special case, if
- this command is immediately followed by a character that is
- neither a digit or minus sign, the argument count for the next
- command is multiplied by four. The argument count is initially
- one, so executing this function the first time makes the argument
- count four, a second time makes the argument count sixteen, and so
- on. By default, this is not bound to a key.
-
-
-File: gdb.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
-
-Letting Readline Type For You
------------------------------
-
-`complete (<TAB>)'
- Attempt to perform completion on the text before point. The
- actual completion performed is application-specific. The default
- is filename completion.
-
-`possible-completions (M-?)'
- List the possible completions of the text before point.
-
-`insert-completions (M-*)'
- Insert all completions of the text before point that would have
- been generated by `possible-completions'.
-
-`menu-complete ()'
- Similar to `complete', but replaces the word to be completed with
- a single match from the list of possible completions. Repeated
- execution of `menu-complete' steps through the list of possible
- completions, inserting each match in turn. At the end of the list
- of completions, the bell is rung (subject to the setting of
- `bell-style') and the original text is restored. An argument of N
- moves N positions forward in the list of matches; a negative
- argument may be used to move backward through the list. This
- command is intended to be bound to <TAB>, but is unbound by
- default.
-
-`delete-char-or-list ()'
- Deletes the character under the cursor if not at the beginning or
- end of the line (like `delete-char'). If at the end of the line,
- behaves identically to `possible-completions'. This command is
- unbound by default.
-
-
-
-File: gdb.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
-
-Keyboard Macros
----------------
-
-`start-kbd-macro (C-x ()'
- Begin saving the characters typed into the current keyboard macro.
-
-`end-kbd-macro (C-x ))'
- Stop saving the characters typed into the current keyboard macro
- and save the definition.
-
-`call-last-kbd-macro (C-x e)'
- Re-execute the last keyboard macro defined, by making the
- characters in the macro appear as if typed at the keyboard.
-
-
-
-File: gdb.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands
-
-Some Miscellaneous Commands
----------------------------
-
-`re-read-init-file (C-x C-r)'
- Read in the contents of the INPUTRC file, and incorporate any
- bindings or variable assignments found there.
-
-`abort (C-g)'
- Abort the current editing command and ring the terminal's bell
- (subject to the setting of `bell-style').
-
-`do-uppercase-version (M-a, M-b, M-X, ...)'
- If the metafied character X is lowercase, run the command that is
- bound to the corresponding uppercase character.
-
-`prefix-meta (<ESC>)'
- Metafy the next character typed. This is for keyboards without a
- meta key. Typing `<ESC> f' is equivalent to typing `M-f'.
-
-`undo (C-_ or C-x C-u)'
- Incremental undo, separately remembered for each line.
-
-`revert-line (M-r)'
- Undo all changes made to this line. This is like executing the
- `undo' command enough times to get back to the beginning.
-
-`tilde-expand (M-~)'
- Perform tilde expansion on the current word.
-
-`set-mark (C-@)'
- Set the mark to the point. If a numeric argument is supplied, the
- mark is set to that position.
-
-`exchange-point-and-mark (C-x C-x)'
- Swap the point with the mark. The current cursor position is set
- to the saved position, and the old cursor position is saved as the
- mark.
-
-`character-search (C-])'
- A character is read and point is moved to the next occurrence of
- that character. A negative count searches for previous
- occurrences.
-
-`character-search-backward (M-C-])'
- A character is read and point is moved to the previous occurrence
- of that character. A negative count searches for subsequent
- occurrences.
-
-`insert-comment (M-#)'
- Without a numeric argument, the value of the `comment-begin'
- variable is inserted at the beginning of the current line. If a
- numeric argument is supplied, this command acts as a toggle: if
- the characters at the beginning of the line do not match the value
- of `comment-begin', the value is inserted, otherwise the
- characters in `comment-begin' are deleted from the beginning of
- the line. In either case, the line is accepted as if a newline
- had been typed.
-
-`dump-functions ()'
- Print all of the functions and their key bindings to the Readline
- output stream. If a numeric argument is supplied, the output is
- formatted in such a way that it can be made part of an INPUTRC
- file. This command is unbound by default.
-
-`dump-variables ()'
- Print all of the settable variables and their values to the
- Readline output stream. If a numeric argument is supplied, the
- output is formatted in such a way that it can be made part of an
- INPUTRC file. This command is unbound by default.
-
-`dump-macros ()'
- Print all of the Readline key sequences bound to macros and the
- strings they output. If a numeric argument is supplied, the
- output is formatted in such a way that it can be made part of an
- INPUTRC file. This command is unbound by default.
-
-`emacs-editing-mode (C-e)'
- When in `vi' command mode, this causes a switch to `emacs' editing
- mode.
-
-`vi-editing-mode (M-C-j)'
- When in `emacs' editing mode, this causes a switch to `vi' editing
- mode.
-
-
-
-File: gdb.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing
-
-Readline vi Mode
-================
-
-While the Readline library does not have a full set of `vi' editing
-functions, it does contain enough to allow simple editing of the line.
-The Readline `vi' mode behaves as specified in the POSIX 1003.2
-standard.
-
- In order to switch interactively between `emacs' and `vi' editing
-modes, use the command `M-C-j' (bound to emacs-editing-mode when in
-`vi' mode and to vi-editing-mode in `emacs' mode). The Readline
-default is `emacs' mode.
-
- When you enter a line in `vi' mode, you are already placed in
-`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches
-you into `command' mode, where you can edit the text of the line with
-the standard `vi' movement keys, move to previous history lines with
-`k' and subsequent lines with `j', and so forth.
-
-
-File: gdb.info, Node: Using History Interactively, Next: Installing GDB, Prev: Command Line Editing, Up: Top
-
-Using History Interactively
-***************************
-
-This chapter describes how to use the GNU History Library interactively,
-from a user's standpoint. It should be considered a user's guide.
-
-* Menu:
-
-* History Interaction:: What it feels like using History as a user.
-
-
-File: gdb.info, Node: History Interaction, Up: Using History Interactively
-
-History Expansion
-=================
-
-The History library provides a history expansion feature that is similar
-to the history expansion provided by `csh'. This section describes the
-syntax used to manipulate the history information.
-
- History expansions introduce words from the history list into the
-input stream, making it easy to repeat commands, insert the arguments
-to a previous command into the current input line, or fix errors in
-previous commands quickly.
-
- History expansion takes place in two parts. The first is to
-determine which line from the history list should be used during
-substitution. The second is to select portions of that line for
-inclusion into the current one. The line selected from the history is
-called the "event", and the portions of that line that are acted upon
-are called "words". Various "modifiers" are available to manipulate
-the selected words. The line is broken into words in the same fashion
-that Bash does, so that several words surrounded by quotes are
-considered one word. History expansions are introduced by the
-appearance of the history expansion character, which is `!' by default.
-
-* Menu:
-
-* Event Designators:: How to specify which history line to use.
-* Word Designators:: Specifying which words are of interest.
-* Modifiers:: Modifying the results of substitution.
-
-
-File: gdb.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
-
-Event Designators
------------------
-
-An event designator is a reference to a command line entry in the
-history list.
-
-`!'
- Start a history substitution, except when followed by a space, tab,
- the end of the line, `=' or `('.
-
-`!N'
- Refer to command line N.
-
-`!-N'
- Refer to the command N lines back.
-
-`!!'
- Refer to the previous command. This is a synonym for `!-1'.
-
-`!STRING'
- Refer to the most recent command starting with STRING.
-
-`!?STRING[?]'
- Refer to the most recent command containing STRING. The trailing
- `?' may be omitted if the STRING is followed immediately by a
- newline.
-
-`^STRING1^STRING2^'
- Quick Substitution. Repeat the last command, replacing STRING1
- with STRING2. Equivalent to `!!:s/STRING1/STRING2/'.
-
-`!#'
- The entire command line typed so far.
-
-
-
-File: gdb.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
-
-Word Designators
-----------------
-
-Word designators are used to select desired words from the event. A
-`:' separates the event specification from the word designator. It may
-be omitted if the word designator begins with a `^', `$', `*', `-', or
-`%'. Words are numbered from the beginning of the line, with the first
-word being denoted by 0 (zero). Words are inserted into the current
-line separated by single spaces.
-
- For example,
-
-`!!'
- designates the preceding command. When you type this, the
- preceding command is repeated in toto.
-
-`!!:$'
- designates the last argument of the preceding command. This may be
- shortened to `!$'.
-
-`!fi:2'
- designates the second argument of the most recent command starting
- with the letters `fi'.
-
- Here are the word designators:
-
-`0 (zero)'
- The `0'th word. For many applications, this is the command word.
-
-`N'
- The Nth word.
-
-`^'
- The first argument; that is, word 1.
-
-`$'
- The last argument.
-
-`%'
- The word matched by the most recent `?STRING?' search.
-
-`X-Y'
- A range of words; `-Y' abbreviates `0-Y'.
-
-`*'
- All of the words, except the `0'th. This is a synonym for `1-$'.
- It is not an error to use `*' if there is just one word in the
- event; the empty string is returned in that case.
-
-`X*'
- Abbreviates `X-$'
-
-`X-'
- Abbreviates `X-$' like `X*', but omits the last word.
-
-
- If a word designator is supplied without an event specification, the
-previous command is used as the event.
-
-
-File: gdb.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
-
-Modifiers
----------
-
-After the optional word designator, you can add a sequence of one or
-more of the following modifiers, each preceded by a `:'.
-
-`h'
- Remove a trailing pathname component, leaving only the head.
-
-`t'
- Remove all leading pathname components, leaving the tail.
-
-`r'
- Remove a trailing suffix of the form `.SUFFIX', leaving the
- basename.
-
-`e'
- Remove all but the trailing suffix.
-
-`p'
- Print the new command but do not execute it.
-
-`s/OLD/NEW/'
- Substitute NEW for the first occurrence of OLD in the event line.
- Any delimiter may be used in place of `/'. The delimiter may be
- quoted in OLD and NEW with a single backslash. If `&' appears in
- NEW, it is replaced by OLD. A single backslash will quote the
- `&'. The final delimiter is optional if it is the last character
- on the input line.
-
-`&'
- Repeat the previous substitution.
-
-`g'
- Cause changes to be applied over the entire event line. Used in
- conjunction with `s', as in `gs/OLD/NEW/', or with `&'.
-
-
-
-File: gdb.info, Node: Formatting Documentation, Next: Command Line Editing, Prev: GDB Bugs, Up: Top
-
-Formatting Documentation
-************************
-
-The GDB 4 release includes an already-formatted reference card, ready
-for printing with PostScript or Ghostscript, in the `gdb' subdirectory
-of the main source directory(1). If you can use PostScript or
-Ghostscript with your printer, you can print the reference card
-immediately with `refcard.ps'.
-
- The release also includes the source for the reference card. You
-can format it, using TeX, by typing:
-
- make refcard.dvi
-
- The GDB reference card is designed to print in "landscape" mode on
-US "letter" size paper; that is, on a sheet 11 inches wide by 8.5 inches
-high. You will need to specify this form of printing as an option to
-your DVI output program.
-
- All the documentation for GDB comes as part of the machine-readable
-distribution. The documentation is written in Texinfo format, which is
-a documentation system that uses a single source file to produce both
-on-line information and a printed manual. You can use one of the Info
-formatting commands to create the on-line version of the documentation
-and TeX (or `texi2roff') to typeset the printed version.
-
- GDB includes an already formatted copy of the on-line Info version
-of this manual in the `gdb' subdirectory. The main Info file is
-`gdb-6.1/gdb/gdb.info', and it refers to subordinate files matching
-`gdb.info*' in the same directory. If necessary, you can print out
-these files, or read them with any editor; but they are easier to read
-using the `info' subsystem in GNU Emacs or the standalone `info'
-program, available as part of the GNU Texinfo distribution.
-
- If you want to format these Info files yourself, you need one of the
-Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'.
-
- If you have `makeinfo' installed, and are in the top level GDB
-source directory (`gdb-6.1', in the case of version 6.1), you can make
-the Info file by typing:
-
- cd gdb
- make gdb.info
-
- If you want to typeset and print copies of this manual, you need TeX,
-a program to print its DVI output files, and `texinfo.tex', the Texinfo
-definitions file.
-
- TeX is a typesetting program; it does not print files directly, but
-produces output files called DVI files. To print a typeset document,
-you need a program to print DVI files. If your system has TeX
-installed, chances are it has such a program. The precise command to
-use depends on your system; `lpr -d' is common; another (for PostScript
-devices) is `dvips'. The DVI print command may require a file name
-without any extension or a `.dvi' extension.
-
- TeX also requires a macro definitions file called `texinfo.tex'.
-This file tells TeX how to typeset a document written in Texinfo
-format. On its own, TeX cannot either read or typeset a Texinfo file.
-`texinfo.tex' is distributed with GDB and is located in the
-`gdb-VERSION-NUMBER/texinfo' directory.
-
- If you have TeX and a DVI printer program installed, you can typeset
-and print this manual. First switch to the the `gdb' subdirectory of
-the main source directory (for example, to `gdb-6.1/gdb') and type:
-
- make gdb.dvi
-
- Then give `gdb.dvi' to your DVI printing program.
-
- ---------- Footnotes ----------
-
- (1) In `gdb-6.1/gdb/refcard.ps' of the version 6.1 release.
-
-
-File: gdb.info, Node: Installing GDB, Next: Maintenance Commands, Prev: Using History Interactively, Up: Top
-
-Installing GDB
-**************
-
-GDB comes with a `configure' script that automates the process of
-preparing GDB for installation; you can then use `make' to build the
-`gdb' program.
-
- The GDB distribution includes all the source code you need for GDB
-in a single directory, whose name is usually composed by appending the
-version number to `gdb'.
-
- For example, the GDB version 6.1 distribution is in the `gdb-6.1'
-directory. That directory contains:
-
-`gdb-6.1/configure (and supporting files)'
- script for configuring GDB and all its supporting libraries
-
-`gdb-6.1/gdb'
- the source specific to GDB itself
-
-`gdb-6.1/bfd'
- source for the Binary File Descriptor library
-
-`gdb-6.1/include'
- GNU include files
-
-`gdb-6.1/libiberty'
- source for the `-liberty' free software library
-
-`gdb-6.1/opcodes'
- source for the library of opcode tables and disassemblers
-
-`gdb-6.1/readline'
- source for the GNU command-line interface
-
-`gdb-6.1/glob'
- source for the GNU filename pattern-matching subroutine
-
-`gdb-6.1/mmalloc'
- source for the GNU memory-mapped malloc package
-
- The simplest way to configure and build GDB is to run `configure'
-from the `gdb-VERSION-NUMBER' source directory, which in this example
-is the `gdb-6.1' directory.
-
- First switch to the `gdb-VERSION-NUMBER' source directory if you are
-not already in it; then run `configure'. Pass the identifier for the
-platform on which GDB will run as an argument.
-
- For example:
-
- cd gdb-6.1
- ./configure HOST
- make
-
-where HOST is an identifier such as `sun4' or `decstation', that
-identifies the platform where GDB will run. (You can often leave off
-HOST; `configure' tries to guess the correct value by examining your
-system.)
-
- Running `configure HOST' and then running `make' builds the `bfd',
-`readline', `mmalloc', and `libiberty' libraries, then `gdb' itself.
-The configured source files, and the binaries, are left in the
-corresponding source directories.
-
- `configure' is a Bourne-shell (`/bin/sh') script; if your system
-does not recognize this automatically when you run a different shell,
-you may need to run `sh' on it explicitly:
-
- sh configure HOST
-
- If you run `configure' from a directory that contains source
-directories for multiple libraries or programs, such as the `gdb-6.1'
-source directory for version 6.1, `configure' creates configuration
-files for every directory level underneath (unless you tell it not to,
-with the `--norecursion' option).
-
- You should run the `configure' script from the top directory in the
-source tree, the `gdb-VERSION-NUMBER' directory. If you run
-`configure' from one of the subdirectories, you will configure only
-that subdirectory. That is usually not what you want. In particular,
-if you run the first `configure' from the `gdb' subdirectory of the
-`gdb-VERSION-NUMBER' directory, you will omit the configuration of
-`bfd', `readline', and other sibling directories of the `gdb'
-subdirectory. This leads to build errors about missing include files
-such as `bfd/bfd.h'.
-
- You can install `gdb' anywhere; it has no hardwired paths. However,
-you should make sure that the shell on your path (named by the `SHELL'
-environment variable) is publicly readable. Remember that GDB uses the
-shell to start your program--some systems refuse to let GDB debug child
-processes whose programs are not readable.
-
-* Menu:
-
-* Separate Objdir:: Compiling GDB in another directory
-* Config Names:: Specifying names for hosts and targets
-* Configure Options:: Summary of options for configure
-
-
-File: gdb.info, Node: Separate Objdir, Next: Config Names, Up: Installing GDB
-
-Compiling GDB in another directory
-==================================
-
-If you want to run GDB versions for several host or target machines,
-you need a different `gdb' compiled for each combination of host and
-target. `configure' is designed to make this easy by allowing you to
-generate each configuration in a separate subdirectory, rather than in
-the source directory. If your `make' program handles the `VPATH'
-feature (GNU `make' does), running `make' in each of these directories
-builds the `gdb' program specified there.
-
- To build `gdb' in a separate directory, run `configure' with the
-`--srcdir' option to specify where to find the source. (You also need
-to specify a path to find `configure' itself from your working
-directory. If the path to `configure' would be the same as the
-argument to `--srcdir', you can leave out the `--srcdir' option; it is
-assumed.)
-
- For example, with version 6.1, you can build GDB in a separate
-directory for a Sun 4 like this:
-
- cd gdb-6.1
- mkdir ../gdb-sun4
- cd ../gdb-sun4
- ../gdb-6.1/configure sun4
- make
-
- When `configure' builds a configuration using a remote source
-directory, it creates a tree for the binaries with the same structure
-(and using the same names) as the tree under the source directory. In
-the example, you'd find the Sun 4 library `libiberty.a' in the
-directory `gdb-sun4/libiberty', and GDB itself in `gdb-sun4/gdb'.
-
- Make sure that your path to the `configure' script has just one
-instance of `gdb' in it. If your path to `configure' looks like
-`../gdb-6.1/gdb/configure', you are configuring only one subdirectory
-of GDB, not the whole package. This leads to build errors about
-missing include files such as `bfd/bfd.h'.
-
- One popular reason to build several GDB configurations in separate
-directories is to configure GDB for cross-compiling (where GDB runs on
-one machine--the "host"--while debugging programs that run on another
-machine--the "target"). You specify a cross-debugging target by giving
-the `--target=TARGET' option to `configure'.
-
- When you run `make' to build a program or library, you must run it
-in a configured directory--whatever directory you were in when you
-called `configure' (or one of its subdirectories).
-
- The `Makefile' that `configure' generates in each source directory
-also runs recursively. If you type `make' in a source directory such
-as `gdb-6.1' (or in a separate configured directory configured with
-`--srcdir=DIRNAME/gdb-6.1'), you will build all the required libraries,
-and then build GDB.
-
- When you have multiple hosts or targets configured in separate
-directories, you can run `make' on them in parallel (for example, if
-they are NFS-mounted on each of the hosts); they will not interfere
-with each other.
-
-
-File: gdb.info, Node: Config Names, Next: Configure Options, Prev: Separate Objdir, Up: Installing GDB
-
-Specifying names for hosts and targets
-======================================
-
-The specifications used for hosts and targets in the `configure' script
-are based on a three-part naming scheme, but some short predefined
-aliases are also supported. The full naming scheme encodes three pieces
-of information in the following pattern:
-
- ARCHITECTURE-VENDOR-OS
-
- For example, you can use the alias `sun4' as a HOST argument, or as
-the value for TARGET in a `--target=TARGET' option. The equivalent
-full name is `sparc-sun-sunos4'.
-
- The `configure' script accompanying GDB does not provide any query
-facility to list all supported host and target names or aliases.
-`configure' calls the Bourne shell script `config.sub' to map
-abbreviations to full names; you can read the script, if you wish, or
-you can use it to test your guesses on abbreviations--for example:
-
- % sh config.sub i386-linux
- i386-pc-linux-gnu
- % sh config.sub alpha-linux
- alpha-unknown-linux-gnu
- % sh config.sub hp9k700
- hppa1.1-hp-hpux
- % sh config.sub sun4
- sparc-sun-sunos4.1.1
- % sh config.sub sun3
- m68k-sun-sunos4.1.1
- % sh config.sub i986v
- Invalid configuration `i986v': machine `i986v' not recognized
-
-`config.sub' is also distributed in the GDB source directory
-(`gdb-6.1', for version 6.1).
-
-
-File: gdb.info, Node: Configure Options, Prev: Config Names, Up: Installing GDB
-
-`configure' options
-===================
-
-Here is a summary of the `configure' options and arguments that are
-most often useful for building GDB. `configure' also has several other
-options not listed here. *note (configure.info)What Configure Does::,
-for a full explanation of `configure'.
-
- configure [--help]
- [--prefix=DIR]
- [--exec-prefix=DIR]
- [--srcdir=DIRNAME]
- [--norecursion] [--rm]
- [--target=TARGET]
- HOST
-
-You may introduce options with a single `-' rather than `--' if you
-prefer; but you may abbreviate option names if you use `--'.
-
-`--help'
- Display a quick summary of how to invoke `configure'.
-
-`--prefix=DIR'
- Configure the source to install programs and files under directory
- `DIR'.
-
-`--exec-prefix=DIR'
- Configure the source to install programs under directory `DIR'.
-
-`--srcdir=DIRNAME'
- *Warning: using this option requires GNU `make', or another `make'
- that implements the `VPATH' feature.*
- Use this option to make configurations in directories separate
- from the GDB source directories. Among other things, you can use
- this to build (or maintain) several configurations simultaneously,
- in separate directories. `configure' writes configuration
- specific files in the current directory, but arranges for them to
- use the source in the directory DIRNAME. `configure' creates
- directories under the working directory in parallel to the source
- directories below DIRNAME.
-
-`--norecursion'
- Configure only the directory level where `configure' is executed;
- do not propagate configuration to subdirectories.
-
-`--target=TARGET'
- Configure GDB for cross-debugging programs running on the specified
- TARGET. Without this option, GDB is configured to debug programs
- that run on the same machine (HOST) as GDB itself.
-
- There is no convenient way to generate a list of all available
- targets.
-
-`HOST ...'
- Configure GDB to run on the specified HOST.
-
- There is no convenient way to generate a list of all available
- hosts.
-
- There are many other options available as well, but they are
-generally needed for special purposes only.
-
-
-File: gdb.info, Node: Maintenance Commands, Next: Remote Protocol, Prev: Installing GDB, Up: Top
-
-Maintenance Commands
-********************
-
-In addition to commands intended for GDB users, GDB includes a number
-of commands intended for GDB developers. These commands are provided
-here for reference.
-
-`maint info breakpoints'
- Using the same format as `info breakpoints', display both the
- breakpoints you've set explicitly, and those GDB is using for
- internal purposes. Internal breakpoints are shown with negative
- breakpoint numbers. The type column identifies what kind of
- breakpoint is shown:
-
- `breakpoint'
- Normal, explicitly set breakpoint.
-
- `watchpoint'
- Normal, explicitly set watchpoint.
-
- `longjmp'
- Internal breakpoint, used to handle correctly stepping through
- `longjmp' calls.
-
- `longjmp resume'
- Internal breakpoint at the target of a `longjmp'.
-
- `until'
- Temporary internal breakpoint used by the GDB `until' command.
-
- `finish'
- Temporary internal breakpoint used by the GDB `finish'
- command.
-
- `shlib events'
- Shared library events.
-
-
-`maint internal-error'
-`maint internal-warning'
- Cause GDB to call the internal function `internal_error' or
- `internal_warning' and hence behave as though an internal error or
- internal warning has been detected. In addition to reporting the
- internal problem, these functions give the user the opportunity to
- either quit GDB or create a core file of the current GDB session.
-
- (gdb) maint internal-error testing, 1, 2
- .../maint.c:121: internal-error: testing, 1, 2
- A problem internal to GDB has been detected. Further
- debugging may prove unreliable.
- Quit this debugging session? (y or n) n
- Create a core file? (y or n) n
- (gdb)
-
- Takes an optional parameter that is used as the text of the error
- or warning message.
-
-`maint print dummy-frames'
- Prints the contents of GDB's internal dummy-frame stack.
-
- (gdb) b add
- ...
- (gdb) print add(2,3)
- Breakpoint 2, add (a=2, b=3) at ...
- 58 return (a + b);
- The program being debugged stopped while in a function called from GDB.
- ...
- (gdb) maint print dummy-frames
- 0x1a57c80: pc=0x01014068 fp=0x0200bddc sp=0x0200bdd6
- top=0x0200bdd4 id={stack=0x200bddc,code=0x101405c}
- call_lo=0x01014000 call_hi=0x01014001
- (gdb)
-
- Takes an optional file parameter.
-
-`maint print registers'
-`maint print raw-registers'
-`maint print cooked-registers'
-`maint print register-groups'
- Print GDB's internal register data structures.
-
- The command `maint print raw-registers' includes the contents of
- the raw register cache; the command `maint print cooked-registers'
- includes the (cooked) value of all registers; and the command
- `maint print register-groups' includes the groups that each
- register is a member of. *Note Registers: (gdbint)Registers.
-
- Takes an optional file parameter.
-
-`maint print reggroups'
- Print GDB's internal register group data structures.
-
- Takes an optional file parameter.
-
- (gdb) maint print reggroups
- Group Type
- general user
- float user
- all user
- vector user
- system user
- save internal
- restore internal
-
-`maint set profile'
-`maint show profile'
- Control profiling of GDB.
-
- Profiling will be disabled until you use the `maint set profile'
- command to enable it. When you enable profiling, the system will
- begin collecting timing and execution count data; when you disable
- profiling or exit GDB, the results will be written to a log file.
- Remember that if you use profiling, GDB will overwrite the
- profiling log file (often called `gmon.out'). If you have a
- record of important profiling data in a `gmon.out' file, be sure
- to move it to a safe location.
-
- Configuring with `--enable-profiling' arranges for GDB to be
- compiled with the `-pg' compiler option.
-
-
-
-File: gdb.info, Node: Remote Protocol, Next: Agent Expressions, Prev: Maintenance Commands, Up: Top
-
-GDB Remote Serial Protocol
-**************************
-
-* Menu:
-
-* Overview::
-* Packets::
-* Stop Reply Packets::
-* General Query Packets::
-* Register Packet Format::
-* Examples::
-* File-I/O remote protocol extension::
-
-
-File: gdb.info, Node: Overview, Next: Packets, Up: Remote Protocol
-
-Overview
-========
-
-There may be occasions when you need to know something about the
-protocol--for example, if there is only one serial port to your target
-machine, you might want your program to do something special if it
-recognizes a packet meant for GDB.
-
- In the examples below, `->' and `<-' are used to indicate
-transmitted and received data respectfully.
-
- All GDB commands and responses (other than acknowledgments) are sent
-as a PACKET. A PACKET is introduced with the character `$', the actual
-PACKET-DATA, and the terminating character `#' followed by a two-digit
-CHECKSUM:
-
- `$'PACKET-DATA`#'CHECKSUM
-
-The two-digit CHECKSUM is computed as the modulo 256 sum of all
-characters between the leading `$' and the trailing `#' (an eight bit
-unsigned checksum).
-
- Implementors should note that prior to GDB 5.0 the protocol
-specification also included an optional two-digit SEQUENCE-ID:
-
- `$'SEQUENCE-ID`:'PACKET-DATA`#'CHECKSUM
-
-That SEQUENCE-ID was appended to the acknowledgment. GDB has never
-output SEQUENCE-IDs. Stubs that handle packets added since GDB 5.0
-must not accept SEQUENCE-ID.
-
- When either the host or the target machine receives a packet, the
-first response expected is an acknowledgment: either `+' (to indicate
-the package was received correctly) or `-' (to request retransmission):
-
- -> `$'PACKET-DATA`#'CHECKSUM
- <- `+'
-
-The host (GDB) sends COMMANDs, and the target (the debugging stub
-incorporated in your program) sends a RESPONSE. In the case of step
-and continue COMMANDs, the response is only sent when the operation has
-completed (the target has again stopped).
-
- PACKET-DATA consists of a sequence of characters with the exception
-of `#' and `$' (see `X' packet for additional exceptions).
-
- Fields within the packet should be separated using `,' `;' or `:'.
-Except where otherwise noted all numbers are represented in HEX with
-leading zeros suppressed.
-
- Implementors should note that prior to GDB 5.0, the character `:'
-could not appear as the third character in a packet (as it would
-potentially conflict with the SEQUENCE-ID).
-
- Response DATA can be run-length encoded to save space. A `*' means
-that the next character is an ASCII encoding giving a repeat count
-which stands for that many repetitions of the character preceding the
-`*'. The encoding is `n+29', yielding a printable character where `n
->=3' (which is where rle starts to win). The printable characters `$',
-`#', `+' and `-' or with a numeric value greater than 126 should not be
-used.
-
- So:
- "`0* '"
-
-means the same as "0000".
-
- The error response returned for some packets includes a two character
-error number. That number is not well defined.
-
- For any COMMAND not supported by the stub, an empty response
-(`$#00') should be returned. That way it is possible to extend the
-protocol. A newer GDB can tell if a packet is supported based on that
-response.
-
- A stub is required to support the `g', `G', `m', `M', `c', and `s'
-COMMANDs. All other COMMANDs are optional.
-
-
-File: gdb.info, Node: Packets, Next: Stop Reply Packets, Prev: Overview, Up: Remote Protocol
-
-Packets
-=======
-
-The following table provides a complete list of all currently defined
-COMMANDs and their corresponding response DATA.
-
-`!' -- extended mode
- Enable extended mode. In extended mode, the remote server is made
- persistent. The `R' packet is used to restart the program being
- debugged.
-
- Reply:
- `OK'
- The remote target both supports and has enabled extended mode.
-
-`?' -- last signal
- Indicate the reason the target halted. The reply is the same as
- for step and continue.
-
- Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`a' -- reserved
- Reserved for future use.
-
-`A'ARGLEN`,'ARGNUM`,'ARG`,...' -- set program arguments *(reserved)*
- Initialized `argv[]' array passed into program. ARGLEN specifies
- the number of bytes in the hex encoded byte stream ARG. See
- `gdbserver' for more details.
-
- Reply:
- `OK'
-
- `ENN'
-
-`b'BAUD -- set baud *(deprecated)*
- Change the serial line speed to BAUD.
-
- JTC: _When does the transport layer state change? When it's
- received, or after the ACK is transmitted. In either case, there
- are problems if the command or the acknowledgment packet is
- dropped._
-
- Stan: _If people really wanted to add something like this, and get
- it working for the first time, they ought to modify ser-unix.c to
- send some kind of out-of-band message to a specially-setup stub
- and have the switch happen "in between" packets, so that from
- remote protocol's point of view, nothing actually happened._
-
-`B'ADDR,MODE -- set breakpoint *(deprecated)*
- Set (MODE is `S') or clear (MODE is `C') a breakpoint at ADDR.
-
- This packet has been replaced by the `Z' and `z' packets (*note
- insert breakpoint or watchpoint packet::).
-
-`c'ADDR -- continue
- ADDR is address to resume. If ADDR is omitted, resume at current
- address.
-
- Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`C'SIG`;'ADDR -- continue with signal
- Continue with signal SIG (hex signal number). If `;'ADDR is
- omitted, resume at same address.
-
- Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`d' -- toggle debug *(deprecated)*
- Toggle debug flag.
-
-`D' -- detach
- Detach GDB from the remote system. Sent to the remote target
- before GDB disconnects via the `detach' command.
-
- Reply:
- `_no response_'
- GDB does not check for any response after sending this packet.
-
-`e' -- reserved
- Reserved for future use.
-
-`E' -- reserved
- Reserved for future use.
-
-`f' -- reserved
- Reserved for future use.
-
-`F'RC`,'EE`,'CF`;'XX -- Reply to target's F packet.
- This packet is send by GDB as reply to a `F' request packet sent
- by the target. This is part of the File-I/O protocol extension.
- *Note File-I/O remote protocol extension::, for the specification.
-
-`g' -- read registers
- Read general registers.
-
- Reply:
- `XX...'
- Each byte of register data is described by two hex digits.
- The bytes with the register are transmitted in target byte
- order. The size of each register and their position within
- the `g' PACKET are determined by the GDB internal macros
- DEPRECATED_REGISTER_RAW_SIZE and REGISTER_NAME macros. The
- specification of several standard `g' packets is specified
- below.
-
- `ENN'
- for an error.
-
-`G'XX... -- write regs
- *Note read registers packet::, for a description of the XX...
- data.
-
- Reply:
- `OK'
- for success
-
- `ENN'
- for an error
-
-`h' -- reserved
- Reserved for future use.
-
-`H'CT... -- set thread
- Set thread for subsequent operations (`m', `M', `g', `G', et.al.).
- C depends on the operation to be performed: it should be `c' for
- step and continue operations, `g' for other operations. The
- thread designator T... may be -1, meaning all the threads, a
- thread number, or zero which means pick any thread.
-
- Reply:
- `OK'
- for success
-
- `ENN'
- for an error
-
-`i'ADDR`,'NNN -- cycle step *(draft)*
- Step the remote target by a single clock cycle. If `,'NNN is
- present, cycle step NNN cycles. If ADDR is present, cycle step
- starting at that address.
-
-`I' -- signal then cycle step *(reserved)*
- *Note step with signal packet::. *Note cycle step packet::.
-
-`j' -- reserved
- Reserved for future use.
-
-`J' -- reserved
- Reserved for future use.
-
-`k' -- kill request
- FIXME: _There is no description of how to operate when a specific
- thread context has been selected (i.e. does 'k' kill only that
- thread?)_.
-
-`K' -- reserved
- Reserved for future use.
-
-`l' -- reserved
- Reserved for future use.
-
-`L' -- reserved
- Reserved for future use.
-
-`m'ADDR`,'LENGTH -- read memory
- Read LENGTH bytes of memory starting at address ADDR. Neither GDB
- nor the stub assume that sized memory transfers are assumed using
- word aligned accesses. FIXME: _A word aligned memory transfer
- mechanism is needed._
-
- Reply:
- `XX...'
- XX... is mem contents. Can be fewer bytes than requested if
- able to read only part of the data. Neither GDB nor the stub
- assume that sized memory transfers are assumed using word
- aligned accesses. FIXME: _A word aligned memory transfer
- mechanism is needed._
-
- `ENN'
- NN is errno
-
-`M'ADDR,LENGTH`:'XX... -- write mem
- Write LENGTH bytes of memory starting at address ADDR. XX... is
- the data.
-
- Reply:
- `OK'
- for success
-
- `ENN'
- for an error (this includes the case where only part of the
- data was written).
-
-`n' -- reserved
- Reserved for future use.
-
-`N' -- reserved
- Reserved for future use.
-
-`o' -- reserved
- Reserved for future use.
-
-`O' -- reserved
- Reserved for future use.
-
-`p'N... -- read reg *(reserved)*
- *Note write register packet::.
-
- Reply:
- `R....'
- The hex encoded value of the register in target byte order.
-
-`P'N...`='R... -- write register
- Write register N... with value R..., which contains two hex digits
- for each byte in the register (target byte order).
-
- Reply:
- `OK'
- for success
-
- `ENN'
- for an error
-
-`q'QUERY -- general query
- Request info about QUERY. In general GDB queries have a leading
- upper case letter. Custom vendor queries should use a company
- prefix (in lower case) ex: `qfsf.var'. QUERY may optionally be
- followed by a `,' or `;' separated list. Stubs must ensure that
- they match the full QUERY name.
-
- Reply:
- `XX...'
- Hex encoded data from query. The reply can not be empty.
-
- `ENN'
- error reply
-
- `'
- Indicating an unrecognized QUERY.
-
-`Q'VAR`='VAL -- general set
- Set value of VAR to VAL.
-
- *Note general query packet::, for a discussion of naming
- conventions.
-
-`r' -- reset *(deprecated)*
- Reset the entire system.
-
-`R'XX -- remote restart
- Restart the program being debugged. XX, while needed, is ignored.
- This packet is only available in extended mode.
-
- Reply:
- `_no reply_'
- The `R' packet has no reply.
-
-`s'ADDR -- step
- ADDR is address to resume. If ADDR is omitted, resume at same
- address.
-
- Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`S'SIG`;'ADDR -- step with signal
- Like `C' but step not continue.
-
- Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`t'ADDR`:'PP`,'MM -- search
- Search backwards starting at address ADDR for a match with pattern
- PP and mask MM. PP and MM are 4 bytes. ADDR must be at least 3
- digits.
-
-`T'XX -- thread alive
- Find out if the thread XX is alive.
-
- Reply:
- `OK'
- thread is still alive
-
- `ENN'
- thread is dead
-
-`u' -- reserved
- Reserved for future use.
-
-`U' -- reserved
- Reserved for future use.
-
-`v' -- verbose packet prefix
- Packets starting with `v' are identified by a multi-letter name,
- up to the first `;' or `?' (or the end of the packet).
-
-`vCont'[;ACTION[`:'TID]]... -- extended resume
- Resume the inferior. Different actions may be specified for each
- thread. If an action is specified with no TID, then it is applied
- to any threads that don't have a specific action specified; if no
- default action is specified then other threads should remain
- stopped. Specifying multiple default actions is an error;
- specifying no actions is also an error. Thread IDs are specified
- in hexadecimal. Currently supported actions are:
-
- `c'
- Continue.
-
- `CSIG'
- Continue with signal SIG. SIG should be two hex digits.
-
- `s'
- Step.
-
- `SSIG'
- Step with signal SIG. SIG should be two hex digits.
-
- The optional ADDR argument normally associated with these packets
- is not supported in `vCont'.
-
- Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`vCont?' -- extended resume query
- Query support for the `vCont' packet.
-
- Reply:
- ``vCont'[;ACTION]...'
- The `vCont' packet is supported. Each ACTION is a supported
- command in the `vCont' packet.
-
- `'
- The `vCont' packet is not supported.
-
-`V' -- reserved
- Reserved for future use.
-
-`w' -- reserved
- Reserved for future use.
-
-`W' -- reserved
- Reserved for future use.
-
-`x' -- reserved
- Reserved for future use.
-
-`X'ADDR`,'LENGTH:XX... -- write mem (binary)
- ADDR is address, LENGTH is number of bytes, XX... is binary data.
- The characters `$', `#', and `0x7d' are escaped using `0x7d'.
-
- Reply:
- `OK'
- for success
-
- `ENN'
- for an error
-
-`y' -- reserved
- Reserved for future use.
-
-`Y' reserved
- Reserved for future use.
-
-`z'TYPE`,'ADDR`,'LENGTH -- remove breakpoint or watchpoint *(draft)*
-`Z'TYPE`,'ADDR`,'LENGTH -- insert breakpoint or watchpoint *(draft)*
- Insert (`Z') or remove (`z') a TYPE breakpoint or watchpoint
- starting at address ADDRESS and covering the next LENGTH bytes.
-
- Each breakpoint and watchpoint packet TYPE is documented
- separately.
-
- _Implementation notes: A remote target shall return an empty string
- for an unrecognized breakpoint or watchpoint packet TYPE. A
- remote target shall support either both or neither of a given
- `Z'TYPE... and `z'TYPE... packet pair. To avoid potential
- problems with duplicate packets, the operations should be
- implemented in an idempotent way._
-
-`z'`0'`,'ADDR`,'LENGTH -- remove memory breakpoint *(draft)*
-
-`Z'`0'`,'ADDR`,'LENGTH -- insert memory breakpoint *(draft)*
- Insert (`Z0') or remove (`z0') a memory breakpoint at address
- `addr' of size `length'.
-
- A memory breakpoint is implemented by replacing the instruction at
- ADDR with a software breakpoint or trap instruction. The `length'
- is used by targets that indicates the size of the breakpoint (in
- bytes) that should be inserted (e.g., the ARM and MIPS can insert
- either a 2 or 4 byte breakpoint).
-
- _Implementation note: It is possible for a target to copy or move
- code that contains memory breakpoints (e.g., when implementing
- overlays). The behavior of this packet, in the presence of such a
- target, is not defined._
-
- Reply:
- `OK'
- success
-
- `'
- not supported
-
- `ENN'
- for an error
-
-`z'`1'`,'ADDR`,'LENGTH -- remove hardware breakpoint *(draft)*
-
-`Z'`1'`,'ADDR`,'LENGTH -- insert hardware breakpoint *(draft)*
- Insert (`Z1') or remove (`z1') a hardware breakpoint at address
- `addr' of size `length'.
-
- A hardware breakpoint is implemented using a mechanism that is not
- dependant on being able to modify the target's memory.
-
- _Implementation note: A hardware breakpoint is not affected by code
- movement._
-
- Reply:
- `OK'
- success
-
- `'
- not supported
-
- `ENN'
- for an error
-
-`z'`2'`,'ADDR`,'LENGTH -- remove write watchpoint *(draft)*
-
-`Z'`2'`,'ADDR`,'LENGTH -- insert write watchpoint *(draft)*
- Insert (`Z2') or remove (`z2') a write watchpoint.
-
- Reply:
- `OK'
- success
-
- `'
- not supported
-
- `ENN'
- for an error
-
-`z'`3'`,'ADDR`,'LENGTH -- remove read watchpoint *(draft)*
-
-`Z'`3'`,'ADDR`,'LENGTH -- insert read watchpoint *(draft)*
- Insert (`Z3') or remove (`z3') a read watchpoint.
-
- Reply:
- `OK'
- success
-
- `'
- not supported
-
- `ENN'
- for an error
-
-`z'`4'`,'ADDR`,'LENGTH -- remove access watchpoint *(draft)*
-
-`Z'`4'`,'ADDR`,'LENGTH -- insert access watchpoint *(draft)*
- Insert (`Z4') or remove (`z4') an access watchpoint.
-
- Reply:
- `OK'
- success
-
- `'
- not supported
-
- `ENN'
- for an error
-
-
-
-File: gdb.info, Node: Stop Reply Packets, Next: General Query Packets, Prev: Packets, Up: Remote Protocol
-
-Stop Reply Packets
-==================
-
-The `C', `c', `S', `s' and `?' packets can receive any of the below as
-a reply. In the case of the `C', `c', `S' and `s' packets, that reply
-is only returned when the target halts. In the below the exact meaning
-of `signal number' is poorly defined. In general one of the UNIX
-signal numbering conventions is used.
-
-`SAA'
- AA is the signal number
-
-``T'AAN...`:'R...`;'N...`:'R...`;'N...`:'R...`;''
- AA = two hex digit signal number; N... = register number (hex),
- R... = target byte ordered register contents, size defined by
- `DEPRECATED_REGISTER_RAW_SIZE'; N... = `thread', R... = thread
- process ID, this is a hex integer; N... = (`watch' | `rwatch' |
- `awatch', R... = data address, this is a hex integer; N... = other
- string not starting with valid hex digit. GDB should ignore this
- N..., R... pair and go on to the next. This way we can extend the
- protocol.
-
-`WAA'
- The process exited, and AA is the exit status. This is only
- applicable to certain targets.
-
-`XAA'
- The process terminated with signal AA.
-
-`OXX...'
- XX... is hex encoding of ASCII data. This can happen at any time
- while the program is running and the debugger should continue to
- wait for `W', `T', etc.
-
-`FCALL-ID`,'PARAMETER...'
- CALL-ID is the identifier which says which host system call should
- be called. This is just the name of the function. Translation
- into the correct system call is only applicable as it's defined in
- GDB. *Note File-I/O remote protocol extension::, for a list of
- implemented system calls.
-
- PARAMETER... is a list of parameters as defined for this very
- system call.
-
- The target replies with this packet when it expects GDB to call a
- host system call on behalf of the target. GDB replies with an
- appropriate `F' packet and keeps up waiting for the next reply
- packet from the target. The latest `C', `c', `S' or `s' action is
- expected to be continued. *Note File-I/O remote protocol
- extension::, for more details.
-
-
-
-File: gdb.info, Node: General Query Packets, Next: Register Packet Format, Prev: Stop Reply Packets, Up: Remote Protocol
-
-General Query Packets
-=====================
-
-The following set and query packets have already been defined.
-
-`q'`C' -- current thread
- Return the current thread id.
-
- Reply:
- ``QC'PID'
- Where PID is a HEX encoded 16 bit process id.
-
- `*'
- Any other reply implies the old pid.
-
-`q'`fThreadInfo' - all thread ids
- `q'`sThreadInfo'
-
- Obtain a list of active thread ids from the target (OS). Since
- there may be too many active threads to fit into one reply packet,
- this query works iteratively: it may require more than one
- query/reply sequence to obtain the entire list of threads. The
- first query of the sequence will be the `qf'`ThreadInfo' query;
- subsequent queries in the sequence will be the `qs'`ThreadInfo'
- query.
-
- NOTE: replaces the `qL' query (see below).
-
- Reply:
- ``m'ID'
- A single thread id
-
- ``m'ID,ID...'
- a comma-separated list of thread ids
-
- ``l''
- (lower case 'el') denotes end of list.
-
- In response to each query, the target will reply with a list of
- one or more thread ids, in big-endian hex, separated by commas.
- GDB will respond to each reply with a request for more thread ids
- (using the `qs' form of the query), until the target responds with
- `l' (lower-case el, for `'last'').
-
-`q'`ThreadExtraInfo'`,'ID -- extra thread info
- Where ID is a thread-id in big-endian hex. Obtain a printable
- string description of a thread's attributes from the target OS.
- This string may contain anything that the target OS thinks is
- interesting for GDB to tell the user about the thread. The string
- is displayed in GDB's `info threads' display. Some examples of
- possible thread extra info strings are "Runnable", or "Blocked on
- Mutex".
-
- Reply:
- `XX...'
- Where XX... is a hex encoding of ASCII data, comprising the
- printable string containing the extra information about the
- thread's attributes.
-
-`q'`L'STARTFLAGTHREADCOUNTNEXTTHREAD -- query LIST or THREADLIST *(deprecated)*
- Obtain thread information from RTOS. Where: STARTFLAG (one hex
- digit) is one to indicate the first query and zero to indicate a
- subsequent query; THREADCOUNT (two hex digits) is the maximum
- number of threads the response packet can contain; and NEXTTHREAD
- (eight hex digits), for subsequent queries (STARTFLAG is zero), is
- returned in the response as ARGTHREAD.
-
- NOTE: this query is replaced by the `q'`fThreadInfo' query (see
- above).
-
- Reply:
- ``q'`M'COUNTDONEARGTHREADTHREAD...'
- Where: COUNT (two hex digits) is the number of threads being
- returned; DONE (one hex digit) is zero to indicate more
- threads and one indicates no further threads; ARGTHREADID
- (eight hex digits) is NEXTTHREAD from the request packet;
- THREAD... is a sequence of thread IDs from the target.
- THREADID (eight hex digits). See
- `remote.c:parse_threadlist_response()'.
-
-`q'`CRC:'ADDR`,'LENGTH -- compute CRC of memory block
- Reply:
- ``E'NN'
- An error (such as memory fault)
-
- ``C'CRC32'
- A 32 bit cyclic redundancy check of the specified memory
- region.
-
-`q'`Offsets' -- query sect offs
- Get section offsets that the target used when re-locating the
- downloaded image. _Note: while a `Bss' offset is included in the
- response, GDB ignores this and instead applies the `Data' offset
- to the `Bss' section._
-
- Reply:
- ``Text='XXX`;Data='YYY`;Bss='ZZZ'
-
-`q'`P'MODETHREADID -- thread info request
- Returns information on THREADID. Where: MODE is a hex encoded 32
- bit mode; THREADID is a hex encoded 64 bit thread ID.
-
- Reply:
- `*'
-
- See `remote.c:remote_unpack_thread_info_response()'.
-
-`q'`Rcmd,'COMMAND -- remote command
- COMMAND (hex encoded) is passed to the local interpreter for
- execution. Invalid commands should be reported using the output
- string. Before the final result packet, the target may also
- respond with a number of intermediate `O'OUTPUT console output
- packets. _Implementors should note that providing access to a
- stubs's interpreter may have security implications_.
-
- Reply:
- `OK'
- A command response with no output.
-
- `OUTPUT'
- A command response with the hex encoded output string OUTPUT.
-
- ``E'NN'
- Indicate a badly formed request.
-
- ``''
- When `q'`Rcmd' is not recognized.
-
-`qSymbol::' -- symbol lookup
- Notify the target that GDB is prepared to serve symbol lookup
- requests. Accept requests from the target for the values of
- symbols.
-
- Reply:
- ``OK''
- The target does not need to look up any (more) symbols.
-
- ``qSymbol:'SYM_NAME'
- The target requests the value of symbol SYM_NAME (hex
- encoded). GDB may provide the value by using the
- `qSymbol:'SYM_VALUE:SYM_NAME message, described below.
-
-`qSymbol:'SYM_VALUE:SYM_NAME -- symbol value
- Set the value of SYM_NAME to SYM_VALUE.
-
- SYM_NAME (hex encoded) is the name of a symbol whose value the
- target has previously requested.
-
- SYM_VALUE (hex) is the value for symbol SYM_NAME. If GDB cannot
- supply a value for SYM_NAME, then this field will be empty.
-
- Reply:
- ``OK''
- The target does not need to look up any (more) symbols.
-
- ``qSymbol:'SYM_NAME'
- The target requests the value of a new symbol SYM_NAME (hex
- encoded). GDB will continue to supply the values of symbols
- (if available), until the target ceases to request them.
-
-`qPart':OBJECT:`read':ANNEX:OFFSET,LENGTH -- read special data
- Read uninterpreted bytes from the target's special data area
- identified by the keyword `object'. Request LENGTH bytes starting
- at OFFSET bytes into the data. The content and encoding of ANNEX
- is specific to the object; it can supply additional details about
- what data to access.
-
- Here are the specific requests of this form defined so far. All
- ``qPart':OBJECT:`read':...' requests use the same reply formats,
- listed below.
-
- `qPart':`auxv':`read'::OFFSET,LENGTH
- Access the target's "auxiliary vector". *Note Auxiliary
- Vector::. Note ANNEX must be empty.
-
- Reply:
- `OK'
- The OFFSET in the request is at the end of the data. There
- is no more data to be read.
-
- XX...
- Hex encoded data bytes read. This may be fewer bytes than
- the LENGTH in the request.
-
- `E00'
- The request was malformed, or ANNEX was invalid.
-
- `E'NN
- The offset was invalid, or there was an error encountered
- reading the data. NN is a hex-encoded `errno' value.
-
- `""' (empty)
- An empty reply indicates the OBJECT or ANNEX string was not
- recognized by the stub.
-
-`qPart':OBJECT:`write':ANNEX:OFFSET:DATA...
- Write uninterpreted bytes into the target's special data area
- identified by the keyword `object', starting at OFFSET bytes into
- the data. DATA... is the hex-encoded data to be written. The
- content and encoding of ANNEX is specific to the object; it can
- supply additional details about what data to access.
-
- No requests of this form are presently in use. This specification
- serves as a placeholder to document the common format that new
- specific request specifications ought to use.
-
- Reply:
- NN
- NN (hex encoded) is the number of bytes written. This may be
- fewer bytes than supplied in the request.
-
- `E00'
- The request was malformed, or ANNEX was invalid.
-
- `E'NN
- The offset was invalid, or there was an error encountered
- writing the data. NN is a hex-encoded `errno' value.
-
- `""' (empty)
- An empty reply indicates the OBJECT or ANNEX string was not
- recognized by the stub, or that the object does not support
- writing.
-
-`qPart':OBJECT:OPERATION:...
- Requests of this form may be added in the future. When a stub does
- not recognize the OBJECT keyword, or its support for OBJECT does
- not recognize the OPERATION keyword, the stub must respond with an
- empty packet.
-
-
-File: gdb.info, Node: Register Packet Format, Next: Examples, Prev: General Query Packets, Up: Remote Protocol
-
-Register Packet Format
-======================
-
-The following `g'/`G' packets have previously been defined. In the
-below, some thirty-two bit registers are transferred as sixty-four
-bits. Those registers should be zero/sign extended (which?) to fill
-the space allocated. Register bytes are transfered in target byte
-order. The two nibbles within a register byte are transfered
-most-significant - least-significant.
-
-MIPS32
- All registers are transfered as thirty-two bit quantities in the
- order: 32 general-purpose; sr; lo; hi; bad; cause; pc; 32
- floating-point registers; fsr; fir; fp.
-
-MIPS64
- All registers are transfered as sixty-four bit quantities
- (including thirty-two bit registers such as `sr'). The ordering
- is the same as `MIPS32'.
-
-
-
-File: gdb.info, Node: Examples, Next: File-I/O remote protocol extension, Prev: Register Packet Format, Up: Remote Protocol
-
-Examples
-========
-
-Example sequence of a target being re-started. Notice how the restart
-does not get any direct output:
-
- -> `R00'
- <- `+'
- _target restarts_
- -> `?'
- <- `+'
- <- `T001:1234123412341234'
- -> `+'
-
- Example sequence of a target being stepped by a single instruction:
-
- -> `G1445...'
- <- `+'
- -> `s'
- <- `+'
- _time passes_
- <- `T001:1234123412341234'
- -> `+'
- -> `g'
- <- `+'
- <- `1455...'
- -> `+'
-
-
-File: gdb.info, Node: File-I/O remote protocol extension, Prev: Examples, Up: Remote Protocol
-
-File-I/O remote protocol extension
-==================================
-
-* Menu:
-
-* File-I/O Overview::
-* Protocol basics::
-* The F request packet::
-* The F reply packet::
-* Memory transfer::
-* The Ctrl-C message::
-* Console I/O::
-* The isatty call::
-* The system call::
-* List of supported calls::
-* Protocol specific representation of datatypes::
-* Constants::
-* File-I/O Examples::
-
-
-File: gdb.info, Node: File-I/O Overview, Next: Protocol basics, Up: File-I/O remote protocol extension
-
-File-I/O Overview
------------------
-
-The File I/O remote protocol extension (short: File-I/O) allows the
-target to use the hosts file system and console I/O when calling various
-system calls. System calls on the target system are translated into a
-remote protocol packet to the host system which then performs the needed
-actions and returns with an adequate response packet to the target
-system. This simulates file system operations even on targets that
-lack file systems.
-
- The protocol is defined host- and target-system independent. It uses
-it's own independent representation of datatypes and values. Both, GDB
-and the target's GDB stub are responsible for translating the system
-dependent values into the unified protocol values when data is
-transmitted.
-
- The communication is synchronous. A system call is possible only
-when GDB is waiting for the `C', `c', `S' or `s' packets. While GDB
-handles the request for a system call, the target is stopped to allow
-deterministic access to the target's memory. Therefore File-I/O is not
-interuptible by target signals. It is possible to interrupt File-I/O
-by a user interrupt (Ctrl-C), though.
-
- The target's request to perform a host system call does not finish
-the latest `C', `c', `S' or `s' action. That means, after finishing
-the system call, the target returns to continuing the previous activity
-(continue, step). No additional continue or step request from GDB is
-required.
-
- (gdb) continue
- <- target requests 'system call X'
- target is stopped, GDB executes system call
- -> GDB returns result
- ... target continues, GDB returns to wait for the target
- <- target hits breakpoint and sends a Txx packet
-
- The protocol is only used for files on the host file system and for
-I/O on the console. Character or block special devices, pipes, named
-pipes or sockets or any other communication method on the host system
-are not supported by this protocol.
-
-
-File: gdb.info, Node: Protocol basics, Next: The F request packet, Prev: File-I/O Overview, Up: File-I/O remote protocol extension
-
-Protocol basics
----------------
-
-The File-I/O protocol uses the `F' packet, as request as well as as
-reply packet. Since a File-I/O system call can only occur when GDB is
-waiting for the continuing or stepping target, the File-I/O request is
-a reply that GDB has to expect as a result of a former `C', `c', `S' or
-`s' packet. This `F' packet contains all information needed to allow
-GDB to call the appropriate host system call:
-
- * A unique identifier for the requested system call.
-
- * All parameters to the system call. Pointers are given as addresses
- in the target memory address space. Pointers to strings are given
- as pointer/length pair. Numerical values are given as they are.
- Numerical control values are given in a protocol specific
- representation.
-
-
- At that point GDB has to perform the following actions.
-
- * If parameter pointer values are given, which point to data needed
- as input to a system call, GDB requests this data from the target
- with a standard `m' packet request. This additional communication
- has to be expected by the target implementation and is handled as
- any other `m' packet.
-
- * GDB translates all value from protocol representation to host
- representation as needed. Datatypes are coerced into the host
- types.
-
- * GDB calls the system call
-
- * It then coerces datatypes back to protocol representation.
-
- * If pointer parameters in the request packet point to buffer space
- in which a system call is expected to copy data to, the data is
- transmitted to the target using a `M' or `X' packet. This packet
- has to be expected by the target implementation and is handled as
- any other `M' or `X' packet.
-
-
- Eventually GDB replies with another `F' packet which contains all
-necessary information for the target to continue. This at least
-contains
-
- * Return value.
-
- * `errno', if has been changed by the system call.
-
- * "Ctrl-C" flag.
-
-
- After having done the needed type and value coercion, the target
-continues the latest continue or step action.
-
-
-File: gdb.info, Node: The F request packet, Next: The F reply packet, Prev: Protocol basics, Up: File-I/O remote protocol extension
-
-The `F' request packet
-----------------------
-
-The `F' request packet has the following format:
-
- `F'CALL-ID`,'PARAMETER...
-
- CALL-ID is the identifier to indicate the host system call to be
- called. This is just the name of the function.
-
- PARAMETER... are the parameters to the system call.
-
-
- Parameters are hexadecimal integer values, either the real values in
-case of scalar datatypes, as pointers to target buffer space in case of
-compound datatypes and unspecified memory areas or as pointer/length
-pairs in case of string parameters. These are appended to the call-id,
-each separated from its predecessor by a comma. All values are
-transmitted in ASCII string representation, pointer/length pairs
-separated by a slash.
-
-
-File: gdb.info, Node: The F reply packet, Next: Memory transfer, Prev: The F request packet, Up: File-I/O remote protocol extension
-
-The `F' reply packet
---------------------
-
-The `F' reply packet has the following format:
-
- `F'RETCODE`,'ERRNO`,'CTRL-C FLAG`;'CALL SPECIFIC ATTACHMENT
-
- RETCODE is the return code of the system call as hexadecimal value.
-
- ERRNO is the errno set by the call, in protocol specific
- representation. This parameter can be omitted if the call was
- successful.
-
- CTRL-C FLAG is only send if the user requested a break. In this
- case, ERRNO must be send as well, even if the call was successful.
- The CTRL-C FLAG itself consists of the character 'C':
-
- F0,0,C
-
- or, if the call was interupted before the host call has been
- performed:
-
- F-1,4,C
-
- assuming 4 is the protocol specific representation of `EINTR'.
-
-
-
-File: gdb.info, Node: Memory transfer, Next: The Ctrl-C message, Prev: The F reply packet, Up: File-I/O remote protocol extension
-
-Memory transfer
----------------
-
-Structured data which is transferred using a memory read or write as
-e.g. a `struct stat' is expected to be in a protocol specific format
-with all scalar multibyte datatypes being big endian. This should be
-done by the target before the `F' packet is sent resp. by GDB before it
-transfers memory to the target. Transferred pointers to structured
-data should point to the already coerced data at any time.
-
-
-File: gdb.info, Node: The Ctrl-C message, Next: Console I/O, Prev: Memory transfer, Up: File-I/O remote protocol extension
-
-The Ctrl-C message
-------------------
-
-A special case is, if the CTRL-C FLAG is set in the GDB reply packet.
-In this case the target should behave, as if it had gotten a break
-message. The meaning for the target is "system call interupted by
-`SIGINT'". Consequentially, the target should actually stop (as with a
-break message) and return to GDB with a `T02' packet. In this case,
-it's important for the target to know, in which state the system call
-was interrupted. Since this action is by design not an atomic
-operation, we have to differ between two cases:
-
- * The system call hasn't been performed on the host yet.
-
- * The system call on the host has been finished.
-
-
- These two states can be distinguished by the target by the value of
-the returned `errno'. If it's the protocol representation of `EINTR',
-the system call hasn't been performed. This is equivalent to the
-`EINTR' handling on POSIX systems. In any other case, the target may
-presume that the system call has been finished -- successful or not --
-and should behave as if the break message arrived right after the
-system call.
-
- GDB must behave reliable. If the system call has not been called
-yet, GDB may send the `F' reply immediately, setting `EINTR' as `errno'
-in the packet. If the system call on the host has been finished before
-the user requests a break, the full action must be finshed by GDB.
-This requires sending `M' or `X' packets as they fit. The `F' packet
-may only be send when either nothing has happened or the full action
-has been completed.
-
-
-File: gdb.info, Node: Console I/O, Next: The isatty call, Prev: The Ctrl-C message, Up: File-I/O remote protocol extension
-
-Console I/O
------------
-
-By default and if not explicitely closed by the target system, the file
-descriptors 0, 1 and 2 are connected to the GDB console. Output on the
-GDB console is handled as any other file output operation (`write(1,
-...)' or `write(2, ...)'). Console input is handled by GDB so that
-after the target read request from file descriptor 0 all following
-typing is buffered until either one of the following conditions is met:
-
- * The user presses `Ctrl-C'. The behaviour is as explained above,
- the `read' system call is treated as finished.
-
- * The user presses `Enter'. This is treated as end of input with a
- trailing line feed.
-
- * The user presses `Ctrl-D'. This is treated as end of input. No
- trailing character, especially no Ctrl-D is appended to the input.
-
-
- If the user has typed more characters as fit in the buffer given to
-the read call, the trailing characters are buffered in GDB until either
-another `read(0, ...)' is requested by the target or debugging is
-stopped on users request.
-
-
-File: gdb.info, Node: The isatty call, Next: The system call, Prev: Console I/O, Up: File-I/O remote protocol extension
-
-The isatty(3) call
-------------------
-
-A special case in this protocol is the library call `isatty' which is
-implemented as it's own call inside of this protocol. It returns 1 to
-the target if the file descriptor given as parameter is attached to the
-GDB console, 0 otherwise. Implementing through system calls would
-require implementing `ioctl' and would be more complex than needed.
-
-
-File: gdb.info, Node: The system call, Next: List of supported calls, Prev: The isatty call, Up: File-I/O remote protocol extension
-
-The system(3) call
-------------------
-
-The other special case in this protocol is the `system' call which is
-implemented as it's own call, too. GDB is taking over the full task of
-calling the necessary host calls to perform the `system' call. The
-return value of `system' is simplified before it's returned to the
-target. Basically, the only signal transmitted back is `EINTR' in case
-the user pressed `Ctrl-C'. Otherwise the return value consists
-entirely of the exit status of the called command.
-
- Due to security concerns, the `system' call is refused to be called
-by GDB by default. The user has to allow this call explicitly by
-entering
-
-``set remote system-call-allowed 1''
-
- Disabling the `system' call is done by
-
-``set remote system-call-allowed 0''
-
- The current setting is shown by typing
-
-``show remote system-call-allowed''
-
-
-File: gdb.info, Node: List of supported calls, Next: Protocol specific representation of datatypes, Prev: The system call, Up: File-I/O remote protocol extension
-
-List of supported calls
------------------------
-
-* Menu:
-
-* open::
-* close::
-* read::
-* write::
-* lseek::
-* rename::
-* unlink::
-* stat/fstat::
-* gettimeofday::
-* isatty::
-* system::
-
-
-File: gdb.info, Node: open, Next: close, Up: List of supported calls
-
-open
-....
-
-Synopsis:
- int open(const char *pathname, int flags);
- int open(const char *pathname, int flags, mode_t mode);
-
-Request:
- Fopen,pathptr/len,flags,mode
-
-`flags' is the bitwise or of the following values:
-
-`O_CREAT'
- If the file does not exist it will be created. The host rules
- apply as far as file ownership and time stamps are concerned.
-
-`O_EXCL'
- When used with O_CREAT, if the file already exists it is an error
- and open() fails.
-
-`O_TRUNC'
- If the file already exists and the open mode allows writing
- (O_RDWR or O_WRONLY is given) it will be truncated to length 0.
-
-`O_APPEND'
- The file is opened in append mode.
-
-`O_RDONLY'
- The file is opened for reading only.
-
-`O_WRONLY'
- The file is opened for writing only.
-
-`O_RDWR'
- The file is opened for reading and writing.
-
- Each other bit is silently ignored.
-
-
-`mode' is the bitwise or of the following values:
-
-`S_IRUSR'
- User has read permission.
-
-`S_IWUSR'
- User has write permission.
-
-`S_IRGRP'
- Group has read permission.
-
-`S_IWGRP'
- Group has write permission.
-
-`S_IROTH'
- Others have read permission.
-
-`S_IWOTH'
- Others have write permission.
-
- Each other bit is silently ignored.
-
-
-Return value:
- open returns the new file descriptor or -1 if an error
- occured.
-
-Errors:
-
-
-`EEXIST'
- pathname already exists and O_CREAT and O_EXCL were used.
-
-`EISDIR'
- pathname refers to a directory.
-
-`EACCES'
- The requested access is not allowed.
-
-`ENAMETOOLONG'
- pathname was too long.
-
-`ENOENT'
- A directory component in pathname does not exist.
-
-`ENODEV'
- pathname refers to a device, pipe, named pipe or socket.
-
-`EROFS'
- pathname refers to a file on a read-only filesystem and write
- access was requested.
-
-`EFAULT'
- pathname is an invalid pointer value.
-
-`ENOSPC'
- No space on device to create the file.
-
-`EMFILE'
- The process already has the maximum number of files open.
-
-`ENFILE'
- The limit on the total number of files open on the system has been
- reached.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: close, Next: read, Prev: open, Up: List of supported calls
-
-close
-.....
-
-Synopsis:
- int close(int fd);
-
-Request:
- Fclose,fd
-
-Return value:
- close returns zero on success, or -1 if an error occurred.
-
-Errors:
-
-
-`EBADF'
- fd isn't a valid open file descriptor.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: read, Next: write, Prev: close, Up: List of supported calls
-
-read
-....
-
-Synopsis:
- int read(int fd, void *buf, unsigned int count);
-
-Request:
- Fread,fd,bufptr,count
-
-Return value:
- On success, the number of bytes read is returned.
- Zero indicates end of file. If count is zero, read
- returns zero as well. On error, -1 is returned.
-
-Errors:
-
-
-`EBADF'
- fd is not a valid file descriptor or is not open for reading.
-
-`EFAULT'
- buf is an invalid pointer value.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: write, Next: lseek, Prev: read, Up: List of supported calls
-
-write
-.....
-
-Synopsis:
- int write(int fd, const void *buf, unsigned int count);
-
-Request:
- Fwrite,fd,bufptr,count
-
-Return value:
- On success, the number of bytes written are returned.
- Zero indicates nothing was written. On error, -1
- is returned.
-
-Errors:
-
-
-`EBADF'
- fd is not a valid file descriptor or is not open for writing.
-
-`EFAULT'
- buf is an invalid pointer value.
-
-`EFBIG'
- An attempt was made to write a file that exceeds the host specific
- maximum file size allowed.
-
-`ENOSPC'
- No space on device to write the data.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: lseek, Next: rename, Prev: write, Up: List of supported calls
-
-lseek
-.....
-
-Synopsis:
- long lseek (int fd, long offset, int flag);
-
-Request:
- Flseek,fd,offset,flag
-
- `flag' is one of:
-
-`SEEK_SET'
- The offset is set to offset bytes.
-
-`SEEK_CUR'
- The offset is set to its current location plus offset bytes.
-
-`SEEK_END'
- The offset is set to the size of the file plus offset bytes.
-
-Return value:
- On success, the resulting unsigned offset in bytes from
- the beginning of the file is returned. Otherwise, a
- value of -1 is returned.
-
-Errors:
-
-
-`EBADF'
- fd is not a valid open file descriptor.
-
-`ESPIPE'
- fd is associated with the GDB console.
-
-`EINVAL'
- flag is not a proper value.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: rename, Next: unlink, Prev: lseek, Up: List of supported calls
-
-rename
-......
-
-Synopsis:
- int rename(const char *oldpath, const char *newpath);
-
-Request:
- Frename,oldpathptr/len,newpathptr/len
-
-Return value:
- On success, zero is returned. On error, -1 is returned.
-
-Errors:
-
-
-`EISDIR'
- newpath is an existing directory, but oldpath is not a directory.
-
-`EEXIST'
- newpath is a non-empty directory.
-
-`EBUSY'
- oldpath or newpath is a directory that is in use by some process.
-
-`EINVAL'
- An attempt was made to make a directory a subdirectory of itself.
-
-`ENOTDIR'
- A component used as a directory in oldpath or new path is not a
- directory. Or oldpath is a directory and newpath exists but is
- not a directory.
-
-`EFAULT'
- oldpathptr or newpathptr are invalid pointer values.
-
-`EACCES'
- No access to the file or the path of the file.
-
-`ENAMETOOLONG'
- oldpath or newpath was too long.
-
-`ENOENT'
- A directory component in oldpath or newpath does not exist.
-
-`EROFS'
- The file is on a read-only filesystem.
-
-`ENOSPC'
- The device containing the file has no room for the new directory
- entry.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: unlink, Next: stat/fstat, Prev: rename, Up: List of supported calls
-
-unlink
-......
-
-Synopsis:
- int unlink(const char *pathname);
-
-Request:
- Funlink,pathnameptr/len
-
-Return value:
- On success, zero is returned. On error, -1 is returned.
-
-Errors:
-
-
-`EACCES'
- No access to the file or the path of the file.
-
-`EPERM'
- The system does not allow unlinking of directories.
-
-`EBUSY'
- The file pathname cannot be unlinked because it's being used by
- another process.
-
-`EFAULT'
- pathnameptr is an invalid pointer value.
-
-`ENAMETOOLONG'
- pathname was too long.
-
-`ENOENT'
- A directory component in pathname does not exist.
-
-`ENOTDIR'
- A component of the path is not a directory.
-
-`EROFS'
- The file is on a read-only filesystem.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: stat/fstat, Next: gettimeofday, Prev: unlink, Up: List of supported calls
-
-stat/fstat
-..........
-
-Synopsis:
- int stat(const char *pathname, struct stat *buf);
- int fstat(int fd, struct stat *buf);
-
-Request:
- Fstat,pathnameptr/len,bufptr
- Ffstat,fd,bufptr
-
-Return value:
- On success, zero is returned. On error, -1 is returned.
-
-Errors:
-
-
-`EBADF'
- fd is not a valid open file.
-
-`ENOENT'
- A directory component in pathname does not exist or the path is an
- empty string.
-
-`ENOTDIR'
- A component of the path is not a directory.
-
-`EFAULT'
- pathnameptr is an invalid pointer value.
-
-`EACCES'
- No access to the file or the path of the file.
-
-`ENAMETOOLONG'
- pathname was too long.
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: gettimeofday, Next: isatty, Prev: stat/fstat, Up: List of supported calls
-
-gettimeofday
-............
-
-Synopsis:
- int gettimeofday(struct timeval *tv, void *tz);
-
-Request:
- Fgettimeofday,tvptr,tzptr
-
-Return value:
- On success, 0 is returned, -1 otherwise.
-
-Errors:
-
-
-`EINVAL'
- tz is a non-NULL pointer.
-
-`EFAULT'
- tvptr and/or tzptr is an invalid pointer value.
-
-
-File: gdb.info, Node: isatty, Next: system, Prev: gettimeofday, Up: List of supported calls
-
-isatty
-......
-
-Synopsis:
- int isatty(int fd);
-
-Request:
- Fisatty,fd
-
-Return value:
- Returns 1 if fd refers to the GDB console, 0 otherwise.
-
-Errors:
-
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: system, Prev: isatty, Up: List of supported calls
-
-system
-......
-
-Synopsis:
- int system(const char *command);
-
-Request:
- Fsystem,commandptr/len
-
-Return value:
- The value returned is -1 on error and the return status
- of the command otherwise. Only the exit status of the
- command is returned, which is extracted from the hosts
- system return value by calling WEXITSTATUS(retval).
- In case /bin/sh could not be executed, 127 is returned.
-
-Errors:
-
-
-`EINTR'
- The call was interrupted by the user.
-
-
-File: gdb.info, Node: Protocol specific representation of datatypes, Next: Constants, Prev: List of supported calls, Up: File-I/O remote protocol extension
-
-Protocol specific representation of datatypes
----------------------------------------------
-
-* Menu:
-
-* Integral datatypes::
-* Pointer values::
-* struct stat::
-* struct timeval::
-
-
-File: gdb.info, Node: Integral datatypes, Next: Pointer values, Up: Protocol specific representation of datatypes
-
-Integral datatypes
-..................
-
-The integral datatypes used in the system calls are
-
- int, unsigned int, long, unsigned long, mode_t and time_t
-
- `Int', `unsigned int', `mode_t' and `time_t' are implemented as 32
-bit values in this protocol.
-
- `Long' and `unsigned long' are implemented as 64 bit types.
-
- *Note Limits::, for corresponding MIN and MAX values (similar to
-those in `limits.h') to allow range checking on host and target.
-
- `time_t' datatypes are defined as seconds since the Epoch.
-
- All integral datatypes transferred as part of a memory read or write
-of a structured datatype e.g. a `struct stat' have to be given in big
-endian byte order.
-
-
-File: gdb.info, Node: Pointer values, Next: struct stat, Prev: Integral datatypes, Up: Protocol specific representation of datatypes
-
-Pointer values
-..............
-
-Pointers to target data are transmitted as they are. An exception is
-made for pointers to buffers for which the length isn't transmitted as
-part of the function call, namely strings. Strings are transmitted as
-a pointer/length pair, both as hex values, e.g.
-
- `1aaf/12'
-
-which is a pointer to data of length 18 bytes at position 0x1aaf. The
-length is defined as the full string length in bytes, including the
-trailing null byte. Example:
-
- ``hello, world'' at address 0x123456
-
-is transmitted as
-
- `123456/d'
-
-
-File: gdb.info, Node: struct stat, Next: struct timeval, Prev: Pointer values, Up: Protocol specific representation of datatypes
-
-struct stat
-...........
-
-The buffer of type struct stat used by the target and GDB is defined as
-follows:
-
- struct stat {
- unsigned int st_dev; /* device */
- unsigned int st_ino; /* inode */
- mode_t st_mode; /* protection */
- unsigned int st_nlink; /* number of hard links */
- unsigned int st_uid; /* user ID of owner */
- unsigned int st_gid; /* group ID of owner */
- unsigned int st_rdev; /* device type (if inode device) */
- unsigned long st_size; /* total size, in bytes */
- unsigned long st_blksize; /* blocksize for filesystem I/O */
- unsigned long st_blocks; /* number of blocks allocated */
- time_t st_atime; /* time of last access */
- time_t st_mtime; /* time of last modification */
- time_t st_ctime; /* time of last change */
- };
-
- The integral datatypes are conforming to the definitions given in the
-approriate section (see *Note Integral datatypes::, for details) so this
-structure is of size 64 bytes.
-
- The values of several fields have a restricted meaning and/or range
-of values.
-
- st_dev: 0 file
- 1 console
-
- st_ino: No valid meaning for the target. Transmitted unchanged.
-
- st_mode: Valid mode bits are described in Appendix C. Any other
- bits have currently no meaning for the target.
-
- st_uid: No valid meaning for the target. Transmitted unchanged.
-
- st_gid: No valid meaning for the target. Transmitted unchanged.
-
- st_rdev: No valid meaning for the target. Transmitted unchanged.
-
- st_atime, st_mtime, st_ctime:
- These values have a host and file system dependent
- accuracy. Especially on Windows hosts the file systems
- don't support exact timing values.
-
- The target gets a struct stat of the above representation and is
-responsible to coerce it to the target representation before continuing.
-
- Note that due to size differences between the host and target
-representation of stat members, these members could eventually get
-truncated on the target.
-
-
-File: gdb.info, Node: struct timeval, Prev: struct stat, Up: Protocol specific representation of datatypes
-
-struct timeval
-..............
-
-The buffer of type struct timeval used by the target and GDB is defined
-as follows:
-
- struct timeval {
- time_t tv_sec; /* second */
- long tv_usec; /* microsecond */
- };
-
- The integral datatypes are conforming to the definitions given in the
-approriate section (see *Note Integral datatypes::, for details) so this
-structure is of size 8 bytes.
-
-
-File: gdb.info, Node: Constants, Next: File-I/O Examples, Prev: Protocol specific representation of datatypes, Up: File-I/O remote protocol extension
-
-Constants
----------
-
-The following values are used for the constants inside of the protocol.
-GDB and target are resposible to translate these values before and
-after the call as needed.
-
-* Menu:
-
-* Open flags::
-* mode_t values::
-* Errno values::
-* Lseek flags::
-* Limits::
-
-
-File: gdb.info, Node: Open flags, Next: mode_t values, Up: Constants
-
-Open flags
-..........
-
-All values are given in hexadecimal representation.
-
- O_RDONLY 0x0
- O_WRONLY 0x1
- O_RDWR 0x2
- O_APPEND 0x8
- O_CREAT 0x200
- O_TRUNC 0x400
- O_EXCL 0x800
-
-
-File: gdb.info, Node: mode_t values, Next: Errno values, Prev: Open flags, Up: Constants
-
-mode_t values
-.............
-
-All values are given in octal representation.
-
- S_IFREG 0100000
- S_IFDIR 040000
- S_IRUSR 0400
- S_IWUSR 0200
- S_IXUSR 0100
- S_IRGRP 040
- S_IWGRP 020
- S_IXGRP 010
- S_IROTH 04
- S_IWOTH 02
- S_IXOTH 01
-
-
-File: gdb.info, Node: Errno values, Next: Lseek flags, Prev: mode_t values, Up: Constants
-
-Errno values
-............
-
-All values are given in decimal representation.
-
- EPERM 1
- ENOENT 2
- EINTR 4
- EBADF 9
- EACCES 13
- EFAULT 14
- EBUSY 16
- EEXIST 17
- ENODEV 19
- ENOTDIR 20
- EISDIR 21
- EINVAL 22
- ENFILE 23
- EMFILE 24
- EFBIG 27
- ENOSPC 28
- ESPIPE 29
- EROFS 30
- ENAMETOOLONG 91
- EUNKNOWN 9999
-
- EUNKNOWN is used as a fallback error value if a host system returns
-any error value not in the list of supported error numbers.
-
-
-File: gdb.info, Node: Lseek flags, Next: Limits, Prev: Errno values, Up: Constants
-
-Lseek flags
-...........
-
- SEEK_SET 0
- SEEK_CUR 1
- SEEK_END 2
-
-
-File: gdb.info, Node: Limits, Prev: Lseek flags, Up: Constants
-
-Limits
-......
-
-All values are given in decimal representation.
-
- INT_MIN -2147483648
- INT_MAX 2147483647
- UINT_MAX 4294967295
- LONG_MIN -9223372036854775808
- LONG_MAX 9223372036854775807
- ULONG_MAX 18446744073709551615
-
-
-File: gdb.info, Node: File-I/O Examples, Prev: Constants, Up: File-I/O remote protocol extension
-
-File-I/O Examples
------------------
-
-Example sequence of a write call, file descriptor 3, buffer is at target
-address 0x1234, 6 bytes should be written:
-
- <- `Fwrite,3,1234,6'
- _request memory read from target_
- -> `m1234,6'
- <- XXXXXX
- _return "6 bytes written"_
- -> `F6'
-
- Example sequence of a read call, file descriptor 3, buffer is at
-target address 0x1234, 6 bytes should be read:
-
- <- `Fread,3,1234,6'
- _request memory write to target_
- -> `X1234,6:XXXXXX'
- _return "6 bytes read"_
- -> `F6'
-
- Example sequence of a read call, call fails on the host due to
-invalid file descriptor (EBADF):
-
- <- `Fread,3,1234,6'
- -> `F-1,9'
-
- Example sequence of a read call, user presses Ctrl-C before syscall
-on host is called:
-
- <- `Fread,3,1234,6'
- -> `F-1,4,C'
- <- `T02'
-
- Example sequence of a read call, user presses Ctrl-C after syscall on
-host is called:
-
- <- `Fread,3,1234,6'
- -> `X1234,6:XXXXXX'
- <- `T02'
-
-
-File: gdb.info, Node: Agent Expressions, Next: Copying, Prev: Remote Protocol, Up: Top
-
-The GDB Agent Expression Mechanism
-**********************************
-
-In some applications, it is not feasable for the debugger to interrupt
-the program's execution long enough for the developer to learn anything
-helpful about its behavior. If the program's correctness depends on its
-real-time behavior, delays introduced by a debugger might cause the
-program to fail, even when the code itself is correct. It is useful to
-be able to observe the program's behavior without interrupting it.
-
- Using GDB's `trace' and `collect' commands, the user can specify
-locations in the program, and arbitrary expressions to evaluate when
-those locations are reached. Later, using the `tfind' command, she can
-examine the values those expressions had when the program hit the trace
-points. The expressions may also denote objects in memory --
-structures or arrays, for example -- whose values GDB should record;
-while visiting a particular tracepoint, the user may inspect those
-objects as if they were in memory at that moment. However, because GDB
-records these values without interacting with the user, it can do so
-quickly and unobtrusively, hopefully not disturbing the program's
-behavior.
-
- When GDB is debugging a remote target, the GDB "agent" code running
-on the target computes the values of the expressions itself. To avoid
-having a full symbolic expression evaluator on the agent, GDB translates
-expressions in the source language into a simpler bytecode language, and
-then sends the bytecode to the agent; the agent then executes the
-bytecode, and records the values for GDB to retrieve later.
-
- The bytecode language is simple; there are forty-odd opcodes, the
-bulk of which are the usual vocabulary of C operands (addition,
-subtraction, shifts, and so on) and various sizes of literals and
-memory reference operations. The bytecode interpreter operates
-strictly on machine-level values -- various sizes of integers and
-floating point numbers -- and requires no information about types or
-symbols; thus, the interpreter's internal data structures are simple,
-and each bytecode requires only a few native machine instructions to
-implement it. The interpreter is small, and strict limits on the
-memory and time required to evaluate an expression are easy to
-determine, making it suitable for use by the debugging agent in
-real-time applications.
-
-* Menu:
-
-* General Bytecode Design:: Overview of the interpreter.
-* Bytecode Descriptions:: What each one does.
-* Using Agent Expressions:: How agent expressions fit into the big picture.
-* Varying Target Capabilities:: How to discover what the target can do.
-* Tracing on Symmetrix:: Special info for implementation on EMC's
- boxes.
-* Rationale:: Why we did it this way.
-
-
-File: gdb.info, Node: General Bytecode Design, Next: Bytecode Descriptions, Up: Agent Expressions
-
-General Bytecode Design
-=======================
-
-The agent represents bytecode expressions as an array of bytes. Each
-instruction is one byte long (thus the term "bytecode"). Some
-instructions are followed by operand bytes; for example, the `goto'
-instruction is followed by a destination for the jump.
-
- The bytecode interpreter is a stack-based machine; most instructions
-pop their operands off the stack, perform some operation, and push the
-result back on the stack for the next instruction to consume. Each
-element of the stack may contain either a integer or a floating point
-value; these values are as many bits wide as the largest integer that
-can be directly manipulated in the source language. Stack elements
-carry no record of their type; bytecode could push a value as an
-integer, then pop it as a floating point value. However, GDB will not
-generate code which does this. In C, one might define the type of a
-stack element as follows:
- union agent_val {
- LONGEST l;
- DOUBLEST d;
- };
-
-where `LONGEST' and `DOUBLEST' are `typedef' names for the largest
-integer and floating point types on the machine.
-
- By the time the bytecode interpreter reaches the end of the
-expression, the value of the expression should be the only value left
-on the stack. For tracing applications, `trace' bytecodes in the
-expression will have recorded the necessary data, and the value on the
-stack may be discarded. For other applications, like conditional
-breakpoints, the value may be useful.
-
- Separate from the stack, the interpreter has two registers:
-`pc'
- The address of the next bytecode to execute.
-
-`start'
- The address of the start of the bytecode expression, necessary for
- interpreting the `goto' and `if_goto' instructions.
-
-
-Neither of these registers is directly visible to the bytecode language
-itself, but they are useful for defining the meanings of the bytecode
-operations.
-
- There are no instructions to perform side effects on the running
-program, or call the program's functions; we assume that these
-expressions are only used for unobtrusive debugging, not for patching
-the running code.
-
- Most bytecode instructions do not distinguish between the various
-sizes of values, and operate on full-width values; the upper bits of the
-values are simply ignored, since they do not usually make a difference
-to the value computed. The exceptions to this rule are:
-memory reference instructions (`ref'N)
- There are distinct instructions to fetch different word sizes from
- memory. Once on the stack, however, the values are treated as
- full-size integers. They may need to be sign-extended; the `ext'
- instruction exists for this purpose.
-
-the sign-extension instruction (`ext' N)
- These clearly need to know which portion of their operand is to be
- extended to occupy the full length of the word.
-
-
- If the interpreter is unable to evaluate an expression completely for
-some reason (a memory location is inaccessible, or a divisor is zero,
-for example), we say that interpretation "terminates with an error".
-This means that the problem is reported back to the interpreter's caller
-in some helpful way. In general, code using agent expressions should
-assume that they may attempt to divide by zero, fetch arbitrary memory
-locations, and misbehave in other ways.
-
- Even complicated C expressions compile to a few bytecode
-instructions; for example, the expression `x + y * z' would typically
-produce code like the following, assuming that `x' and `y' live in
-registers, and `z' is a global variable holding a 32-bit `int':
- reg 1
- reg 2
- const32 address of z
- ref32
- ext 32
- mul
- add
- end
-
- In detail, these mean:
-`reg 1'
- Push the value of register 1 (presumably holding `x') onto the
- stack.
-
-`reg 2'
- Push the value of register 2 (holding `y').
-
-`const32 address of z'
- Push the address of `z' onto the stack.
-
-`ref32'
- Fetch a 32-bit word from the address at the top of the stack;
- replace the address on the stack with the value. Thus, we replace
- the address of `z' with `z''s value.
-
-`ext 32'
- Sign-extend the value on the top of the stack from 32 bits to full
- length. This is necessary because `z' is a signed integer.
-
-`mul'
- Pop the top two numbers on the stack, multiply them, and push their
- product. Now the top of the stack contains the value of the
- expression `y * z'.
-
-`add'
- Pop the top two numbers, add them, and push the sum. Now the top
- of the stack contains the value of `x + y * z'.
-
-`end'
- Stop executing; the value left on the stack top is the value to be
- recorded.
-
-
-
-File: gdb.info, Node: Bytecode Descriptions, Next: Using Agent Expressions, Prev: General Bytecode Design, Up: Agent Expressions
-
-Bytecode Descriptions
-=====================
-
-Each bytecode description has the following form:
-
-`add' (0x02): A B => A+B
- Pop the top two stack items, A and B, as integers; push their sum,
- as an integer.
-
-
- In this example, `add' is the name of the bytecode, and `(0x02)' is
-the one-byte value used to encode the bytecode, in hexidecimal. The
-phrase "A B => A+B" shows the stack before and after the bytecode
-executes. Beforehand, the stack must contain at least two values, A
-and B; since the top of the stack is to the right, B is on the top of
-the stack, and A is underneath it. After execution, the bytecode will
-have popped A and B from the stack, and replaced them with a single
-value, A+B. There may be other values on the stack below those shown,
-but the bytecode affects only those shown.
-
- Here is another example:
-
-`const8' (0x22) N: => N
- Push the 8-bit integer constant N on the stack, without sign
- extension.
-
-
- In this example, the bytecode `const8' takes an operand N directly
-from the bytecode stream; the operand follows the `const8' bytecode
-itself. We write any such operands immediately after the name of the
-bytecode, before the colon, and describe the exact encoding of the
-operand in the bytecode stream in the body of the bytecode description.
-
- For the `const8' bytecode, there are no stack items given before the
-=>; this simply means that the bytecode consumes no values from the
-stack. If a bytecode consumes no values, or produces no values, the
-list on either side of the => may be empty.
-
- If a value is written as A, B, or N, then the bytecode treats it as
-an integer. If a value is written is ADDR, then the bytecode treats it
-as an address.
-
- We do not fully describe the floating point operations here; although
-this design can be extended in a clean way to handle floating point
-values, they are not of immediate interest to the customer, so we avoid
-describing them, to save time.
-
-`float' (0x01): =>
- Prefix for floating-point bytecodes. Not implemented yet.
-
-`add' (0x02): A B => A+B
- Pop two integers from the stack, and push their sum, as an integer.
-
-`sub' (0x03): A B => A-B
- Pop two integers from the stack, subtract the top value from the
- next-to-top value, and push the difference.
-
-`mul' (0x04): A B => A*B
- Pop two integers from the stack, multiply them, and push the
- product on the stack. Note that, when one multiplies two N-bit
- numbers yielding another N-bit number, it is irrelevant whether the
- numbers are signed or not; the results are the same.
-
-`div_signed' (0x05): A B => A/B
- Pop two signed integers from the stack; divide the next-to-top
- value by the top value, and push the quotient. If the divisor is
- zero, terminate with an error.
-
-`div_unsigned' (0x06): A B => A/B
- Pop two unsigned integers from the stack; divide the next-to-top
- value by the top value, and push the quotient. If the divisor is
- zero, terminate with an error.
-
-`rem_signed' (0x07): A B => A MODULO B
- Pop two signed integers from the stack; divide the next-to-top
- value by the top value, and push the remainder. If the divisor is
- zero, terminate with an error.
-
-`rem_unsigned' (0x08): A B => A MODULO B
- Pop two unsigned integers from the stack; divide the next-to-top
- value by the top value, and push the remainder. If the divisor is
- zero, terminate with an error.
-
-`lsh' (0x09): A B => A<<B
- Pop two integers from the stack; let A be the next-to-top value,
- and B be the top value. Shift A left by B bits, and push the
- result.
-
-`rsh_signed' (0x0a): A B => `(signed)'A>>B
- Pop two integers from the stack; let A be the next-to-top value,
- and B be the top value. Shift A right by B bits, inserting copies
- of the top bit at the high end, and push the result.
-
-`rsh_unsigned' (0x0b): A B => A>>B
- Pop two integers from the stack; let A be the next-to-top value,
- and B be the top value. Shift A right by B bits, inserting zero
- bits at the high end, and push the result.
-
-`log_not' (0x0e): A => !A
- Pop an integer from the stack; if it is zero, push the value one;
- otherwise, push the value zero.
-
-`bit_and' (0x0f): A B => A&B
- Pop two integers from the stack, and push their bitwise `and'.
-
-`bit_or' (0x10): A B => A|B
- Pop two integers from the stack, and push their bitwise `or'.
-
-`bit_xor' (0x11): A B => A^B
- Pop two integers from the stack, and push their bitwise
- exclusive-`or'.
-
-`bit_not' (0x12): A => ~A
- Pop an integer from the stack, and push its bitwise complement.
-
-`equal' (0x13): A B => A=B
- Pop two integers from the stack; if they are equal, push the value
- one; otherwise, push the value zero.
-
-`less_signed' (0x14): A B => A<B
- Pop two signed integers from the stack; if the next-to-top value
- is less than the top value, push the value one; otherwise, push
- the value zero.
-
-`less_unsigned' (0x15): A B => A<B
- Pop two unsigned integers from the stack; if the next-to-top value
- is less than the top value, push the value one; otherwise, push
- the value zero.
-
-`ext' (0x16) N: A => A, sign-extended from N bits
- Pop an unsigned value from the stack; treating it as an N-bit
- twos-complement value, extend it to full length. This means that
- all bits to the left of bit N-1 (where the least significant bit
- is bit 0) are set to the value of bit N-1. Note that N may be
- larger than or equal to the width of the stack elements of the
- bytecode engine; in this case, the bytecode should have no effect.
-
- The number of source bits to preserve, N, is encoded as a single
- byte unsigned integer following the `ext' bytecode.
-
-`zero_ext' (0x2a) N: A => A, zero-extended from N bits
- Pop an unsigned value from the stack; zero all but the bottom N
- bits. This means that all bits to the left of bit N-1 (where the
- least significant bit is bit 0) are set to the value of bit N-1.
-
- The number of source bits to preserve, N, is encoded as a single
- byte unsigned integer following the `zero_ext' bytecode.
-
-`ref8' (0x17): ADDR => A
-`ref16' (0x18): ADDR => A
-`ref32' (0x19): ADDR => A
-`ref64' (0x1a): ADDR => A
- Pop an address ADDR from the stack. For bytecode `ref'N, fetch an
- N-bit value from ADDR, using the natural target endianness. Push
- the fetched value as an unsigned integer.
-
- Note that ADDR may not be aligned in any particular way; the
- `refN' bytecodes should operate correctly for any address.
-
- If attempting to access memory at ADDR would cause a processor
- exception of some sort, terminate with an error.
-
-`ref_float' (0x1b): ADDR => D
-`ref_double' (0x1c): ADDR => D
-`ref_long_double' (0x1d): ADDR => D
-`l_to_d' (0x1e): A => D
-`d_to_l' (0x1f): D => A
- Not implemented yet.
-
-`dup' (0x28): A => A A
- Push another copy of the stack's top element.
-
-`swap' (0x2b): A B => B A
- Exchange the top two items on the stack.
-
-`pop' (0x29): A =>
- Discard the top value on the stack.
-
-`if_goto' (0x20) OFFSET: A =>
- Pop an integer off the stack; if it is non-zero, branch to the
- given offset in the bytecode string. Otherwise, continue to the
- next instruction in the bytecode stream. In other words, if A is
- non-zero, set the `pc' register to `start' + OFFSET. Thus, an
- offset of zero denotes the beginning of the expression.
-
- The OFFSET is stored as a sixteen-bit unsigned value, stored
- immediately following the `if_goto' bytecode. It is always stored
- most significant byte first, regardless of the target's normal
- endianness. The offset is not guaranteed to fall at any particular
- alignment within the bytecode stream; thus, on machines where
- fetching a 16-bit on an unaligned address raises an exception, you
- should fetch the offset one byte at a time.
-
-`goto' (0x21) OFFSET: =>
- Branch unconditionally to OFFSET; in other words, set the `pc'
- register to `start' + OFFSET.
-
- The offset is stored in the same way as for the `if_goto' bytecode.
-
-`const8' (0x22) N: => N
-`const16' (0x23) N: => N
-`const32' (0x24) N: => N
-`const64' (0x25) N: => N
- Push the integer constant N on the stack, without sign extension.
- To produce a small negative value, push a small twos-complement
- value, and then sign-extend it using the `ext' bytecode.
-
- The constant N is stored in the appropriate number of bytes
- following the `const'B bytecode. The constant N is always stored
- most significant byte first, regardless of the target's normal
- endianness. The constant is not guaranteed to fall at any
- particular alignment within the bytecode stream; thus, on machines
- where fetching a 16-bit on an unaligned address raises an
- exception, you should fetch N one byte at a time.
-
-`reg' (0x26) N: => A
- Push the value of register number N, without sign extension. The
- registers are numbered following GDB's conventions.
-
- The register number N is encoded as a 16-bit unsigned integer
- immediately following the `reg' bytecode. It is always stored most
- significant byte first, regardless of the target's normal
- endianness. The register number is not guaranteed to fall at any
- particular alignment within the bytecode stream; thus, on machines
- where fetching a 16-bit on an unaligned address raises an
- exception, you should fetch the register number one byte at a time.
-
-`trace' (0x0c): ADDR SIZE =>
- Record the contents of the SIZE bytes at ADDR in a trace buffer,
- for later retrieval by GDB.
-
-`trace_quick' (0x0d) SIZE: ADDR => ADDR
- Record the contents of the SIZE bytes at ADDR in a trace buffer,
- for later retrieval by GDB. SIZE is a single byte unsigned
- integer following the `trace' opcode.
-
- This bytecode is equivalent to the sequence `dup const8 SIZE
- trace', but we provide it anyway to save space in bytecode strings.
-
-`trace16' (0x30) SIZE: ADDR => ADDR
- Identical to trace_quick, except that SIZE is a 16-bit big-endian
- unsigned integer, not a single byte. This should probably have
- been named `trace_quick16', for consistency.
-
-`end' (0x27): =>
- Stop executing bytecode; the result should be the top element of
- the stack. If the purpose of the expression was to compute an
- lvalue or a range of memory, then the next-to-top of the stack is
- the lvalue's address, and the top of the stack is the lvalue's
- size, in bytes.
-
-
-
-File: gdb.info, Node: Using Agent Expressions, Next: Varying Target Capabilities, Prev: Bytecode Descriptions, Up: Agent Expressions
-
-Using Agent Expressions
-=======================
-
-Here is a sketch of a full non-stop debugging cycle, showing how agent
-expressions fit into the process.
-
- * The user selects trace points in the program's code at which GDB
- should collect data.
-
- * The user specifies expressions to evaluate at each trace point.
- These expressions may denote objects in memory, in which case
- those objects' contents are recorded as the program runs, or
- computed values, in which case the values themselves are recorded.
-
- * GDB transmits the tracepoints and their associated expressions to
- the GDB agent, running on the debugging target.
-
- * The agent arranges to be notified when a trace point is hit. Note
- that, on some systems, the target operating system is completely
- responsible for collecting the data; see *Note Tracing on
- Symmetrix::.
-
- * When execution on the target reaches a trace point, the agent
- evaluates the expressions associated with that trace point, and
- records the resulting values and memory ranges.
-
- * Later, when the user selects a given trace event and inspects the
- objects and expression values recorded, GDB talks to the agent to
- retrieve recorded data as necessary to meet the user's requests.
- If the user asks to see an object whose contents have not been
- recorded, GDB reports an error.
-
-
-
-File: gdb.info, Node: Varying Target Capabilities, Next: Tracing on Symmetrix, Prev: Using Agent Expressions, Up: Agent Expressions
-
-Varying Target Capabilities
-===========================
-
-Some targets don't support floating-point, and some would rather not
-have to deal with `long long' operations. Also, different targets will
-have different stack sizes, and different bytecode buffer lengths.
-
- Thus, GDB needs a way to ask the target about itself. We haven't
-worked out the details yet, but in general, GDB should be able to send
-the target a packet asking it to describe itself. The reply should be a
-packet whose length is explicit, so we can add new information to the
-packet in future revisions of the agent, without confusing old versions
-of GDB, and it should contain a version number. It should contain at
-least the following information:
-
- * whether floating point is supported
-
- * whether `long long' is supported
-
- * maximum acceptable size of bytecode stack
-
- * maximum acceptable length of bytecode expressions
-
- * which registers are actually available for collection
-
- * whether the target supports disabled tracepoints
-
-
-
-File: gdb.info, Node: Tracing on Symmetrix, Next: Rationale, Prev: Varying Target Capabilities, Up: Agent Expressions
-
-Tracing on Symmetrix
-====================
-
-This section documents the API used by the GDB agent to collect data on
-Symmetrix systems.
-
- Cygnus originally implemented these tracing features to help EMC
-Corporation debug their Symmetrix high-availability disk drives. The
-Symmetrix application code already includes substantial tracing
-facilities; the GDB agent for the Symmetrix system uses those facilities
-for its own data collection, via the API described here.
-
- - Function: DTC_RESPONSE adbg_find_memory_in_frame (FRAME_DEF *FRAME,
- char *ADDRESS, char **BUFFER, unsigned int *SIZE)
- Search the trace frame FRAME for memory saved from ADDRESS. If
- the memory is available, provide the address of the buffer holding
- it; otherwise, provide the address of the next saved area.
-
- * If the memory at ADDRESS was saved in FRAME, set `*BUFFER' to
- point to the buffer in which that memory was saved, set
- `*SIZE' to the number of bytes from ADDRESS that are saved at
- `*BUFFER', and return `OK_TARGET_RESPONSE'. (Clearly, in
- this case, the function will always set `*SIZE' to a value
- greater than zero.)
-
- * If FRAME does not record any memory at ADDRESS, set `*SIZE'
- to the distance from ADDRESS to the start of the saved region
- with the lowest address higher than ADDRESS. If there is no
- memory saved from any higher address, set `*SIZE' to zero.
- Return `NOT_FOUND_TARGET_RESPONSE'.
-
- These two possibilities allow the caller to either retrieve the
- data, or walk the address space to the next saved area.
-
- This function allows the GDB agent to map the regions of memory
-saved in a particular frame, and retrieve their contents efficiently.
-
- This function also provides a clean interface between the GDB agent
-and the Symmetrix tracing structures, making it easier to adapt the GDB
-agent to future versions of the Symmetrix system, and vice versa. This
-function searches all data saved in FRAME, whether the data is there at
-the request of a bytecode expression, or because it falls in one of the
-format's memory ranges, or because it was saved from the top of the
-stack. EMC can arbitrarily change and enhance the tracing mechanism,
-but as long as this function works properly, all collected memory is
-visible to GDB.
-
- The function itself is straightforward to implement. A single pass
-over the trace frame's stack area, memory ranges, and expression blocks
-can yield the address of the buffer (if the requested address was
-saved), and also note the address of the next higher range of memory,
-to be returned when the search fails.
-
- As an example, suppose the trace frame `f' has saved sixteen bytes
-from address `0x8000' in a buffer at `0x1000', and thirty-two bytes
-from address `0xc000' in a buffer at `0x1010'. Here are some sample
-calls, and the effect each would have:
-
-`adbg_find_memory_in_frame (f, (char*) 0x8000, &buffer, &size)'
- This would set `buffer' to `0x1000', set `size' to sixteen, and
- return `OK_TARGET_RESPONSE', since `f' saves sixteen bytes from
- `0x8000' at `0x1000'.
-
-`adbg_find_memory_in_frame (f, (char *) 0x8004, &buffer, &size)'
- This would set `buffer' to `0x1004', set `size' to twelve, and
- return `OK_TARGET_RESPONSE', since `f' saves the twelve bytes from
- `0x8004' starting four bytes into the buffer at `0x1000'. This
- shows that request addresses may fall in the middle of saved
- areas; the function should return the address and size of the
- remainder of the buffer.
-
-`adbg_find_memory_in_frame (f, (char *) 0x8100, &buffer, &size)'
- This would set `size' to `0x3f00' and return
- `NOT_FOUND_TARGET_RESPONSE', since there is no memory saved in `f'
- from the address `0x8100', and the next memory available is at
- `0x8100 + 0x3f00', or `0xc000'. This shows that request addresses
- may fall outside of all saved memory ranges; the function should
- indicate the next saved area, if any.
-
-`adbg_find_memory_in_frame (f, (char *) 0x7000, &buffer, &size)'
- This would set `size' to `0x1000' and return
- `NOT_FOUND_TARGET_RESPONSE', since the next saved memory is at
- `0x7000 + 0x1000', or `0x8000'.
-
-`adbg_find_memory_in_frame (f, (char *) 0xf000, &buffer, &size)'
- This would set `size' to zero, and return
- `NOT_FOUND_TARGET_RESPONSE'. This shows how the function tells the
- caller that no further memory ranges have been saved.
-
-
- As another example, here is a function which will print out the
-addresses of all memory saved in the trace frame `frame' on the
-Symmetrix INLINES console:
- void
- print_frame_addresses (FRAME_DEF *frame)
- {
- char *addr;
- char *buffer;
- unsigned long size;
-
- addr = 0;
- for (;;)
- {
- /* Either find out how much memory we have here, or discover
- where the next saved region is. */
- if (adbg_find_memory_in_frame (frame, addr, &buffer, &size)
- == OK_TARGET_RESPONSE)
- printp ("saved %x to %x\n", addr, addr + size);
- if (size == 0)
- break;
- addr += size;
- }
- }
-
- Note that there is not necessarily any connection between the order
-in which the data is saved in the trace frame, and the order in which
-`adbg_find_memory_in_frame' will return those memory ranges. The code
-above will always print the saved memory regions in order of increasing
-address, while the underlying frame structure might store the data in a
-random order.
-
- [[This section should cover the rest of the Symmetrix functions the
-stub relies upon, too.]]
-
-
-File: gdb.info, Node: Rationale, Prev: Tracing on Symmetrix, Up: Agent Expressions
-
-Rationale
-=========
-
-Some of the design decisions apparent above are arguable.
-
-What about stack overflow/underflow?
- GDB should be able to query the target to discover its stack size.
- Given that information, GDB can determine at translation time
- whether a given expression will overflow the stack. But this spec
- isn't about what kinds of error-checking GDB ought to do.
-
-Why are you doing everything in LONGEST?
- Speed isn't important, but agent code size is; using LONGEST
- brings in a bunch of support code to do things like division, etc.
- So this is a serious concern.
-
- First, note that you don't need different bytecodes for different
- operand sizes. You can generate code without _knowing_ how big the
- stack elements actually are on the target. If the target only
- supports 32-bit ints, and you don't send any 64-bit bytecodes,
- everything just works. The observation here is that the MIPS and
- the Alpha have only fixed-size registers, and you can still get
- C's semantics even though most instructions only operate on
- full-sized words. You just need to make sure everything is
- properly sign-extended at the right times. So there is no need
- for 32- and 64-bit variants of the bytecodes. Just implement
- everything using the largest size you support.
-
- GDB should certainly check to see what sizes the target supports,
- so the user can get an error earlier, rather than later. But this
- information is not necessary for correctness.
-
-Why don't you have `>' or `<=' operators?
- I want to keep the interpreter small, and we don't need them. We
- can combine the `less_' opcodes with `log_not', and swap the order
- of the operands, yielding all four asymmetrical comparison
- operators. For example, `(x <= y)' is `! (x > y)', which is `! (y
- < x)'.
-
-Why do you have `log_not'?
-Why do you have `ext'?
-Why do you have `zero_ext'?
- These are all easily synthesized from other instructions, but I
- expect them to be used frequently, and they're simple, so I
- include them to keep bytecode strings short.
-
- `log_not' is equivalent to `const8 0 equal'; it's used in half the
- relational operators.
-
- `ext N' is equivalent to `const8 S-N lsh const8 S-N rsh_signed',
- where S is the size of the stack elements; it follows `refM' and
- REG bytecodes when the value should be signed. See the next
- bulleted item.
-
- `zero_ext N' is equivalent to `constM MASK log_and'; it's used
- whenever we push the value of a register, because we can't assume
- the upper bits of the register aren't garbage.
-
-Why not have sign-extending variants of the `ref' operators?
- Because that would double the number of `ref' operators, and we
- need the `ext' bytecode anyway for accessing bitfields.
-
-Why not have constant-address variants of the `ref' operators?
- Because that would double the number of `ref' operators again, and
- `const32 ADDRESS ref32' is only one byte longer.
-
-Why do the `refN' operators have to support unaligned fetches?
- GDB will generate bytecode that fetches multi-byte values at
- unaligned addresses whenever the executable's debugging
- information tells it to. Furthermore, GDB does not know the value
- the pointer will have when GDB generates the bytecode, so it
- cannot determine whether a particular fetch will be aligned or not.
-
- In particular, structure bitfields may be several bytes long, but
- follow no alignment rules; members of packed structures are not
- necessarily aligned either.
-
- In general, there are many cases where unaligned references occur
- in correct C code, either at the programmer's explicit request, or
- at the compiler's discretion. Thus, it is simpler to make the GDB
- agent bytecodes work correctly in all circumstances than to make
- GDB guess in each case whether the compiler did the usual thing.
-
-Why are there no side-effecting operators?
- Because our current client doesn't want them? That's a cheap
- answer. I think the real answer is that I'm afraid of
- implementing function calls. We should re-visit this issue after
- the present contract is delivered.
-
-Why aren't the `goto' ops PC-relative?
- The interpreter has the base address around anyway for PC bounds
- checking, and it seemed simpler.
-
-Why is there only one offset size for the `goto' ops?
- Offsets are currently sixteen bits. I'm not happy with this
- situation either:
-
- Suppose we have multiple branch ops with different offset sizes.
- As I generate code left-to-right, all my jumps are forward jumps
- (there are no loops in expressions), so I never know the target
- when I emit the jump opcode. Thus, I have to either always assume
- the largest offset size, or do jump relaxation on the code after I
- generate it, which seems like a big waste of time.
-
- I can imagine a reasonable expression being longer than 256 bytes.
- I can't imagine one being longer than 64k. Thus, we need 16-bit
- offsets. This kind of reasoning is so bogus, but relaxation is
- pathetic.
-
- The other approach would be to generate code right-to-left. Then
- I'd always know my offset size. That might be fun.
-
-Where is the function call bytecode?
- When we add side-effects, we should add this.
-
-Why does the `reg' bytecode take a 16-bit register number?
- Intel's IA-64 architecture has 128 general-purpose registers, and
- 128 floating-point registers, and I'm sure it has some random
- control registers.
-
-Why do we need `trace' and `trace_quick'?
- Because GDB needs to record all the memory contents and registers
- an expression touches. If the user wants to evaluate an expression
- `x->y->z', the agent must record the values of `x' and `x->y' as
- well as the value of `x->y->z'.
-
-Don't the `trace' bytecodes make the interpreter less general?
- They do mean that the interpreter contains special-purpose code,
- but that doesn't mean the interpreter can only be used for that
- purpose. If an expression doesn't use the `trace' bytecodes, they
- don't get in its way.
-
-Why doesn't `trace_quick' consume its arguments the way everything else does?
- In general, you do want your operators to consume their arguments;
- it's consistent, and generally reduces the amount of stack
- rearrangement necessary. However, `trace_quick' is a kludge to
- save space; it only exists so we needn't write `dup const8 SIZE
- trace' before every memory reference. Therefore, it's okay for it
- not to consume its arguments; it's meant for a specific context in
- which we know exactly what it should do with the stack. If we're
- going to have a kludge, it should be an effective kludge.
-
-Why does `trace16' exist?
- That opcode was added by the customer that contracted Cygnus for
- the data tracing work. I personally think it is unnecessary;
- objects that large will be quite rare, so it is okay to use `dup
- const16 SIZE trace' in those cases.
-
- Whatever we decide to do with `trace16', we should at least leave
- opcode 0x30 reserved, to remain compatible with the customer who
- added it.
-
-
-
-File: gdb.info, Node: Copying, Next: GNU Free Documentation License, Prev: Agent Expressions, Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
- Version 2, June 1991
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-========
-
-The licenses for most software are designed to take away your freedom
-to share and change it. By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- 0. This License applies to any program or other work which contains a
- notice placed by the copyright holder saying it may be distributed
- under the terms of this General Public License. The "Program",
- below, refers to any such program or work, and a "work based on
- the Program" means either the Program or any derivative work under
- copyright law: that is to say, a work containing the Program or a
- portion of it, either verbatim or with modifications and/or
- translated into another language. (Hereinafter, translation is
- included without limitation in the term "modification".) Each
- licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The act
- of running the Program is not restricted, and the output from the
- Program is covered only if its contents constitute a work based on
- the Program (independent of having been made by running the
- Program). Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an appropriate
- copyright notice and disclaimer of warranty; keep intact all the
- notices that refer to this License and to the absence of any
- warranty; and give any other recipients of the Program a copy of
- this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange
- for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
- of it, thus forming a work based on the Program, and copy and
- distribute such modifications or work under the terms of Section 1
- above, provided that you also meet all of these conditions:
-
- a. You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b. You must cause any work that you distribute or publish, that
- in whole or in part contains or is derived from the Program
- or any part thereof, to be licensed as a whole at no charge
- to all third parties under the terms of this License.
-
- c. If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display
- an announcement including an appropriate copyright notice and
- a notice that there is no warranty (or else, saying that you
- provide a warranty) and that users may redistribute the
- program under these conditions, and telling the user how to
- view a copy of this License. (Exception: if the Program
- itself is interactive but does not normally print such an
- announcement, your work based on the Program is not required
- to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and separate
- works in themselves, then this License, and its terms, do not
- apply to those sections when you distribute them as separate
- works. But when you distribute the same sections as part of a
- whole which is a work based on the Program, the distribution of
- the whole must be on the terms of this License, whose permissions
- for other licensees extend to the entire whole, and thus to each
- and every part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program) on
- a volume of a storage or distribution medium does not bring the
- other work under the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms
- of Sections 1 and 2 above provided that you also do one of the
- following:
-
- a. Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Sections 1 and 2 above on a medium customarily used for
- software interchange; or,
-
- b. Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a
- medium customarily used for software interchange; or,
-
- c. Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with
- such an offer, in accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work for
- making modifications to it. For an executable work, complete
- source code means all the source code for all modules it contains,
- plus any associated interface definition files, plus the scripts
- used to control compilation and installation of the executable.
- However, as a special exception, the source code distributed need
- not include anything that is normally distributed (in either
- source or binary form) with the major components (compiler,
- kernel, and so on) of the operating system on which the executable
- runs, unless that component itself accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify
- or distribute the Program or its derivative works. These actions
- are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any work
- based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent
- issues), conditions are imposed on you (whether by court order,
- agreement or otherwise) that contradict the conditions of this
- License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy simultaneously
- your obligations under this License and any other pertinent
- obligations, then as a consequence you may not distribute the
- Program at all. For example, if a patent license would not permit
- royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only
- way you could satisfy both it and this License would be to refrain
- entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to apply
- in other circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of
- any such claims; this section has the sole purpose of protecting
- the integrity of the free software distribution system, which is
- implemented by public license practices. Many people have made
- generous contributions to the wide range of software distributed
- through that system in reliance on consistent application of that
- system; it is up to the author/donor to decide if he or she is
- willing to distribute software through any other system and a
- licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed
- to be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces,
- the original copyright holder who places the Program under this
- License may add an explicit geographical distribution limitation
- excluding those countries, so that distribution is permitted only
- in or among countries not thus excluded. In such case, this
- License incorporates the limitation as if written in the body of
- this License.
-
- 9. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the Program
- does not specify a version number of this License, you may choose
- any version ever published by the Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to the
- author to ask for permission. For software which is copyrighted
- by the Free Software Foundation, write to the Free Software
- Foundation; we sometimes make exceptions for this. Our decision
- will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing
- and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
- SERVICING, REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-=============================================
-
-If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- Copyright (C) YEAR NAME OF AUTHOR
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
- type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
- The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
- You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- SIGNATURE OF TY COON, 1 April 1989
- Ty Coon, President of Vice
-
- This General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library. If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-
-
-File: gdb.info, Node: GNU Free Documentation License, Next: Index, Prev: Copying, Up: Top
-
-GNU Free Documentation License
-******************************
-
- Version 1.2, November 2002
- Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 0. PREAMBLE
-
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
-
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
-
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book.
- We recommend this License principally for works whose purpose is
- instruction or reference.
-
- 1. APPLICABILITY AND DEFINITIONS
-
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it
- can be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You
- accept the license if you copy, modify or distribute the work in a
- way requiring permission under copyright law.
-
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
-
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
-
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in
- the notice that says that the Document is released under this
- License. If a section does not fit the above definition of
- Secondary then it is not allowed to be designated as Invariant.
- The Document may contain zero Invariant Sections. If the Document
- does not identify any Invariant Sections then there are none.
-
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
-
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images
- composed of pixels) generic paint programs or (for drawings) some
- widely available drawing editor, and that is suitable for input to
- text formatters or for automatic translation to a variety of
- formats suitable for input to text formatters. A copy made in an
- otherwise Transparent file format whose markup, or absence of
- markup, has been arranged to thwart or discourage subsequent
- modification by readers is not Transparent. An image format is
- not Transparent if used for any substantial amount of text. A
- copy that is not "Transparent" is called "Opaque".
-
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and
- standard-conforming simple HTML, PostScript or PDF designed for
- human modification. Examples of transparent image formats include
- PNG, XCF and JPG. Opaque formats include proprietary formats that
- can be read and edited only by proprietary word processors, SGML or
- XML for which the DTD and/or processing tools are not generally
- available, and the machine-generated HTML, PostScript or PDF
- produced by some word processors for output purposes only.
-
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
-
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
-
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
-
- 2. VERBATIM COPYING
-
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow
- the conditions in section 3.
-
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
-
- 3. COPYING IN QUANTITY
-
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the
- title equally prominent and visible. You may add other material
- on the covers in addition. Copying with changes limited to the
- covers, as long as they preserve the title of the Document and
- satisfy these conditions, can be treated as verbatim copying in
- other respects.
-
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
-
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a
- machine-readable Transparent copy along with each Opaque copy, or
- state in or with each Opaque copy a computer-network location from
- which the general network-using public has access to download
- using public-standard network protocols a complete Transparent
- copy of the Document, free of added material. If you use the
- latter option, you must take reasonably prudent steps, when you
- begin distribution of Opaque copies in quantity, to ensure that
- this Transparent copy will remain thus accessible at the stated
- location until at least one year after the last time you
- distribute an Opaque copy (directly or through your agents or
- retailers) of that edition to the public.
-
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of
- copies, to give them a chance to provide you with an updated
- version of the Document.
-
- 4. MODIFICATIONS
-
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with
- the Modified Version filling the role of the Document, thus
- licensing distribution and modification of the Modified Version to
- whoever possesses a copy of it. In addition, you must do these
- things in the Modified Version:
-
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of
- previous versions (which should, if there were any, be listed
- in the History section of the Document). You may use the
- same title as a previous version if the original publisher of
- that version gives permission.
-
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
-
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
- D. Preserve all the copyright notices of the Document.
-
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
-
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
-
- H. Include an unaltered copy of this License.
-
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on
- the Title Page. If there is no section Entitled "History" in
- the Document, create one stating the title, year, authors,
- and publisher of the Document as given on its Title Page,
- then add an item describing the Modified Version as stated in
- the previous sentence.
-
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in
- the "History" section. You may omit a network location for a
- work that was published at least four years before the
- Document itself, or if the original publisher of the version
- it refers to gives permission.
-
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the
- section all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
-
- L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section
- titles.
-
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
-
- O. Preserve any Warranty Disclaimers.
-
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option
- designate some or all of these sections as invariant. To do this,
- add their titles to the list of Invariant Sections in the Modified
- Version's license notice. These titles must be distinct from any
- other section titles.
-
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
-
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end
- of the list of Cover Texts in the Modified Version. Only one
- passage of Front-Cover Text and one of Back-Cover Text may be
- added by (or through arrangements made by) any one entity. If the
- Document already includes a cover text for the same cover,
- previously added by you or by arrangement made by the same entity
- you are acting on behalf of, you may not add another; but you may
- replace the old one, on explicit permission from the previous
- publisher that added the old one.
-
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
-
- 5. COMBINING DOCUMENTS
-
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination
- all of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
-
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
-
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
-
- 6. COLLECTIONS OF DOCUMENTS
-
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the
- documents in all other respects.
-
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow
- this License in all other respects regarding verbatim copying of
- that document.
-
- 7. AGGREGATION WITH INDEPENDENT WORKS
-
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of
- a storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
-
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
-
- 8. TRANSLATION
-
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
-
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
-
- 9. TERMINATION
-
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided for under this License. Any other
- attempt to copy, modify, sublicense or distribute the Document is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- `http://www.gnu.org/copyleft/'.
-
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If
- the Document does not specify a version number of this License,
- you may choose any version ever published (not as a draft) by the
- Free Software Foundation.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
-
- If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License, to
-permit their use in free software.
-
-
-File: gdb.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* ! packet: Packets.
-* "No symbol "foo" in current context": Variables.
-* # (a comment): Command Syntax.
-* # in Modula-2: GDB/M2.
-* $: Value History.
-* $$: Value History.
-* $_ and info breakpoints: Set Breaks.
-* $_ and info line: Machine Code.
-* $_, $__, and value history: Memory.
-* $_, convenience variable: Convenience Vars.
-* $__, convenience variable: Convenience Vars.
-* $_exitcode, convenience variable: Convenience Vars.
-* $bpnum, convenience variable: Set Breaks.
-* $cdir, convenience variable: Source Path.
-* $cwdr, convenience variable: Source Path.
-* $tpnum: Create and Delete Tracepoints.
-* $trace_file: Tracepoint Variables.
-* $trace_frame: Tracepoint Variables.
-* $trace_func: Tracepoint Variables.
-* $trace_line: Tracepoint Variables.
-* $tracepoint: Tracepoint Variables.
-* --annotate: Mode Options.
-* --args: Mode Options.
-* --async: Mode Options.
-* --batch: Mode Options.
-* --baud: Mode Options.
-* --cd: Mode Options.
-* --command: File Options.
-* --core: File Options.
-* --directory: File Options.
-* --epoch: Mode Options.
-* --exec: File Options.
-* --fullname: Mode Options.
-* --interpreter: Mode Options.
-* --mapped: File Options.
-* --noasync: Mode Options.
-* --nowindows: Mode Options.
-* --nx: Mode Options.
-* --pid: File Options.
-* --quiet: Mode Options.
-* --readnow: File Options.
-* --se: File Options.
-* --silent: Mode Options.
-* --statistics: Mode Options.
-* --symbols: File Options.
-* --tty: Mode Options.
-* --tui: Mode Options.
-* --version: Mode Options.
-* --windows: Mode Options.
-* --write: Mode Options.
-* -b: Mode Options.
-* -break-after: GDB/MI Breakpoint Table Commands.
-* -break-condition: GDB/MI Breakpoint Table Commands.
-* -break-delete: GDB/MI Breakpoint Table Commands.
-* -break-disable: GDB/MI Breakpoint Table Commands.
-* -break-enable: GDB/MI Breakpoint Table Commands.
-* -break-info: GDB/MI Breakpoint Table Commands.
-* -break-insert: GDB/MI Breakpoint Table Commands.
-* -break-list: GDB/MI Breakpoint Table Commands.
-* -break-watch: GDB/MI Breakpoint Table Commands.
-* -c: File Options.
-* -d: File Options.
-* -data-disassemble: GDB/MI Data Manipulation.
-* -data-evaluate-expression: GDB/MI Data Manipulation.
-* -data-list-changed-registers: GDB/MI Data Manipulation.
-* -data-list-register-names: GDB/MI Data Manipulation.
-* -data-list-register-values: GDB/MI Data Manipulation.
-* -data-read-memory: GDB/MI Data Manipulation.
-* -display-delete: GDB/MI Data Manipulation.
-* -display-disable: GDB/MI Data Manipulation.
-* -display-enable: GDB/MI Data Manipulation.
-* -display-insert: GDB/MI Data Manipulation.
-* -display-list: GDB/MI Data Manipulation.
-* -e: File Options.
-* -environment-cd: GDB/MI Data Manipulation.
-* -environment-directory: GDB/MI Data Manipulation.
-* -environment-path: GDB/MI Data Manipulation.
-* -environment-pwd: GDB/MI Data Manipulation.
-* -exec-abort: GDB/MI Program Control.
-* -exec-arguments: GDB/MI Program Control.
-* -exec-continue: GDB/MI Program Control.
-* -exec-finish: GDB/MI Program Control.
-* -exec-interrupt: GDB/MI Program Control.
-* -exec-next: GDB/MI Program Control.
-* -exec-next-instruction: GDB/MI Program Control.
-* -exec-return: GDB/MI Program Control.
-* -exec-run: GDB/MI Program Control.
-* -exec-show-arguments: GDB/MI Program Control.
-* -exec-step: GDB/MI Program Control.
-* -exec-step-instruction: GDB/MI Program Control.
-* -exec-until: GDB/MI Program Control.
-* -f: Mode Options.
-* -file-exec-and-symbols: GDB/MI Program Control.
-* -file-exec-file: GDB/MI Program Control.
-* -file-list-exec-sections: GDB/MI Program Control.
-* -file-list-exec-source-file: GDB/MI Program Control.
-* -file-list-exec-source-files: GDB/MI Program Control.
-* -file-list-shared-libraries: GDB/MI Program Control.
-* -file-list-symbol-files: GDB/MI Program Control.
-* -file-symbol-file: GDB/MI Program Control.
-* -gdb-exit: GDB/MI Miscellaneous Commands.
-* -gdb-set: GDB/MI Miscellaneous Commands.
-* -gdb-show: GDB/MI Miscellaneous Commands.
-* -gdb-version: GDB/MI Miscellaneous Commands.
-* -interpreter-exec: GDB/MI Miscellaneous Commands.
-* -m: File Options.
-* -n: Mode Options.
-* -nw: Mode Options.
-* -p: File Options.
-* -q: Mode Options.
-* -r: File Options.
-* -s: File Options.
-* -stack-info-depth: GDB/MI Stack Manipulation.
-* -stack-info-frame: GDB/MI Stack Manipulation.
-* -stack-list-arguments: GDB/MI Stack Manipulation.
-* -stack-list-frames: GDB/MI Stack Manipulation.
-* -stack-list-locals: GDB/MI Stack Manipulation.
-* -stack-select-frame: GDB/MI Stack Manipulation.
-* -symbol-info-address: GDB/MI Symbol Query.
-* -symbol-info-file: GDB/MI Symbol Query.
-* -symbol-info-function: GDB/MI Symbol Query.
-* -symbol-info-line: GDB/MI Symbol Query.
-* -symbol-info-symbol: GDB/MI Symbol Query.
-* -symbol-list-functions: GDB/MI Symbol Query.
-* -symbol-list-lines: GDB/MI Symbol Query.
-* -symbol-list-types: GDB/MI Symbol Query.
-* -symbol-list-variables: GDB/MI Symbol Query.
-* -symbol-locate: GDB/MI Symbol Query.
-* -symbol-type: GDB/MI Symbol Query.
-* -t: Mode Options.
-* -target-attach: GDB/MI Target Manipulation.
-* -target-compare-sections: GDB/MI Target Manipulation.
-* -target-detach: GDB/MI Target Manipulation.
-* -target-disconnect: GDB/MI Target Manipulation.
-* -target-download: GDB/MI Target Manipulation.
-* -target-exec-status: GDB/MI Target Manipulation.
-* -target-list-available-targets: GDB/MI Target Manipulation.
-* -target-list-current-targets: GDB/MI Target Manipulation.
-* -target-list-parameters: GDB/MI Target Manipulation.
-* -target-select: GDB/MI Target Manipulation.
-* -thread-info: GDB/MI Thread Commands.
-* -thread-list-all-threads: GDB/MI Thread Commands.
-* -thread-list-ids: GDB/MI Thread Commands.
-* -thread-select: GDB/MI Thread Commands.
-* -var-assign: GDB/MI Variable Objects.
-* -var-create: GDB/MI Variable Objects.
-* -var-delete: GDB/MI Variable Objects.
-* -var-evaluate-expression: GDB/MI Variable Objects.
-* -var-info-expression: GDB/MI Variable Objects.
-* -var-info-num-children: GDB/MI Variable Objects.
-* -var-info-type: GDB/MI Variable Objects.
-* -var-list-children: GDB/MI Variable Objects.
-* -var-set-format: GDB/MI Variable Objects.
-* -var-show-attributes: GDB/MI Variable Objects.
-* -var-show-format: GDB/MI Variable Objects.
-* -var-update: GDB/MI Variable Objects.
-* -w: Mode Options.
-* -x: File Options.
-* ., Modula-2 scope operator: M2 Scope.
-* .debug subdirectories: Separate Debug Files.
-* .esgdbinit: Command Files.
-* .gdbinit: Command Files.
-* .gnu_debuglink sections: Separate Debug Files.
-* .o files, reading symbols from: Files.
-* .os68gdbinit: Command Files.
-* .vxgdbinit: Command Files.
-* /proc: SVR4 Process Information.
-* ? packet: Packets.
-* @, referencing memory as an array: Arrays.
-* ^done: GDB/MI Result Records.
-* ^error: GDB/MI Result Records.
-* ^running: GDB/MI Result Records.
-* _NSPrintForDebugger, and printing Objective-C objects: The Print Command with Objective-C.
-* A packet: Packets.
-* abbreviation: Command Syntax.
-* abort (C-g): Miscellaneous Commands.
-* accept-line (Newline or Return): Commands For History.
-* acknowledgment, for GDB remote: Overview.
-* actions: Tracepoint Actions.
-* active targets: Active Targets.
-* adbg_find_memory_in_frame: Tracing on Symmetrix.
-* add-shared-symbol-file: Files.
-* add-symbol-file: Files.
-* address of a symbol: Symbols.
-* advance LOCATION: Continuing and Stepping.
-* Alpha stack: MIPS.
-* AMD 29K register stack: A29K.
-* annotations: Annotations Overview.
-* annotations for errors, warnings and interrupts: Errors.
-* annotations for invalidation messages: Invalidation.
-* annotations for prompts: Prompting.
-* annotations for running programs: Annotations for Running.
-* annotations for source display: Source Annotations.
-* append: Dump/Restore Files.
-* append data to a file: Dump/Restore Files.
-* apropos: Help.
-* arguments (to your program): Arguments.
-* artificial array: Arrays.
-* ASCII character set: Character Sets.
-* assembly instructions: Machine Code.
-* assignment: Assignment.
-* async output in GDB/MI: GDB/MI Output Syntax.
-* AT&T disassembly flavor: Machine Code.
-* attach: Attach.
-* attach to a program by name: Server.
-* automatic display: Auto Display.
-* automatic overlay debugging: Automatic Overlay Debugging.
-* automatic thread selection: Threads.
-* auxiliary vector: Auxiliary Vector.
-* awatch: Set Watchpoints.
-* b (break): Set Breaks.
-* B packet: Packets.
-* b packet: Packets.
-* backtrace: Backtrace.
-* backtrace limit: Backtrace.
-* backtraces: Backtrace.
-* backward-char (C-b): Commands For Moving.
-* backward-delete-char (Rubout): Commands For Text.
-* backward-kill-line (C-x Rubout): Commands For Killing.
-* backward-kill-word (M-<DEL>): Commands For Killing.
-* backward-word (M-b): Commands For Moving.
-* beginning-of-history (M-<): Commands For History.
-* beginning-of-line (C-a): Commands For Moving.
-* bell-style: Readline Init File Syntax.
-* break: Set Breaks.
-* break ... thread THREADNO: Thread Stops.
-* break in overloaded functions: Debugging C plus plus.
-* break, and Objective-C: Method Names in Commands.
-* breakpoint: Annotations for Running.
-* breakpoint address adjusted: Breakpoint related warnings.
-* breakpoint commands: Break Commands.
-* breakpoint commands for GDB/MI: GDB/MI Breakpoint Table Commands.
-* breakpoint conditions: Conditions.
-* breakpoint numbers: Breakpoints.
-* breakpoint on events: Breakpoints.
-* breakpoint on memory address: Breakpoints.
-* breakpoint on variable modification: Breakpoints.
-* breakpoint ranges: Breakpoints.
-* breakpoint subroutine, remote: Stub Contents.
-* breakpoints: Breakpoints.
-* breakpoints and threads: Thread Stops.
-* breakpoints in overlays: Overlay Commands.
-* breakpoints-invalid: Invalidation.
-* bt (backtrace): Backtrace.
-* bug criteria: Bug Criteria.
-* bug reports: Bug Reporting.
-* bugs in GDB: GDB Bugs.
-* c (continue): Continuing and Stepping.
-* c (SingleKey TUI key): TUI Single Key Mode.
-* C and C++: C.
-* C and C++ checks: C Checks.
-* C and C++ constants: C Constants.
-* C and C++ defaults: C Defaults.
-* C and C++ operators: C Operators.
-* C packet: Packets.
-* c packet: Packets.
-* C++: C.
-* C++ compilers: C plus plus expressions.
-* C++ exception handling: Debugging C plus plus.
-* C++ scope resolution: Variables.
-* C++ symbol decoding style: Print Settings.
-* C++ symbol display: Debugging C plus plus.
-* C-L: TUI Keys.
-* C-o (operate-and-get-next): Command Syntax.
-* C-x 1: TUI Keys.
-* C-x 2: TUI Keys.
-* C-x A: TUI Keys.
-* C-x a: TUI Keys.
-* C-x C-a: TUI Keys.
-* C-x o: TUI Keys.
-* C-x s: TUI Keys.
-* call: Calling.
-* call overloaded functions: C plus plus expressions.
-* call stack: Stack.
-* call-last-kbd-macro (C-x e): Keyboard Macros.
-* calling functions: Calling.
-* calling make: Shell Commands.
-* capitalize-word (M-c): Commands For Text.
-* casts, to view memory: Expressions.
-* catch: Set Catchpoints.
-* catch catch: Set Catchpoints.
-* catch exceptions, list active handlers: Frame Info.
-* catch exec: Set Catchpoints.
-* catch fork: Set Catchpoints.
-* catch load: Set Catchpoints.
-* catch throw: Set Catchpoints.
-* catch unload: Set Catchpoints.
-* catch vfork: Set Catchpoints.
-* catchpoints: Breakpoints.
-* catchpoints, setting: Set Catchpoints.
-* cd: Working Directory.
-* cdir: Source Path.
-* character sets: Character Sets.
-* character-search (C-]): Miscellaneous Commands.
-* character-search-backward (M-C-]): Miscellaneous Commands.
-* charset: Character Sets.
-* checks, range: Type Checking.
-* checks, type: Checks.
-* checksum, for GDB remote: Overview.
-* choosing target byte order: Byte Order.
-* clear: Delete Breaks.
-* clear, and Objective-C: Method Names in Commands.
-* clear-screen (C-l): Commands For Moving.
-* clearing breakpoints, watchpoints, catchpoints: Delete Breaks.
-* close, file-i/o system call: close.
-* collect (tracepoints): Tracepoint Actions.
-* collected data discarded: Starting and Stopping Trace Experiment.
-* colon, doubled as scope operator: M2 Scope.
-* colon-colon, context for variables/functions: Variables.
-* colon-colon, in Modula-2: M2 Scope.
-* command editing: Readline Bare Essentials.
-* command files: Command Files.
-* command hooks: Hooks.
-* command interpreters: Interpreters.
-* command line editing: Editing.
-* commands <1>: Prompting.
-* commands: Break Commands.
-* commands for C++: Debugging C plus plus.
-* commands to STDBUG (ST2000): ST2000.
-* comment: Command Syntax.
-* comment-begin: Readline Init File Syntax.
-* compatibility, GDB/MI and CLI: GDB/MI Compatibility with CLI.
-* compilation directory: Source Path.
-* compiling, on Sparclet: Sparclet.
-* complete: Help.
-* complete (<TAB>): Commands For Completion.
-* completion: Completion.
-* completion of quoted strings: Completion.
-* completion-query-items: Readline Init File Syntax.
-* condition: Conditions.
-* conditional breakpoints: Conditions.
-* configuring GDB: Installing GDB.
-* configuring GDB, and source tree subdirectories: Installing GDB.
-* confirmation: Messages/Warnings.
-* connect (to STDBUG): ST2000.
-* console i/o as part of file-i/o: Console I/O.
-* console interpreter: Interpreters.
-* console output in GDB/MI: GDB/MI Output Syntax.
-* constants, in file-i/o protocol: Constants.
-* continue: Continuing and Stepping.
-* continuing: Continuing and Stepping.
-* continuing threads: Thread Stops.
-* control C, and remote debugging: Bootstrapping.
-* controlling terminal: Input/Output.
-* convenience variables: Convenience Vars.
-* convenience variables for tracepoints: Tracepoint Variables.
-* convert-meta: Readline Init File Syntax.
-* copy-backward-word (): Commands For Killing.
-* copy-forward-word (): Commands For Killing.
-* copy-region-as-kill (): Commands For Killing.
-* core: Files.
-* core dump file: Files.
-* core-file: Files.
-* crash of debugger: Bug Criteria.
-* ctrl-c message, in file-i/o protocol: The Ctrl-C message.
-* current directory: Source Path.
-* current stack frame: Frames.
-* current thread: Threads.
-* cwd: Source Path.
-* Cygwin-specific commands: Cygwin Native.
-* d (delete): Delete Breaks.
-* d (SingleKey TUI key): TUI Single Key Mode.
-* D packet: Packets.
-* d packet: Packets.
-* data manipulation, in GDB/MI: GDB/MI Data Manipulation.
-* debug formats and C++: C plus plus expressions.
-* debug links: Separate Debug Files.
-* debugger crash: Bug Criteria.
-* debugging C++ programs: C plus plus expressions.
-* debugging information directory, global: Separate Debug Files.
-* debugging information in separate files: Separate Debug Files.
-* debugging optimized code: Compilation.
-* debugging stub, example: remote stub.
-* debugging target: Targets.
-* define: Define.
-* defining macros interactively: Macros.
-* definition, showing a macro's: Macros.
-* delete: Delete Breaks.
-* delete breakpoints: Delete Breaks.
-* delete display: Auto Display.
-* delete mem: Memory Region Attributes.
-* delete tracepoint: Create and Delete Tracepoints.
-* delete-char (C-d): Commands For Text.
-* delete-char-or-list (): Commands For Completion.
-* delete-horizontal-space (): Commands For Killing.
-* deleting breakpoints, watchpoints, catchpoints: Delete Breaks.
-* demangling: Print Settings.
-* descriptor tables display: DJGPP Native.
-* detach: Attach.
-* detach (remote): Connecting.
-* device: Renesas Boards.
-* digit-argument (M-0, M-1, ... M--): Numeric Arguments.
-* dir: Source Path.
-* direct memory access (DMA) on MS-DOS: DJGPP Native.
-* directories for source files: Source Path.
-* directory: Source Path.
-* directory, compilation: Source Path.
-* directory, current: Source Path.
-* dis (disable): Disabling.
-* disable: Disabling.
-* disable breakpoints: Disabling.
-* disable display: Auto Display.
-* disable mem: Memory Region Attributes.
-* disable tracepoint: Enable and Disable Tracepoints.
-* disable-completion: Readline Init File Syntax.
-* disassemble: Machine Code.
-* disconnect: Connecting.
-* display: Auto Display.
-* display of expressions: Auto Display.
-* DJGPP debugging: DJGPP Native.
-* dll-symbols: Cygwin Native.
-* DLLs with no debugging symbols: Non-debug DLL symbols.
-* do (down): Selection.
-* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands.
-* document: Define.
-* documentation: Formatting Documentation.
-* Down: TUI Keys.
-* down: Selection.
-* down-silently: Selection.
-* downcase-word (M-l): Commands For Text.
-* download to H8/300 or H8/500: H8/300.
-* download to Renesas SH: H8/300.
-* download to Sparclet: Sparclet Download.
-* download to VxWorks: VxWorks Download.
-* dump: Dump/Restore Files.
-* dump all data collected at tracepoint: tdump.
-* dump data to a file: Dump/Restore Files.
-* dump-functions (): Miscellaneous Commands.
-* dump-macros (): Miscellaneous Commands.
-* dump-variables (): Miscellaneous Commands.
-* dump/restore files: Dump/Restore Files.
-* dynamic linking: Files.
-* e (edit): Edit.
-* EBCDIC character set: Character Sets.
-* echo: Output.
-* edit: Edit.
-* editing: Editing.
-* editing command lines: Readline Bare Essentials.
-* editing source files: Edit.
-* editing-mode: Readline Init File Syntax.
-* else: Define.
-* Emacs: Emacs.
-* enable: Disabling.
-* enable breakpoints: Disabling.
-* enable display: Auto Display.
-* enable mem: Memory Region Attributes.
-* enable tracepoint: Enable and Disable Tracepoints.
-* enable-keypad: Readline Init File Syntax.
-* end: Break Commands.
-* end-kbd-macro (C-x )): Keyboard Macros.
-* end-of-history (M->): Commands For History.
-* end-of-line (C-e): Commands For Moving.
-* entering numbers: Numbers.
-* environment (of your program): Environment.
-* errno values, in file-i/o protocol: Errno values.
-* error: Errors.
-* error on valid input: Bug Criteria.
-* error-begin: Errors.
-* event designators: Event Designators.
-* event handling: Set Catchpoints.
-* examining data: Data.
-* examining memory: Memory.
-* exception handlers: Set Catchpoints.
-* exception handlers, how to list: Frame Info.
-* exceptionHandler: Bootstrapping.
-* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
-* exec-file: Files.
-* executable file: Files.
-* exited: Annotations for Running.
-* exiting GDB: Quitting GDB.
-* expand-tilde: Readline Init File Syntax.
-* expanding preprocessor macros: Macros.
-* expressions: Expressions.
-* expressions in C or C++: C.
-* expressions in C++: C plus plus expressions.
-* expressions in Modula-2: Modula-2.
-* f (frame): Selection.
-* f (SingleKey TUI key): TUI Single Key Mode.
-* F packet: Packets.
-* F reply packet: The F reply packet.
-* F request packet: The F request packet.
-* fatal signal: Bug Criteria.
-* fatal signals: Signals.
-* FDL, GNU Free Documentation License: GNU Free Documentation License.
-* fg (resume foreground execution): Continuing and Stepping.
-* file: Files.
-* file-i/o examples: File-I/O Examples.
-* file-i/o overview: File-I/O Overview.
-* File-I/O remote protocol extension: File-I/O remote protocol extension.
-* file-i/o reply packet: The F reply packet.
-* file-i/o request packet: The F request packet.
-* find trace snapshot: tfind.
-* finish: Continuing and Stepping.
-* flinching: Messages/Warnings.
-* float promotion: ABI.
-* floating point: Floating Point Hardware.
-* floating point registers: Registers.
-* floating point, MIPS remote: MIPS Embedded.
-* flush_i_cache: Bootstrapping.
-* focus: TUI Commands.
-* focus of debugging: Threads.
-* foo: Symbol Errors.
-* fork, debugging programs which call: Processes.
-* format options: Print Settings.
-* formatted output: Output Formats.
-* Fortran: Summary.
-* forward-backward-delete-char (): Commands For Text.
-* forward-char (C-f): Commands For Moving.
-* forward-search: Search.
-* forward-search-history (C-s): Commands For History.
-* forward-word (M-f): Commands For Moving.
-* frame number: Frames.
-* frame pointer: Frames.
-* frame, command: Frames.
-* frame, definition: Frames.
-* frame, selecting: Selection.
-* frameless execution: Frames.
-* frames-invalid: Invalidation.
-* free memory information (MS-DOS): DJGPP Native.
-* fstat, file-i/o system call: stat/fstat.
-* Fujitsu: remote stub.
-* full symbol tables, listing GDB's internal: Symbols.
-* functions without line info, and stepping: Continuing and Stepping.
-* G packet: Packets.
-* g packet: Packets.
-* g++, GNU C++ compiler: C.
-* garbled pointers: DJGPP Native.
-* GCC and C++: C plus plus expressions.
-* GDB bugs, reporting: Bug Reporting.
-* GDB reference card: Formatting Documentation.
-* gdb.ini: Command Files.
-* GDB/MI, breakpoint commands: GDB/MI Breakpoint Table Commands.
-* GDB/MI, compatibility with CLI: GDB/MI Compatibility with CLI.
-* GDB/MI, data manipulation: GDB/MI Data Manipulation.
-* GDB/MI, input syntax: GDB/MI Input Syntax.
-* GDB/MI, its purpose: GDB/MI.
-* GDB/MI, out-of-band records: GDB/MI Out-of-band Records.
-* GDB/MI, output syntax: GDB/MI Output Syntax.
-* GDB/MI, result records: GDB/MI Result Records.
-* GDB/MI, simple examples: GDB/MI Simple Examples.
-* GDB/MI, stream records: GDB/MI Stream Records.
-* GDBHISTFILE: History.
-* gdbserve.nlm: NetWare.
-* gdbserver: Server.
-* GDT: DJGPP Native.
-* getDebugChar: Bootstrapping.
-* gettimeofday, file-i/o system call: gettimeofday.
-* global debugging information directory: Separate Debug Files.
-* GNU C++: C.
-* GNU Emacs: Emacs.
-* gnu_debuglink_crc32: Separate Debug Files.
-* h (help): Help.
-* H packet: Packets.
-* H8/300 or H8/500 download: H8/300.
-* handle: Signals.
-* handle_exception: Stub Contents.
-* handling signals: Signals.
-* hardware watchpoints: Set Watchpoints.
-* hbreak: Set Breaks.
-* help: Help.
-* help target: Target Commands.
-* help user-defined: Define.
-* heuristic-fence-post (Alpha, MIPS): MIPS.
-* history events: Event Designators.
-* history expansion <1>: History Interaction.
-* history expansion: History.
-* history file: History.
-* history number: Value History.
-* history save: History.
-* history size: History.
-* history substitution: History.
-* history-preserve-point: Readline Init File Syntax.
-* history-search-backward (): Commands For History.
-* history-search-forward (): Commands For History.
-* hook: Hooks.
-* hook-: Hooks.
-* hookpost: Hooks.
-* hookpost-: Hooks.
-* hooks, for commands: Hooks.
-* hooks, post-command: Hooks.
-* hooks, pre-command: Hooks.
-* horizontal-scroll-mode: Readline Init File Syntax.
-* host character set: Character Sets.
-* htrace disable: OpenRISC 1000.
-* htrace enable: OpenRISC 1000.
-* htrace info: OpenRISC 1000.
-* htrace mode continuous: OpenRISC 1000.
-* htrace mode suspend: OpenRISC 1000.
-* htrace print: OpenRISC 1000.
-* htrace qualifier: OpenRISC 1000.
-* htrace record: OpenRISC 1000.
-* htrace rewind: OpenRISC 1000.
-* htrace stop: OpenRISC 1000.
-* htrace trigger: OpenRISC 1000.
-* hwatch: OpenRISC 1000.
-* i (info): Help.
-* I packet: Packets.
-* i packet: Packets.
-* i/o: Input/Output.
-* i386: remote stub.
-* i386-stub.c: remote stub.
-* IBM1047 character set: Character Sets.
-* IDT: DJGPP Native.
-* if: Define.
-* ignore: Conditions.
-* ignore count (of breakpoint): Conditions.
-* INCLUDE_RDB: VxWorks.
-* info: Help.
-* info address: Symbols.
-* info all-registers: Registers.
-* info args: Frame Info.
-* info auxv: Auxiliary Vector.
-* info breakpoints: Set Breaks.
-* info catch: Frame Info.
-* info cisco: KOD.
-* info classes: Symbols.
-* info display: Auto Display.
-* info dll: Cygwin Native.
-* info dos: DJGPP Native.
-* info extensions: Show.
-* info f (info frame): Frame Info.
-* info files: Files.
-* info float: Floating Point Hardware.
-* info frame: Frame Info.
-* info frame, show the source language: Show.
-* info functions: Symbols.
-* info line: Machine Code.
-* info line, and Objective-C: Method Names in Commands.
-* info locals: Frame Info.
-* info macro: Macros.
-* info mem: Memory Region Attributes.
-* info or1k spr: OpenRISC 1000.
-* info proc: SVR4 Process Information.
-* info proc mappings: SVR4 Process Information.
-* info program: Stopping.
-* info registers: Registers.
-* info s (info stack): Backtrace.
-* info scope: Symbols.
-* info selectors: Symbols.
-* info set: Help.
-* info share: Files.
-* info sharedlibrary: Files.
-* info signals: Signals.
-* info source: Symbols.
-* info source, show the source language: Show.
-* info sources: Symbols.
-* info stack: Backtrace.
-* info symbol: Symbols.
-* info target: Files.
-* info terminal: Input/Output.
-* info threads: Threads.
-* info tracepoints: Listing Tracepoints.
-* info types: Symbols.
-* info variables: Symbols.
-* info vector: Vector Unit.
-* info w32: Cygwin Native.
-* info watchpoints: Set Watchpoints.
-* info win: TUI Commands.
-* information about tracepoints: Listing Tracepoints.
-* inheritance: Debugging C plus plus.
-* init file: Command Files.
-* init file name: Command Files.
-* initial frame: Frames.
-* initialization file, readline: Readline Init File.
-* innermost frame: Frames.
-* input syntax for GDB/MI: GDB/MI Input Syntax.
-* input-meta: Readline Init File Syntax.
-* insert-comment (M-#): Miscellaneous Commands.
-* insert-completions (M-*): Commands For Completion.
-* inspect: Data.
-* installation: Installing GDB.
-* instructions, assembly: Machine Code.
-* integral datatypes, in file-i/o protocol: Integral datatypes.
-* Intel: remote stub.
-* Intel disassembly flavor: Machine Code.
-* interaction, readline: Readline Interaction.
-* internal commands: Maintenance Commands.
-* internal GDB breakpoints: Set Breaks.
-* interpreter-exec: Interpreters.
-* interrupt: Quitting GDB.
-* interrupting remote programs: Connecting.
-* interrupting remote targets: Bootstrapping.
-* invalid input: Bug Criteria.
-* invoke another interpreter: Interpreters.
-* isatty call, file-i/o protocol: The isatty call.
-* isatty, file-i/o system call: isatty.
-* isearch-terminators: Readline Init File Syntax.
-* ISO 8859-1 character set: Character Sets.
-* ISO Latin 1 character set: Character Sets.
-* jump: Jumping.
-* jump, and Objective-C: Method Names in Commands.
-* k packet: Packets.
-* kernel object display: KOD.
-* keymap: Readline Init File Syntax.
-* kill: Kill Process.
-* kill ring: Readline Killing Commands.
-* kill-line (C-k): Commands For Killing.
-* kill-region (): Commands For Killing.
-* kill-whole-line (): Commands For Killing.
-* kill-word (M-d): Commands For Killing.
-* killing text: Readline Killing Commands.
-* KOD: KOD.
-* l (list): List.
-* languages: Languages.
-* last tracepoint number: Create and Delete Tracepoints.
-* latest breakpoint: Set Breaks.
-* layout asm: TUI Commands.
-* layout next: TUI Commands.
-* layout prev: TUI Commands.
-* layout regs: TUI Commands.
-* layout split: TUI Commands.
-* layout src: TUI Commands.
-* LDT: DJGPP Native.
-* leaving GDB: Quitting GDB.
-* Left: TUI Keys.
-* limits, in file-i/o protocol: Limits.
-* linespec: List.
-* list: List.
-* list of supported file-i/o calls: List of supported calls.
-* list output in GDB/MI: GDB/MI Output Syntax.
-* list, and Objective-C: Method Names in Commands.
-* listing GDB's internal symbol tables: Symbols.
-* listing machine instructions: Machine Code.
-* listing mapped overlays: Overlay Commands.
-* load address, overlay's: How Overlays Work.
-* load FILENAME: Target Commands.
-* local variables: Symbols.
-* locate address: Output Formats.
-* log output in GDB/MI: GDB/MI Output Syntax.
-* logging GDB output: Logging output.
-* lseek flags, in file-i/o protocol: Lseek flags.
-* lseek, file-i/o system call: lseek.
-* M packet: Packets.
-* m packet: Packets.
-* m680x0: remote stub.
-* m68k-stub.c: remote stub.
-* machine instructions: Machine Code.
-* macro define: Macros.
-* macro definition, showing: Macros.
-* macro expand: Macros.
-* macro expand-once: Macros.
-* macro expansion, showing the results of preprocessor: Macros.
-* macro undef: Macros.
-* macros, example of debugging with: Macros.
-* macros, user-defined: Macros.
-* maint info breakpoints: Maintenance Commands.
-* maint info psymtabs: Symbols.
-* maint info sections: Files.
-* maint info symtabs: Symbols.
-* maint internal-error: Maintenance Commands.
-* maint internal-warning: Maintenance Commands.
-* maint print cooked-registers: Maintenance Commands.
-* maint print dummy-frames: Maintenance Commands.
-* maint print psymbols: Symbols.
-* maint print raw-registers: Maintenance Commands.
-* maint print reggroups: Maintenance Commands.
-* maint print register-groups: Maintenance Commands.
-* maint print registers: Maintenance Commands.
-* maint print symbols: Symbols.
-* maint set profile: Maintenance Commands.
-* maint show profile: Maintenance Commands.
-* maintenance commands: Maintenance Commands.
-* make: Shell Commands.
-* manual overlay debugging: Overlay Commands.
-* map an overlay: Overlay Commands.
-* mapped: Files.
-* mapped address: How Overlays Work.
-* mapped overlays: How Overlays Work.
-* mark-modified-lines: Readline Init File Syntax.
-* mark-symlinked-directories: Readline Init File Syntax.
-* match-hidden-files: Readline Init File Syntax.
-* mem: Memory Region Attributes.
-* member functions: C plus plus expressions.
-* memory models, H8/500: H8/500.
-* memory region attributes: Memory Region Attributes.
-* memory tracing: Breakpoints.
-* memory transfer, in file-i/o protocol: Memory transfer.
-* memory, viewing as typed object: Expressions.
-* memory-mapped symbol file: Files.
-* memset: Bootstrapping.
-* menu-complete (): Commands For Completion.
-* meta-flag: Readline Init File Syntax.
-* mi interpreter: Interpreters.
-* mi1 interpreter: Interpreters.
-* mi2 interpreter: Interpreters.
-* minimal language: Unsupported languages.
-* Minimal symbols and DLLs: Non-debug DLL symbols.
-* MIPS boards: MIPS Embedded.
-* MIPS remote floating point: MIPS Embedded.
-* MIPS remotedebug protocol: MIPS Embedded.
-* MIPS stack: MIPS.
-* mode_t values, in file-i/o protocol: mode_t values.
-* Modula-2: Summary.
-* Modula-2 built-ins: Built-In Func/Proc.
-* Modula-2 checks: M2 Checks.
-* Modula-2 constants: Built-In Func/Proc.
-* Modula-2 defaults: M2 Defaults.
-* Modula-2 operators: M2 Operators.
-* Modula-2, deviations from: Deviations.
-* Modula-2, GDB support: Modula-2.
-* Motorola 680x0: remote stub.
-* MS Windows debugging: Cygwin Native.
-* MS-DOS system info: DJGPP Native.
-* MS-DOS-specific commands: DJGPP Native.
-* multiple processes: Processes.
-* multiple targets: Active Targets.
-* multiple threads: Threads.
-* n (next): Continuing and Stepping.
-* n (SingleKey TUI key): TUI Single Key Mode.
-* names of symbols: Symbols.
-* namespace in C++: C plus plus expressions.
-* native Cygwin debugging: Cygwin Native.
-* native DJGPP debugging: DJGPP Native.
-* negative breakpoint numbers: Set Breaks.
-* New SYSTAG message: Threads.
-* New SYSTAG message, on HP-UX: Threads.
-* next: Continuing and Stepping.
-* next-history (C-n): Commands For History.
-* nexti: Continuing and Stepping.
-* ni (nexti): Continuing and Stepping.
-* non-incremental-forward-search-history (M-n): Commands For History.
-* non-incremental-reverse-search-history (M-p): Commands For History.
-* notation, readline: Readline Bare Essentials.
-* notational conventions, for GDB/MI: GDB/MI.
-* notify output in GDB/MI: GDB/MI Output Syntax.
-* number representation: Numbers.
-* numbers for breakpoints: Breakpoints.
-* object files, relocatable, reading symbols from: Files.
-* Objective-C: Objective-C.
-* online documentation: Help.
-* open flags, in file-i/o protocol: Open flags.
-* open, file-i/o system call: open.
-* OpenRISC 1000: OpenRISC 1000.
-* OpenRISC 1000 htrace: OpenRISC 1000.
-* operations allowed on pending breakpoints: Set Breaks.
-* optimized code, debugging: Compilation.
-* or1k boards: OpenRISC 1000.
-* or1ksim: OpenRISC 1000.
-* OS ABI: ABI.
-* out-of-band records in GDB/MI: GDB/MI Out-of-band Records.
-* outermost frame: Frames.
-* output: Output.
-* output formats: Output Formats.
-* output syntax of GDB/MI: GDB/MI Output Syntax.
-* output-meta: Readline Init File Syntax.
-* overlay area: How Overlays Work.
-* overlay auto: Overlay Commands.
-* overlay example program: Overlay Sample Program.
-* overlay load-target: Overlay Commands.
-* overlay manual: Overlay Commands.
-* overlay map-overlay: Overlay Commands.
-* overlay off: Overlay Commands.
-* overlay unmap-overlay: Overlay Commands.
-* overlays: Overlays.
-* overlays, setting breakpoints in: Overlay Commands.
-* overload-choice: Prompting.
-* overloaded functions, calling: C plus plus expressions.
-* overloaded functions, overload resolution: Debugging C plus plus.
-* overloading: Breakpoint Menus.
-* overloading in C++: Debugging C plus plus.
-* overwrite-mode (): Commands For Text.
-* P packet: Packets.
-* p packet: Packets.
-* packets, reporting on stdout: Debugging Output.
-* page tables display (MS-DOS): DJGPP Native.
-* page-completions: Readline Init File Syntax.
-* partial symbol dump: Symbols.
-* partial symbol tables, listing GDB's internal: Symbols.
-* Pascal: Summary.
-* passcount: Tracepoint Passcounts.
-* patching binaries: Patching.
-* path: Environment.
-* pauses in output: Screen Size.
-* pending breakpoints: Set Breaks.
-* PgDn: TUI Keys.
-* PgUp: TUI Keys.
-* physical address from linear address: DJGPP Native.
-* pipes: Starting.
-* po (print-object): The Print Command with Objective-C.
-* pointer values, in file-i/o protocol: Pointer values.
-* pointer, finding referent: Print Settings.
-* possible-completions (M-?): Commands For Completion.
-* post-commands: Prompting.
-* post-overload-choice: Prompting.
-* post-prompt: Prompting.
-* post-prompt-for-continue: Prompting.
-* post-query: Prompting.
-* pre-commands: Prompting.
-* pre-overload-choice: Prompting.
-* pre-prompt: Prompting.
-* pre-prompt-for-continue: Prompting.
-* pre-query: Prompting.
-* prefix-meta (<ESC>): Miscellaneous Commands.
-* premature return from system calls: Thread Stops.
-* preprocessor macro expansion, showing the results of: Macros.
-* previous-history (C-p): Commands For History.
-* print: Data.
-* print an Objective-C object description: The Print Command with Objective-C.
-* print settings: Print Settings.
-* print-object: The Print Command with Objective-C.
-* printf: Output.
-* printing data: Data.
-* process image: SVR4 Process Information.
-* processes, multiple: Processes.
-* profiling GDB: Maintenance Commands.
-* prompt <1>: Prompting.
-* prompt: Prompt.
-* prompt-for-continue: Prompting.
-* protocol basics, file-i/o: Protocol basics.
-* protocol specific representation of datatypes, in file-i/o protocol: Protocol specific representation of datatypes.
-* protocol, GDB remote serial: Overview.
-* ptype: Symbols.
-* putDebugChar: Bootstrapping.
-* pwd: Working Directory.
-* q (quit): Quitting GDB.
-* q (SingleKey TUI key): TUI Single Key Mode.
-* Q packet: Packets.
-* q packet: Packets.
-* query: Prompting.
-* quit: Errors.
-* quit [EXPRESSION]: Quitting GDB.
-* quoted-insert (C-q or C-v): Commands For Text.
-* quotes in commands: Completion.
-* quoting names: Symbols.
-* r (run): Starting.
-* r (SingleKey TUI key): TUI Single Key Mode.
-* R packet: Packets.
-* r packet: Packets.
-* raise exceptions: Set Catchpoints.
-* range checking: Type Checking.
-* ranges of breakpoints: Breakpoints.
-* rbreak: Set Breaks.
-* re-read-init-file (C-x C-r): Miscellaneous Commands.
-* read, file-i/o system call: read.
-* reading symbols from relocatable object files: Files.
-* reading symbols immediately: Files.
-* readline: Editing.
-* readnow: Files.
-* recent tracepoint number: Create and Delete Tracepoints.
-* redirection: Input/Output.
-* redraw-current-line (): Commands For Moving.
-* reference card: Formatting Documentation.
-* reference declarations: C plus plus expressions.
-* refresh: TUI Commands.
-* register stack, AMD29K: A29K.
-* registers: Registers.
-* regular expression: Set Breaks.
-* reloading symbols: Symbols.
-* reloading the overlay table: Overlay Commands.
-* relocatable object files, reading symbols from: Files.
-* remote connection without stubs: Server.
-* remote debugging: Remote.
-* remote programs, interrupting: Connecting.
-* remote protocol, field separator: Overview.
-* remote serial debugging summary: Debug Session.
-* remote serial debugging, overview: remote stub.
-* remote serial protocol: Overview.
-* remote serial stub: Stub Contents.
-* remote serial stub list: remote stub.
-* remote serial stub, initialization: Stub Contents.
-* remote serial stub, main routine: Stub Contents.
-* remote stub, example: remote stub.
-* remote stub, support routines: Bootstrapping.
-* remotedebug, MIPS protocol: MIPS Embedded.
-* remotetimeout: Sparclet.
-* remove actions from a tracepoint: Tracepoint Actions.
-* rename, file-i/o system call: rename.
-* Renesas: remote stub.
-* Renesas SH download: H8/300.
-* repeating command sequences: Command Syntax.
-* repeating commands: Command Syntax.
-* reporting bugs in GDB: GDB Bugs.
-* response time, MIPS debugging: MIPS.
-* restore: Dump/Restore Files.
-* restore data from a file: Dump/Restore Files.
-* result records in GDB/MI: GDB/MI Result Records.
-* resuming execution: Continuing and Stepping.
-* RET (repeat last command): Command Syntax.
-* retransmit-timeout, MIPS protocol: MIPS Embedded.
-* return: Returning.
-* returning from a function: Returning.
-* reverse-search: Search.
-* reverse-search-history (C-r): Commands For History.
-* revert-line (M-r): Miscellaneous Commands.
-* Right: TUI Keys.
-* run: Starting.
-* running: Starting.
-* running and debugging Sparclet programs: Sparclet Execution.
-* running VxWorks tasks: VxWorks Attach.
-* running, on Sparclet: Sparclet.
-* rwatch: Set Watchpoints.
-* s (SingleKey TUI key): TUI Single Key Mode.
-* s (step): Continuing and Stepping.
-* S packet: Packets.
-* s packet: Packets.
-* save tracepoints for future sessions: save-tracepoints.
-* save-tracepoints: save-tracepoints.
-* saving symbol table: Files.
-* scope: M2 Scope.
-* search: Search.
-* searching: Search.
-* section: Files.
-* segment descriptor tables: DJGPP Native.
-* select trace snapshot: tfind.
-* select-frame: Frames.
-* selected frame: Stack.
-* selecting frame silently: Frames.
-* self-insert (a, b, A, 1, !, ...): Commands For Text.
-* separate debugging information files: Separate Debug Files.
-* sequence-id, for GDB remote: Overview.
-* serial connections, debugging: Debugging Output.
-* serial device, Renesas micros: Renesas Boards.
-* serial line speed, Renesas micros: Renesas Boards.
-* serial line, target remote: Connecting.
-* serial protocol, GDB remote: Overview.
-* server prefix for annotations: Server Prefix.
-* set: Help.
-* set args: Arguments.
-* set auto-solib-add: Files.
-* set auto-solib-limit: Files.
-* set backtrace limit: Backtrace.
-* set backtrace past-main: Backtrace.
-* set breakpoint pending: Set Breaks.
-* set charset: Character Sets.
-* set check range: Range Checking.
-* set check type: Type Checking.
-* set check, range: Range Checking.
-* set check, type: Type Checking.
-* set coerce-float-to-double: ABI.
-* set complaints: Messages/Warnings.
-* set confirm: Messages/Warnings.
-* set cp-abi: ABI.
-* set debug arch: Debugging Output.
-* set debug event: Debugging Output.
-* set debug expression: Debugging Output.
-* set debug frame: Debugging Output.
-* set debug overload: Debugging Output.
-* set debug remote: Debugging Output.
-* set debug serial: Debugging Output.
-* set debug target: Debugging Output.
-* set debug varobj: Debugging Output.
-* set debug-file-directory: Separate Debug Files.
-* set debugevents: Cygwin Native.
-* set debugexceptions: Cygwin Native.
-* set debugexec: Cygwin Native.
-* set debugmemory: Cygwin Native.
-* set demangle-style: Print Settings.
-* set disassembly-flavor: Machine Code.
-* set editing: Editing.
-* set endian auto: Byte Order.
-* set endian big: Byte Order.
-* set endian little: Byte Order.
-* set environment: Environment.
-* set extension-language: Show.
-* set follow-fork-mode: Processes.
-* set gnutarget: Target Commands.
-* set height: Screen Size.
-* set history expansion: History.
-* set history filename: History.
-* set history save: History.
-* set history size: History.
-* set host-charset: Character Sets.
-* set input-radix: Numbers.
-* set language: Manually.
-* set listsize: List.
-* set logging: Logging output.
-* set machine: Renesas Special.
-* set max-user-call-depth: Define.
-* set memory MOD: H8/500.
-* set mipsfpu: MIPS Embedded.
-* set new-console: Cygwin Native.
-* set new-group: Cygwin Native.
-* set opaque-type-resolution: Symbols.
-* set os: KOD.
-* set osabi: ABI.
-* set output-radix: Numbers.
-* set overload-resolution: Debugging C plus plus.
-* set print address: Print Settings.
-* set print array: Print Settings.
-* set print asm-demangle: Print Settings.
-* set print demangle: Print Settings.
-* set print elements: Print Settings.
-* set print max-symbolic-offset: Print Settings.
-* set print null-stop: Print Settings.
-* set print object: Print Settings.
-* set print pretty: Print Settings.
-* set print sevenbit-strings: Print Settings.
-* set print static-members: Print Settings.
-* set print symbol-filename: Print Settings.
-* set print union: Print Settings.
-* set print vtbl: Print Settings.
-* set processor ARGS: MIPS Embedded.
-* set prompt: Prompt.
-* set remote hardware-breakpoint-limit: Remote configuration.
-* set remote hardware-watchpoint-limit: Remote configuration.
-* set remote system-call-allowed 0: The system call.
-* set remote system-call-allowed 1: The system call.
-* set remotedebug, MIPS protocol: MIPS Embedded.
-* set retransmit-timeout: MIPS Embedded.
-* set rstack_high_address: A29K.
-* set shell: Cygwin Native.
-* set solib-absolute-prefix: Files.
-* set solib-search-path: Files.
-* set step-mode: Continuing and Stepping.
-* set symbol-reloading: Symbols.
-* set target-charset: Character Sets.
-* set timeout: MIPS Embedded.
-* set tracepoint: Create and Delete Tracepoints.
-* set trust-readonly-sections: Files.
-* set tui active-border-mode: TUI Configuration.
-* set tui border-kind: TUI Configuration.
-* set tui border-mode: TUI Configuration.
-* set variable: Assignment.
-* set verbose: Messages/Warnings.
-* set width: Screen Size.
-* set write: Patching.
-* set-mark (C-@): Miscellaneous Commands.
-* set_debug_traps: Stub Contents.
-* setting variables: Assignment.
-* setting watchpoints: Set Watchpoints.
-* SH: remote stub.
-* sh-stub.c: remote stub.
-* share: Files.
-* shared libraries: Files.
-* sharedlibrary: Files.
-* shell: Shell Commands.
-* shell escape: Shell Commands.
-* show: Help.
-* show args: Arguments.
-* show auto-solib-add: Files.
-* show auto-solib-limit: Files.
-* show backtrace limit: Backtrace.
-* show backtrace past-main: Backtrace.
-* show breakpoint pending: Set Breaks.
-* show charset: Character Sets.
-* show check range: Range Checking.
-* show check type: Type Checking.
-* show complaints: Messages/Warnings.
-* show confirm: Messages/Warnings.
-* show convenience: Convenience Vars.
-* show copying: Help.
-* show cp-abi: ABI.
-* show debug arch: Debugging Output.
-* show debug event: Debugging Output.
-* show debug expression: Debugging Output.
-* show debug frame: Debugging Output.
-* show debug overload: Debugging Output.
-* show debug remote: Debugging Output.
-* show debug serial: Debugging Output.
-* show debug target: Debugging Output.
-* show debug varobj: Debugging Output.
-* show debug-file-directory: Separate Debug Files.
-* show demangle-style: Print Settings.
-* show directories: Source Path.
-* show editing: Editing.
-* show environment: Environment.
-* show gnutarget: Target Commands.
-* show height: Screen Size.
-* show history: History.
-* show host-charset: Character Sets.
-* show input-radix: Numbers.
-* show language: Show.
-* show listsize: List.
-* show logging: Logging output.
-* show machine: Renesas Special.
-* show max-user-call-depth: Define.
-* show mipsfpu: MIPS Embedded.
-* show new-console: Cygwin Native.
-* show new-group: Cygwin Native.
-* show opaque-type-resolution: Symbols.
-* show os: KOD.
-* show osabi: ABI.
-* show output-radix: Numbers.
-* show paths: Environment.
-* show print address: Print Settings.
-* show print array: Print Settings.
-* show print asm-demangle: Print Settings.
-* show print demangle: Print Settings.
-* show print elements: Print Settings.
-* show print max-symbolic-offset: Print Settings.
-* show print object: Print Settings.
-* show print pretty: Print Settings.
-* show print sevenbit-strings: Print Settings.
-* show print static-members: Print Settings.
-* show print symbol-filename: Print Settings.
-* show print union: Print Settings.
-* show print vtbl: Print Settings.
-* show processor: MIPS Embedded.
-* show prompt: Prompt.
-* show remote system-call-allowed: The system call.
-* show remotedebug, MIPS protocol: MIPS Embedded.
-* show retransmit-timeout: MIPS Embedded.
-* show rstack_high_address: A29K.
-* show shell: Cygwin Native.
-* show solib-absolute-prefix: Files.
-* show solib-search-path: Files.
-* show symbol-reloading: Symbols.
-* show target-charset: Character Sets.
-* show timeout: MIPS Embedded.
-* show user: Define.
-* show values: Value History.
-* show verbose: Messages/Warnings.
-* show version: Help.
-* show warranty: Help.
-* show width: Screen Size.
-* show write: Patching.
-* show-all-if-ambiguous: Readline Init File Syntax.
-* shows: History.
-* si (stepi): Continuing and Stepping.
-* signal <1>: Annotations for Running.
-* signal: Signaling.
-* signal-name: Annotations for Running.
-* signal-name-end: Annotations for Running.
-* signal-string: Annotations for Running.
-* signal-string-end: Annotations for Running.
-* signalled: Annotations for Running.
-* signals: Signals.
-* silent: Break Commands.
-* sim: Z8000.
-* simulator, Z8000: Z8000.
-* size of screen: Screen Size.
-* software watchpoints: Set Watchpoints.
-* source <1>: Source Annotations.
-* source: Command Files.
-* source path: Source Path.
-* Sparc: remote stub.
-* sparc-stub.c: remote stub.
-* sparcl-stub.c: remote stub.
-* Sparclet: Sparclet.
-* SparcLite: remote stub.
-* speed: Renesas Boards.
-* spr: OpenRISC 1000.
-* ST2000 auxiliary commands: ST2000.
-* st2000 CMD: ST2000.
-* stack frame: Frames.
-* stack on Alpha: MIPS.
-* stack on MIPS: MIPS.
-* stack traces: Backtrace.
-* stacking targets: Active Targets.
-* start a new trace experiment: Starting and Stopping Trace Experiment.
-* start-kbd-macro (C-x (): Keyboard Macros.
-* starting <1>: Annotations for Running.
-* starting: Starting.
-* stat, file-i/o system call: stat/fstat.
-* status of trace data collection: Starting and Stopping Trace Experiment.
-* status output in GDB/MI: GDB/MI Output Syntax.
-* STDBUG commands (ST2000): ST2000.
-* step: Continuing and Stepping.
-* stepi: Continuing and Stepping.
-* stepping: Continuing and Stepping.
-* stepping into functions with no line info: Continuing and Stepping.
-* stop a running trace experiment: Starting and Stopping Trace Experiment.
-* stop reply packets: Stop Reply Packets.
-* stop, a pseudo-command: Hooks.
-* stopped threads: Thread Stops.
-* stopping: Annotations for Running.
-* stream records in GDB/MI: GDB/MI Stream Records.
-* struct stat, in file-i/o protocol: struct stat.
-* struct timeval, in file-i/o protocol: struct timeval.
-* stub example, remote debugging: remote stub.
-* stupid questions: Messages/Warnings.
-* switching threads: Threads.
-* switching threads automatically: Threads.
-* symbol decoding style, C++: Print Settings.
-* symbol dump: Symbols.
-* symbol from address: Symbols.
-* symbol names: Symbols.
-* symbol overloading: Breakpoint Menus.
-* symbol table: Files.
-* symbol tables, listing GDB's internal: Symbols.
-* symbol-file: Files.
-* symbols, reading from relocatable object files: Files.
-* symbols, reading immediately: Files.
-* sysinfo: DJGPP Native.
-* system call, file-i/o protocol: The system call.
-* system calls and thread breakpoints: Thread Stops.
-* system, file-i/o system call: system.
-* T packet: Packets.
-* t packet: Packets.
-* T packet reply: Stop Reply Packets.
-* target: Targets.
-* target abug: M68K.
-* target array: MIPS Embedded.
-* target byte order: Byte Order.
-* target character set: Character Sets.
-* target core: Target Commands.
-* target cpu32bug: M68K.
-* target dbug: M68K.
-* target ddb PORT: MIPS Embedded.
-* target dink32: PowerPC.
-* target e7000, with H8/300: H8/300.
-* target e7000, with Renesas ICE: Renesas ICE.
-* target e7000, with Renesas SH: SH.
-* target est: M68K.
-* target exec: Target Commands.
-* target hms, and serial protocol: Renesas Boards.
-* target hms, with H8/300: H8/300.
-* target hms, with Renesas SH: SH.
-* target jtag: OpenRISC 1000.
-* target lsi PORT: MIPS Embedded.
-* target m32r: M32R/D.
-* target m32rsdi: M32R/D.
-* target mips PORT: MIPS Embedded.
-* target nrom: Target Commands.
-* target op50n: PA.
-* target output in GDB/MI: GDB/MI Output Syntax.
-* target pmon PORT: MIPS Embedded.
-* target ppcbug: PowerPC.
-* target ppcbug1: PowerPC.
-* target r3900: MIPS Embedded.
-* target rdi: ARM.
-* target rdp: ARM.
-* target remote: Target Commands.
-* target rom68k: M68K.
-* target rombug: M68K.
-* target sds: PowerPC.
-* target sh3, with H8/300: H8/300.
-* target sh3, with SH: SH.
-* target sh3e, with H8/300: H8/300.
-* target sh3e, with SH: SH.
-* target sim: Target Commands.
-* target sim, with Z8000: Z8000.
-* target sparclite: Sparclite.
-* target vxworks: VxWorks.
-* target w89k: PA.
-* tbreak: Set Breaks.
-* TCP port, target remote: Connecting.
-* tdump: tdump.
-* terminal: Input/Output.
-* Text User Interface: TUI.
-* tfind: tfind.
-* thbreak: Set Breaks.
-* this, inside C++ member functions: C plus plus expressions.
-* thread apply: Threads.
-* thread breakpoints: Thread Stops.
-* thread breakpoints and system calls: Thread Stops.
-* thread identifier (GDB): Threads.
-* thread identifier (system): Threads.
-* thread identifier (system), on HP-UX: Threads.
-* thread number: Threads.
-* thread THREADNO: Threads.
-* threads and watchpoints: Set Watchpoints.
-* threads of execution: Threads.
-* threads, automatic switching: Threads.
-* threads, continuing: Thread Stops.
-* threads, stopped: Thread Stops.
-* timeout, MIPS protocol: MIPS Embedded.
-* trace: Create and Delete Tracepoints.
-* trace experiment, status of: Starting and Stopping Trace Experiment.
-* tracebacks: Backtrace.
-* tracepoint actions: Tracepoint Actions.
-* tracepoint data, display: tdump.
-* tracepoint deletion: Create and Delete Tracepoints.
-* tracepoint number: Create and Delete Tracepoints.
-* tracepoint pass count: Tracepoint Passcounts.
-* tracepoint variables: Tracepoint Variables.
-* tracepoints: Tracepoints.
-* translating between character sets: Character Sets.
-* transpose-chars (C-t): Commands For Text.
-* transpose-words (M-t): Commands For Text.
-* tstart: Starting and Stopping Trace Experiment.
-* tstatus: Starting and Stopping Trace Experiment.
-* tstop: Starting and Stopping Trace Experiment.
-* tty: Input/Output.
-* TUI: TUI.
-* TUI commands: TUI Commands.
-* TUI configuration variables: TUI Configuration.
-* TUI key bindings: TUI Keys.
-* tui reg: TUI Commands.
-* TUI single key mode: TUI Single Key Mode.
-* type casting memory: Expressions.
-* type checking: Checks.
-* type conversions in C++: C plus plus expressions.
-* u (SingleKey TUI key): TUI Single Key Mode.
-* u (until): Continuing and Stepping.
-* UDP port, target remote: Connecting.
-* undisplay: Auto Display.
-* undo (C-_ or C-x C-u): Miscellaneous Commands.
-* universal-argument (): Numeric Arguments.
-* unix-line-discard (C-u): Commands For Killing.
-* unix-word-rubout (C-w): Commands For Killing.
-* unknown address, locating: Output Formats.
-* unlink, file-i/o system call: unlink.
-* unmap an overlay: Overlay Commands.
-* unmapped overlays: How Overlays Work.
-* unset environment: Environment.
-* unsupported languages: Unsupported languages.
-* until: Continuing and Stepping.
-* Up: TUI Keys.
-* up: Selection.
-* up-silently: Selection.
-* upcase-word (M-u): Commands For Text.
-* update: TUI Commands.
-* user-defined command: Define.
-* user-defined macros: Macros.
-* v (SingleKey TUI key): TUI Single Key Mode.
-* value history: Value History.
-* variable name conflict: Variables.
-* variable objects in GDB/MI: GDB/MI Variable Objects.
-* variable values, wrong: Variables.
-* variables, readline: Readline Init File Syntax.
-* variables, setting: Assignment.
-* vCont packet: Packets.
-* vCont? packet: Packets.
-* vector unit: Vector Unit.
-* vector, auxiliary: Auxiliary Vector.
-* version number: Help.
-* visible-stats: Readline Init File Syntax.
-* VxWorks: VxWorks.
-* vxworks-timeout: VxWorks.
-* w (SingleKey TUI key): TUI Single Key Mode.
-* watch: Set Watchpoints.
-* watchpoint: Annotations for Running.
-* watchpoints: Breakpoints.
-* watchpoints and threads: Set Watchpoints.
-* whatis: Symbols.
-* where: Backtrace.
-* while: Define.
-* while-stepping (tracepoints): Tracepoint Actions.
-* wild pointer, interpreting: Print Settings.
-* winheight: TUI Commands.
-* word completion: Completion.
-* working directory: Source Path.
-* working directory (of your program): Working Directory.
-* working language: Languages.
-* write, file-i/o system call: write.
-* writing into corefiles: Patching.
-* writing into executables: Patching.
-* wrong values: Variables.
-* x (examine memory): Memory.
-* X packet: Packets.
-* x(examine), and info line: Machine Code.
-* yank (C-y): Commands For Killing.
-* yank-last-arg (M-. or M-_): Commands For History.
-* yank-nth-arg (M-C-y): Commands For History.
-* yank-pop (M-y): Commands For Killing.
-* yanking text: Readline Killing Commands.
-* z packet: Packets.
-* Z packets: Packets.
-* Z0 packet: Packets.
-* z0 packet: Packets.
-* Z1 packet: Packets.
-* z1 packet: Packets.
-* Z2 packet: Packets.
-* z2 packet: Packets.
-* Z3 packet: Packets.
-* z3 packet: Packets.
-* Z4 packet: Packets.
-* z4 packet: Packets.
-* Z8000: Z8000.
-* Zilog Z8000 simulator: Z8000.
-* {TYPE}: Expressions.
-
-
diff --git a/gnu/usr.bin/binutils/gdb/doc/gdbint.info b/gnu/usr.bin/binutils/gdb/doc/gdbint.info
deleted file mode 100644
index 98bda8534d6..00000000000
--- a/gnu/usr.bin/binutils/gdb/doc/gdbint.info
+++ /dev/null
@@ -1,7091 +0,0 @@
-This is gdbint.info, produced by makeinfo version 4.6 from
-./gdbint.texinfo.
-
-INFO-DIR-SECTION Programming & development tools.
-START-INFO-DIR-ENTRY
-* Gdb-Internals: (gdbint). The GNU debugger's internals.
-END-INFO-DIR-ENTRY
-
- This file documents the internals of the GNU debugger GDB.
-Copyright
-1990,1991,1992,1993,1994,1996,1998,1999,2000,2001,2002,2003,2004
-Free Software Foundation, Inc. Contributed by Cygnus Solutions.
-Written by John Gilmore. Second Edition by Stan Shebs.
-
- Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts. A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
-
-File: gdbint.info, Node: Top, Next: Requirements, Up: (dir)
-
-Scope of this Document
-**********************
-
-This document documents the internals of the GNU debugger, GDB. It
-includes description of GDB's key algorithms and operations, as well as
-the mechanisms that adapt GDB to specific hosts and targets.
-
-* Menu:
-
-* Requirements::
-* Overall Structure::
-* Algorithms::
-* User Interface::
-* libgdb::
-* Symbol Handling::
-* Language Support::
-* Host Definition::
-* Target Architecture Definition::
-* Target Vector Definition::
-* Native Debugging::
-* Support Libraries::
-* Coding::
-* Porting GDB::
-* Releasing GDB::
-* Testsuite::
-* Hints::
-
-* GDB Observers:: GDB Currently available observers
-* GNU Free Documentation License:: The license for this documentation
-* Index::
-
-
-File: gdbint.info, Node: Requirements, Next: Overall Structure, Prev: Top, Up: Top
-
-Requirements
-************
-
-Before diving into the internals, you should understand the formal
-requirements and other expectations for GDB. Although some of these
-may seem obvious, there have been proposals for GDB that have run
-counter to these requirements.
-
- First of all, GDB is a debugger. It's not designed to be a front
-panel for embedded systems. It's not a text editor. It's not a shell.
-It's not a programming environment.
-
- GDB is an interactive tool. Although a batch mode is available,
-GDB's primary role is to interact with a human programmer.
-
- GDB should be responsive to the user. A programmer hot on the trail
-of a nasty bug, and operating under a looming deadline, is going to be
-very impatient of everything, including the response time to debugger
-commands.
-
- GDB should be relatively permissive, such as for expressions. While
-the compiler should be picky (or have the option to be made picky),
-since source code lives for a long time usually, the programmer doing
-debugging shouldn't be spending time figuring out to mollify the
-debugger.
-
- GDB will be called upon to deal with really large programs.
-Executable sizes of 50 to 100 megabytes occur regularly, and we've
-heard reports of programs approaching 1 gigabyte in size.
-
- GDB should be able to run everywhere. No other debugger is
-available for even half as many configurations as GDB supports.
-
-
-File: gdbint.info, Node: Overall Structure, Next: Algorithms, Prev: Requirements, Up: Top
-
-Overall Structure
-*****************
-
-GDB consists of three major subsystems: user interface, symbol handling
-(the "symbol side"), and target system handling (the "target side").
-
- The user interface consists of several actual interfaces, plus
-supporting code.
-
- The symbol side consists of object file readers, debugging info
-interpreters, symbol table management, source language expression
-parsing, type and value printing.
-
- The target side consists of execution control, stack frame analysis,
-and physical target manipulation.
-
- The target side/symbol side division is not formal, and there are a
-number of exceptions. For instance, core file support involves symbolic
-elements (the basic core file reader is in BFD) and target elements (it
-supplies the contents of memory and the values of registers). Instead,
-this division is useful for understanding how the minor subsystems
-should fit together.
-
-The Symbol Side
-===============
-
-The symbolic side of GDB can be thought of as "everything you can do in
-GDB without having a live program running". For instance, you can look
-at the types of variables, and evaluate many kinds of expressions.
-
-The Target Side
-===============
-
-The target side of GDB is the "bits and bytes manipulator". Although
-it may make reference to symbolic info here and there, most of the
-target side will run with only a stripped executable available--or even
-no executable at all, in remote debugging cases.
-
- Operations such as disassembly, stack frame crawls, and register
-display, are able to work with no symbolic info at all. In some cases,
-such as disassembly, GDB will use symbolic info to present addresses
-relative to symbols rather than as raw numbers, but it will work either
-way.
-
-Configurations
-==============
-
-"Host" refers to attributes of the system where GDB runs. "Target"
-refers to the system where the program being debugged executes. In
-most cases they are the same machine, in which case a third type of
-"Native" attributes come into play.
-
- Defines and include files needed to build on the host are host
-support. Examples are tty support, system defined types, host byte
-order, host float format.
-
- Defines and information needed to handle the target format are target
-dependent. Examples are the stack frame format, instruction set,
-breakpoint instruction, registers, and how to set up and tear down the
-stack to call a function.
-
- Information that is only needed when the host and target are the
-same, is native dependent. One example is Unix child process support;
-if the host and target are not the same, doing a fork to start the
-target process is a bad idea. The various macros needed for finding the
-registers in the `upage', running `ptrace', and such are all in the
-native-dependent files.
-
- Another example of native-dependent code is support for features that
-are really part of the target environment, but which require `#include'
-files that are only available on the host system. Core file handling
-and `setjmp' handling are two common cases.
-
- When you want to make GDB work "native" on a particular machine, you
-have to include all three kinds of information.
-
-
-File: gdbint.info, Node: Algorithms, Next: User Interface, Prev: Overall Structure, Up: Top
-
-Algorithms
-**********
-
-GDB uses a number of debugging-specific algorithms. They are often not
-very complicated, but get lost in the thicket of special cases and
-real-world issues. This chapter describes the basic algorithms and
-mentions some of the specific target definitions that they use.
-
-Frames
-======
-
-A frame is a construct that GDB uses to keep track of calling and
-called functions.
-
- `FRAME_FP' in the machine description has no meaning to the
-machine-independent part of GDB, except that it is used when setting up
-a new frame from scratch, as follows:
-
- create_new_frame (read_register (DEPRECATED_FP_REGNUM), read_pc ()));
-
- Other than that, all the meaning imparted to `DEPRECATED_FP_REGNUM'
-is imparted by the machine-dependent code. So, `DEPRECATED_FP_REGNUM'
-can have any value that is convenient for the code that creates new
-frames. (`create_new_frame' calls `DEPRECATED_INIT_EXTRA_FRAME_INFO'
-if it is defined; that is where you should use the
-`DEPRECATED_FP_REGNUM' value, if your frames are nonstandard.)
-
- Given a GDB frame, define `DEPRECATED_FRAME_CHAIN' to determine the
-address of the calling function's frame. This will be used to create a
-new GDB frame struct, and then `DEPRECATED_INIT_EXTRA_FRAME_INFO' and
-`DEPRECATED_INIT_FRAME_PC' will be called for the new frame.
-
-Breakpoint Handling
-===================
-
-In general, a breakpoint is a user-designated location in the program
-where the user wants to regain control if program execution ever reaches
-that location.
-
- There are two main ways to implement breakpoints; either as
-"hardware" breakpoints or as "software" breakpoints.
-
- Hardware breakpoints are sometimes available as a builtin debugging
-features with some chips. Typically these work by having dedicated
-register into which the breakpoint address may be stored. If the PC
-(shorthand for "program counter") ever matches a value in a breakpoint
-registers, the CPU raises an exception and reports it to GDB.
-
- Another possibility is when an emulator is in use; many emulators
-include circuitry that watches the address lines coming out from the
-processor, and force it to stop if the address matches a breakpoint's
-address.
-
- A third possibility is that the target already has the ability to do
-breakpoints somehow; for instance, a ROM monitor may do its own
-software breakpoints. So although these are not literally "hardware
-breakpoints", from GDB's point of view they work the same; GDB need not
-do anything more than set the breakpoint and wait for something to
-happen.
-
- Since they depend on hardware resources, hardware breakpoints may be
-limited in number; when the user asks for more, GDB will start trying
-to set software breakpoints. (On some architectures, notably the
-32-bit x86 platforms, GDB cannot always know whether there's enough
-hardware resources to insert all the hardware breakpoints and
-watchpoints. On those platforms, GDB prints an error message only when
-the program being debugged is continued.)
-
- Software breakpoints require GDB to do somewhat more work. The
-basic theory is that GDB will replace a program instruction with a
-trap, illegal divide, or some other instruction that will cause an
-exception, and then when it's encountered, GDB will take the exception
-and stop the program. When the user says to continue, GDB will restore
-the original instruction, single-step, re-insert the trap, and continue
-on.
-
- Since it literally overwrites the program being tested, the program
-area must be writable, so this technique won't work on programs in ROM.
-It can also distort the behavior of programs that examine themselves,
-although such a situation would be highly unusual.
-
- Also, the software breakpoint instruction should be the smallest
-size of instruction, so it doesn't overwrite an instruction that might
-be a jump target, and cause disaster when the program jumps into the
-middle of the breakpoint instruction. (Strictly speaking, the
-breakpoint must be no larger than the smallest interval between
-instructions that may be jump targets; perhaps there is an architecture
-where only even-numbered instructions may jumped to.) Note that it's
-possible for an instruction set not to have any instructions usable for
-a software breakpoint, although in practice only the ARC has failed to
-define such an instruction.
-
- The basic definition of the software breakpoint is the macro
-`BREAKPOINT'.
-
- Basic breakpoint object handling is in `breakpoint.c'. However,
-much of the interesting breakpoint action is in `infrun.c'.
-
-Single Stepping
-===============
-
-Signal Handling
-===============
-
-Thread Handling
-===============
-
-Inferior Function Calls
-=======================
-
-Longjmp Support
-===============
-
-GDB has support for figuring out that the target is doing a `longjmp'
-and for stopping at the target of the jump, if we are stepping. This
-is done with a few specialized internal breakpoints, which are visible
-in the output of the `maint info breakpoint' command.
-
- To make this work, you need to define a macro called
-`GET_LONGJMP_TARGET', which will examine the `jmp_buf' structure and
-extract the longjmp target address. Since `jmp_buf' is target
-specific, you will need to define it in the appropriate `tm-TARGET.h'
-file. Look in `tm-sun4os4.h' and `sparc-tdep.c' for examples of how to
-do this.
-
-Watchpoints
-===========
-
-Watchpoints are a special kind of breakpoints (*note breakpoints:
-Algorithms.) which break when data is accessed rather than when some
-instruction is executed. When you have data which changes without your
-knowing what code does that, watchpoints are the silver bullet to hunt
-down and kill such bugs.
-
- Watchpoints can be either hardware-assisted or not; the latter type
-is known as "software watchpoints." GDB always uses hardware-assisted
-watchpoints if they are available, and falls back on software
-watchpoints otherwise. Typical situations where GDB will use software
-watchpoints are:
-
- * The watched memory region is too large for the underlying hardware
- watchpoint support. For example, each x86 debug register can
- watch up to 4 bytes of memory, so trying to watch data structures
- whose size is more than 16 bytes will cause GDB to use software
- watchpoints.
-
- * The value of the expression to be watched depends on data held in
- registers (as opposed to memory).
-
- * Too many different watchpoints requested. (On some architectures,
- this situation is impossible to detect until the debugged program
- is resumed.) Note that x86 debug registers are used both for
- hardware breakpoints and for watchpoints, so setting too many
- hardware breakpoints might cause watchpoint insertion to fail.
-
- * No hardware-assisted watchpoints provided by the target
- implementation.
-
- Software watchpoints are very slow, since GDB needs to single-step
-the program being debugged and test the value of the watched
-expression(s) after each instruction. The rest of this section is
-mostly irrelevant for software watchpoints.
-
- GDB uses several macros and primitives to support hardware
-watchpoints:
-
-`TARGET_HAS_HARDWARE_WATCHPOINTS'
- If defined, the target supports hardware watchpoints.
-
-`TARGET_CAN_USE_HARDWARE_WATCHPOINT (TYPE, COUNT, OTHER)'
- Return the number of hardware watchpoints of type TYPE that are
- possible to be set. The value is positive if COUNT watchpoints of
- this type can be set, zero if setting watchpoints of this type is
- not supported, and negative if COUNT is more than the maximum
- number of watchpoints of type TYPE that can be set. OTHER is
- non-zero if other types of watchpoints are currently enabled (there
- are architectures which cannot set watchpoints of different types
- at the same time).
-
-`TARGET_REGION_OK_FOR_HW_WATCHPOINT (ADDR, LEN)'
- Return non-zero if hardware watchpoints can be used to watch a
- region whose address is ADDR and whose length in bytes is LEN.
-
-`TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (SIZE)'
- Return non-zero if hardware watchpoints can be used to watch a
- region whose size is SIZE. GDB only uses this macro as a
- fall-back, in case `TARGET_REGION_OK_FOR_HW_WATCHPOINT' is not
- defined.
-
-`TARGET_DISABLE_HW_WATCHPOINTS (PID)'
- Disables watchpoints in the process identified by PID. This is
- used, e.g., on HP-UX which provides operations to disable and
- enable the page-level memory protection that implements hardware
- watchpoints on that platform.
-
-`TARGET_ENABLE_HW_WATCHPOINTS (PID)'
- Enables watchpoints in the process identified by PID. This is
- used, e.g., on HP-UX which provides operations to disable and
- enable the page-level memory protection that implements hardware
- watchpoints on that platform.
-
-`target_insert_watchpoint (ADDR, LEN, TYPE)'
-`target_remove_watchpoint (ADDR, LEN, TYPE)'
- Insert or remove a hardware watchpoint starting at ADDR, for LEN
- bytes. TYPE is the watchpoint type, one of the possible values of
- the enumerated data type `target_hw_bp_type', defined by
- `breakpoint.h' as follows:
-
- enum target_hw_bp_type
- {
- hw_write = 0, /* Common (write) HW watchpoint */
- hw_read = 1, /* Read HW watchpoint */
- hw_access = 2, /* Access (read or write) HW watchpoint */
- hw_execute = 3 /* Execute HW breakpoint */
- };
-
- These two macros should return 0 for success, non-zero for failure.
-
-`target_remove_hw_breakpoint (ADDR, SHADOW)'
-`target_insert_hw_breakpoint (ADDR, SHADOW)'
- Insert or remove a hardware-assisted breakpoint at address ADDR.
- Returns zero for success, non-zero for failure. SHADOW is the
- real contents of the byte where the breakpoint has been inserted;
- it is generally not valid when hardware breakpoints are used, but
- since no other code touches these values, the implementations of
- the above two macros can use them for their internal purposes.
-
-`target_stopped_data_address ()'
- If the inferior has some watchpoint that triggered, return the
- address associated with that watchpoint. Otherwise, return zero.
-
-`HAVE_STEPPABLE_WATCHPOINT'
- If defined to a non-zero value, it is not necessary to disable a
- watchpoint to step over it.
-
-`HAVE_NONSTEPPABLE_WATCHPOINT'
- If defined to a non-zero value, GDB should disable a watchpoint to
- step the inferior over it.
-
-`HAVE_CONTINUABLE_WATCHPOINT'
- If defined to a non-zero value, it is possible to continue the
- inferior after a watchpoint has been hit.
-
-`CANNOT_STEP_HW_WATCHPOINTS'
- If this is defined to a non-zero value, GDB will remove all
- watchpoints before stepping the inferior.
-
-`STOPPED_BY_WATCHPOINT (WAIT_STATUS)'
- Return non-zero if stopped by a watchpoint. WAIT_STATUS is of the
- type `struct target_waitstatus', defined by `target.h'.
-
-x86 Watchpoints
----------------
-
-The 32-bit Intel x86 (a.k.a. ia32) processors feature special debug
-registers designed to facilitate debugging. GDB provides a generic
-library of functions that x86-based ports can use to implement support
-for watchpoints and hardware-assisted breakpoints. This subsection
-documents the x86 watchpoint facilities in GDB.
-
- To use the generic x86 watchpoint support, a port should do the
-following:
-
- * Define the macro `I386_USE_GENERIC_WATCHPOINTS' somewhere in the
- target-dependent headers.
-
- * Include the `config/i386/nm-i386.h' header file _after_ defining
- `I386_USE_GENERIC_WATCHPOINTS'.
-
- * Add `i386-nat.o' to the value of the Make variable `NATDEPFILES'
- (*note NATDEPFILES: Native Debugging.) or `TDEPFILES' (*note
- TDEPFILES: Target Architecture Definition.).
-
- * Provide implementations for the `I386_DR_LOW_*' macros described
- below. Typically, each macro should call a target-specific
- function which does the real work.
-
- The x86 watchpoint support works by maintaining mirror images of the
-debug registers. Values are copied between the mirror images and the
-real debug registers via a set of macros which each target needs to
-provide:
-
-`I386_DR_LOW_SET_CONTROL (VAL)'
- Set the Debug Control (DR7) register to the value VAL.
-
-`I386_DR_LOW_SET_ADDR (IDX, ADDR)'
- Put the address ADDR into the debug register number IDX.
-
-`I386_DR_LOW_RESET_ADDR (IDX)'
- Reset (i.e. zero out) the address stored in the debug register
- number IDX.
-
-`I386_DR_LOW_GET_STATUS'
- Return the value of the Debug Status (DR6) register. This value is
- used immediately after it is returned by `I386_DR_LOW_GET_STATUS',
- so as to support per-thread status register values.
-
- For each one of the 4 debug registers (whose indices are from 0 to 3)
-that store addresses, a reference count is maintained by GDB, to allow
-sharing of debug registers by several watchpoints. This allows users
-to define several watchpoints that watch the same expression, but with
-different conditions and/or commands, without wasting debug registers
-which are in short supply. GDB maintains the reference counts
-internally, targets don't have to do anything to use this feature.
-
- The x86 debug registers can each watch a region that is 1, 2, or 4
-bytes long. The ia32 architecture requires that each watched region be
-appropriately aligned: 2-byte region on 2-byte boundary, 4-byte region
-on 4-byte boundary. However, the x86 watchpoint support in GDB can
-watch unaligned regions and regions larger than 4 bytes (up to 16
-bytes) by allocating several debug registers to watch a single region.
-This allocation of several registers per a watched region is also done
-automatically without target code intervention.
-
- The generic x86 watchpoint support provides the following API for the
-GDB's application code:
-
-`i386_region_ok_for_watchpoint (ADDR, LEN)'
- The macro `TARGET_REGION_OK_FOR_HW_WATCHPOINT' is set to call this
- function. It counts the number of debug registers required to
- watch a given region, and returns a non-zero value if that number
- is less than 4, the number of debug registers available to x86
- processors.
-
-`i386_stopped_data_address (void)'
- The macros `STOPPED_BY_WATCHPOINT' and
- `target_stopped_data_address' are set to call this function. The
- argument passed to `STOPPED_BY_WATCHPOINT' is ignored. This
- function examines the breakpoint condition bits in the DR6 Debug
- Status register, as returned by the `I386_DR_LOW_GET_STATUS'
- macro, and returns the address associated with the first bit that
- is set in DR6.
-
-`i386_insert_watchpoint (ADDR, LEN, TYPE)'
-`i386_remove_watchpoint (ADDR, LEN, TYPE)'
- Insert or remove a watchpoint. The macros
- `target_insert_watchpoint' and `target_remove_watchpoint' are set
- to call these functions. `i386_insert_watchpoint' first looks for
- a debug register which is already set to watch the same region for
- the same access types; if found, it just increments the reference
- count of that debug register, thus implementing debug register
- sharing between watchpoints. If no such register is found, the
- function looks for a vacant debug register, sets its mirrored
- value to ADDR, sets the mirrored value of DR7 Debug Control
- register as appropriate for the LEN and TYPE parameters, and then
- passes the new values of the debug register and DR7 to the
- inferior by calling `I386_DR_LOW_SET_ADDR' and
- `I386_DR_LOW_SET_CONTROL'. If more than one debug register is
- required to cover the given region, the above process is repeated
- for each debug register.
-
- `i386_remove_watchpoint' does the opposite: it resets the address
- in the mirrored value of the debug register and its read/write and
- length bits in the mirrored value of DR7, then passes these new
- values to the inferior via `I386_DR_LOW_RESET_ADDR' and
- `I386_DR_LOW_SET_CONTROL'. If a register is shared by several
- watchpoints, each time a `i386_remove_watchpoint' is called, it
- decrements the reference count, and only calls
- `I386_DR_LOW_RESET_ADDR' and `I386_DR_LOW_SET_CONTROL' when the
- count goes to zero.
-
-`i386_insert_hw_breakpoint (ADDR, SHADOW'
-`i386_remove_hw_breakpoint (ADDR, SHADOW)'
- These functions insert and remove hardware-assisted breakpoints.
- The macros `target_insert_hw_breakpoint' and
- `target_remove_hw_breakpoint' are set to call these functions.
- These functions work like `i386_insert_watchpoint' and
- `i386_remove_watchpoint', respectively, except that they set up
- the debug registers to watch instruction execution, and each
- hardware-assisted breakpoint always requires exactly one debug
- register.
-
-`i386_stopped_by_hwbp (void)'
- This function returns non-zero if the inferior has some watchpoint
- or hardware breakpoint that triggered. It works like
- `i386_stopped_data_address', except that it doesn't return the
- address whose watchpoint triggered.
-
-`i386_cleanup_dregs (void)'
- This function clears all the reference counts, addresses, and
- control bits in the mirror images of the debug registers. It
- doesn't affect the actual debug registers in the inferior process.
-
-*Notes:*
- 1. x86 processors support setting watchpoints on I/O reads or writes.
- However, since no target supports this (as of March 2001), and
- since `enum target_hw_bp_type' doesn't even have an enumeration
- for I/O watchpoints, this feature is not yet available to GDB
- running on x86.
-
- 2. x86 processors can enable watchpoints locally, for the current task
- only, or globally, for all the tasks. For each debug register,
- there's a bit in the DR7 Debug Control register that determines
- whether the associated address is watched locally or globally. The
- current implementation of x86 watchpoint support in GDB always
- sets watchpoints to be locally enabled, since global watchpoints
- might interfere with the underlying OS and are probably
- unavailable in many platforms.
-
-Observing changes in GDB internals
-==================================
-
-In order to function properly, several modules need to be notified when
-some changes occur in the GDB internals. Traditionally, these modules
-have relied on several paradigms, the most common ones being hooks and
-gdb-events. Unfortunately, none of these paradigms was versatile
-enough to become the standard notification mechanism in GDB. The fact
-that they only supported one "client" was also a strong limitation.
-
- A new paradigm, based on the Observer pattern of the `Design
-Patterns' book, has therefore been implemented. The goal was to provide
-a new interface overcoming the issues with the notification mechanisms
-previously available. This new interface needed to be strongly typed,
-easy to extend, and versatile enough to be used as the standard
-interface when adding new notifications.
-
- See *Note GDB Observers:: for a brief description of the observers
-currently implemented in GDB. The rationale for the current
-implementation is also briefly discussed.
-
-
-File: gdbint.info, Node: User Interface, Next: libgdb, Prev: Algorithms, Up: Top
-
-User Interface
-**************
-
-GDB has several user interfaces. Although the command-line interface
-is the most common and most familiar, there are others.
-
-Command Interpreter
-===================
-
-The command interpreter in GDB is fairly simple. It is designed to
-allow for the set of commands to be augmented dynamically, and also has
-a recursive subcommand capability, where the first argument to a
-command may itself direct a lookup on a different command list.
-
- For instance, the `set' command just starts a lookup on the
-`setlist' command list, while `set thread' recurses to the
-`set_thread_cmd_list'.
-
- To add commands in general, use `add_cmd'. `add_com' adds to the
-main command list, and should be used for those commands. The usual
-place to add commands is in the `_initialize_XYZ' routines at the ends
-of most source files.
-
- To add paired `set' and `show' commands, use `add_setshow_cmd' or
-`add_setshow_cmd_full'. The former is a slightly simpler interface
-which is useful when you don't need to further modify the new command
-structures, while the latter returns the new command structures for
-manipulation.
-
- Before removing commands from the command set it is a good idea to
-deprecate them for some time. Use `deprecate_cmd' on commands or
-aliases to set the deprecated flag. `deprecate_cmd' takes a `struct
-cmd_list_element' as it's first argument. You can use the return value
-from `add_com' or `add_cmd' to deprecate the command immediately after
-it is created.
-
- The first time a command is used the user will be warned and offered
-a replacement (if one exists). Note that the replacement string passed
-to `deprecate_cmd' should be the full name of the command, i.e. the
-entire string the user should type at the command line.
-
-UI-Independent Output--the `ui_out' Functions
-=============================================
-
-The `ui_out' functions present an abstraction level for the GDB output
-code. They hide the specifics of different user interfaces supported
-by GDB, and thus free the programmer from the need to write several
-versions of the same code, one each for every UI, to produce output.
-
-Overview and Terminology
-------------------------
-
-In general, execution of each GDB command produces some sort of output,
-and can even generate an input request.
-
- Output can be generated for the following purposes:
-
- * to display a _result_ of an operation;
-
- * to convey _info_ or produce side-effects of a requested operation;
-
- * to provide a _notification_ of an asynchronous event (including
- progress indication of a prolonged asynchronous operation);
-
- * to display _error messages_ (including warnings);
-
- * to show _debug data_;
-
- * to _query_ or prompt a user for input (a special case).
-
-This section mainly concentrates on how to build result output,
-although some of it also applies to other kinds of output.
-
- Generation of output that displays the results of an operation
-involves one or more of the following:
-
- * output of the actual data
-
- * formatting the output as appropriate for console output, to make it
- easily readable by humans
-
- * machine oriented formatting-a more terse formatting to allow for
- easy parsing by programs which read GDB's output
-
- * annotation, whose purpose is to help legacy GUIs to identify
- interesting parts in the output
-
- The `ui_out' routines take care of the first three aspects.
-Annotations are provided by separate annotation routines. Note that use
-of annotations for an interface between a GUI and GDB is deprecated.
-
- Output can be in the form of a single item, which we call a "field";
-a "list" consisting of identical fields; a "tuple" consisting of
-non-identical fields; or a "table", which is a tuple consisting of a
-header and a body. In a BNF-like form:
-
-`<table> ==>'
- `<header> <body>'
-
-`<header> ==>'
- `{ <column> }'
-
-`<column> ==>'
- `<width> <alignment> <title>'
-
-`<body> ==>'
- `{<row>}'
-
-General Conventions
--------------------
-
-Most `ui_out' routines are of type `void', the exceptions are
-`ui_out_stream_new' (which returns a pointer to the newly created
-object) and the `make_cleanup' routines.
-
- The first parameter is always the `ui_out' vector object, a pointer
-to a `struct ui_out'.
-
- The FORMAT parameter is like in `printf' family of functions. When
-it is present, there must also be a variable list of arguments
-sufficient used to satisfy the `%' specifiers in the supplied format.
-
- When a character string argument is not used in a `ui_out' function
-call, a `NULL' pointer has to be supplied instead.
-
-Table, Tuple and List Functions
--------------------------------
-
-This section introduces `ui_out' routines for building lists, tuples
-and tables. The routines to output the actual data items (fields) are
-presented in the next section.
-
- To recap: A "tuple" is a sequence of "fields", each field containing
-information about an object; a "list" is a sequence of fields where
-each field describes an identical object.
-
- Use the "table" functions when your output consists of a list of
-rows (tuples) and the console output should include a heading. Use this
-even when you are listing just one object but you still want the header.
-
- Tables can not be nested. Tuples and lists can be nested up to a
-maximum of five levels.
-
- The overall structure of the table output code is something like
-this:
-
- ui_out_table_begin
- ui_out_table_header
- ...
- ui_out_table_body
- ui_out_tuple_begin
- ui_out_field_*
- ...
- ui_out_tuple_end
- ...
- ui_out_table_end
-
- Here is the description of table-, tuple- and list-related `ui_out'
-functions:
-
- - Function: void ui_out_table_begin (struct ui_out *UIOUT, int
- NBROFCOLS, int NR_ROWS, const char *TBLID)
- The function `ui_out_table_begin' marks the beginning of the output
- of a table. It should always be called before any other `ui_out'
- function for a given table. NBROFCOLS is the number of columns in
- the table. NR_ROWS is the number of rows in the table. TBLID is
- an optional string identifying the table. The string pointed to
- by TBLID is copied by the implementation of `ui_out_table_begin',
- so the application can free the string if it was `malloc'ed.
-
- The companion function `ui_out_table_end', described below, marks
- the end of the table's output.
-
- - Function: void ui_out_table_header (struct ui_out *UIOUT, int WIDTH,
- enum ui_align ALIGNMENT, const char *COLHDR)
- `ui_out_table_header' provides the header information for a single
- table column. You call this function several times, one each for
- every column of the table, after `ui_out_table_begin', but before
- `ui_out_table_body'.
-
- The value of WIDTH gives the column width in characters. The
- value of ALIGNMENT is one of `left', `center', and `right', and it
- specifies how to align the header: left-justify, center, or
- right-justify it. COLHDR points to a string that specifies the
- column header; the implementation copies that string, so column
- header strings in `malloc'ed storage can be freed after the call.
-
- - Function: void ui_out_table_body (struct ui_out *UIOUT)
- This function delimits the table header from the table body.
-
- - Function: void ui_out_table_end (struct ui_out *UIOUT)
- This function signals the end of a table's output. It should be
- called after the table body has been produced by the list and
- field output functions.
-
- There should be exactly one call to `ui_out_table_end' for each
- call to `ui_out_table_begin', otherwise the `ui_out' functions
- will signal an internal error.
-
- The output of the tuples that represent the table rows must follow
-the call to `ui_out_table_body' and precede the call to
-`ui_out_table_end'. You build a tuple by calling `ui_out_tuple_begin'
-and `ui_out_tuple_end', with suitable calls to functions which actually
-output fields between them.
-
- - Function: void ui_out_tuple_begin (struct ui_out *UIOUT, const char
- *ID)
- This function marks the beginning of a tuple output. ID points to
- an optional string that identifies the tuple; it is copied by the
- implementation, and so strings in `malloc'ed storage can be freed
- after the call.
-
- - Function: void ui_out_tuple_end (struct ui_out *UIOUT)
- This function signals an end of a tuple output. There should be
- exactly one call to `ui_out_tuple_end' for each call to
- `ui_out_tuple_begin', otherwise an internal GDB error will be
- signaled.
-
- - Function: struct cleanup *make_cleanup_ui_out_tuple_begin_end
- (struct ui_out *UIOUT, const char *ID)
- This function first opens the tuple and then establishes a cleanup
- (*note Cleanups: Coding.) to close the tuple. It provides a
- convenient and correct implementation of the non-portable(1) code
- sequence:
- struct cleanup *old_cleanup;
- ui_out_tuple_begin (uiout, "...");
- old_cleanup = make_cleanup ((void(*)(void *)) ui_out_tuple_end,
- uiout);
-
- - Function: void ui_out_list_begin (struct ui_out *UIOUT, const char
- *ID)
- This function marks the beginning of a list output. ID points to
- an optional string that identifies the list; it is copied by the
- implementation, and so strings in `malloc'ed storage can be freed
- after the call.
-
- - Function: void ui_out_list_end (struct ui_out *UIOUT)
- This function signals an end of a list output. There should be
- exactly one call to `ui_out_list_end' for each call to
- `ui_out_list_begin', otherwise an internal GDB error will be
- signaled.
-
- - Function: struct cleanup *make_cleanup_ui_out_list_begin_end (struct
- ui_out *UIOUT, const char *ID)
- Similar to `make_cleanup_ui_out_tuple_begin_end', this function
- opens a list and then establishes cleanup (*note Cleanups: Coding.)
- that will close the list.list.
-
-Item Output Functions
----------------------
-
-The functions described below produce output for the actual data items,
-or fields, which contain information about the object.
-
- Choose the appropriate function accordingly to your particular needs.
-
- - Function: void ui_out_field_fmt (struct ui_out *UIOUT, char
- *FLDNAME, char *FORMAT, ...)
- This is the most general output function. It produces the
- representation of the data in the variable-length argument list
- according to formatting specifications in FORMAT, a `printf'-like
- format string. The optional argument FLDNAME supplies the name of
- the field. The data items themselves are supplied as additional
- arguments after FORMAT.
-
- This generic function should be used only when it is not possible
- to use one of the specialized versions (see below).
-
- - Function: void ui_out_field_int (struct ui_out *UIOUT, const char
- *FLDNAME, int VALUE)
- This function outputs a value of an `int' variable. It uses the
- `"%d"' output conversion specification. FLDNAME specifies the
- name of the field.
-
- - Function: void ui_out_field_fmt_int (struct ui_out *UIOUT, int
- WIDTH, enum ui_align ALIGNMENT, const char *FLDNAME, int
- VALUE)
- This function outputs a value of an `int' variable. It differs
- from `ui_out_field_int' in that the caller specifies the desired
- WIDTH and ALIGNMENT of the output. FLDNAME specifies the name of
- the field.
-
- - Function: void ui_out_field_core_addr (struct ui_out *UIOUT, const
- char *FLDNAME, CORE_ADDR ADDRESS)
- This function outputs an address.
-
- - Function: void ui_out_field_string (struct ui_out *UIOUT, const char
- *FLDNAME, const char *STRING)
- This function outputs a string using the `"%s"' conversion
- specification.
-
- Sometimes, there's a need to compose your output piece by piece using
-functions that operate on a stream, such as `value_print' or
-`fprintf_symbol_filtered'. These functions accept an argument of the
-type `struct ui_file *', a pointer to a `ui_file' object used to store
-the data stream used for the output. When you use one of these
-functions, you need a way to pass their results stored in a `ui_file'
-object to the `ui_out' functions. To this end, you first create a
-`ui_stream' object by calling `ui_out_stream_new', pass the `stream'
-member of that `ui_stream' object to `value_print' and similar
-functions, and finally call `ui_out_field_stream' to output the field
-you constructed. When the `ui_stream' object is no longer needed, you
-should destroy it and free its memory by calling `ui_out_stream_delete'.
-
- - Function: struct ui_stream *ui_out_stream_new (struct ui_out *UIOUT)
- This function creates a new `ui_stream' object which uses the same
- output methods as the `ui_out' object whose pointer is passed in
- UIOUT. It returns a pointer to the newly created `ui_stream'
- object.
-
- - Function: void ui_out_stream_delete (struct ui_stream *STREAMBUF)
- This functions destroys a `ui_stream' object specified by
- STREAMBUF.
-
- - Function: void ui_out_field_stream (struct ui_out *UIOUT, const char
- *FIELDNAME, struct ui_stream *STREAMBUF)
- This function consumes all the data accumulated in
- `streambuf->stream' and outputs it like `ui_out_field_string'
- does. After a call to `ui_out_field_stream', the accumulated data
- no longer exists, but the stream is still valid and may be used
- for producing more fields.
-
- *Important:* If there is any chance that your code could bail out
-before completing output generation and reaching the point where
-`ui_out_stream_delete' is called, it is necessary to set up a cleanup,
-to avoid leaking memory and other resources. Here's a skeleton code to
-do that:
-
- struct ui_stream *mybuf = ui_out_stream_new (uiout);
- struct cleanup *old = make_cleanup (ui_out_stream_delete, mybuf);
- ...
- do_cleanups (old);
-
- If the function already has the old cleanup chain set (for other
-kinds of cleanups), you just have to add your cleanup to it:
-
- mybuf = ui_out_stream_new (uiout);
- make_cleanup (ui_out_stream_delete, mybuf);
-
- Note that with cleanups in place, you should not call
-`ui_out_stream_delete' directly, or you would attempt to free the same
-buffer twice.
-
-Utility Output Functions
-------------------------
-
- - Function: void ui_out_field_skip (struct ui_out *UIOUT, const char
- *FLDNAME)
- This function skips a field in a table. Use it if you have to
- leave an empty field without disrupting the table alignment. The
- argument FLDNAME specifies a name for the (missing) filed.
-
- - Function: void ui_out_text (struct ui_out *UIOUT, const char *STRING)
- This function outputs the text in STRING in a way that makes it
- easy to be read by humans. For example, the console
- implementation of this method filters the text through a built-in
- pager, to prevent it from scrolling off the visible portion of the
- screen.
-
- Use this function for printing relatively long chunks of text
- around the actual field data: the text it produces is not aligned
- according to the table's format. Use `ui_out_field_string' to
- output a string field, and use `ui_out_message', described below,
- to output short messages.
-
- - Function: void ui_out_spaces (struct ui_out *UIOUT, int NSPACES)
- This function outputs NSPACES spaces. It is handy to align the
- text produced by `ui_out_text' with the rest of the table or list.
-
- - Function: void ui_out_message (struct ui_out *UIOUT, int VERBOSITY,
- const char *FORMAT, ...)
- This function produces a formatted message, provided that the
- current verbosity level is at least as large as given by
- VERBOSITY. The current verbosity level is specified by the user
- with the `set verbositylevel' command.(2)
-
- - Function: void ui_out_wrap_hint (struct ui_out *UIOUT, char *INDENT)
- This function gives the console output filter (a paging filter) a
- hint of where to break lines which are too long. Ignored for all
- other output consumers. INDENT, if non-`NULL', is the string to
- be printed to indent the wrapped text on the next line; it must
- remain accessible until the next call to `ui_out_wrap_hint', or
- until an explicit newline is produced by one of the other
- functions. If INDENT is `NULL', the wrapped text will not be
- indented.
-
- - Function: void ui_out_flush (struct ui_out *UIOUT)
- This function flushes whatever output has been accumulated so far,
- if the UI buffers output.
-
-Examples of Use of `ui_out' functions
--------------------------------------
-
-This section gives some practical examples of using the `ui_out'
-functions to generalize the old console-oriented code in GDB. The
-examples all come from functions defined on the `breakpoints.c' file.
-
- This example, from the `breakpoint_1' function, shows how to produce
-a table.
-
- The original code was:
-
- if (!found_a_breakpoint++)
- {
- annotate_breakpoints_headers ();
-
- annotate_field (0);
- printf_filtered ("Num ");
- annotate_field (1);
- printf_filtered ("Type ");
- annotate_field (2);
- printf_filtered ("Disp ");
- annotate_field (3);
- printf_filtered ("Enb ");
- if (addressprint)
- {
- annotate_field (4);
- printf_filtered ("Address ");
- }
- annotate_field (5);
- printf_filtered ("What\n");
-
- annotate_breakpoints_table ();
- }
-
- Here's the new version:
-
- nr_printable_breakpoints = ...;
-
- if (addressprint)
- ui_out_table_begin (ui, 6, nr_printable_breakpoints, "BreakpointTable");
- else
- ui_out_table_begin (ui, 5, nr_printable_breakpoints, "BreakpointTable");
-
- if (nr_printable_breakpoints > 0)
- annotate_breakpoints_headers ();
- if (nr_printable_breakpoints > 0)
- annotate_field (0);
- ui_out_table_header (uiout, 3, ui_left, "number", "Num"); /* 1 */
- if (nr_printable_breakpoints > 0)
- annotate_field (1);
- ui_out_table_header (uiout, 14, ui_left, "type", "Type"); /* 2 */
- if (nr_printable_breakpoints > 0)
- annotate_field (2);
- ui_out_table_header (uiout, 4, ui_left, "disp", "Disp"); /* 3 */
- if (nr_printable_breakpoints > 0)
- annotate_field (3);
- ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb"); /* 4 */
- if (addressprint)
- {
- if (nr_printable_breakpoints > 0)
- annotate_field (4);
- if (TARGET_ADDR_BIT <= 32)
- ui_out_table_header (uiout, 10, ui_left, "addr", "Address");/* 5 */
- else
- ui_out_table_header (uiout, 18, ui_left, "addr", "Address");/* 5 */
- }
- if (nr_printable_breakpoints > 0)
- annotate_field (5);
- ui_out_table_header (uiout, 40, ui_noalign, "what", "What"); /* 6 */
- ui_out_table_body (uiout);
- if (nr_printable_breakpoints > 0)
- annotate_breakpoints_table ();
-
- This example, from the `print_one_breakpoint' function, shows how to
-produce the actual data for the table whose structure was defined in
-the above example. The original code was:
-
- annotate_record ();
- annotate_field (0);
- printf_filtered ("%-3d ", b->number);
- annotate_field (1);
- if ((int)b->type > (sizeof(bptypes)/sizeof(bptypes[0]))
- || ((int) b->type != bptypes[(int) b->type].type))
- internal_error ("bptypes table does not describe type #%d.",
- (int)b->type);
- printf_filtered ("%-14s ", bptypes[(int)b->type].description);
- annotate_field (2);
- printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
- annotate_field (3);
- printf_filtered ("%-3c ", bpenables[(int)b->enable]);
- ...
-
- This is the new version:
-
- annotate_record ();
- ui_out_tuple_begin (uiout, "bkpt");
- annotate_field (0);
- ui_out_field_int (uiout, "number", b->number);
- annotate_field (1);
- if (((int) b->type > (sizeof (bptypes) / sizeof (bptypes[0])))
- || ((int) b->type != bptypes[(int) b->type].type))
- internal_error ("bptypes table does not describe type #%d.",
- (int) b->type);
- ui_out_field_string (uiout, "type", bptypes[(int)b->type].description);
- annotate_field (2);
- ui_out_field_string (uiout, "disp", bpdisps[(int)b->disposition]);
- annotate_field (3);
- ui_out_field_fmt (uiout, "enabled", "%c", bpenables[(int)b->enable]);
- ...
-
- This example, also from `print_one_breakpoint', shows how to produce
-a complicated output field using the `print_expression' functions which
-requires a stream to be passed. It also shows how to automate stream
-destruction with cleanups. The original code was:
-
- annotate_field (5);
- print_expression (b->exp, gdb_stdout);
-
- The new version is:
-
- struct ui_stream *stb = ui_out_stream_new (uiout);
- struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
- ...
- annotate_field (5);
- print_expression (b->exp, stb->stream);
- ui_out_field_stream (uiout, "what", local_stream);
-
- This example, also from `print_one_breakpoint', shows how to use
-`ui_out_text' and `ui_out_field_string'. The original code was:
-
- annotate_field (5);
- if (b->dll_pathname == NULL)
- printf_filtered ("<any library> ");
- else
- printf_filtered ("library \"%s\" ", b->dll_pathname);
-
- It became:
-
- annotate_field (5);
- if (b->dll_pathname == NULL)
- {
- ui_out_field_string (uiout, "what", "<any library>");
- ui_out_spaces (uiout, 1);
- }
- else
- {
- ui_out_text (uiout, "library \"");
- ui_out_field_string (uiout, "what", b->dll_pathname);
- ui_out_text (uiout, "\" ");
- }
-
- The following example from `print_one_breakpoint' shows how to use
-`ui_out_field_int' and `ui_out_spaces'. The original code was:
-
- annotate_field (5);
- if (b->forked_inferior_pid != 0)
- printf_filtered ("process %d ", b->forked_inferior_pid);
-
- It became:
-
- annotate_field (5);
- if (b->forked_inferior_pid != 0)
- {
- ui_out_text (uiout, "process ");
- ui_out_field_int (uiout, "what", b->forked_inferior_pid);
- ui_out_spaces (uiout, 1);
- }
-
- Here's an example of using `ui_out_field_string'. The original code
-was:
-
- annotate_field (5);
- if (b->exec_pathname != NULL)
- printf_filtered ("program \"%s\" ", b->exec_pathname);
-
- It became:
-
- annotate_field (5);
- if (b->exec_pathname != NULL)
- {
- ui_out_text (uiout, "program \"");
- ui_out_field_string (uiout, "what", b->exec_pathname);
- ui_out_text (uiout, "\" ");
- }
-
- Finally, here's an example of printing an address. The original
-code:
-
- annotate_field (4);
- printf_filtered ("%s ",
- local_hex_string_custom ((unsigned long) b->address, "08l"));
-
- It became:
-
- annotate_field (4);
- ui_out_field_core_addr (uiout, "Address", b->address);
-
-Console Printing
-================
-
-TUI
-===
-
----------- Footnotes ----------
-
- (1) The function cast is not portable ISO C.
-
- (2) As of this writing (April 2001), setting verbosity level is not
-yet implemented, and is always returned as zero. So calling
-`ui_out_message' with a VERBOSITY argument more than zero will cause
-the message to never be printed.
-
-
-File: gdbint.info, Node: libgdb, Next: Symbol Handling, Prev: User Interface, Up: Top
-
-libgdb
-******
-
-libgdb 1.0
-==========
-
-`libgdb' 1.0 was an abortive project of years ago. The theory was to
-provide an API to GDB's functionality.
-
-libgdb 2.0
-==========
-
-`libgdb' 2.0 is an ongoing effort to update GDB so that is better able
-to support graphical and other environments.
-
- Since `libgdb' development is on-going, its architecture is still
-evolving. The following components have so far been identified:
-
- * Observer - `gdb-events.h'.
-
- * Builder - `ui-out.h'
-
- * Event Loop - `event-loop.h'
-
- * Library - `gdb.h'
-
- The model that ties these components together is described below.
-
-The `libgdb' Model
-==================
-
-A client of `libgdb' interacts with the library in two ways.
-
- * As an observer (using `gdb-events') receiving notifications from
- `libgdb' of any internal state changes (break point changes, run
- state, etc).
-
- * As a client querying `libgdb' (using the `ui-out' builder) to
- obtain various status values from GDB.
-
- Since `libgdb' could have multiple clients (e.g. a GUI supporting
-the existing GDB CLI), those clients must co-operate when controlling
-`libgdb'. In particular, a client must ensure that `libgdb' is idle
-(i.e. no other client is using `libgdb') before responding to a
-`gdb-event' by making a query.
-
-CLI support
-===========
-
-At present GDB's CLI is very much entangled in with the core of
-`libgdb'. Consequently, a client wishing to include the CLI in their
-interface needs to carefully co-ordinate its own and the CLI's
-requirements.
-
- It is suggested that the client set `libgdb' up to be bi-modal
-(alternate between CLI and client query modes). The notes below sketch
-out the theory:
-
- * The client registers itself as an observer of `libgdb'.
-
- * The client create and install `cli-out' builder using its own
- versions of the `ui-file' `gdb_stderr', `gdb_stdtarg' and
- `gdb_stdout' streams.
-
- * The client creates a separate custom `ui-out' builder that is only
- used while making direct queries to `libgdb'.
-
- When the client receives input intended for the CLI, it simply
-passes it along. Since the `cli-out' builder is installed by default,
-all the CLI output in response to that command is routed (pronounced
-rooted) through to the client controlled `gdb_stdout' et. al. streams.
-At the same time, the client is kept abreast of internal changes by
-virtue of being a `libgdb' observer.
-
- The only restriction on the client is that it must wait until
-`libgdb' becomes idle before initiating any queries (using the client's
-custom builder).
-
-`libgdb' components
-===================
-
-Observer - `gdb-events.h'
--------------------------
-
-`gdb-events' provides the client with a very raw mechanism that can be
-used to implement an observer. At present it only allows for one
-observer and that observer must, internally, handle the need to delay
-the processing of any event notifications until after `libgdb' has
-finished the current command.
-
-Builder - `ui-out.h'
---------------------
-
-`ui-out' provides the infrastructure necessary for a client to create a
-builder. That builder is then passed down to `libgdb' when doing any
-queries.
-
-Event Loop - `event-loop.h'
----------------------------
-
-`event-loop', currently non-re-entrant, provides a simple event loop.
-A client would need to either plug its self into this loop or,
-implement a new event-loop that GDB would use.
-
- The event-loop will eventually be made re-entrant. This is so that
-GDB can better handle the problem of some commands blocking instead of
-returning.
-
-Library - `gdb.h'
------------------
-
-`libgdb' is the most obvious component of this system. It provides the
-query interface. Each function is parameterized by a `ui-out' builder.
-The result of the query is constructed using that builder before the
-query function returns.
-
-
-File: gdbint.info, Node: Symbol Handling, Next: Language Support, Prev: libgdb, Up: Top
-
-Symbol Handling
-***************
-
-Symbols are a key part of GDB's operation. Symbols include variables,
-functions, and types.
-
-Symbol Reading
-==============
-
-GDB reads symbols from "symbol files". The usual symbol file is the
-file containing the program which GDB is debugging. GDB can be
-directed to use a different file for symbols (with the `symbol-file'
-command), and it can also read more symbols via the `add-file' and
-`load' commands, or while reading symbols from shared libraries.
-
- Symbol files are initially opened by code in `symfile.c' using the
-BFD library (*note Support Libraries::). BFD identifies the type of
-the file by examining its header. `find_sym_fns' then uses this
-identification to locate a set of symbol-reading functions.
-
- Symbol-reading modules identify themselves to GDB by calling
-`add_symtab_fns' during their module initialization. The argument to
-`add_symtab_fns' is a `struct sym_fns' which contains the name (or name
-prefix) of the symbol format, the length of the prefix, and pointers to
-four functions. These functions are called at various times to process
-symbol files whose identification matches the specified prefix.
-
- The functions supplied by each module are:
-
-`XYZ_symfile_init(struct sym_fns *sf)'
- Called from `symbol_file_add' when we are about to read a new
- symbol file. This function should clean up any internal state
- (possibly resulting from half-read previous files, for example)
- and prepare to read a new symbol file. Note that the symbol file
- which we are reading might be a new "main" symbol file, or might
- be a secondary symbol file whose symbols are being added to the
- existing symbol table.
-
- The argument to `XYZ_symfile_init' is a newly allocated `struct
- sym_fns' whose `bfd' field contains the BFD for the new symbol
- file being read. Its `private' field has been zeroed, and can be
- modified as desired. Typically, a struct of private information
- will be `malloc''d, and a pointer to it will be placed in the
- `private' field.
-
- There is no result from `XYZ_symfile_init', but it can call
- `error' if it detects an unavoidable problem.
-
-`XYZ_new_init()'
- Called from `symbol_file_add' when discarding existing symbols.
- This function needs only handle the symbol-reading module's
- internal state; the symbol table data structures visible to the
- rest of GDB will be discarded by `symbol_file_add'. It has no
- arguments and no result. It may be called after
- `XYZ_symfile_init', if a new symbol table is being read, or may be
- called alone if all symbols are simply being discarded.
-
-`XYZ_symfile_read(struct sym_fns *sf, CORE_ADDR addr, int mainline)'
- Called from `symbol_file_add' to actually read the symbols from a
- symbol-file into a set of psymtabs or symtabs.
-
- `sf' points to the `struct sym_fns' originally passed to
- `XYZ_sym_init' for possible initialization. `addr' is the offset
- between the file's specified start address and its true address in
- memory. `mainline' is 1 if this is the main symbol table being
- read, and 0 if a secondary symbol file (e.g. shared library or
- dynamically loaded file) is being read.
-
- In addition, if a symbol-reading module creates psymtabs when
-XYZ_symfile_read is called, these psymtabs will contain a pointer to a
-function `XYZ_psymtab_to_symtab', which can be called from any point in
-the GDB symbol-handling code.
-
-`XYZ_psymtab_to_symtab (struct partial_symtab *pst)'
- Called from `psymtab_to_symtab' (or the `PSYMTAB_TO_SYMTAB' macro)
- if the psymtab has not already been read in and had its
- `pst->symtab' pointer set. The argument is the psymtab to be
- fleshed-out into a symtab. Upon return, `pst->readin' should have
- been set to 1, and `pst->symtab' should contain a pointer to the
- new corresponding symtab, or zero if there were no symbols in that
- part of the symbol file.
-
-Partial Symbol Tables
-=====================
-
-GDB has three types of symbol tables:
-
- * Full symbol tables ("symtabs"). These contain the main
- information about symbols and addresses.
-
- * Partial symbol tables ("psymtabs"). These contain enough
- information to know when to read the corresponding part of the full
- symbol table.
-
- * Minimal symbol tables ("msymtabs"). These contain information
- gleaned from non-debugging symbols.
-
- This section describes partial symbol tables.
-
- A psymtab is constructed by doing a very quick pass over an
-executable file's debugging information. Small amounts of information
-are extracted--enough to identify which parts of the symbol table will
-need to be re-read and fully digested later, when the user needs the
-information. The speed of this pass causes GDB to start up very
-quickly. Later, as the detailed rereading occurs, it occurs in small
-pieces, at various times, and the delay therefrom is mostly invisible to
-the user.
-
- The symbols that show up in a file's psymtab should be, roughly,
-those visible to the debugger's user when the program is not running
-code from that file. These include external symbols and types, static
-symbols and types, and `enum' values declared at file scope.
-
- The psymtab also contains the range of instruction addresses that the
-full symbol table would represent.
-
- The idea is that there are only two ways for the user (or much of the
-code in the debugger) to reference a symbol:
-
- * By its address (e.g. execution stops at some address which is
- inside a function in this file). The address will be noticed to
- be in the range of this psymtab, and the full symtab will be read
- in. `find_pc_function', `find_pc_line', and other `find_pc_...'
- functions handle this.
-
- * By its name (e.g. the user asks to print a variable, or set a
- breakpoint on a function). Global names and file-scope names will
- be found in the psymtab, which will cause the symtab to be pulled
- in. Local names will have to be qualified by a global name, or a
- file-scope name, in which case we will have already read in the
- symtab as we evaluated the qualifier. Or, a local symbol can be
- referenced when we are "in" a local scope, in which case the first
- case applies. `lookup_symbol' does most of the work here.
-
- The only reason that psymtabs exist is to cause a symtab to be read
-in at the right moment. Any symbol that can be elided from a psymtab,
-while still causing that to happen, should not appear in it. Since
-psymtabs don't have the idea of scope, you can't put local symbols in
-them anyway. Psymtabs don't have the idea of the type of a symbol,
-either, so types need not appear, unless they will be referenced by
-name.
-
- It is a bug for GDB to behave one way when only a psymtab has been
-read, and another way if the corresponding symtab has been read in.
-Such bugs are typically caused by a psymtab that does not contain all
-the visible symbols, or which has the wrong instruction address ranges.
-
- The psymtab for a particular section of a symbol file (objfile)
-could be thrown away after the symtab has been read in. The symtab
-should always be searched before the psymtab, so the psymtab will never
-be used (in a bug-free environment). Currently, psymtabs are allocated
-on an obstack, and all the psymbols themselves are allocated in a pair
-of large arrays on an obstack, so there is little to be gained by
-trying to free them unless you want to do a lot more work.
-
-Types
-=====
-
-Fundamental Types (e.g., `FT_VOID', `FT_BOOLEAN').
---------------------------------------------------
-
-These are the fundamental types that GDB uses internally. Fundamental
-types from the various debugging formats (stabs, ELF, etc) are mapped
-into one of these. They are basically a union of all fundamental types
-that GDB knows about for all the languages that GDB knows about.
-
-Type Codes (e.g., `TYPE_CODE_PTR', `TYPE_CODE_ARRAY').
-------------------------------------------------------
-
-Each time GDB builds an internal type, it marks it with one of these
-types. The type may be a fundamental type, such as `TYPE_CODE_INT', or
-a derived type, such as `TYPE_CODE_PTR' which is a pointer to another
-type. Typically, several `FT_*' types map to one `TYPE_CODE_*' type,
-and are distinguished by other members of the type struct, such as
-whether the type is signed or unsigned, and how many bits it uses.
-
-Builtin Types (e.g., `builtin_type_void', `builtin_type_char').
----------------------------------------------------------------
-
-These are instances of type structs that roughly correspond to
-fundamental types and are created as global types for GDB to use for
-various ugly historical reasons. We eventually want to eliminate
-these. Note for example that `builtin_type_int' initialized in
-`gdbtypes.c' is basically the same as a `TYPE_CODE_INT' type that is
-initialized in `c-lang.c' for an `FT_INTEGER' fundamental type. The
-difference is that the `builtin_type' is not associated with any
-particular objfile, and only one instance exists, while `c-lang.c'
-builds as many `TYPE_CODE_INT' types as needed, with each one
-associated with some particular objfile.
-
-Object File Formats
-===================
-
-a.out
------
-
-The `a.out' format is the original file format for Unix. It consists
-of three sections: `text', `data', and `bss', which are for program
-code, initialized data, and uninitialized data, respectively.
-
- The `a.out' format is so simple that it doesn't have any reserved
-place for debugging information. (Hey, the original Unix hackers used
-`adb', which is a machine-language debugger!) The only debugging
-format for `a.out' is stabs, which is encoded as a set of normal
-symbols with distinctive attributes.
-
- The basic `a.out' reader is in `dbxread.c'.
-
-COFF
-----
-
-The COFF format was introduced with System V Release 3 (SVR3) Unix.
-COFF files may have multiple sections, each prefixed by a header. The
-number of sections is limited.
-
- The COFF specification includes support for debugging. Although this
-was a step forward, the debugging information was woefully limited. For
-instance, it was not possible to represent code that came from an
-included file.
-
- The COFF reader is in `coffread.c'.
-
-ECOFF
------
-
-ECOFF is an extended COFF originally introduced for Mips and Alpha
-workstations.
-
- The basic ECOFF reader is in `mipsread.c'.
-
-XCOFF
------
-
-The IBM RS/6000 running AIX uses an object file format called XCOFF.
-The COFF sections, symbols, and line numbers are used, but debugging
-symbols are `dbx'-style stabs whose strings are located in the `.debug'
-section (rather than the string table). For more information, see
-*Note Top: (stabs)Top.
-
- The shared library scheme has a clean interface for figuring out what
-shared libraries are in use, but the catch is that everything which
-refers to addresses (symbol tables and breakpoints at least) needs to be
-relocated for both shared libraries and the main executable. At least
-using the standard mechanism this can only be done once the program has
-been run (or the core file has been read).
-
-PE
---
-
-Windows 95 and NT use the PE ("Portable Executable") format for their
-executables. PE is basically COFF with additional headers.
-
- While BFD includes special PE support, GDB needs only the basic COFF
-reader.
-
-ELF
----
-
-The ELF format came with System V Release 4 (SVR4) Unix. ELF is similar
-to COFF in being organized into a number of sections, but it removes
-many of COFF's limitations.
-
- The basic ELF reader is in `elfread.c'.
-
-SOM
----
-
-SOM is HP's object file and debug format (not to be confused with IBM's
-SOM, which is a cross-language ABI).
-
- The SOM reader is in `hpread.c'.
-
-Other File Formats
-------------------
-
-Other file formats that have been supported by GDB include Netware
-Loadable Modules (`nlmread.c').
-
-Debugging File Formats
-======================
-
-This section describes characteristics of debugging information that
-are independent of the object file format.
-
-stabs
------
-
-`stabs' started out as special symbols within the `a.out' format.
-Since then, it has been encapsulated into other file formats, such as
-COFF and ELF.
-
- While `dbxread.c' does some of the basic stab processing, including
-for encapsulated versions, `stabsread.c' does the real work.
-
-COFF
-----
-
-The basic COFF definition includes debugging information. The level of
-support is minimal and non-extensible, and is not often used.
-
-Mips debug (Third Eye)
-----------------------
-
-ECOFF includes a definition of a special debug format.
-
- The file `mdebugread.c' implements reading for this format.
-
-DWARF 1
--------
-
-DWARF 1 is a debugging format that was originally designed to be used
-with ELF in SVR4 systems.
-
- The DWARF 1 reader is in `dwarfread.c'.
-
-DWARF 2
--------
-
-DWARF 2 is an improved but incompatible version of DWARF 1.
-
- The DWARF 2 reader is in `dwarf2read.c'.
-
-SOM
----
-
-Like COFF, the SOM definition includes debugging information.
-
-Adding a New Symbol Reader to GDB
-=================================
-
-If you are using an existing object file format (`a.out', COFF, ELF,
-etc), there is probably little to be done.
-
- If you need to add a new object file format, you must first add it to
-BFD. This is beyond the scope of this document.
-
- You must then arrange for the BFD code to provide access to the
-debugging symbols. Generally GDB will have to call swapping routines
-from BFD and a few other BFD internal routines to locate the debugging
-information. As much as possible, GDB should not depend on the BFD
-internal data structures.
-
- For some targets (e.g., COFF), there is a special transfer vector
-used to call swapping routines, since the external data structures on
-various platforms have different sizes and layouts. Specialized
-routines that will only ever be implemented by one object file format
-may be called directly. This interface should be described in a file
-`bfd/libXYZ.h', which is included by GDB.
-
-
-File: gdbint.info, Node: Language Support, Next: Host Definition, Prev: Symbol Handling, Up: Top
-
-Language Support
-****************
-
-GDB's language support is mainly driven by the symbol reader, although
-it is possible for the user to set the source language manually.
-
- GDB chooses the source language by looking at the extension of the
-file recorded in the debug info; `.c' means C, `.f' means Fortran, etc.
-It may also use a special-purpose language identifier if the debug
-format supports it, like with DWARF.
-
-Adding a Source Language to GDB
-===============================
-
-To add other languages to GDB's expression parser, follow the following
-steps:
-
-_Create the expression parser._
- This should reside in a file `LANG-exp.y'. Routines for building
- parsed expressions into a `union exp_element' list are in
- `parse.c'.
-
- Since we can't depend upon everyone having Bison, and YACC produces
- parsers that define a bunch of global names, the following lines
- *must* be included at the top of the YACC parser, to prevent the
- various parsers from defining the same global names:
-
- #define yyparse LANG_parse
- #define yylex LANG_lex
- #define yyerror LANG_error
- #define yylval LANG_lval
- #define yychar LANG_char
- #define yydebug LANG_debug
- #define yypact LANG_pact
- #define yyr1 LANG_r1
- #define yyr2 LANG_r2
- #define yydef LANG_def
- #define yychk LANG_chk
- #define yypgo LANG_pgo
- #define yyact LANG_act
- #define yyexca LANG_exca
- #define yyerrflag LANG_errflag
- #define yynerrs LANG_nerrs
-
- At the bottom of your parser, define a `struct language_defn' and
- initialize it with the right values for your language. Define an
- `initialize_LANG' routine and have it call
- `add_language(LANG_language_defn)' to tell the rest of GDB that
- your language exists. You'll need some other supporting variables
- and functions, which will be used via pointers from your
- `LANG_language_defn'. See the declaration of `struct
- language_defn' in `language.h', and the other `*-exp.y' files, for
- more information.
-
-_Add any evaluation routines, if necessary_
- If you need new opcodes (that represent the operations of the
- language), add them to the enumerated type in `expression.h'. Add
- support code for these operations in the `evaluate_subexp' function
- defined in the file `eval.c'. Add cases for new opcodes in two
- functions from `parse.c': `prefixify_subexp' and
- `length_of_subexp'. These compute the number of `exp_element's
- that a given operation takes up.
-
-_Update some existing code_
- Add an enumerated identifier for your language to the enumerated
- type `enum language' in `defs.h'.
-
- Update the routines in `language.c' so your language is included.
- These routines include type predicates and such, which (in some
- cases) are language dependent. If your language does not appear
- in the switch statement, an error is reported.
-
- Also included in `language.c' is the code that updates the variable
- `current_language', and the routines that translate the
- `language_LANG' enumerated identifier into a printable string.
-
- Update the function `_initialize_language' to include your
- language. This function picks the default language upon startup,
- so is dependent upon which languages that GDB is built for.
-
- Update `allocate_symtab' in `symfile.c' and/or symbol-reading code
- so that the language of each symtab (source file) is set properly.
- This is used to determine the language to use at each stack frame
- level. Currently, the language is set based upon the extension of
- the source file. If the language can be better inferred from the
- symbol information, please set the language of the symtab in the
- symbol-reading code.
-
- Add helper code to `print_subexp' (in `expprint.c') to handle any
- new expression opcodes you have added to `expression.h'. Also,
- add the printed representations of your operators to
- `op_print_tab'.
-
-_Add a place of call_
- Add a call to `LANG_parse()' and `LANG_error' in `parse_exp_1'
- (defined in `parse.c').
-
-_Use macros to trim code_
- The user has the option of building GDB for some or all of the
- languages. If the user decides to build GDB for the language
- LANG, then every file dependent on `language.h' will have the
- macro `_LANG_LANG' defined in it. Use `#ifdef's to leave out
- large routines that the user won't need if he or she is not using
- your language.
-
- Note that you do not need to do this in your YACC parser, since if
- GDB is not build for LANG, then `LANG-exp.tab.o' (the compiled
- form of your parser) is not linked into GDB at all.
-
- See the file `configure.in' for how GDB is configured for
- different languages.
-
-_Edit `Makefile.in'_
- Add dependencies in `Makefile.in'. Make sure you update the macro
- variables such as `HFILES' and `OBJS', otherwise your code may not
- get linked in, or, worse yet, it may not get `tar'red into the
- distribution!
-
-
-File: gdbint.info, Node: Host Definition, Next: Target Architecture Definition, Prev: Language Support, Up: Top
-
-Host Definition
-***************
-
-With the advent of Autoconf, it's rarely necessary to have host
-definition machinery anymore. The following information is provided,
-mainly, as an historical reference.
-
-Adding a New Host
-=================
-
-GDB's host configuration support normally happens via Autoconf. New
-host-specific definitions should not be needed. Older hosts GDB still
-use the host-specific definitions and files listed below, but these
-mostly exist for historical reasons, and will eventually disappear.
-
-`gdb/config/ARCH/XYZ.mh'
- This file once contained both host and native configuration
- information (*note Native Debugging::) for the machine XYZ. The
- host configuration information is now handed by Autoconf.
-
- Host configuration information included a definition of
- `XM_FILE=xm-XYZ.h' and possibly definitions for `CC',
- `SYSV_DEFINE', `XM_CFLAGS', `XM_ADD_FILES', `XM_CLIBS',
- `XM_CDEPS', etc.; see `Makefile.in'.
-
- New host only configurations do not need this file.
-
-`gdb/config/ARCH/xm-XYZ.h'
- This file once contained definitions and includes required when
- hosting gdb on machine XYZ. Those definitions and includes are now
- handled by Autoconf.
-
- New host and native configurations do not need this file.
-
- _Maintainer's note: Some hosts continue to use the `xm-xyz.h' file
- to define the macros HOST_FLOAT_FORMAT, HOST_DOUBLE_FORMAT and
- HOST_LONG_DOUBLE_FORMAT. That code also needs to be replaced with
- either an Autoconf or run-time test._
-
-
-Generic Host Support Files
---------------------------
-
-There are some "generic" versions of routines that can be used by
-various systems. These can be customized in various ways by macros
-defined in your `xm-XYZ.h' file. If these routines work for the XYZ
-host, you can just include the generic file's name (with `.o', not
-`.c') in `XDEPFILES'.
-
- Otherwise, if your machine needs custom support routines, you will
-need to write routines that perform the same functions as the generic
-file. Put them into `XYZ-xdep.c', and put `XYZ-xdep.o' into
-`XDEPFILES'.
-
-`ser-unix.c'
- This contains serial line support for Unix systems. This is always
- included, via the makefile variable `SER_HARDWIRE'; override this
- variable in the `.mh' file to avoid it.
-
-`ser-go32.c'
- This contains serial line support for 32-bit programs running
- under DOS, using the DJGPP (a.k.a. GO32) execution environment.
-
-`ser-tcp.c'
- This contains generic TCP support using sockets.
-
-Host Conditionals
-=================
-
-When GDB is configured and compiled, various macros are defined or left
-undefined, to control compilation based on the attributes of the host
-system. These macros and their meanings (or if the meaning is not
-documented here, then one of the source files where they are used is
-indicated) are:
-
-`GDBINIT_FILENAME'
- The default name of GDB's initialization file (normally
- `.gdbinit').
-
-`NO_STD_REGS'
- This macro is deprecated.
-
-`NO_SYS_FILE'
- Define this if your system does not have a `<sys/file.h>'.
-
-`SIGWINCH_HANDLER'
- If your host defines `SIGWINCH', you can define this to be the name
- of a function to be called if `SIGWINCH' is received.
-
-`SIGWINCH_HANDLER_BODY'
- Define this to expand into code that will define the function
- named by the expansion of `SIGWINCH_HANDLER'.
-
-`ALIGN_STACK_ON_STARTUP'
- Define this if your system is of a sort that will crash in
- `tgetent' if the stack happens not to be longword-aligned when
- `main' is called. This is a rare situation, but is known to occur
- on several different types of systems.
-
-`CRLF_SOURCE_FILES'
- Define this if host files use `\r\n' rather than `\n' as a line
- terminator. This will cause source file listings to omit `\r'
- characters when printing and it will allow `\r\n' line endings of
- files which are "sourced" by gdb. It must be possible to open
- files in binary mode using `O_BINARY' or, for fopen, `"rb"'.
-
-`DEFAULT_PROMPT'
- The default value of the prompt string (normally `"(gdb) "').
-
-`DEV_TTY'
- The name of the generic TTY device, defaults to `"/dev/tty"'.
-
-`FCLOSE_PROVIDED'
- Define this if the system declares `fclose' in the headers included
- in `defs.h'. This isn't needed unless your compiler is unusually
- anal.
-
-`FOPEN_RB'
- Define this if binary files are opened the same way as text files.
-
-`GETENV_PROVIDED'
- Define this if the system declares `getenv' in its headers included
- in `defs.h'. This isn't needed unless your compiler is unusually
- anal.
-
-`HAVE_MMAP'
- In some cases, use the system call `mmap' for reading symbol
- tables. For some machines this allows for sharing and quick
- updates.
-
-`HAVE_TERMIO'
- Define this if the host system has `termio.h'.
-
-`INT_MAX'
-`INT_MIN'
-`LONG_MAX'
-`UINT_MAX'
-`ULONG_MAX'
- Values for host-side constants.
-
-`ISATTY'
- Substitute for isatty, if not available.
-
-`LONGEST'
- This is the longest integer type available on the host. If not
- defined, it will default to `long long' or `long', depending on
- `CC_HAS_LONG_LONG'.
-
-`CC_HAS_LONG_LONG'
- Define this if the host C compiler supports `long long'. This is
- set by the `configure' script.
-
-`PRINTF_HAS_LONG_LONG'
- Define this if the host can handle printing of long long integers
- via the printf format conversion specifier `ll'. This is set by
- the `configure' script.
-
-`HAVE_LONG_DOUBLE'
- Define this if the host C compiler supports `long double'. This is
- set by the `configure' script.
-
-`PRINTF_HAS_LONG_DOUBLE'
- Define this if the host can handle printing of long double
- float-point numbers via the printf format conversion specifier
- `Lg'. This is set by the `configure' script.
-
-`SCANF_HAS_LONG_DOUBLE'
- Define this if the host can handle the parsing of long double
- float-point numbers via the scanf format conversion specifier
- `Lg'. This is set by the `configure' script.
-
-`LSEEK_NOT_LINEAR'
- Define this if `lseek (n)' does not necessarily move to byte number
- `n' in the file. This is only used when reading source files. It
- is normally faster to define `CRLF_SOURCE_FILES' when possible.
-
-`L_SET'
- This macro is used as the argument to `lseek' (or, most commonly,
- `bfd_seek'). FIXME, should be replaced by SEEK_SET instead, which
- is the POSIX equivalent.
-
-`NORETURN'
- If defined, this should be one or more tokens, such as `volatile',
- that can be used in both the declaration and definition of
- functions to indicate that they never return. The default is
- already set correctly if compiling with GCC. This will almost
- never need to be defined.
-
-`ATTR_NORETURN'
- If defined, this should be one or more tokens, such as
- `__attribute__ ((noreturn))', that can be used in the declarations
- of functions to indicate that they never return. The default is
- already set correctly if compiling with GCC. This will almost
- never need to be defined.
-
-`NO_SIGINTERRUPT'
- Define this to indicate that `siginterrupt' is not available.
-
-`SEEK_CUR'
-`SEEK_SET'
- Define these to appropriate value for the system `lseek', if not
- already defined.
-
-`STOP_SIGNAL'
- This is the signal for stopping GDB. Defaults to `SIGTSTP'.
- (Only redefined for the Convex.)
-
-`USE_O_NOCTTY'
- Define this if the interior's tty should be opened with the
- `O_NOCTTY' flag. (FIXME: This should be a native-only flag, but
- `inflow.c' is always linked in.)
-
-`USG'
- Means that System V (prior to SVR4) include files are in use.
- (FIXME: This symbol is abused in `infrun.c', `regex.c', and
- `utils.c' for other things, at the moment.)
-
-`lint'
- Define this to help placate `lint' in some situations.
-
-`volatile'
- Define this to override the defaults of `__volatile__' or `/**/'.
-
-
-File: gdbint.info, Node: Target Architecture Definition, Next: Target Vector Definition, Prev: Host Definition, Up: Top
-
-Target Architecture Definition
-******************************
-
-GDB's target architecture defines what sort of machine-language
-programs GDB can work with, and how it works with them.
-
- The target architecture object is implemented as the C structure
-`struct gdbarch *'. The structure, and its methods, are generated
-using the Bourne shell script `gdbarch.sh'.
-
-Operating System ABI Variant Handling
-=====================================
-
-GDB provides a mechanism for handling variations in OS ABIs. An OS ABI
-variant may have influence over any number of variables in the target
-architecture definition. There are two major components in the OS ABI
-mechanism: sniffers and handlers.
-
- A "sniffer" examines a file matching a BFD architecture/flavour pair
-(the architecture may be wildcarded) in an attempt to determine the OS
-ABI of that file. Sniffers with a wildcarded architecture are
-considered to be "generic", while sniffers for a specific architecture
-are considered to be "specific". A match from a specific sniffer
-overrides a match from a generic sniffer. Multiple sniffers for an
-architecture/flavour may exist, in order to differentiate between two
-different operating systems which use the same basic file format. The
-OS ABI framework provides a generic sniffer for ELF-format files which
-examines the `EI_OSABI' field of the ELF header, as well as note
-sections known to be used by several operating systems.
-
- A "handler" is used to fine-tune the `gdbarch' structure for the
-selected OS ABI. There may be only one handler for a given OS ABI for
-each BFD architecture.
-
- The following OS ABI variants are defined in `osabi.h':
-
-`GDB_OSABI_UNKNOWN'
- The ABI of the inferior is unknown. The default `gdbarch'
- settings for the architecture will be used.
-
-`GDB_OSABI_SVR4'
- UNIX System V Release 4
-
-`GDB_OSABI_HURD'
- GNU using the Hurd kernel
-
-`GDB_OSABI_SOLARIS'
- Sun Solaris
-
-`GDB_OSABI_OSF1'
- OSF/1, including Digital UNIX and Compaq Tru64 UNIX
-
-`GDB_OSABI_LINUX'
- GNU using the Linux kernel
-
-`GDB_OSABI_FREEBSD_AOUT'
- FreeBSD using the a.out executable format
-
-`GDB_OSABI_FREEBSD_ELF'
- FreeBSD using the ELF executable format
-
-`GDB_OSABI_NETBSD_AOUT'
- NetBSD using the a.out executable format
-
-`GDB_OSABI_NETBSD_ELF'
- NetBSD using the ELF executable format
-
-`GDB_OSABI_WINCE'
- Windows CE
-
-`GDB_OSABI_GO32'
- DJGPP
-
-`GDB_OSABI_NETWARE'
- Novell NetWare
-
-`GDB_OSABI_ARM_EABI_V1'
- ARM Embedded ABI version 1
-
-`GDB_OSABI_ARM_EABI_V2'
- ARM Embedded ABI version 2
-
-`GDB_OSABI_ARM_APCS'
- Generic ARM Procedure Call Standard
-
-
- Here are the functions that make up the OS ABI framework:
-
- - Function: const char *gdbarch_osabi_name (enum gdb_osabi OSABI)
- Return the name of the OS ABI corresponding to OSABI.
-
- - Function: void gdbarch_register_osabi (enum bfd_architecture ARCH,
- unsigned long MACHINE, enum gdb_osabi OSABI, void
- (*INIT_OSABI)(struct gdbarch_info INFO, struct gdbarch
- *GDBARCH))
- Register the OS ABI handler specified by INIT_OSABI for the
- architecture, machine type and OS ABI specified by ARCH, MACHINE
- and OSABI. In most cases, a value of zero for the machine type,
- which implies the architecture's default machine type, will
- suffice.
-
- - Function: void gdbarch_register_osabi_sniffer (enum bfd_architecture
- ARCH, enum bfd_flavour FLAVOUR, enum gdb_osabi (*SNIFFER)(bfd
- *ABFD))
- Register the OS ABI file sniffer specified by SNIFFER for the BFD
- architecture/flavour pair specified by ARCH and FLAVOUR. If ARCH
- is `bfd_arch_unknown', the sniffer is considered to be generic,
- and is allowed to examine FLAVOUR-flavoured files for any
- architecture.
-
- - Function: enum gdb_osabi gdbarch_lookup_osabi (bfd *ABFD)
- Examine the file described by ABFD to determine its OS ABI. The
- value `GDB_OSABI_UNKNOWN' is returned if the OS ABI cannot be
- determined.
-
- - Function: void gdbarch_init_osabi (struct gdbarch info INFO, struct
- gdbarch *GDBARCH, enum gdb_osabi OSABI)
- Invoke the OS ABI handler corresponding to OSABI to fine-tune the
- `gdbarch' structure specified by GDBARCH. If a handler
- corresponding to OSABI has not been registered for GDBARCH's
- architecture, a warning will be issued and the debugging session
- will continue with the defaults already established for GDBARCH.
-
-Registers and Memory
-====================
-
-GDB's model of the target machine is rather simple. GDB assumes the
-machine includes a bank of registers and a block of memory. Each
-register may have a different size.
-
- GDB does not have a magical way to match up with the compiler's idea
-of which registers are which; however, it is critical that they do
-match up accurately. The only way to make this work is to get accurate
-information about the order that the compiler uses, and to reflect that
-in the `REGISTER_NAME' and related macros.
-
- GDB can handle big-endian, little-endian, and bi-endian
-architectures.
-
-Pointers Are Not Always Addresses
-=================================
-
-On almost all 32-bit architectures, the representation of a pointer is
-indistinguishable from the representation of some fixed-length number
-whose value is the byte address of the object pointed to. On such
-machines, the words "pointer" and "address" can be used interchangeably.
-However, architectures with smaller word sizes are often cramped for
-address space, so they may choose a pointer representation that breaks
-this identity, and allows a larger code address space.
-
- For example, the Renesas D10V is a 16-bit VLIW processor whose
-instructions are 32 bits long(1). If the D10V used ordinary byte
-addresses to refer to code locations, then the processor would only be
-able to address 64kb of instructions. However, since instructions must
-be aligned on four-byte boundaries, the low two bits of any valid
-instruction's byte address are always zero--byte addresses waste two
-bits. So instead of byte addresses, the D10V uses word addresses--byte
-addresses shifted right two bits--to refer to code. Thus, the D10V can
-use 16-bit words to address 256kb of code space.
-
- However, this means that code pointers and data pointers have
-different forms on the D10V. The 16-bit word `0xC020' refers to byte
-address `0xC020' when used as a data address, but refers to byte address
-`0x30080' when used as a code address.
-
- (The D10V also uses separate code and data address spaces, which also
-affects the correspondence between pointers and addresses, but we're
-going to ignore that here; this example is already too long.)
-
- To cope with architectures like this--the D10V is not the only
-one!--GDB tries to distinguish between "addresses", which are byte
-numbers, and "pointers", which are the target's representation of an
-address of a particular type of data. In the example above, `0xC020'
-is the pointer, which refers to one of the addresses `0xC020' or
-`0x30080', depending on the type imposed upon it. GDB provides
-functions for turning a pointer into an address and vice versa, in the
-appropriate way for the current architecture.
-
- Unfortunately, since addresses and pointers are identical on almost
-all processors, this distinction tends to bit-rot pretty quickly. Thus,
-each time you port GDB to an architecture which does distinguish
-between pointers and addresses, you'll probably need to clean up some
-architecture-independent code.
-
- Here are functions which convert between pointers and addresses:
-
- - Function: CORE_ADDR extract_typed_address (void *BUF, struct type
- *TYPE)
- Treat the bytes at BUF as a pointer or reference of type TYPE, and
- return the address it represents, in a manner appropriate for the
- current architecture. This yields an address GDB can use to read
- target memory, disassemble, etc. Note that BUF refers to a buffer
- in GDB's memory, not the inferior's.
-
- For example, if the current architecture is the Intel x86, this
- function extracts a little-endian integer of the appropriate
- length from BUF and returns it. However, if the current
- architecture is the D10V, this function will return a 16-bit
- integer extracted from BUF, multiplied by four if TYPE is a
- pointer to a function.
-
- If TYPE is not a pointer or reference type, then this function
- will signal an internal error.
-
- - Function: CORE_ADDR store_typed_address (void *BUF, struct type
- *TYPE, CORE_ADDR ADDR)
- Store the address ADDR in BUF, in the proper format for a pointer
- of type TYPE in the current architecture. Note that BUF refers to
- a buffer in GDB's memory, not the inferior's.
-
- For example, if the current architecture is the Intel x86, this
- function stores ADDR unmodified as a little-endian integer of the
- appropriate length in BUF. However, if the current architecture
- is the D10V, this function divides ADDR by four if TYPE is a
- pointer to a function, and then stores it in BUF.
-
- If TYPE is not a pointer or reference type, then this function
- will signal an internal error.
-
- - Function: CORE_ADDR value_as_address (struct value *VAL)
- Assuming that VAL is a pointer, return the address it represents,
- as appropriate for the current architecture.
-
- This function actually works on integral values, as well as
- pointers. For pointers, it performs architecture-specific
- conversions as described above for `extract_typed_address'.
-
- - Function: CORE_ADDR value_from_pointer (struct type *TYPE, CORE_ADDR
- ADDR)
- Create and return a value representing a pointer of type TYPE to
- the address ADDR, as appropriate for the current architecture.
- This function performs architecture-specific conversions as
- described above for `store_typed_address'.
-
- Here are some macros which architectures can define to indicate the
-relationship between pointers and addresses. These have default
-definitions, appropriate for architectures on which all pointers are
-simple unsigned byte addresses.
-
- - Target Macro: CORE_ADDR POINTER_TO_ADDRESS (struct type *TYPE, char
- *BUF)
- Assume that BUF holds a pointer of type TYPE, in the appropriate
- format for the current architecture. Return the byte address the
- pointer refers to.
-
- This function may safely assume that TYPE is either a pointer or a
- C++ reference type.
-
- - Target Macro: void ADDRESS_TO_POINTER (struct type *TYPE, char *BUF,
- CORE_ADDR ADDR)
- Store in BUF a pointer of type TYPE representing the address ADDR,
- in the appropriate format for the current architecture.
-
- This function may safely assume that TYPE is either a pointer or a
- C++ reference type.
-
-Address Classes
-===============
-
-Sometimes information about different kinds of addresses is available
-via the debug information. For example, some programming environments
-define addresses of several different sizes. If the debug information
-distinguishes these kinds of address classes through either the size
-info (e.g, `DW_AT_byte_size' in DWARF 2) or through an explicit address
-class attribute (e.g, `DW_AT_address_class' in DWARF 2), the following
-macros should be defined in order to disambiguate these types within
-GDB as well as provide the added information to a GDB user when
-printing type expressions.
-
- - Target Macro: int ADDRESS_CLASS_TYPE_FLAGS (int BYTE_SIZE, int
- DWARF2_ADDR_CLASS)
- Returns the type flags needed to construct a pointer type whose
- size is BYTE_SIZE and whose address class is DWARF2_ADDR_CLASS.
- This function is normally called from within a symbol reader. See
- `dwarf2read.c'.
-
- - Target Macro: char *ADDRESS_CLASS_TYPE_FLAGS_TO_NAME (int TYPE_FLAGS)
- Given the type flags representing an address class qualifier,
- return its name.
-
- - Target Macro: int ADDRESS_CLASS_NAME_to_TYPE_FLAGS (int NAME, int
- *vartype_flags_ptr)
- Given an address qualifier name, set the `int' refererenced by
- TYPE_FLAGS_PTR to the type flags for that address class qualifier.
-
- Since the need for address classes is rather rare, none of the
-address class macros defined by default. Predicate macros are provided
-to detect when they are defined.
-
- Consider a hypothetical architecture in which addresses are normally
-32-bits wide, but 16-bit addresses are also supported. Furthermore,
-suppose that the DWARF 2 information for this architecture simply uses
-a `DW_AT_byte_size' value of 2 to indicate the use of one of these
-"short" pointers. The following functions could be defined to
-implement the address class macros:
-
- somearch_address_class_type_flags (int byte_size,
- int dwarf2_addr_class)
- {
- if (byte_size == 2)
- return TYPE_FLAG_ADDRESS_CLASS_1;
- else
- return 0;
- }
-
- static char *
- somearch_address_class_type_flags_to_name (int type_flags)
- {
- if (type_flags & TYPE_FLAG_ADDRESS_CLASS_1)
- return "short";
- else
- return NULL;
- }
-
- int
- somearch_address_class_name_to_type_flags (char *name,
- int *type_flags_ptr)
- {
- if (strcmp (name, "short") == 0)
- {
- *type_flags_ptr = TYPE_FLAG_ADDRESS_CLASS_1;
- return 1;
- }
- else
- return 0;
- }
-
- The qualifier `@short' is used in GDB's type expressions to indicate
-the presence of one of these "short" pointers. E.g, if the debug
-information indicates that `short_ptr_var' is one of these short
-pointers, GDB might show the following behavior:
-
- (gdb) ptype short_ptr_var
- type = int * @short
-
-Raw and Virtual Register Representations
-========================================
-
-_Maintainer note: This section is pretty much obsolete. The
-functionality described here has largely been replaced by
-pseudo-registers and the mechanisms described in *Note Using Different
-Register and Memory Data Representations: Target Architecture
-Definition. See also Bug Tracking Database
-(http://www.gnu.org/software/gdb/bugs/) and ARI Index
-(http://sources.redhat.com/gdb/current/ari/) for more up-to-date
-information._
-
- Some architectures use one representation for a value when it lives
-in a register, but use a different representation when it lives in
-memory. In GDB's terminology, the "raw" representation is the one used
-in the target registers, and the "virtual" representation is the one
-used in memory, and within GDB `struct value' objects.
-
- _Maintainer note: Notice that the same mechanism is being used to
-both convert a register to a `struct value' and alternative register
-forms._
-
- For almost all data types on almost all architectures, the virtual
-and raw representations are identical, and no special handling is
-needed. However, they do occasionally differ. For example:
-
- * The x86 architecture supports an 80-bit `long double' type.
- However, when we store those values in memory, they occupy twelve
- bytes: the floating-point number occupies the first ten, and the
- final two bytes are unused. This keeps the values aligned on
- four-byte boundaries, allowing more efficient access. Thus, the
- x86 80-bit floating-point type is the raw representation, and the
- twelve-byte loosely-packed arrangement is the virtual
- representation.
-
- * Some 64-bit MIPS targets present 32-bit registers to GDB as 64-bit
- registers, with garbage in their upper bits. GDB ignores the top
- 32 bits. Thus, the 64-bit form, with garbage in the upper 32
- bits, is the raw representation, and the trimmed 32-bit
- representation is the virtual representation.
-
- In general, the raw representation is determined by the
-architecture, or GDB's interface to the architecture, while the virtual
-representation can be chosen for GDB's convenience. GDB's register
-file, `registers', holds the register contents in raw format, and the
-GDB remote protocol transmits register values in raw format.
-
- Your architecture may define the following macros to request
-conversions between the raw and virtual format:
-
- - Target Macro: int REGISTER_CONVERTIBLE (int REG)
- Return non-zero if register number REG's value needs different raw
- and virtual formats.
-
- You should not use `REGISTER_CONVERT_TO_VIRTUAL' for a register
- unless this macro returns a non-zero value for that register.
-
- - Target Macro: int DEPRECATED_REGISTER_RAW_SIZE (int REG)
- The size of register number REG's raw value. This is the number
- of bytes the register will occupy in `registers', or in a GDB
- remote protocol packet.
-
- - Target Macro: int DEPRECATED_REGISTER_VIRTUAL_SIZE (int REG)
- The size of register number REG's value, in its virtual format.
- This is the size a `struct value''s buffer will have, holding that
- register's value.
-
- - Target Macro: struct type *DEPRECATED_REGISTER_VIRTUAL_TYPE (int REG)
- This is the type of the virtual representation of register number
- REG. Note that there is no need for a macro giving a type for the
- register's raw form; once the register's value has been obtained,
- GDB always uses the virtual form.
-
- - Target Macro: void REGISTER_CONVERT_TO_VIRTUAL (int REG, struct type
- *TYPE, char *FROM, char *TO)
- Convert the value of register number REG to TYPE, which should
- always be `DEPRECATED_REGISTER_VIRTUAL_TYPE (REG)'. The buffer at
- FROM holds the register's value in raw format; the macro should
- convert the value to virtual format, and place it at TO.
-
- Note that `REGISTER_CONVERT_TO_VIRTUAL' and
- `REGISTER_CONVERT_TO_RAW' take their REG and TYPE arguments in
- different orders.
-
- You should only use `REGISTER_CONVERT_TO_VIRTUAL' with registers
- for which the `REGISTER_CONVERTIBLE' macro returns a non-zero
- value.
-
- - Target Macro: void REGISTER_CONVERT_TO_RAW (struct type *TYPE, int
- REG, char *FROM, char *TO)
- Convert the value of register number REG to TYPE, which should
- always be `DEPRECATED_REGISTER_VIRTUAL_TYPE (REG)'. The buffer at
- FROM holds the register's value in raw format; the macro should
- convert the value to virtual format, and place it at TO.
-
- Note that REGISTER_CONVERT_TO_VIRTUAL and REGISTER_CONVERT_TO_RAW
- take their REG and TYPE arguments in different orders.
-
-Using Different Register and Memory Data Representations
-========================================================
-
-_Maintainer's note: The way GDB manipulates registers is undergoing
-significant change. Many of the macros and functions refered to in this
-section are likely to be subject to further revision. See A.R. Index
-(http://sources.redhat.com/gdb/current/ari/) and Bug Tracking Database
-(http://www.gnu.org/software/gdb/bugs) for further information.
-cagney/2002-05-06._
-
- Some architectures can represent a data object in a register using a
-form that is different to the objects more normal memory representation.
-For example:
-
- * The Alpha architecture can represent 32 bit integer values in
- floating-point registers.
-
- * The x86 architecture supports 80-bit floating-point registers. The
- `long double' data type occupies 96 bits in memory but only 80 bits
- when stored in a register.
-
-
- In general, the register representation of a data type is determined
-by the architecture, or GDB's interface to the architecture, while the
-memory representation is determined by the Application Binary Interface.
-
- For almost all data types on almost all architectures, the two
-representations are identical, and no special handling is needed.
-However, they do occasionally differ. Your architecture may define the
-following macros to request conversions between the register and memory
-representations of a data type:
-
- - Target Macro: int CONVERT_REGISTER_P (int REG)
- Return non-zero if the representation of a data value stored in
- this register may be different to the representation of that same
- data value when stored in memory.
-
- When non-zero, the macros `REGISTER_TO_VALUE' and
- `VALUE_TO_REGISTER' are used to perform any necessary conversion.
-
- - Target Macro: void REGISTER_TO_VALUE (int REG, struct type *TYPE,
- char *FROM, char *TO)
- Convert the value of register number REG to a data object of type
- TYPE. The buffer at FROM holds the register's value in raw
- format; the converted value should be placed in the buffer at TO.
-
- Note that `REGISTER_TO_VALUE' and `VALUE_TO_REGISTER' take their
- REG and TYPE arguments in different orders.
-
- You should only use `REGISTER_TO_VALUE' with registers for which
- the `CONVERT_REGISTER_P' macro returns a non-zero value.
-
- - Target Macro: void VALUE_TO_REGISTER (struct type *TYPE, int REG,
- char *FROM, char *TO)
- Convert a data value of type TYPE to register number REG' raw
- format.
-
- Note that `REGISTER_TO_VALUE' and `VALUE_TO_REGISTER' take their
- REG and TYPE arguments in different orders.
-
- You should only use `VALUE_TO_REGISTER' with registers for which
- the `CONVERT_REGISTER_P' macro returns a non-zero value.
-
- - Target Macro: void REGISTER_CONVERT_TO_TYPE (int REGNUM, struct type
- *TYPE, char *BUF)
- See `mips-tdep.c'. It does not do what you want.
-
-Frame Interpretation
-====================
-
-Inferior Call Setup
-===================
-
-Compiler Characteristics
-========================
-
-Target Conditionals
-===================
-
-This section describes the macros that you can use to define the target
-machine.
-
-`ADDR_BITS_REMOVE (addr)'
- If a raw machine instruction address includes any bits that are not
- really part of the address, then define this macro to expand into
- an expression that zeroes those bits in ADDR. This is only used
- for addresses of instructions, and even then not in all contexts.
-
- For example, the two low-order bits of the PC on the
- Hewlett-Packard PA 2.0 architecture contain the privilege level of
- the corresponding instruction. Since instructions must always be
- aligned on four-byte boundaries, the processor masks out these
- bits to generate the actual address of the instruction.
- ADDR_BITS_REMOVE should filter out these bits with an expression
- such as `((addr) & ~3)'.
-
-`ADDRESS_CLASS_NAME_TO_TYPE_FLAGS (NAME, TYPE_FLAGS_PTR)'
- If NAME is a valid address class qualifier name, set the `int'
- referenced by TYPE_FLAGS_PTR to the mask representing the qualifier
- and return 1. If NAME is not a valid address class qualifier name,
- return 0.
-
- The value for TYPE_FLAGS_PTR should be one of
- `TYPE_FLAG_ADDRESS_CLASS_1', `TYPE_FLAG_ADDRESS_CLASS_2', or
- possibly some combination of these values or'd together. *Note
- Address Classes: Target Architecture Definition.
-
-`ADDRESS_CLASS_NAME_TO_TYPE_FLAGS_P ()'
- Predicate which indicates whether
- `ADDRESS_CLASS_NAME_TO_TYPE_FLAGS' has been defined.
-
-`ADDRESS_CLASS_TYPE_FLAGS (BYTE_SIZE, DWARF2_ADDR_CLASS)'
- Given a pointers byte size (as described by the debug information)
- and the possible `DW_AT_address_class' value, return the type flags
- used by GDB to represent this address class. The value returned
- should be one of `TYPE_FLAG_ADDRESS_CLASS_1',
- `TYPE_FLAG_ADDRESS_CLASS_2', or possibly some combination of these
- values or'd together. *Note Address Classes: Target Architecture
- Definition.
-
-`ADDRESS_CLASS_TYPE_FLAGS_P ()'
- Predicate which indicates whether `ADDRESS_CLASS_TYPE_FLAGS' has
- been defined.
-
-`ADDRESS_CLASS_TYPE_FLAGS_TO_NAME (TYPE_FLAGS)'
- Return the name of the address class qualifier associated with the
- type flags given by TYPE_FLAGS.
-
-`ADDRESS_CLASS_TYPE_FLAGS_TO_NAME_P ()'
- Predicate which indicates whether
- `ADDRESS_CLASS_TYPE_FLAGS_TO_NAME' has been defined. *Note
- Address Classes: Target Architecture Definition.
-
-`ADDRESS_TO_POINTER (TYPE, BUF, ADDR)'
- Store in BUF a pointer of type TYPE representing the address ADDR,
- in the appropriate format for the current architecture. This
- macro may safely assume that TYPE is either a pointer or a C++
- reference type. *Note Pointers Are Not Always Addresses: Target
- Architecture Definition.
-
-`BELIEVE_PCC_PROMOTION'
- Define if the compiler promotes a `short' or `char' parameter to
- an `int', but still reports the parameter as its original type,
- rather than the promoted type.
-
-`BELIEVE_PCC_PROMOTION_TYPE'
- Define this if GDB should believe the type of a `short' argument
- when compiled by `pcc', but look within a full int space to get
- its value. Only defined for Sun-3 at present.
-
-`BITS_BIG_ENDIAN'
- Define this if the numbering of bits in the targets does *not*
- match the endianness of the target byte order. A value of 1 means
- that the bits are numbered in a big-endian bit order, 0 means
- little-endian.
-
-`BREAKPOINT'
- This is the character array initializer for the bit pattern to put
- into memory where a breakpoint is set. Although it's common to
- use a trap instruction for a breakpoint, it's not required; for
- instance, the bit pattern could be an invalid instruction. The
- breakpoint must be no longer than the shortest instruction of the
- architecture.
-
- `BREAKPOINT' has been deprecated in favor of `BREAKPOINT_FROM_PC'.
-
-`BIG_BREAKPOINT'
-`LITTLE_BREAKPOINT'
- Similar to BREAKPOINT, but used for bi-endian targets.
-
- `BIG_BREAKPOINT' and `LITTLE_BREAKPOINT' have been deprecated in
- favor of `BREAKPOINT_FROM_PC'.
-
-`DEPRECATED_REMOTE_BREAKPOINT'
-`DEPRECATED_LITTLE_REMOTE_BREAKPOINT'
-`DEPRECATED_BIG_REMOTE_BREAKPOINT'
- Specify the breakpoint instruction sequence for a remote target.
- `DEPRECATED_REMOTE_BREAKPOINT', `DEPRECATED_BIG_REMOTE_BREAKPOINT'
- and `DEPRECATED_LITTLE_REMOTE_BREAKPOINT' have been deprecated in
- favor of `BREAKPOINT_FROM_PC' (*note BREAKPOINT_FROM_PC::).
-
-`BREAKPOINT_FROM_PC (PCPTR, LENPTR)'
- Use the program counter to determine the contents and size of a
- breakpoint instruction. It returns a pointer to a string of bytes
- that encode a breakpoint instruction, stores the length of the
- string to `*LENPTR', and adjusts the program counter (if
- necessary) to point to the actual memory location where the
- breakpoint should be inserted.
-
- Although it is common to use a trap instruction for a breakpoint,
- it's not required; for instance, the bit pattern could be an
- invalid instruction. The breakpoint must be no longer than the
- shortest instruction of the architecture.
-
- Replaces all the other BREAKPOINT macros.
-
-`MEMORY_INSERT_BREAKPOINT (ADDR, CONTENTS_CACHE)'
-`MEMORY_REMOVE_BREAKPOINT (ADDR, CONTENTS_CACHE)'
- Insert or remove memory based breakpoints. Reasonable defaults
- (`default_memory_insert_breakpoint' and
- `default_memory_remove_breakpoint' respectively) have been
- provided so that it is not necessary to define these for most
- architectures. Architectures which may want to define
- `MEMORY_INSERT_BREAKPOINT' and `MEMORY_REMOVE_BREAKPOINT' will
- likely have instructions that are oddly sized or are not stored in
- a conventional manner.
-
- It may also be desirable (from an efficiency standpoint) to define
- custom breakpoint insertion and removal routines if
- `BREAKPOINT_FROM_PC' needs to read the target's memory for some
- reason.
-
-`ADJUST_BREAKPOINT_ADDRESS (ADDRESS)'
- Given an address at which a breakpoint is desired, return a
- breakpoint address adjusted to account for architectural
- constraints on breakpoint placement. This method is not needed by
- most targets.
-
- The FR-V target (see `frv-tdep.c') requires this method. The FR-V
- is a VLIW architecture in which a number of RISC-like instructions
- are grouped (packed) together into an aggregate instruction or
- instruction bundle. When the processor executes one of these
- bundles, the component instructions are executed in parallel.
-
- In the course of optimization, the compiler may group instructions
- from distinct source statements into the same bundle. The line
- number information associated with one of the latter statements
- will likely refer to some instruction other than the first one in
- the bundle. So, if the user attempts to place a breakpoint on one
- of these latter statements, GDB must be careful to _not_ place the
- break instruction on any instruction other than the first one in
- the bundle. (Remember though that the instructions within a
- bundle execute in parallel, so the _first_ instruction is the
- instruction at the lowest address and has nothing to do with
- execution order.)
-
- The FR-V's `ADJUST_BREAKPOINT_ADDRESS' method will adjust a
- breakpoint's address by scanning backwards for the beginning of
- the bundle, returning the address of the bundle.
-
- Since the adjustment of a breakpoint may significantly alter a
- user's expectation, GDB prints a warning when an adjusted
- breakpoint is initially set and each time that that breakpoint is
- hit.
-
-`DEPRECATED_CALL_DUMMY_WORDS'
- Pointer to an array of `LONGEST' words of data containing
- host-byte-ordered `DEPRECATED_REGISTER_SIZE' sized values that
- partially specify the sequence of instructions needed for an
- inferior function call.
-
- Should be deprecated in favor of a macro that uses
- target-byte-ordered data.
-
- This method has been replaced by `push_dummy_code' (*note
- push_dummy_code::).
-
-`DEPRECATED_SIZEOF_CALL_DUMMY_WORDS'
- The size of `DEPRECATED_CALL_DUMMY_WORDS'. This must return a
- positive value. See also `DEPRECATED_CALL_DUMMY_LENGTH'.
-
- This method has been replaced by `push_dummy_code' (*note
- push_dummy_code::).
-
-`CALL_DUMMY'
- A static initializer for `DEPRECATED_CALL_DUMMY_WORDS'.
- Deprecated.
-
- This method has been replaced by `push_dummy_code' (*note
- push_dummy_code::).
-
-`CALL_DUMMY_LOCATION'
- See the file `inferior.h'.
-
- This method has been replaced by `push_dummy_code' (*note
- push_dummy_code::).
-
-`CANNOT_FETCH_REGISTER (REGNO)'
- A C expression that should be nonzero if REGNO cannot be fetched
- from an inferior process. This is only relevant if
- `FETCH_INFERIOR_REGISTERS' is not defined.
-
-`CANNOT_STORE_REGISTER (REGNO)'
- A C expression that should be nonzero if REGNO should not be
- written to the target. This is often the case for program
- counters, status words, and other special registers. If this is
- not defined, GDB will assume that all registers may be written.
-
-`DO_DEFERRED_STORES'
-`CLEAR_DEFERRED_STORES'
- Define this to execute any deferred stores of registers into the
- inferior, and to cancel any deferred stores.
-
- Currently only implemented correctly for native Sparc
- configurations?
-
-`int CONVERT_REGISTER_P(REGNUM)'
- Return non-zero if register REGNUM can represent data values in a
- non-standard form. *Note Using Different Register and Memory Data
- Representations: Target Architecture Definition.
-
-`DECR_PC_AFTER_BREAK'
- Define this to be the amount by which to decrement the PC after the
- program encounters a breakpoint. This is often the number of
- bytes in `BREAKPOINT', though not always. For most targets this
- value will be 0.
-
-`DISABLE_UNSETTABLE_BREAK (ADDR)'
- If defined, this should evaluate to 1 if ADDR is in a shared
- library in which breakpoints cannot be set and so should be
- disabled.
-
-`PRINT_FLOAT_INFO()'
- If defined, then the `info float' command will print information
- about the processor's floating point unit.
-
-`print_registers_info (GDBARCH, FRAME, REGNUM, ALL)'
- If defined, pretty print the value of the register REGNUM for the
- specified FRAME. If the value of REGNUM is -1, pretty print
- either all registers (ALL is non zero) or a select subset of
- registers (ALL is zero).
-
- The default method prints one register per line, and if ALL is
- zero omits floating-point registers.
-
-`PRINT_VECTOR_INFO()'
- If defined, then the `info vector' command will call this function
- to print information about the processor's vector unit.
-
- By default, the `info vector' command will print all vector
- registers (the register's type having the vector attribute).
-
-`DWARF_REG_TO_REGNUM'
- Convert DWARF register number into GDB regnum. If not defined, no
- conversion will be performed.
-
-`DWARF2_REG_TO_REGNUM'
- Convert DWARF2 register number into GDB regnum. If not defined,
- no conversion will be performed.
-
-`ECOFF_REG_TO_REGNUM'
- Convert ECOFF register number into GDB regnum. If not defined, no
- conversion will be performed.
-
-`END_OF_TEXT_DEFAULT'
- This is an expression that should designate the end of the text
- section.
-
-`EXTRACT_RETURN_VALUE(TYPE, REGBUF, VALBUF)'
- Define this to extract a function's return value of type TYPE from
- the raw register state REGBUF and copy that, in virtual format,
- into VALBUF.
-
- This method has been deprecated in favour of `gdbarch_return_value'
- (*note gdbarch_return_value::).
-
-`DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF)'
- When defined, extract from the array REGBUF (containing the raw
- register state) the `CORE_ADDR' at which a function should return
- its structure value.
-
- *Note gdbarch_return_value::.
-
-`DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P()'
- Predicate for `DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS'.
-
-`DEPRECATED_FP_REGNUM'
- If the virtual frame pointer is kept in a register, then define
- this macro to be the number (greater than or equal to zero) of
- that register.
-
- This should only need to be defined if `DEPRECATED_TARGET_READ_FP'
- is not defined.
-
-`DEPRECATED_FRAMELESS_FUNCTION_INVOCATION(FI)'
- Define this to an expression that returns 1 if the function
- invocation represented by FI does not have a stack frame
- associated with it. Otherwise return 0.
-
-`frame_align (ADDRESS)'
- Define this to adjust ADDRESS so that it meets the alignment
- requirements for the start of a new stack frame. A stack frame's
- alignment requirements are typically stronger than a target
- processors stack alignment requirements (*note
- DEPRECATED_STACK_ALIGN::).
-
- This function is used to ensure that, when creating a dummy frame,
- both the initial stack pointer and (if needed) the address of the
- return value are correctly aligned.
-
- Unlike `DEPRECATED_STACK_ALIGN', this function always adjusts the
- address in the direction of stack growth.
-
- By default, no frame based stack alignment is performed.
-
-`int frame_red_zone_size'
- The number of bytes, beyond the innermost-stack-address, reserved
- by the ABI. A function is permitted to use this scratch area
- (instead of allocating extra stack space).
-
- When performing an inferior function call, to ensure that it does
- not modify this area, GDB adjusts the innermost-stack-address by
- FRAME_RED_ZONE_SIZE bytes before pushing parameters onto the stack.
-
- By default, zero bytes are allocated. The value must be aligned
- (*note frame_align::).
-
- The AMD64 (nee x86-64) ABI documentation refers to the _red zone_
- when describing this scratch area.
-
-`DEPRECATED_FRAME_CHAIN(FRAME)'
- Given FRAME, return a pointer to the calling frame.
-
-`DEPRECATED_FRAME_CHAIN_VALID(CHAIN, THISFRAME)'
- Define this to be an expression that returns zero if the given
- frame is an outermost frame, with no caller, and nonzero
- otherwise. Most normal situations can be handled without defining
- this macro, including `NULL' chain pointers, dummy frames, and
- frames whose PC values are inside the startup file (e.g.
- `crt0.o'), inside `main', or inside `_start'.
-
-`DEPRECATED_FRAME_INIT_SAVED_REGS(FRAME)'
- See `frame.h'. Determines the address of all registers in the
- current stack frame storing each in `frame->saved_regs'. Space for
- `frame->saved_regs' shall be allocated by
- `DEPRECATED_FRAME_INIT_SAVED_REGS' using `frame_saved_regs_zalloc'.
-
- `FRAME_FIND_SAVED_REGS' is deprecated.
-
-`FRAME_NUM_ARGS (FI)'
- For the frame described by FI return the number of arguments that
- are being passed. If the number of arguments is not known, return
- `-1'.
-
-`DEPRECATED_FRAME_SAVED_PC(FRAME)'
- Given FRAME, return the pc saved there. This is the return
- address.
-
- This method is deprecated. *Note unwind_pc::.
-
-`CORE_ADDR unwind_pc (struct frame_info *THIS_FRAME)'
- Return the instruction address, in THIS_FRAME's caller, at which
- execution will resume after THIS_FRAME returns. This is commonly
- refered to as the return address.
-
- The implementation, which must be frame agnostic (work with any
- frame), is typically no more than:
-
- ULONGEST pc;
- frame_unwind_unsigned_register (this_frame, D10V_PC_REGNUM, &pc);
- return d10v_make_iaddr (pc);
-
- *Note DEPRECATED_FRAME_SAVED_PC::, which this method replaces.
-
-`CORE_ADDR unwind_sp (struct frame_info *THIS_FRAME)'
- Return the frame's inner most stack address. This is commonly
- refered to as the frame's "stack pointer".
-
- The implementation, which must be frame agnostic (work with any
- frame), is typically no more than:
-
- ULONGEST sp;
- frame_unwind_unsigned_register (this_frame, D10V_SP_REGNUM, &sp);
- return d10v_make_daddr (sp);
-
- *Note TARGET_READ_SP::, which this method replaces.
-
-`FUNCTION_EPILOGUE_SIZE'
- For some COFF targets, the `x_sym.x_misc.x_fsize' field of the
- function end symbol is 0. For such targets, you must define
- `FUNCTION_EPILOGUE_SIZE' to expand into the standard size of a
- function's epilogue.
-
-`FUNCTION_START_OFFSET'
- An integer, giving the offset in bytes from a function's address
- (as used in the values of symbols, function pointers, etc.), and
- the function's first genuine instruction.
-
- This is zero on almost all machines: the function's address is
- usually the address of its first instruction. However, on the
- VAX, for example, each function starts with two bytes containing a
- bitmask indicating which registers to save upon entry to the
- function. The VAX `call' instructions check this value, and save
- the appropriate registers automatically. Thus, since the offset
- from the function's address to its first instruction is two bytes,
- `FUNCTION_START_OFFSET' would be 2 on the VAX.
-
-`GCC_COMPILED_FLAG_SYMBOL'
-`GCC2_COMPILED_FLAG_SYMBOL'
- If defined, these are the names of the symbols that GDB will look
- for to detect that GCC compiled the file. The default symbols are
- `gcc_compiled.' and `gcc2_compiled.', respectively. (Currently
- only defined for the Delta 68.)
-
-`GDB_MULTI_ARCH'
- If defined and non-zero, enables support for multiple architectures
- within GDB.
-
- This support can be enabled at two levels. At level one, only
- definitions for previously undefined macros are provided; at level
- two, a multi-arch definition of all architecture dependent macros
- will be defined.
-
-`GDB_TARGET_IS_HPPA'
- This determines whether horrible kludge code in `dbxread.c' and
- `partial-stab.h' is used to mangle multiple-symbol-table files from
- HPPA's. This should all be ripped out, and a scheme like
- `elfread.c' used instead.
-
-`GET_LONGJMP_TARGET'
- For most machines, this is a target-dependent parameter. On the
- DECstation and the Iris, this is a native-dependent parameter,
- since the header file `setjmp.h' is needed to define it.
-
- This macro determines the target PC address that `longjmp' will
- jump to, assuming that we have just stopped at a `longjmp'
- breakpoint. It takes a `CORE_ADDR *' as argument, and stores the
- target PC value through this pointer. It examines the current
- state of the machine as needed.
-
-`DEPRECATED_GET_SAVED_REGISTER'
- Define this if you need to supply your own definition for the
- function `DEPRECATED_GET_SAVED_REGISTER'.
-
-`DEPRECATED_IBM6000_TARGET'
- Shows that we are configured for an IBM RS/6000 system. This
- conditional should be eliminated (FIXME) and replaced by
- feature-specific macros. It was introduced in a haste and we are
- repenting at leisure.
-
-`I386_USE_GENERIC_WATCHPOINTS'
- An x86-based target can define this to use the generic x86
- watchpoint support; see *Note I386_USE_GENERIC_WATCHPOINTS:
- Algorithms.
-
-`SYMBOLS_CAN_START_WITH_DOLLAR'
- Some systems have routines whose names start with `$'. Giving this
- macro a non-zero value tells GDB's expression parser to check for
- such routines when parsing tokens that begin with `$'.
-
- On HP-UX, certain system routines (millicode) have names beginning
- with `$' or `$$'. For example, `$$dyncall' is a millicode routine
- that handles inter-space procedure calls on PA-RISC.
-
-`DEPRECATED_INIT_EXTRA_FRAME_INFO (FROMLEAF, FRAME)'
- If additional information about the frame is required this should
- be stored in `frame->extra_info'. Space for `frame->extra_info'
- is allocated using `frame_extra_info_zalloc'.
-
-`DEPRECATED_INIT_FRAME_PC (FROMLEAF, PREV)'
- This is a C statement that sets the pc of the frame pointed to by
- PREV. [By default...]
-
-`INNER_THAN (LHS, RHS)'
- Returns non-zero if stack address LHS is inner than (nearer to the
- stack top) stack address RHS. Define this as `lhs < rhs' if the
- target's stack grows downward in memory, or `lhs > rsh' if the
- stack grows upward.
-
-`gdbarch_in_function_epilogue_p (GDBARCH, PC)'
- Returns non-zero if the given PC is in the epilogue of a function.
- The epilogue of a function is defined as the part of a function
- where the stack frame of the function already has been destroyed
- up to the final `return from function call' instruction.
-
-`SIGTRAMP_START (PC)'
-`SIGTRAMP_END (PC)'
- Define these to be the start and end address of the `sigtramp' for
- the given PC. On machines where the address is just a compile time
- constant, the macro expansion will typically just ignore the
- supplied PC.
-
-`IN_SOLIB_CALL_TRAMPOLINE (PC, NAME)'
- Define this to evaluate to nonzero if the program is stopped in the
- trampoline that connects to a shared library.
-
-`IN_SOLIB_RETURN_TRAMPOLINE (PC, NAME)'
- Define this to evaluate to nonzero if the program is stopped in the
- trampoline that returns from a shared library.
-
-`IN_SOLIB_DYNSYM_RESOLVE_CODE (PC)'
- Define this to evaluate to nonzero if the program is stopped in the
- dynamic linker.
-
-`SKIP_SOLIB_RESOLVER (PC)'
- Define this to evaluate to the (nonzero) address at which execution
- should continue to get past the dynamic linker's symbol resolution
- function. A zero value indicates that it is not important or
- necessary to set a breakpoint to get through the dynamic linker
- and that single stepping will suffice.
-
-`INTEGER_TO_ADDRESS (TYPE, BUF)'
- Define this when the architecture needs to handle non-pointer to
- address conversions specially. Converts that value to an address
- according to the current architectures conventions.
-
- _Pragmatics: When the user copies a well defined expression from
- their source code and passes it, as a parameter, to GDB's `print'
- command, they should get the same value as would have been
- computed by the target program. Any deviation from this rule can
- cause major confusion and annoyance, and needs to be justified
- carefully. In other words, GDB doesn't really have the freedom to
- do these conversions in clever and useful ways. It has, however,
- been pointed out that users aren't complaining about how GDB casts
- integers to pointers; they are complaining that they can't take an
- address from a disassembly listing and give it to `x/i'. Adding
- an architecture method like `INTEGER_TO_ADDRESS' certainly makes
- it possible for GDB to "get it right" in all circumstances._
-
- *Note Pointers Are Not Always Addresses: Target Architecture
- Definition.
-
-`NO_HIF_SUPPORT'
- (Specific to the a29k.)
-
-`POINTER_TO_ADDRESS (TYPE, BUF)'
- Assume that BUF holds a pointer of type TYPE, in the appropriate
- format for the current architecture. Return the byte address the
- pointer refers to. *Note Pointers Are Not Always Addresses:
- Target Architecture Definition.
-
-`REGISTER_CONVERTIBLE (REG)'
- Return non-zero if REG uses different raw and virtual formats.
- *Note Raw and Virtual Register Representations: Target
- Architecture Definition.
-
-`REGISTER_TO_VALUE(REGNUM, TYPE, FROM, TO)'
- Convert the raw contents of register REGNUM into a value of type
- TYPE. *Note Using Different Register and Memory Data
- Representations: Target Architecture Definition.
-
-`DEPRECATED_REGISTER_RAW_SIZE (REG)'
- Return the raw size of REG; defaults to the size of the register's
- virtual type. *Note Raw and Virtual Register Representations:
- Target Architecture Definition.
-
-`register_reggroup_p (GDBARCH, REGNUM, REGGROUP)'
- Return non-zero if register REGNUM is a member of the register
- group REGGROUP.
-
- By default, registers are grouped as follows:
-
- `float_reggroup'
- Any register with a valid name and a floating-point type.
-
- `vector_reggroup'
- Any register with a valid name and a vector type.
-
- `general_reggroup'
- Any register with a valid name and a type other than vector or
- floating-point. `float_reggroup'.
-
- `save_reggroup'
- `restore_reggroup'
- `all_reggroup'
- Any register with a valid name.
-
-`DEPRECATED_REGISTER_VIRTUAL_SIZE (REG)'
- Return the virtual size of REG; defaults to the size of the
- register's virtual type. Return the virtual size of REG. *Note
- Raw and Virtual Register Representations: Target Architecture
- Definition.
-
-`DEPRECATED_REGISTER_VIRTUAL_TYPE (REG)'
- Return the virtual type of REG. *Note Raw and Virtual Register
- Representations: Target Architecture Definition.
-
-`struct type *register_type (GDBARCH, REG)'
- If defined, return the type of register REG. This function
- superseeds `DEPRECATED_REGISTER_VIRTUAL_TYPE'. *Note Raw and
- Virtual Register Representations: Target Architecture Definition.
-
-`REGISTER_CONVERT_TO_VIRTUAL(REG, TYPE, FROM, TO)'
- Convert the value of register REG from its raw form to its virtual
- form. *Note Raw and Virtual Register Representations: Target
- Architecture Definition.
-
-`REGISTER_CONVERT_TO_RAW(TYPE, REG, FROM, TO)'
- Convert the value of register REG from its virtual form to its raw
- form. *Note Raw and Virtual Register Representations: Target
- Architecture Definition.
-
-`const struct regset *regset_from_core_section (struct gdbarch * GDBARCH, const char * SECT_NAME, size_t SECT_SIZE)'
- Return the appropriate register set for a core file section with
- name SECT_NAME and size SECT_SIZE.
-
-`RETURN_VALUE_ON_STACK(TYPE)'
- Return non-zero if values of type TYPE are returned on the stack,
- using the "struct convention" (i.e., the caller provides a pointer
- to a buffer in which the callee should store the return value).
- This controls how the `finish' command finds a function's return
- value, and whether an inferior function call reserves space on the
- stack for the return value.
-
- The full logic GDB uses here is kind of odd.
-
- * If the type being returned by value is not a structure,
- union, or array, and `RETURN_VALUE_ON_STACK' returns zero,
- then GDB concludes the value is not returned using the struct
- convention.
-
- * Otherwise, GDB calls `USE_STRUCT_CONVENTION' (see below). If
- that returns non-zero, GDB assumes the struct convention is
- in use.
-
- In other words, to indicate that a given type is returned by value
- using the struct convention, that type must be either a struct,
- union, array, or something `RETURN_VALUE_ON_STACK' likes, _and_
- something that `USE_STRUCT_CONVENTION' likes.
-
- Note that, in C and C++, arrays are never returned by value. In
- those languages, these predicates will always see a pointer type,
- never an array type. All the references above to arrays being
- returned by value apply only to other languages.
-
-`SOFTWARE_SINGLE_STEP_P()'
- Define this as 1 if the target does not have a hardware single-step
- mechanism. The macro `SOFTWARE_SINGLE_STEP' must also be defined.
-
-`SOFTWARE_SINGLE_STEP(SIGNAL, INSERT_BREAPOINTS_P)'
- A function that inserts or removes (depending on
- INSERT_BREAPOINTS_P) breakpoints at each possible destinations of
- the next instruction. See `sparc-tdep.c' and `rs6000-tdep.c' for
- examples.
-
-`SOFUN_ADDRESS_MAYBE_MISSING'
- Somebody clever observed that, the more actual addresses you have
- in the debug information, the more time the linker has to spend
- relocating them. So whenever there's some other way the debugger
- could find the address it needs, you should omit it from the debug
- info, to make linking faster.
-
- `SOFUN_ADDRESS_MAYBE_MISSING' indicates that a particular set of
- hacks of this sort are in use, affecting `N_SO' and `N_FUN'
- entries in stabs-format debugging information. `N_SO' stabs mark
- the beginning and ending addresses of compilation units in the text
- segment. `N_FUN' stabs mark the starts and ends of functions.
-
- `SOFUN_ADDRESS_MAYBE_MISSING' means two things:
-
- * `N_FUN' stabs have an address of zero. Instead, you should
- find the addresses where the function starts by taking the
- function name from the stab, and then looking that up in the
- minsyms (the linker/assembler symbol table). In other words,
- the stab has the name, and the linker/assembler symbol table
- is the only place that carries the address.
-
- * `N_SO' stabs have an address of zero, too. You just look at
- the `N_FUN' stabs that appear before and after the `N_SO'
- stab, and guess the starting and ending addresses of the
- compilation unit from them.
-
-`PCC_SOL_BROKEN'
- (Used only in the Convex target.)
-
-`PC_IN_SIGTRAMP (PC, NAME)'
- The "sigtramp" is a routine that the kernel calls (which then calls
- the signal handler). On most machines it is a library routine
- that is linked into the executable.
-
- This function, given a program counter value in PC and the
- (possibly NULL) name of the function in which that PC resides,
- returns nonzero if the PC and/or NAME show that we are in sigtramp.
-
-`PC_LOAD_SEGMENT'
- If defined, print information about the load segment for the
- program counter. (Defined only for the RS/6000.)
-
-`PC_REGNUM'
- If the program counter is kept in a register, then define this
- macro to be the number (greater than or equal to zero) of that
- register.
-
- This should only need to be defined if `TARGET_READ_PC' and
- `TARGET_WRITE_PC' are not defined.
-
-`PARM_BOUNDARY'
- If non-zero, round arguments to a boundary of this many bits before
- pushing them on the stack.
-
-`stabs_argument_has_addr (GDBARCH, TYPE)'
- Define this to return nonzero if a function argument of type TYPE
- is passed by reference instead of value.
-
- This method replaces `DEPRECATED_REG_STRUCT_HAS_ADDR' (*note
- DEPRECATED_REG_STRUCT_HAS_ADDR::).
-
-`PROCESS_LINENUMBER_HOOK'
- A hook defined for XCOFF reading.
-
-`PROLOGUE_FIRSTLINE_OVERLAP'
- (Only used in unsupported Convex configuration.)
-
-`PS_REGNUM'
- If defined, this is the number of the processor status register.
- (This definition is only used in generic code when parsing "$ps".)
-
-`DEPRECATED_POP_FRAME'
- If defined, used by `frame_pop' to remove a stack frame. This
- method has been superseeded by generic code.
-
-`push_dummy_call (GDBARCH, FUNC_ADDR, REGCACHE, PC_ADDR, NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR)'
- Define this to push the dummy frame's call to the inferior
- function onto the stack. In addition to pushing NARGS, the code
- should push STRUCT_ADDR (when STRUCT_RETURN), and the return
- address (BP_ADDR).
-
- Returns the updated top-of-stack pointer.
-
- This method replaces `DEPRECATED_PUSH_ARGUMENTS'.
-
-`CORE_ADDR push_dummy_code (GDBARCH, SP, FUNADDR, USING_GCC, ARGS, NARGS, VALUE_TYPE, REAL_PC, BP_ADDR)'
- Given a stack based call dummy, push the instruction sequence
- (including space for a breakpoint) to which the called function
- should return.
-
- Set BP_ADDR to the address at which the breakpoint instruction
- should be inserted, REAL_PC to the resume address when starting
- the call sequence, and return the updated inner-most stack address.
-
- By default, the stack is grown sufficient to hold a frame-aligned
- (*note frame_align::) breakpoint, BP_ADDR is set to the address
- reserved for that breakpoint, and REAL_PC set to FUNADDR.
-
- This method replaces `DEPRECATED_CALL_DUMMY_WORDS',
- `DEPRECATED_SIZEOF_CALL_DUMMY_WORDS', `CALL_DUMMY',
- `CALL_DUMMY_LOCATION', `DEPRECATED_REGISTER_SIZE',
- `GDB_TARGET_IS_HPPA', `DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET',
- and `DEPRECATED_FIX_CALL_DUMMY'.
-
-`DEPRECATED_PUSH_DUMMY_FRAME'
- Used in `call_function_by_hand' to create an artificial stack
- frame.
-
-`DEPRECATED_REGISTER_BYTES'
- The total amount of space needed to store GDB's copy of the
- machine's register state.
-
- This is no longer needed. GDB instead computes the size of the
- register buffer at run-time.
-
-`REGISTER_NAME(I)'
- Return the name of register I as a string. May return `NULL' or
- `NUL' to indicate that register I is not valid.
-
-`DEPRECATED_REG_STRUCT_HAS_ADDR (GCC_P, TYPE)'
- Define this to return 1 if the given type will be passed by
- pointer rather than directly.
-
- This method has been replaced by `stabs_argument_has_addr' (*note
- stabs_argument_has_addr::).
-
-`SAVE_DUMMY_FRAME_TOS (SP)'
- Used in `call_function_by_hand' to notify the target dependent
- code of the top-of-stack value that will be passed to the the
- inferior code. This is the value of the `SP' after both the dummy
- frame and space for parameters/results have been allocated on the
- stack. *Note unwind_dummy_id::.
-
-`SDB_REG_TO_REGNUM'
- Define this to convert sdb register numbers into GDB regnums. If
- not defined, no conversion will be done.
-
-`enum return_value_convention gdbarch_return_value (struct gdbarch *GDBARCH, struct type *VALTYPE, struct regcache *REGCACHE, void *READBUF, const void *WRITEBUF)'
- Given a function with a return-value of type RETTYPE, return which
- return-value convention that function would use.
-
- GDB currently recognizes two function return-value conventions:
- `RETURN_VALUE_REGISTER_CONVENTION' where the return value is found
- in registers; and `RETURN_VALUE_STRUCT_CONVENTION' where the return
- value is found in memory and the address of that memory location is
- passed in as the function's first parameter.
-
- If the register convention is being used, and WRITEBUF is
- non-`NULL', also copy the return-value in WRITEBUF into REGCACHE.
-
- If the register convention is being used, and READBUF is
- non-`NULL', also copy the return value from REGCACHE into READBUF
- (REGCACHE contains a copy of the registers from the just returned
- function).
-
- *Note DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS::, for a description
- of how return-values that use the struct convention are handled.
-
- _Maintainer note: This method replaces separate predicate, extract,
- store methods. By having only one method, the logic needed to
- determine the return-value convention need only be implemented in
- one place. If GDB were written in an OO language, this method
- would instead return an object that knew how to perform the
- register return-value extract and store._
-
- _Maintainer note: This method does not take a GCC_P parameter, and
- such a parameter should not be added. If an architecture that
- requires per-compiler or per-function information be identified,
- then the replacement of RETTYPE with `struct value' FUNCTION
- should be persued._
-
- _Maintainer note: The REGCACHE parameter limits this methods to
- the inner most frame. While replacing REGCACHE with a `struct
- frame_info' FRAME parameter would remove that limitation there has
- yet to be a demonstrated need for such a change._
-
-`SKIP_PERMANENT_BREAKPOINT'
- Advance the inferior's PC past a permanent breakpoint. GDB
- normally steps over a breakpoint by removing it, stepping one
- instruction, and re-inserting the breakpoint. However, permanent
- breakpoints are hardwired into the inferior, and can't be removed,
- so this strategy doesn't work. Calling
- `SKIP_PERMANENT_BREAKPOINT' adjusts the processor's state so that
- execution will resume just after the breakpoint. This macro does
- the right thing even when the breakpoint is in the delay slot of a
- branch or jump.
-
-`SKIP_PROLOGUE (PC)'
- A C expression that returns the address of the "real" code beyond
- the function entry prologue found at PC.
-
-`SKIP_TRAMPOLINE_CODE (PC)'
- If the target machine has trampoline code that sits between
- callers and the functions being called, then define this macro to
- return a new PC that is at the start of the real function.
-
-`SP_REGNUM'
- If the stack-pointer is kept in a register, then define this macro
- to be the number (greater than or equal to zero) of that register,
- or -1 if there is no such register.
-
-`STAB_REG_TO_REGNUM'
- Define this to convert stab register numbers (as gotten from `r'
- declarations) into GDB regnums. If not defined, no conversion
- will be done.
-
-`DEPRECATED_STACK_ALIGN (ADDR)'
- Define this to increase ADDR so that it meets the alignment
- requirements for the processor's stack.
-
- Unlike *Note frame_align::, this function always adjusts ADDR
- upwards.
-
- By default, no stack alignment is performed.
-
-`STEP_SKIPS_DELAY (ADDR)'
- Define this to return true if the address is of an instruction
- with a delay slot. If a breakpoint has been placed in the
- instruction's delay slot, GDB will single-step over that
- instruction before resuming normally. Currently only defined for
- the Mips.
-
-`STORE_RETURN_VALUE (TYPE, REGCACHE, VALBUF)'
- A C expression that writes the function return value, found in
- VALBUF, into the REGCACHE. TYPE is the type of the value that is
- to be returned.
-
- This method has been deprecated in favour of `gdbarch_return_value'
- (*note gdbarch_return_value::).
-
-`SUN_FIXED_LBRAC_BUG'
- (Used only for Sun-3 and Sun-4 targets.)
-
-`SYMBOL_RELOADING_DEFAULT'
- The default value of the "symbol-reloading" variable. (Never
- defined in current sources.)
-
-`TARGET_CHAR_BIT'
- Number of bits in a char; defaults to 8.
-
-`TARGET_CHAR_SIGNED'
- Non-zero if `char' is normally signed on this architecture; zero if
- it should be unsigned.
-
- The ISO C standard requires the compiler to treat `char' as
- equivalent to either `signed char' or `unsigned char'; any
- character in the standard execution set is supposed to be positive.
- Most compilers treat `char' as signed, but `char' is unsigned on
- the IBM S/390, RS6000, and PowerPC targets.
-
-`TARGET_COMPLEX_BIT'
- Number of bits in a complex number; defaults to `2 *
- TARGET_FLOAT_BIT'.
-
- At present this macro is not used.
-
-`TARGET_DOUBLE_BIT'
- Number of bits in a double float; defaults to `8 *
- TARGET_CHAR_BIT'.
-
-`TARGET_DOUBLE_COMPLEX_BIT'
- Number of bits in a double complex; defaults to `2 *
- TARGET_DOUBLE_BIT'.
-
- At present this macro is not used.
-
-`TARGET_FLOAT_BIT'
- Number of bits in a float; defaults to `4 * TARGET_CHAR_BIT'.
-
-`TARGET_INT_BIT'
- Number of bits in an integer; defaults to `4 * TARGET_CHAR_BIT'.
-
-`TARGET_LONG_BIT'
- Number of bits in a long integer; defaults to `4 *
- TARGET_CHAR_BIT'.
-
-`TARGET_LONG_DOUBLE_BIT'
- Number of bits in a long double float; defaults to `2 *
- TARGET_DOUBLE_BIT'.
-
-`TARGET_LONG_LONG_BIT'
- Number of bits in a long long integer; defaults to `2 *
- TARGET_LONG_BIT'.
-
-`TARGET_PTR_BIT'
- Number of bits in a pointer; defaults to `TARGET_INT_BIT'.
-
-`TARGET_SHORT_BIT'
- Number of bits in a short integer; defaults to `2 *
- TARGET_CHAR_BIT'.
-
-`TARGET_READ_PC'
-`TARGET_WRITE_PC (VAL, PID)'
-`TARGET_READ_SP'
-`TARGET_READ_FP'
- These change the behavior of `read_pc', `write_pc', `read_sp' and
- `deprecated_read_fp'. For most targets, these may be left
- undefined. GDB will call the read and write register functions
- with the relevant `_REGNUM' argument.
-
- These macros are useful when a target keeps one of these registers
- in a hard to get at place; for example, part in a segment register
- and part in an ordinary register.
-
- *Note unwind_sp::, which replaces `TARGET_READ_SP'.
-
-`TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFSETP)'
- Returns a `(register, offset)' pair representing the virtual frame
- pointer in use at the code address PC. If virtual frame pointers
- are not used, a default definition simply returns
- `DEPRECATED_FP_REGNUM', with an offset of zero.
-
-`TARGET_HAS_HARDWARE_WATCHPOINTS'
- If non-zero, the target has support for hardware-assisted
- watchpoints. *Note watchpoints: Algorithms, for more details and
- other related macros.
-
-`TARGET_PRINT_INSN (ADDR, INFO)'
- This is the function used by GDB to print an assembly instruction.
- It prints the instruction at address ADDR in debugged memory and
- returns the length of the instruction, in bytes. If a target
- doesn't define its own printing routine, it defaults to an
- accessor function for the global pointer
- `deprecated_tm_print_insn'. This usually points to a function in
- the `opcodes' library (*note Opcodes: Support Libraries.). INFO
- is a structure (of type `disassemble_info') defined in
- `include/dis-asm.h' used to pass information to the instruction
- decoding routine.
-
-`struct frame_id unwind_dummy_id (struct frame_info *FRAME)'
- Given FRAME return a `struct frame_id' that uniquely identifies an
- inferior function call's dummy frame. The value returned must
- match the dummy frame stack value previously saved using
- `SAVE_DUMMY_FRAME_TOS'. *Note SAVE_DUMMY_FRAME_TOS::.
-
-`USE_STRUCT_CONVENTION (GCC_P, TYPE)'
- If defined, this must be an expression that is nonzero if a value
- of the given TYPE being returned from a function must have space
- allocated for it on the stack. GCC_P is true if the function
- being considered is known to have been compiled by GCC; this is
- helpful for systems where GCC is known to use different calling
- convention than other compilers.
-
- This method has been deprecated in favour of `gdbarch_return_value'
- (*note gdbarch_return_value::).
-
-`VALUE_TO_REGISTER(TYPE, REGNUM, FROM, TO)'
- Convert a value of type TYPE into the raw contents of register
- REGNUM's. *Note Using Different Register and Memory Data
- Representations: Target Architecture Definition.
-
-`VARIABLES_INSIDE_BLOCK (DESC, GCC_P)'
- For dbx-style debugging information, if the compiler puts variable
- declarations inside LBRAC/RBRAC blocks, this should be defined to
- be nonzero. DESC is the value of `n_desc' from the `N_RBRAC'
- symbol, and GCC_P is true if GDB has noticed the presence of
- either the `GCC_COMPILED_SYMBOL' or the `GCC2_COMPILED_SYMBOL'.
- By default, this is 0.
-
-`OS9K_VARIABLES_INSIDE_BLOCK (DESC, GCC_P)'
- Similarly, for OS/9000. Defaults to 1.
-
- Motorola M68K target conditionals.
-
-`BPT_VECTOR'
- Define this to be the 4-bit location of the breakpoint trap
- vector. If not defined, it will default to `0xf'.
-
-`REMOTE_BPT_VECTOR'
- Defaults to `1'.
-
-`NAME_OF_MALLOC'
- A string containing the name of the function to call in order to
- allocate some memory in the inferior. The default value is
- "malloc".
-
-
-Adding a New Target
-===================
-
-The following files add a target to GDB:
-
-`gdb/config/ARCH/TTT.mt'
- Contains a Makefile fragment specific to this target. Specifies
- what object files are needed for target TTT, by defining
- `TDEPFILES=...' and `TDEPLIBS=...'. Also specifies the header
- file which describes TTT, by defining `TM_FILE= tm-TTT.h'.
-
- You can also define `TM_CFLAGS', `TM_CLIBS', `TM_CDEPS', but these
- are now deprecated, replaced by autoconf, and may go away in
- future versions of GDB.
-
-`gdb/TTT-tdep.c'
- Contains any miscellaneous code required for this target machine.
- On some machines it doesn't exist at all. Sometimes the macros in
- `tm-TTT.h' become very complicated, so they are implemented as
- functions here instead, and the macro is simply defined to call the
- function. This is vastly preferable, since it is easier to
- understand and debug.
-
-`gdb/ARCH-tdep.c'
-`gdb/ARCH-tdep.h'
- This often exists to describe the basic layout of the target
- machine's processor chip (registers, stack, etc.). If used, it is
- included by `TTT-tdep.h'. It can be shared among many targets
- that use the same processor.
-
-`gdb/config/ARCH/tm-TTT.h'
- (`tm.h' is a link to this file, created by `configure'). Contains
- macro definitions about the target machine's registers, stack frame
- format and instructions.
-
- New targets do not need this file and should not create it.
-
-`gdb/config/ARCH/tm-ARCH.h'
- This often exists to describe the basic layout of the target
- machine's processor chip (registers, stack, etc.). If used, it is
- included by `tm-TTT.h'. It can be shared among many targets that
- use the same processor.
-
- New targets do not need this file and should not create it.
-
-
- If you are adding a new operating system for an existing CPU chip,
-add a `config/tm-OS.h' file that describes the operating system
-facilities that are unusual (extra symbol table info; the breakpoint
-instruction needed; etc.). Then write a `ARCH/tm-OS.h' that just
-`#include's `tm-ARCH.h' and `config/tm-OS.h'.
-
-Converting an existing Target Architecture to Multi-arch
-========================================================
-
-This section describes the current accepted best practice for converting
-an existing target architecture to the multi-arch framework.
-
- The process consists of generating, testing, posting and committing a
-sequence of patches. Each patch must contain a single change, for
-instance:
-
- * Directly convert a group of functions into macros (the conversion
- does not change the behavior of any of the functions).
-
- * Replace a non-multi-arch with a multi-arch mechanism (e.g.,
- `FRAME_INFO').
-
- * Enable multi-arch level one.
-
- * Delete one or more files.
-
-
-There isn't a size limit on a patch, however, a developer is strongly
-encouraged to keep the patch size down.
-
- Since each patch is well defined, and since each change has been
-tested and shows no regressions, the patches are considered _fairly_
-obvious. Such patches, when submitted by developers listed in the
-`MAINTAINERS' file, do not need approval. Occasional steps in the
-process may be more complicated and less clear. The developer is
-expected to use their judgment and is encouraged to seek advice as
-needed.
-
-Preparation
------------
-
-The first step is to establish control. Build (with `-Werror' enabled)
-and test the target so that there is a baseline against which the
-debugger can be compared.
-
- At no stage can the test results regress or GDB stop compiling with
-`-Werror'.
-
-Add the multi-arch initialization code
---------------------------------------
-
-The objective of this step is to establish the basic multi-arch
-framework. It involves
-
- * The addition of a `ARCH_gdbarch_init' function(2) that creates the
- architecture:
- static struct gdbarch *
- d10v_gdbarch_init (info, arches)
- struct gdbarch_info info;
- struct gdbarch_list *arches;
- {
- struct gdbarch *gdbarch;
- /* there is only one d10v architecture */
- if (arches != NULL)
- return arches->gdbarch;
- gdbarch = gdbarch_alloc (&info, NULL);
- return gdbarch;
- }
-
- __
-
- * A per-architecture dump function to print any architecture specific
- information:
- static void
- mips_dump_tdep (struct gdbarch *current_gdbarch,
- struct ui_file *file)
- {
- ... code to print architecture specific info ...
- }
-
- * A change to `_initialize_ARCH_tdep' to register this new
- architecture:
- void
- _initialize_mips_tdep (void)
- {
- gdbarch_register (bfd_arch_mips, mips_gdbarch_init,
- mips_dump_tdep);
-
- * Add the macro `GDB_MULTI_ARCH', defined as 0 (zero), to the file
- `config/ARCH/tm-ARCH.h'.
-
-
-Update multi-arch incompatible mechanisms
------------------------------------------
-
-Some mechanisms do not work with multi-arch. They include:
-
-`FRAME_FIND_SAVED_REGS'
- Replaced with `DEPRECATED_FRAME_INIT_SAVED_REGS'
-
-At this stage you could also consider converting the macros into
-functions.
-
-Prepare for multi-arch level to one
------------------------------------
-
-Temporally set `GDB_MULTI_ARCH' to `GDB_MULTI_ARCH_PARTIAL' and then
-build and start GDB (the change should not be committed). GDB may not
-build, and once built, it may die with an internal error listing the
-architecture methods that must be provided.
-
- Fix any build problems (patch(es)).
-
- Convert all the architecture methods listed, which are only macros,
-into functions (patch(es)).
-
- Update `ARCH_gdbarch_init' to set all the missing architecture
-methods and wrap the corresponding macros in `#if !GDB_MULTI_ARCH'
-(patch(es)).
-
-Set multi-arch level one
-------------------------
-
-Change the value of `GDB_MULTI_ARCH' to GDB_MULTI_ARCH_PARTIAL (a
-single patch).
-
- Any problems with throwing "the switch" should have been fixed
-already.
-
-Convert remaining macros
-------------------------
-
-Suggest converting macros into functions (and setting the corresponding
-architecture method) in small batches.
-
-Set multi-arch level to two
----------------------------
-
-This should go smoothly.
-
-Delete the TM file
-------------------
-
-The `tm-ARCH.h' can be deleted. `ARCH.mt' and `configure.in' updated.
-
- ---------- Footnotes ----------
-
- (1) Some D10V instructions are actually pairs of 16-bit
-sub-instructions. However, since you can't jump into the middle of
-such a pair, code addresses can only refer to full 32 bit instructions,
-which is what matters in this explanation.
-
- (2) The above is from the original example and uses K&R C. GDB has
-since converted to ISO C but lets ignore that.
-
-
-File: gdbint.info, Node: Target Vector Definition, Next: Native Debugging, Prev: Target Architecture Definition, Up: Top
-
-Target Vector Definition
-************************
-
-The target vector defines the interface between GDB's abstract handling
-of target systems, and the nitty-gritty code that actually exercises
-control over a process or a serial port. GDB includes some 30-40
-different target vectors; however, each configuration of GDB includes
-only a few of them.
-
-File Targets
-============
-
-Both executables and core files have target vectors.
-
-Standard Protocol and Remote Stubs
-==================================
-
-GDB's file `remote.c' talks a serial protocol to code that runs in the
-target system. GDB provides several sample "stubs" that can be
-integrated into target programs or operating systems for this purpose;
-they are named `*-stub.c'.
-
- The GDB user's manual describes how to put such a stub into your
-target code. What follows is a discussion of integrating the SPARC
-stub into a complicated operating system (rather than a simple
-program), by Stu Grossman, the author of this stub.
-
- The trap handling code in the stub assumes the following upon entry
-to `trap_low':
-
- 1. %l1 and %l2 contain pc and npc respectively at the time of the
- trap;
-
- 2. traps are disabled;
-
- 3. you are in the correct trap window.
-
- As long as your trap handler can guarantee those conditions, then
-there is no reason why you shouldn't be able to "share" traps with the
-stub. The stub has no requirement that it be jumped to directly from
-the hardware trap vector. That is why it calls `exceptionHandler()',
-which is provided by the external environment. For instance, this could
-set up the hardware traps to actually execute code which calls the stub
-first, and then transfers to its own trap handler.
-
- For the most point, there probably won't be much of an issue with
-"sharing" traps, as the traps we use are usually not used by the kernel,
-and often indicate unrecoverable error conditions. Anyway, this is all
-controlled by a table, and is trivial to modify. The most important
-trap for us is for `ta 1'. Without that, we can't single step or do
-breakpoints. Everything else is unnecessary for the proper operation
-of the debugger/stub.
-
- From reading the stub, it's probably not obvious how breakpoints
-work. They are simply done by deposit/examine operations from GDB.
-
-ROM Monitor Interface
-=====================
-
-Custom Protocols
-================
-
-Transport Layer
-===============
-
-Builtin Simulator
-=================
-
-
-File: gdbint.info, Node: Native Debugging, Next: Support Libraries, Prev: Target Vector Definition, Up: Top
-
-Native Debugging
-****************
-
-Several files control GDB's configuration for native support:
-
-`gdb/config/ARCH/XYZ.mh'
- Specifies Makefile fragments needed by a _native_ configuration on
- machine XYZ. In particular, this lists the required
- native-dependent object files, by defining `NATDEPFILES=...'.
- Also specifies the header file which describes native support on
- XYZ, by defining `NAT_FILE= nm-XYZ.h'. You can also define
- `NAT_CFLAGS', `NAT_ADD_FILES', `NAT_CLIBS', `NAT_CDEPS', etc.; see
- `Makefile.in'.
-
- _Maintainer's note: The `.mh' suffix is because this file
- originally contained `Makefile' fragments for hosting GDB on
- machine XYZ. While the file is no longer used for this purpose,
- the `.mh' suffix remains. Perhaps someone will eventually rename
- these fragments so that they have a `.mn' suffix._
-
-`gdb/config/ARCH/nm-XYZ.h'
- (`nm.h' is a link to this file, created by `configure'). Contains
- C macro definitions describing the native system environment, such
- as child process control and core file support.
-
-`gdb/XYZ-nat.c'
- Contains any miscellaneous C code required for this native support
- of this machine. On some machines it doesn't exist at all.
-
- There are some "generic" versions of routines that can be used by
-various systems. These can be customized in various ways by macros
-defined in your `nm-XYZ.h' file. If these routines work for the XYZ
-host, you can just include the generic file's name (with `.o', not
-`.c') in `NATDEPFILES'.
-
- Otherwise, if your machine needs custom support routines, you will
-need to write routines that perform the same functions as the generic
-file. Put them into `XYZ-nat.c', and put `XYZ-nat.o' into
-`NATDEPFILES'.
-
-`inftarg.c'
- This contains the _target_ops vector_ that supports Unix child
- processes on systems which use ptrace and wait to control the
- child.
-
-`procfs.c'
- This contains the _target_ops vector_ that supports Unix child
- processes on systems which use /proc to control the child.
-
-`fork-child.c'
- This does the low-level grunge that uses Unix system calls to do a
- "fork and exec" to start up a child process.
-
-`infptrace.c'
- This is the low level interface to inferior processes for systems
- using the Unix `ptrace' call in a vanilla way.
-
-Native core file Support
-========================
-
-`core-aout.c::fetch_core_registers()'
- Support for reading registers out of a core file. This routine
- calls `register_addr()', see below. Now that BFD is used to read
- core files, virtually all machines should use `core-aout.c', and
- should just provide `fetch_core_registers' in `XYZ-nat.c' (or
- `REGISTER_U_ADDR' in `nm-XYZ.h').
-
-`core-aout.c::register_addr()'
- If your `nm-XYZ.h' file defines the macro `REGISTER_U_ADDR(addr,
- blockend, regno)', it should be defined to set `addr' to the
- offset within the `user' struct of GDB register number `regno'.
- `blockend' is the offset within the "upage" of `u.u_ar0'. If
- `REGISTER_U_ADDR' is defined, `core-aout.c' will define the
- `register_addr()' function and use the macro in it. If you do not
- define `REGISTER_U_ADDR', but you are using the standard
- `fetch_core_registers()', you will need to define your own version
- of `register_addr()', put it into your `XYZ-nat.c' file, and be
- sure `XYZ-nat.o' is in the `NATDEPFILES' list. If you have your
- own `fetch_core_registers()', you may not need a separate
- `register_addr()'. Many custom `fetch_core_registers()'
- implementations simply locate the registers themselves.
-
- When making GDB run native on a new operating system, to make it
-possible to debug core files, you will need to either write specific
-code for parsing your OS's core files, or customize `bfd/trad-core.c'.
-First, use whatever `#include' files your machine uses to define the
-struct of registers that is accessible (possibly in the u-area) in a
-core file (rather than `machine/reg.h'), and an include file that
-defines whatever header exists on a core file (e.g. the u-area or a
-`struct core'). Then modify `trad_unix_core_file_p' to use these
-values to set up the section information for the data segment, stack
-segment, any other segments in the core file (perhaps shared library
-contents or control information), "registers" segment, and if there are
-two discontiguous sets of registers (e.g. integer and float), the
-"reg2" segment. This section information basically delimits areas in
-the core file in a standard way, which the section-reading routines in
-BFD know how to seek around in.
-
- Then back in GDB, you need a matching routine called
-`fetch_core_registers'. If you can use the generic one, it's in
-`core-aout.c'; if not, it's in your `XYZ-nat.c' file. It will be
-passed a char pointer to the entire "registers" segment, its length,
-and a zero; or a char pointer to the entire "regs2" segment, its
-length, and a 2. The routine should suck out the supplied register
-values and install them into GDB's "registers" array.
-
- If your system uses `/proc' to control processes, and uses ELF
-format core files, then you may be able to use the same routines for
-reading the registers out of processes and out of core files.
-
-ptrace
-======
-
-/proc
-=====
-
-win32
-=====
-
-shared libraries
-================
-
-Native Conditionals
-===================
-
-When GDB is configured and compiled, various macros are defined or left
-undefined, to control compilation when the host and target systems are
-the same. These macros should be defined (or left undefined) in
-`nm-SYSTEM.h'.
-
-`ATTACH_DETACH'
- If defined, then GDB will include support for the `attach' and
- `detach' commands.
-
-`CHILD_PREPARE_TO_STORE'
- If the machine stores all registers at once in the child process,
- then define this to ensure that all values are correct. This
- usually entails a read from the child.
-
- [Note that this is incorrectly defined in `xm-SYSTEM.h' files
- currently.]
-
-`FETCH_INFERIOR_REGISTERS'
- Define this if the native-dependent code will provide its own
- routines `fetch_inferior_registers' and `store_inferior_registers'
- in `HOST-nat.c'. If this symbol is _not_ defined, and
- `infptrace.c' is included in this configuration, the default
- routines in `infptrace.c' are used for these functions.
-
-`FILES_INFO_HOOK'
- (Only defined for Convex.)
-
-`FP0_REGNUM'
- This macro is normally defined to be the number of the first
- floating point register, if the machine has such registers. As
- such, it would appear only in target-specific code. However,
- `/proc' support uses this to decide whether floats are in use on
- this target.
-
-`GET_LONGJMP_TARGET'
- For most machines, this is a target-dependent parameter. On the
- DECstation and the Iris, this is a native-dependent parameter,
- since `setjmp.h' is needed to define it.
-
- This macro determines the target PC address that `longjmp' will
- jump to, assuming that we have just stopped at a longjmp
- breakpoint. It takes a `CORE_ADDR *' as argument, and stores the
- target PC value through this pointer. It examines the current
- state of the machine as needed.
-
-`I386_USE_GENERIC_WATCHPOINTS'
- An x86-based machine can define this to use the generic x86
- watchpoint support; see *Note I386_USE_GENERIC_WATCHPOINTS:
- Algorithms.
-
-`KERNEL_U_ADDR'
- Define this to the address of the `u' structure (the "user
- struct", also known as the "u-page") in kernel virtual memory.
- GDB needs to know this so that it can subtract this address from
- absolute addresses in the upage, that are obtained via ptrace or
- from core files. On systems that don't need this value, set it to
- zero.
-
-`KERNEL_U_ADDR_BSD'
- Define this to cause GDB to determine the address of `u' at
- runtime, by using Berkeley-style `nlist' on the kernel's image in
- the root directory.
-
-`KERNEL_U_ADDR_HPUX'
- Define this to cause GDB to determine the address of `u' at
- runtime, by using HP-style `nlist' on the kernel's image in the
- root directory.
-
-`ONE_PROCESS_WRITETEXT'
- Define this to be able to, when a breakpoint insertion fails, warn
- the user that another process may be running with the same
- executable.
-
-`PROC_NAME_FMT'
- Defines the format for the name of a `/proc' device. Should be
- defined in `nm.h' _only_ in order to override the default
- definition in `procfs.c'.
-
-`PTRACE_FP_BUG'
- See `mach386-xdep.c'.
-
-`PTRACE_ARG3_TYPE'
- The type of the third argument to the `ptrace' system call, if it
- exists and is different from `int'.
-
-`REGISTER_U_ADDR'
- Defines the offset of the registers in the "u area".
-
-`SHELL_COMMAND_CONCAT'
- If defined, is a string to prefix on the shell command used to
- start the inferior.
-
-`SHELL_FILE'
- If defined, this is the name of the shell to use to run the
- inferior. Defaults to `"/bin/sh"'.
-
-`SOLIB_ADD (FILENAME, FROM_TTY, TARG, READSYMS)'
- Define this to expand into an expression that will cause the
- symbols in FILENAME to be added to GDB's symbol table. If READSYMS
- is zero symbols are not read but any necessary low level
- processing for FILENAME is still done.
-
-`SOLIB_CREATE_INFERIOR_HOOK'
- Define this to expand into any shared-library-relocation code that
- you want to be run just after the child process has been forked.
-
-`START_INFERIOR_TRAPS_EXPECTED'
- When starting an inferior, GDB normally expects to trap twice;
- once when the shell execs, and once when the program itself execs.
- If the actual number of traps is something other than 2, then
- define this macro to expand into the number expected.
-
-`SVR4_SHARED_LIBS'
- Define this to indicate that SVR4-style shared libraries are in
- use.
-
-`USE_PROC_FS'
- This determines whether small routines in `*-tdep.c', which
- translate register values between GDB's internal representation
- and the `/proc' representation, are compiled.
-
-`U_REGS_OFFSET'
- This is the offset of the registers in the upage. It need only be
- defined if the generic ptrace register access routines in
- `infptrace.c' are being used (that is, `infptrace.c' is configured
- in, and `FETCH_INFERIOR_REGISTERS' is not defined). If the
- default value from `infptrace.c' is good enough, leave it
- undefined.
-
- The default value means that u.u_ar0 _points to_ the location of
- the registers. I'm guessing that `#define U_REGS_OFFSET 0' means
- that `u.u_ar0' _is_ the location of the registers.
-
-`CLEAR_SOLIB'
- See `objfiles.c'.
-
-`DEBUG_PTRACE'
- Define this to debug `ptrace' calls.
-
-
-File: gdbint.info, Node: Support Libraries, Next: Coding, Prev: Native Debugging, Up: Top
-
-Support Libraries
-*****************
-
-BFD
-===
-
-BFD provides support for GDB in several ways:
-
-_identifying executable and core files_
- BFD will identify a variety of file types, including a.out, coff,
- and several variants thereof, as well as several kinds of core
- files.
-
-_access to sections of files_
- BFD parses the file headers to determine the names, virtual
- addresses, sizes, and file locations of all the various named
- sections in files (such as the text section or the data section).
- GDB simply calls BFD to read or write section X at byte offset Y
- for length Z.
-
-_specialized core file support_
- BFD provides routines to determine the failing command name stored
- in a core file, the signal with which the program failed, and
- whether a core file matches (i.e. could be a core dump of) a
- particular executable file.
-
-_locating the symbol information_
- GDB uses an internal interface of BFD to determine where to find
- the symbol information in an executable file or symbol-file. GDB
- itself handles the reading of symbols, since BFD does not
- "understand" debug symbols, but GDB uses BFD's cached information
- to find the symbols, string table, etc.
-
-opcodes
-=======
-
-The opcodes library provides GDB's disassembler. (It's a separate
-library because it's also used in binutils, for `objdump').
-
-readline
-========
-
-mmalloc
-=======
-
-libiberty
-=========
-
-The `libiberty' library provides a set of functions and features that
-integrate and improve on functionality found in modern operating
-systems. Broadly speaking, such features can be divided into three
-groups: supplemental functions (functions that may be missing in some
-environments and operating systems), replacement functions (providing a
-uniform and easier to use interface for commonly used standard
-functions), and extensions (which provide additional functionality
-beyond standard functions).
-
- GDB uses various features provided by the `libiberty' library, for
-instance the C++ demangler, the IEEE floating format support functions,
-the input options parser `getopt', the `obstack' extension, and other
-functions.
-
-`obstacks' in GDB
------------------
-
-The obstack mechanism provides a convenient way to allocate and free
-chunks of memory. Each obstack is a pool of memory that is managed
-like a stack. Objects (of any nature, size and alignment) are
-allocated and freed in a LIFO fashion on an obstack (see `libiberty''s
-documenatation for a more detailed explanation of `obstacks').
-
- The most noticeable use of the `obstacks' in GDB is in object files.
-There is an obstack associated with each internal representation of an
-object file. Lots of things get allocated on these `obstacks':
-dictionary entries, blocks, blockvectors, symbols, minimal symbols,
-types, vectors of fundamental types, class fields of types, object
-files section lists, object files section offets lists, line tables,
-symbol tables, partial symbol tables, string tables, symbol table
-private data, macros tables, debug information sections and entries,
-import and export lists (som), unwind information (hppa), dwarf2
-location expressions data. Plus various strings such as directory
-names strings, debug format strings, names of types.
-
- An essential and convenient property of all data on `obstacks' is
-that memory for it gets allocated (with `obstack_alloc') at various
-times during a debugging sesssion, but it is released all at once using
-the `obstack_free' function. The `obstack_free' function takes a
-pointer to where in the stack it must start the deletion from (much
-like the cleanup chains have a pointer to where to start the cleanups).
-Because of the stack like structure of the `obstacks', this allows to
-free only a top portion of the obstack. There are a few instances in
-GDB where such thing happens. Calls to `obstack_free' are done after
-some local data is allocated to the obstack. Only the local data is
-deleted from the obstack. Of course this assumes that nothing between
-the `obstack_alloc' and the `obstack_free' allocates anything else on
-the same obstack. For this reason it is best and safest to use
-temporary `obstacks'.
-
- Releasing the whole obstack is also not safe per se. It is safe only
-under the condition that we know the `obstacks' memory is no longer
-needed. In GDB we get rid of the `obstacks' only when we get rid of
-the whole objfile(s), for instance upon reading a new symbol file.
-
-gnu-regex
-=========
-
-Regex conditionals.
-
-`C_ALLOCA'
-
-`NFAILURES'
-
-`RE_NREGS'
-
-`SIGN_EXTEND_CHAR'
-
-`SWITCH_ENUM_BUG'
-
-`SYNTAX_TABLE'
-
-`Sword'
-
-`sparc'
-
-include
-=======
-
-
-File: gdbint.info, Node: Coding, Next: Porting GDB, Prev: Support Libraries, Up: Top
-
-Coding
-******
-
-This chapter covers topics that are lower-level than the major
-algorithms of GDB.
-
-Cleanups
-========
-
-Cleanups are a structured way to deal with things that need to be done
-later.
-
- When your code does something (e.g., `xmalloc' some memory, or
-`open' a file) that needs to be undone later (e.g., `xfree' the memory
-or `close' the file), it can make a cleanup. The cleanup will be done
-at some future point: when the command is finished and control returns
-to the top level; when an error occurs and the stack is unwound; or
-when your code decides it's time to explicitly perform cleanups.
-Alternatively you can elect to discard the cleanups you created.
-
- Syntax:
-
-`struct cleanup *OLD_CHAIN;'
- Declare a variable which will hold a cleanup chain handle.
-
-`OLD_CHAIN = make_cleanup (FUNCTION, ARG);'
- Make a cleanup which will cause FUNCTION to be called with ARG (a
- `char *') later. The result, OLD_CHAIN, is a handle that can
- later be passed to `do_cleanups' or `discard_cleanups'. Unless
- you are going to call `do_cleanups' or `discard_cleanups', you can
- ignore the result from `make_cleanup'.
-
-`do_cleanups (OLD_CHAIN);'
- Do all cleanups added to the chain since the corresponding
- `make_cleanup' call was made.
-
-`discard_cleanups (OLD_CHAIN);'
- Same as `do_cleanups' except that it just removes the cleanups from
- the chain and does not call the specified functions.
-
- Cleanups are implemented as a chain. The handle returned by
-`make_cleanups' includes the cleanup passed to the call and any later
-cleanups appended to the chain (but not yet discarded or performed).
-E.g.:
-
- make_cleanup (a, 0);
- {
- struct cleanup *old = make_cleanup (b, 0);
- make_cleanup (c, 0)
- ...
- do_cleanups (old);
- }
-
-will call `c()' and `b()' but will not call `a()'. The cleanup that
-calls `a()' will remain in the cleanup chain, and will be done later
-unless otherwise discarded.
-
- Your function should explicitly do or discard the cleanups it
-creates. Failing to do this leads to non-deterministic behavior since
-the caller will arbitrarily do or discard your functions cleanups.
-This need leads to two common cleanup styles.
-
- The first style is try/finally. Before it exits, your code-block
-calls `do_cleanups' with the old cleanup chain and thus ensures that
-your code-block's cleanups are always performed. For instance, the
-following code-segment avoids a memory leak problem (even when `error'
-is called and a forced stack unwind occurs) by ensuring that the
-`xfree' will always be called:
-
- struct cleanup *old = make_cleanup (null_cleanup, 0);
- data = xmalloc (sizeof blah);
- make_cleanup (xfree, data);
- ... blah blah ...
- do_cleanups (old);
-
- The second style is try/except. Before it exits, your code-block
-calls `discard_cleanups' with the old cleanup chain and thus ensures
-that any created cleanups are not performed. For instance, the
-following code segment, ensures that the file will be closed but only
-if there is an error:
-
- FILE *file = fopen ("afile", "r");
- struct cleanup *old = make_cleanup (close_file, file);
- ... blah blah ...
- discard_cleanups (old);
- return file;
-
- Some functions, e.g. `fputs_filtered()' or `error()', specify that
-they "should not be called when cleanups are not in place". This means
-that any actions you need to reverse in the case of an error or
-interruption must be on the cleanup chain before you call these
-functions, since they might never return to your code (they `longjmp'
-instead).
-
-Per-architecture module data
-============================
-
-The multi-arch framework includes a mechanism for adding module specific
-per-architecture data-pointers to the `struct gdbarch' architecture
-object.
-
- A module registers one or more per-architecture data-pointers using
-the function `register_gdbarch_data':
-
- - Function: struct gdbarch_data *register_gdbarch_data
- (gdbarch_data_init_ftype *INIT)
- The INIT function is used to obtain an initial value for a
- per-architecture data-pointer. The function is called, after the
- architecture has been created, when the data-pointer is still
- uninitialized (`NULL') and its value has been requested via a call
- to `gdbarch_data'. A data-pointer can also be initialize
- explicitly using `set_gdbarch_data'.
-
- Any memory required by the INIT function should be allocated using
- `GDBARCH_OBSTACK_ZALLOC'. That memory is automatically released
- when the corresponding architecture is deleted.
-
- The function `register_gdbarch_data' returns a `struct
- gdbarch_data' that is used to identify the data-pointer that was
- added to the module.
-
-
- A typical module has an `init' function of the form:
-
- struct nozel { int total; };
- static struct gdbarch_data *nozel_handle;
- static void *
- nozel_init (struct gdbarch *gdbarch)
- {
- struct nozel *data = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct nozel);
- ...
- return data;
- }
-
- Since uninitialized (`NULL') data-pointers are initialized
-on-demand, an `init' function is free to call other modules that use
-data-pointers. Those modules data-pointers will be initialized as
-needed. Care should be taken to ensure that the `init' call graph does
-not contain cycles.
-
- The data-pointer is registered with the call:
-
- void
- _initialize_nozel (void)
- {
- nozel_handle = register_gdbarch_data (nozel_init);
- ...
-
- The per-architecture data-pointer is accessed using the function:
-
- - Function: void *gdbarch_data (struct gdbarch *GDBARCH, struct
- gdbarch_data *DATA_HANDLE)
- Given the architecture ARCH and module data handle DATA_HANDLE
- (returned by `register_gdbarch_data', this function returns the
- current value of the per-architecture data-pointer.
-
- The non-`NULL' data-pointer returned by `gdbarch_data' should be
-saved in a local variable and then used directly:
-
- int
- nozel_total (struct gdbarch *gdbarch)
- {
- int total;
- struct nozel *data = gdbarch_data (gdbarch, nozel_handle);
- ...
- return total;
- }
-
- It is also possible to directly initialize the data-pointer using:
-
- - Function: void set_gdbarch_data (struct gdbarch *GDBARCH, struct
- gdbarch_data *HANDLE, void *POINTER)
- Set the still `NULL' data-pointer corresponding to HANDLE to the
- non-`NULL' POINTER value.
-
- This function is used by modules that require a mechanism for
-explicitly setting the per-architecture data-pointer during
-architecture creation:
-
- /* Always return a non-NULL nozel. */
- static struct nozel *
- gdbarch_nozel (struct gdbarch *gdbarch)
- {
- struct nozel *nozel = gdbarch_data (gdbarch, nozel_handle);
- if (nozel == NULL)
- {
- nozel = nozel_init (gdbarch);
- set_gdbarch_data (gdbarch, nozel_handle, nozel);
- }
- return nozel;
- }
-
- /* Called during architecture creation. */
- extern void
- set_gdbarch_nozel (struct gdbarch *gdbarch, int total)
- {
- struct nozel *data = gdbarch_nozel (gdbarch);
- ...
- data->total = total;
- }
-
- void
- _initialize_nozel (void)
- {
- nozel_handle = register_gdbarch_data (nozel_init);
- ...
-
-Note that an `init' function still needs to be registered. It is used
-to initialize the data-pointer when the architecture creation phase
-fail to set an initial value.
-
-Wrapping Output Lines
-=====================
-
-Output that goes through `printf_filtered' or `fputs_filtered' or
-`fputs_demangled' needs only to have calls to `wrap_here' added in
-places that would be good breaking points. The utility routines will
-take care of actually wrapping if the line width is exceeded.
-
- The argument to `wrap_here' is an indentation string which is
-printed _only_ if the line breaks there. This argument is saved away
-and used later. It must remain valid until the next call to
-`wrap_here' or until a newline has been printed through the
-`*_filtered' functions. Don't pass in a local variable and then return!
-
- It is usually best to call `wrap_here' after printing a comma or
-space. If you call it before printing a space, make sure that your
-indentation properly accounts for the leading space that will print if
-the line wraps there.
-
- Any function or set of functions that produce filtered output must
-finish by printing a newline, to flush the wrap buffer, before switching
-to unfiltered (`printf') output. Symbol reading routines that print
-warnings are a good example.
-
-GDB Coding Standards
-====================
-
-GDB follows the GNU coding standards, as described in
-`etc/standards.texi'. This file is also available for anonymous FTP
-from GNU archive sites. GDB takes a strict interpretation of the
-standard; in general, when the GNU standard recommends a practice but
-does not require it, GDB requires it.
-
- GDB follows an additional set of coding standards specific to GDB,
-as described in the following sections.
-
-ISO C
------
-
-GDB assumes an ISO/IEC 9899:1990 (a.k.a. ISO C90) compliant compiler.
-
- GDB does not assume an ISO C or POSIX compliant C library.
-
-Memory Management
------------------
-
-GDB does not use the functions `malloc', `realloc', `calloc', `free'
-and `asprintf'.
-
- GDB uses the functions `xmalloc', `xrealloc' and `xcalloc' when
-allocating memory. Unlike `malloc' et.al. these functions do not
-return when the memory pool is empty. Instead, they unwind the stack
-using cleanups. These functions return `NULL' when requested to
-allocate a chunk of memory of size zero.
-
- _Pragmatics: By using these functions, the need to check every
-memory allocation is removed. These functions provide portable
-behavior._
-
- GDB does not use the function `free'.
-
- GDB uses the function `xfree' to return memory to the memory pool.
-Consistent with ISO-C, this function ignores a request to free a `NULL'
-pointer.
-
- _Pragmatics: On some systems `free' fails when passed a `NULL'
-pointer._
-
- GDB can use the non-portable function `alloca' for the allocation of
-small temporary values (such as strings).
-
- _Pragmatics: This function is very non-portable. Some systems
-restrict the memory being allocated to no more than a few kilobytes._
-
- GDB uses the string function `xstrdup' and the print function
-`xasprintf'.
-
- _Pragmatics: `asprintf' and `strdup' can fail. Print functions such
-as `sprintf' are very prone to buffer overflow errors._
-
-Compiler Warnings
------------------
-
-With few exceptions, developers should include the configuration option
-`--enable-gdb-build-warnings=,-Werror' when building GDB. The
-exceptions are listed in the file `gdb/MAINTAINERS'.
-
- This option causes GDB (when built using GCC) to be compiled with a
-carefully selected list of compiler warning flags. Any warnings from
-those flags being treated as errors.
-
- The current list of warning flags includes:
-
-`-Wimplicit'
- Since GDB coding standard requires all functions to be declared
- using a prototype, the flag has the side effect of ensuring that
- prototyped functions are always visible with out resorting to
- `-Wstrict-prototypes'.
-
-`-Wreturn-type'
- Such code often appears to work except on instruction set
- architectures that use register windows.
-
-`-Wcomment'
-
-`-Wtrigraphs'
-
-`-Wformat'
-`-Wformat-nonliteral'
- Since GDB uses the `format printf' attribute on all `printf' like
- functions these check not just `printf' calls but also calls to
- functions such as `fprintf_unfiltered'.
-
-`-Wparentheses'
- This warning includes uses of the assignment operator within an
- `if' statement.
-
-`-Wpointer-arith'
-
-`-Wuninitialized'
-
-`-Wunused-label'
- This warning has the additional benefit of detecting the absence
- of the `case' reserved word in a switch statement:
- enum { FD_SCHEDULED, NOTHING_SCHEDULED } sched;
- ...
- switch (sched)
- {
- case FD_SCHEDULED:
- ...;
- break;
- NOTHING_SCHEDULED:
- ...;
- break;
- }
-
-`-Wunused-function'
-
- _Pragmatics: Due to the way that GDB is implemented most functions
-have unused parameters. Consequently the warning `-Wunused-parameter'
-is precluded from the list. The macro `ATTRIBUTE_UNUSED' is not used
-as it leads to false negatives -- it is not an error to have
-`ATTRIBUTE_UNUSED' on a parameter that is being used. The options
-`-Wall' and `-Wunused' are also precluded because they both include
-`-Wunused-parameter'._
-
- _Pragmatics: GDB has not simply accepted the warnings enabled by
-`-Wall -Werror -W...'. Instead it is selecting warnings when and where
-their benefits can be demonstrated._
-
-Formatting
-----------
-
-The standard GNU recommendations for formatting must be followed
-strictly.
-
- A function declaration should not have its name in column zero. A
-function definition should have its name in column zero.
-
- /* Declaration */
- static void foo (void);
- /* Definition */
- void
- foo (void)
- {
- }
-
- _Pragmatics: This simplifies scripting. Function definitions can be
-found using `^function-name'._
-
- There must be a space between a function or macro name and the
-opening parenthesis of its argument list (except for macro definitions,
-as required by C). There must not be a space after an open
-paren/bracket or before a close paren/bracket.
-
- While additional whitespace is generally helpful for reading, do not
-use more than one blank line to separate blocks, and avoid adding
-whitespace after the end of a program line (as of 1/99, some 600 lines
-had whitespace after the semicolon). Excess whitespace causes
-difficulties for `diff' and `patch' utilities.
-
- Pointers are declared using the traditional K&R C style:
-
- void *foo;
-
-and not:
-
- void * foo;
- void* foo;
-
-Comments
---------
-
-The standard GNU requirements on comments must be followed strictly.
-
- Block comments must appear in the following form, with no `/*'- or
-`*/'-only lines, and no leading `*':
-
- /* Wait for control to return from inferior to debugger. If inferior
- gets a signal, we may decide to start it up again instead of
- returning. That is why there is a loop in this function. When
- this function actually returns it means the inferior should be left
- stopped and GDB should read more commands. */
-
- (Note that this format is encouraged by Emacs; tabbing for a
-multi-line comment works correctly, and `M-q' fills the block
-consistently.)
-
- Put a blank line between the block comments preceding function or
-variable definitions, and the definition itself.
-
- In general, put function-body comments on lines by themselves, rather
-than trying to fit them into the 20 characters left at the end of a
-line, since either the comment or the code will inevitably get longer
-than will fit, and then somebody will have to move it anyhow.
-
-C Usage
--------
-
-Code must not depend on the sizes of C data types, the format of the
-host's floating point numbers, the alignment of anything, or the order
-of evaluation of expressions.
-
- Use functions freely. There are only a handful of compute-bound
-areas in GDB that might be affected by the overhead of a function call,
-mainly in symbol reading. Most of GDB's performance is limited by the
-target interface (whether serial line or system call).
-
- However, use functions with moderation. A thousand one-line
-functions are just as hard to understand as a single thousand-line
-function.
-
- _Macros are bad, M'kay._ (But if you have to use a macro, make sure
-that the macro arguments are protected with parentheses.)
-
- Declarations like `struct foo *' should be used in preference to
-declarations like `typedef struct foo { ... } *foo_ptr'.
-
-Function Prototypes
--------------------
-
-Prototypes must be used when both _declaring_ and _defining_ a
-function. Prototypes for GDB functions must include both the argument
-type and name, with the name matching that used in the actual function
-definition.
-
- All external functions should have a declaration in a header file
-that callers include, except for `_initialize_*' functions, which must
-be external so that `init.c' construction works, but shouldn't be
-visible to random source files.
-
- Where a source file needs a forward declaration of a static function,
-that declaration must appear in a block near the top of the source file.
-
-Internal Error Recovery
------------------------
-
-During its execution, GDB can encounter two types of errors. User
-errors and internal errors. User errors include not only a user
-entering an incorrect command but also problems arising from corrupt
-object files and system errors when interacting with the target.
-Internal errors include situations where GDB has detected, at run time,
-a corrupt or erroneous situation.
-
- When reporting an internal error, GDB uses `internal_error' and
-`gdb_assert'.
-
- GDB must not call `abort' or `assert'.
-
- _Pragmatics: There is no `internal_warning' function. Either the
-code detected a user error, recovered from it and issued a `warning' or
-the code failed to correctly recover from the user error and issued an
-`internal_error'._
-
-File Names
-----------
-
-Any file used when building the core of GDB must be in lower case. Any
-file used when building the core of GDB must be 8.3 unique. These
-requirements apply to both source and generated files.
-
- _Pragmatics: The core of GDB must be buildable on many platforms
-including DJGPP and MacOS/HFS. Every time an unfriendly file is
-introduced to the build process both `Makefile.in' and `configure.in'
-need to be modified accordingly. Compare the convoluted conversion
-process needed to transform `COPYING' into `copying.c' with the
-conversion needed to transform `version.in' into `version.c'._
-
- Any file non 8.3 compliant file (that is not used when building the
-core of GDB) must be added to `gdb/config/djgpp/fnchange.lst'.
-
- _Pragmatics: This is clearly a compromise._
-
- When GDB has a local version of a system header file (ex `string.h')
-the file name based on the POSIX header prefixed with `gdb_'
-(`gdb_string.h'). These headers should be relatively independent: they
-should use only macros defined by `configure', the compiler, or the
-host; they should include only system headers; they should refer only
-to system types. They may be shared between multiple programs, e.g.
-GDB and GDBSERVER.
-
- For other files `-' is used as the separator.
-
-Include Files
--------------
-
-A `.c' file should include `defs.h' first.
-
- A `.c' file should directly include the `.h' file of every
-declaration and/or definition it directly refers to. It cannot rely on
-indirect inclusion.
-
- A `.h' file should directly include the `.h' file of every
-declaration and/or definition it directly refers to. It cannot rely on
-indirect inclusion. Exception: The file `defs.h' does not need to be
-directly included.
-
- An external declaration should only appear in one include file.
-
- An external declaration should never appear in a `.c' file.
-Exception: a declaration for the `_initialize' function that pacifies
-`-Wmissing-declaration'.
-
- A `typedef' definition should only appear in one include file.
-
- An opaque `struct' declaration can appear in multiple `.h' files.
-Where possible, a `.h' file should use an opaque `struct' declaration
-instead of an include.
-
- All `.h' files should be wrapped in:
-
- #ifndef INCLUDE_FILE_NAME_H
- #define INCLUDE_FILE_NAME_H
- header body
- #endif
-
-Clean Design and Portable Implementation
-----------------------------------------
-
-In addition to getting the syntax right, there's the little question of
-semantics. Some things are done in certain ways in GDB because long
-experience has shown that the more obvious ways caused various kinds of
-trouble.
-
- You can't assume the byte order of anything that comes from a target
-(including VALUEs, object files, and instructions). Such things must
-be byte-swapped using `SWAP_TARGET_AND_HOST' in GDB, or one of the swap
-routines defined in `bfd.h', such as `bfd_get_32'.
-
- You can't assume that you know what interface is being used to talk
-to the target system. All references to the target must go through the
-current `target_ops' vector.
-
- You can't assume that the host and target machines are the same
-machine (except in the "native" support modules). In particular, you
-can't assume that the target machine's header files will be available
-on the host machine. Target code must bring along its own header files
-- written from scratch or explicitly donated by their owner, to avoid
-copyright problems.
-
- Insertion of new `#ifdef''s will be frowned upon. It's much better
-to write the code portably than to conditionalize it for various
-systems.
-
- New `#ifdef''s which test for specific compilers or manufacturers or
-operating systems are unacceptable. All `#ifdef''s should test for
-features. The information about which configurations contain which
-features should be segregated into the configuration files. Experience
-has proven far too often that a feature unique to one particular system
-often creeps into other systems; and that a conditional based on some
-predefined macro for your current system will become worthless over
-time, as new versions of your system come out that behave differently
-with regard to this feature.
-
- Adding code that handles specific architectures, operating systems,
-target interfaces, or hosts, is not acceptable in generic code.
-
- One particularly notorious area where system dependencies tend to
-creep in is handling of file names. The mainline GDB code assumes
-Posix semantics of file names: absolute file names begin with a forward
-slash `/', slashes are used to separate leading directories,
-case-sensitive file names. These assumptions are not necessarily true
-on non-Posix systems such as MS-Windows. To avoid system-dependent
-code where you need to take apart or construct a file name, use the
-following portable macros:
-
-`HAVE_DOS_BASED_FILE_SYSTEM'
- This preprocessing symbol is defined to a non-zero value on hosts
- whose filesystems belong to the MS-DOS/MS-Windows family. Use this
- symbol to write conditional code which should only be compiled for
- such hosts.
-
-`IS_DIR_SEPARATOR (C)'
- Evaluates to a non-zero value if C is a directory separator
- character. On Unix and GNU/Linux systems, only a slash `/' is
- such a character, but on Windows, both `/' and `\' will pass.
-
-`IS_ABSOLUTE_PATH (FILE)'
- Evaluates to a non-zero value if FILE is an absolute file name.
- For Unix and GNU/Linux hosts, a name which begins with a slash `/'
- is absolute. On DOS and Windows, `d:/foo' and `x:\bar' are also
- absolute file names.
-
-`FILENAME_CMP (F1, F2)'
- Calls a function which compares file names F1 and F2 as
- appropriate for the underlying host filesystem. For Posix systems,
- this simply calls `strcmp'; on case-insensitive filesystems it
- will call `strcasecmp' instead.
-
-`DIRNAME_SEPARATOR'
- Evaluates to a character which separates directories in
- `PATH'-style lists, typically held in environment variables. This
- character is `:' on Unix, `;' on DOS and Windows.
-
-`SLASH_STRING'
- This evaluates to a constant string you should use to produce an
- absolute filename from leading directories and the file's basename.
- `SLASH_STRING' is `"/"' on most systems, but might be `"\\"' for
- some Windows-based ports.
-
- In addition to using these macros, be sure to use portable library
-functions whenever possible. For example, to extract a directory or a
-basename part from a file name, use the `dirname' and `basename'
-library functions (available in `libiberty' for platforms which don't
-provide them), instead of searching for a slash with `strrchr'.
-
- Another way to generalize GDB along a particular interface is with an
-attribute struct. For example, GDB has been generalized to handle
-multiple kinds of remote interfaces--not by `#ifdef's everywhere, but
-by defining the `target_ops' structure and having a current target (as
-well as a stack of targets below it, for memory references). Whenever
-something needs to be done that depends on which remote interface we are
-using, a flag in the current target_ops structure is tested (e.g.,
-`target_has_stack'), or a function is called through a pointer in the
-current target_ops structure. In this way, when a new remote interface
-is added, only one module needs to be touched--the one that actually
-implements the new remote interface. Other examples of
-attribute-structs are BFD access to multiple kinds of object file
-formats, or GDB's access to multiple source languages.
-
- Please avoid duplicating code. For example, in GDB 3.x all the code
-interfacing between `ptrace' and the rest of GDB was duplicated in
-`*-dep.c', and so changing something was very painful. In GDB 4.x,
-these have all been consolidated into `infptrace.c'. `infptrace.c' can
-deal with variations between systems the same way any system-independent
-file would (hooks, `#if defined', etc.), and machines which are
-radically different don't need to use `infptrace.c' at all.
-
- All debugging code must be controllable using the `set debug MODULE'
-command. Do not use `printf' to print trace messages. Use
-`fprintf_unfiltered(gdb_stdlog, ...'. Do not use `#ifdef DEBUG'.
-
-
-File: gdbint.info, Node: Porting GDB, Next: Releasing GDB, Prev: Coding, Up: Top
-
-Porting GDB
-***********
-
-Most of the work in making GDB compile on a new machine is in
-specifying the configuration of the machine. This is done in a
-dizzying variety of header files and configuration scripts, which we
-hope to make more sensible soon. Let's say your new host is called an
-XYZ (e.g., `sun4'), and its full three-part configuration name is
-`ARCH-XVEND-XOS' (e.g., `sparc-sun-sunos4'). In particular:
-
- * In the top level directory, edit `config.sub' and add ARCH, XVEND,
- and XOS to the lists of supported architectures, vendors, and
- operating systems near the bottom of the file. Also, add XYZ as
- an alias that maps to `ARCH-XVEND-XOS'. You can test your changes
- by running
-
- ./config.sub XYZ
-
- and
-
- ./config.sub `ARCH-XVEND-XOS'
-
- which should both respond with `ARCH-XVEND-XOS' and no error
- messages.
-
- You need to port BFD, if that hasn't been done already. Porting
- BFD is beyond the scope of this manual.
-
- * To configure GDB itself, edit `gdb/configure.host' to recognize
- your system and set `gdb_host' to XYZ, and (unless your desired
- target is already available) also edit `gdb/configure.tgt',
- setting `gdb_target' to something appropriate (for instance, XYZ).
-
- _Maintainer's note: Work in progress. The file
- `gdb/configure.host' originally needed to be modified when either a
- new native target or a new host machine was being added to GDB.
- Recent changes have removed this requirement. The file now only
- needs to be modified when adding a new native configuration. This
- will likely changed again in the future._
-
- * Finally, you'll need to specify and define GDB's host-, native-,
- and target-dependent `.h' and `.c' files used for your
- configuration.
-
-
-File: gdbint.info, Node: Releasing GDB, Next: Testsuite, Prev: Porting GDB, Up: Top
-
-Releasing GDB
-*************
-
-Versions and Branches
-=====================
-
-Version Identifiers
--------------------
-
-GDB's version is determined by the file `gdb/version.in'.
-
- GDB's mainline uses ISO dates to differentiate between versions.
-The CVS repository uses YYYY-MM-DD-cvs while the corresponding snapshot
-uses YYYYMMDD.
-
- GDB's release branch uses a slightly more complicated scheme. When
-the branch is first cut, the mainline version identifier is prefixed
-with the MAJOR.MINOR from of the previous release series but with .90
-appended. As draft releases are drawn from the branch, the minor minor
-number (.90) is incremented. Once the first release (M.N) has been
-made, the version prefix is updated to M.N.0.90 (dot zero, dot ninety).
-Follow on releases have an incremented minor minor version number (.0).
-
- Using 5.1 (previous) and 5.2 (current), the example below
-illustrates a typical sequence of version identifiers:
-
-5.1.1
- final release from previous branch
-
-2002-03-03-cvs
- main-line the day the branch is cut
-
-5.1.90-2002-03-03-cvs
- corresponding branch version
-
-5.1.91
- first draft release candidate
-
-5.1.91-2002-03-17-cvs
- updated branch version
-
-5.1.92
- second draft release candidate
-
-5.1.92-2002-03-31-cvs
- updated branch version
-
-5.1.93
- final release candidate (see below)
-
-5.2
- official release
-
-5.2.0.90-2002-04-07-cvs
- updated CVS branch version
-
-5.2.1
- second official release
-
- Notes:
-
- * Minor minor minor draft release candidates such as 5.2.0.91 have
- been omitted from the example. Such release candidates are,
- typically, never made.
-
- * For 5.1.93 the bziped tar ball `gdb-5.1.93.tar.bz2' is just the
- official `gdb-5.2.tar' renamed and compressed.
-
- To avoid version conflicts, vendors are expected to modify the file
-`gdb/version.in' to include a vendor unique alphabetic identifier (an
-official GDB release never uses alphabetic characters in its version
-identifer).
-
- Since GDB does not make minor minor minor releases (e.g., 5.1.0.1)
-the conflict between that and a minor minor draft release identifier
-(e.g., 5.1.0.90) is avoided.
-
-Branches
---------
-
-GDB draws a release series (5.2, 5.2.1, ...) from a single release
-branch (gdb_5_2-branch). Since minor minor minor releases (5.1.0.1)
-are not made, the need to branch the release branch is avoided (it also
-turns out that the effort required for such a a branch and release is
-significantly greater than the effort needed to create a new release
-from the head of the release branch).
-
- Releases 5.0 and 5.1 used branch and release tags of the form:
-
- gdb_N_M-YYYY-MM-DD-branchpoint
- gdb_N_M-YYYY-MM-DD-branch
- gdb_M_N-YYYY-MM-DD-release
-
- Release 5.2 is trialing the branch and release tags:
-
- gdb_N_M-YYYY-MM-DD-branchpoint
- gdb_N_M-branch
- gdb_M_N-YYYY-MM-DD-release
-
- _Pragmatics: The branchpoint and release tags need to identify when
-a branch and release are made. The branch tag, denoting the head of the
-branch, does not have this criteria._
-
-Branch Commit Policy
-====================
-
-The branch commit policy is pretty slack. GDB releases 5.0, 5.1 and
-5.2 all used the below:
-
- * The `gdb/MAINTAINERS' file still holds.
-
- * Don't fix something on the branch unless/until it is also fixed in
- the trunk. If this isn't possible, mentioning it in the
- `gdb/PROBLEMS' file is better than committing a hack.
-
- * When considering a patch for the branch, suggested criteria
- include: Does it fix a build? Does it fix the sequence `break
- main; run' when debugging a static binary?
-
- * The further a change is from the core of GDB, the less likely the
- change will worry anyone (e.g., target specific code).
-
- * Only post a proposal to change the core of GDB after you've sent
- individual bribes to all the people listed in the `MAINTAINERS'
- file ;-)
-
- _Pragmatics: Provided updates are restricted to non-core
-functionality there is little chance that a broken change will be fatal.
-This means that changes such as adding a new architectures or (within
-reason) support for a new host are considered acceptable._
-
-Obsoleting code
-===============
-
-Before anything else, poke the other developers (and around the source
-code) to see if there is anything that can be removed from GDB (an old
-target, an unused file).
-
- Obsolete code is identified by adding an `OBSOLETE' prefix to every
-line. Doing this means that it is easy to identify something that has
-been obsoleted when greping through the sources.
-
- The process is done in stages -- this is mainly to ensure that the
-wider GDB community has a reasonable opportunity to respond. Remember,
-everything on the Internet takes a week.
-
- 1. Post the proposal on the GDB mailing list <gdb@sources.redhat.com>
- Creating a bug report to track the task's state, is also highly
- recommended.
-
- 2. Wait a week or so.
-
- 3. Post the proposal on the GDB Announcement mailing list
- <gdb-announce@sources.redhat.com>.
-
- 4. Wait a week or so.
-
- 5. Go through and edit all relevant files and lines so that they are
- prefixed with the word `OBSOLETE'.
-
- 6. Wait until the next GDB version, containing this obsolete code,
- has been released.
-
- 7. Remove the obsolete code.
-
-_Maintainer note: While removing old code is regrettable it is
-hopefully better for GDB's long term development. Firstly it helps the
-developers by removing code that is either no longer relevant or simply
-wrong. Secondly since it removes any history associated with the file
-(effectively clearing the slate) the developer has a much freer hand
-when it comes to fixing broken files._
-
-Before the Branch
-=================
-
-The most important objective at this stage is to find and fix simple
-changes that become a pain to track once the branch is created. For
-instance, configuration problems that stop GDB from even building. If
-you can't get the problem fixed, document it in the `gdb/PROBLEMS' file.
-
-Prompt for `gdb/NEWS'
----------------------
-
-People always forget. Send a post reminding them but also if you know
-something interesting happened add it yourself. The `schedule' script
-will mention this in its e-mail.
-
-Review `gdb/README'
--------------------
-
-Grab one of the nightly snapshots and then walk through the
-`gdb/README' looking for anything that can be improved. The `schedule'
-script will mention this in its e-mail.
-
-Refresh any imported files.
----------------------------
-
-A number of files are taken from external repositories. They include:
-
- * `texinfo/texinfo.tex'
-
- * `config.guess' et. al. (see the top-level `MAINTAINERS' file)
-
- * `etc/standards.texi', `etc/make-stds.texi'
-
-Check the ARI
--------------
-
-A.R.I. is an `awk' script (Awk Regression Index ;-) that checks for a
-number of errors and coding conventions. The checks include things
-like using `malloc' instead of `xmalloc' and file naming problems.
-There shouldn't be any regressions.
-
-Review the bug data base
-------------------------
-
-Close anything obviously fixed.
-
-Check all cross targets build
------------------------------
-
-The targets are listed in `gdb/MAINTAINERS'.
-
-Cut the Branch
-==============
-
-Create the branch
------------------
-
- $ u=5.1
- $ v=5.2
- $ V=`echo $v | sed 's/\./_/g'`
- $ D=`date -u +%Y-%m-%d`
- $ echo $u $V $D
- 5.1 5_2 2002-03-03
- $ echo cvs -f -d :ext:sources.redhat.com:/cvs/src rtag \
- -D $D-gmt gdb_$V-$D-branchpoint insight+dejagnu
- cvs -f -d :ext:sources.redhat.com:/cvs/src rtag
- -D 2002-03-03-gmt gdb_5_2-2002-03-03-branchpoint insight+dejagnu
- $ ^echo ^^
- ...
- $ echo cvs -f -d :ext:sources.redhat.com:/cvs/src rtag \
- -b -r gdb_$V-$D-branchpoint gdb_$V-branch insight+dejagnu
- cvs -f -d :ext:sources.redhat.com:/cvs/src rtag \
- -b -r gdb_5_2-2002-03-03-branchpoint gdb_5_2-branch insight+dejagnu
- $ ^echo ^^
- ...
- $
-
- * by using `-D YYYY-MM-DD-gmt' the branch is forced to an exact
- date/time.
-
- * the trunk is first taged so that the branch point can easily be
- found
-
- * Insight (which includes GDB) and dejagnu are all tagged at the
- same time
-
- * `version.in' gets bumped to avoid version number conflicts
-
- * the reading of `.cvsrc' is disabled using `-f'
-
-Update `version.in'
--------------------
-
- $ u=5.1
- $ v=5.2
- $ V=`echo $v | sed 's/\./_/g'`
- $ echo $u $v$V
- 5.1 5_2
- $ cd /tmp
- $ echo cvs -f -d :ext:sources.redhat.com:/cvs/src co \
- -r gdb_$V-branch src/gdb/version.in
- cvs -f -d :ext:sources.redhat.com:/cvs/src co
- -r gdb_5_2-branch src/gdb/version.in
- $ ^echo ^^
- U src/gdb/version.in
- $ cd src/gdb
- $ echo $u.90-0000-00-00-cvs > version.in
- $ cat version.in
- 5.1.90-0000-00-00-cvs
- $ cvs -f commit version.in
-
- * `0000-00-00' is used as a date to pump prime the version.in update
- mechanism
-
- * `.90' and the previous branch version are used as fairly arbitrary
- initial branch version number
-
-Update the web and news pages
------------------------------
-
-Something?
-
-Tweak cron to track the new branch
-----------------------------------
-
-The file `gdbadmin/cron/crontab' contains gdbadmin's cron table. This
-file needs to be updated so that:
-
- * a daily timestamp is added to the file `version.in'
-
- * the new branch is included in the snapshot process
-
-See the file `gdbadmin/cron/README' for how to install the updated cron
-table.
-
- The file `gdbadmin/ss/README' should also be reviewed to reflect any
-changes. That file is copied to both the branch/ and current/ snapshot
-directories.
-
-Update the NEWS and README files
---------------------------------
-
-The `NEWS' file needs to be updated so that on the branch it refers to
-_changes in the current release_ while on the trunk it also refers to
-_changes since the current release_.
-
- The `README' file needs to be updated so that it refers to the
-current release.
-
-Post the branch info
---------------------
-
-Send an announcement to the mailing lists:
-
- * GDB Announcement mailing list <gdb-announce@sources.redhat.com>
-
- * GDB Discsussion mailing list <gdb@sources.redhat.com> and GDB
- Discsussion mailing list <gdb-testers@sources.redhat.com>
-
- _Pragmatics: The branch creation is sent to the announce list to
-ensure that people people not subscribed to the higher volume discussion
-list are alerted._
-
- The announcement should include:
-
- * the branch tag
-
- * how to check out the branch using CVS
-
- * the date/number of weeks until the release
-
- * the branch commit policy still holds.
-
-Stabilize the branch
-====================
-
-Something goes here.
-
-Create a Release
-================
-
-The process of creating and then making available a release is broken
-down into a number of stages. The first part addresses the technical
-process of creating a releasable tar ball. The later stages address the
-process of releasing that tar ball.
-
- When making a release candidate just the first section is needed.
-
-Create a release candidate
---------------------------
-
-The objective at this stage is to create a set of tar balls that can be
-made available as a formal release (or as a less formal release
-candidate).
-
-Freeze the branch
-.................
-
-Send out an e-mail notifying everyone that the branch is frozen to
-<gdb-patches@sources.redhat.com>.
-
-Establish a few defaults.
-.........................
-
- $ b=gdb_5_2-branch
- $ v=5.2
- $ t=/sourceware/snapshot-tmp/gdbadmin-tmp
- $ echo $t/$b/$v
- /sourceware/snapshot-tmp/gdbadmin-tmp/gdb_5_2-branch/5.2
- $ mkdir -p $t/$b/$v
- $ cd $t/$b/$v
- $ pwd
- /sourceware/snapshot-tmp/gdbadmin-tmp/gdb_5_2-branch/5.2
- $ which autoconf
- /home/gdbadmin/bin/autoconf
- $
-
-Notes:
-
- * Check the `autoconf' version carefully. You want to be using the
- version taken from the `binutils' snapshot directory, which can be
- found at `ftp://sources.redhat.com/pub/binutils/'. It is very
- unlikely that a system installed version of `autoconf' (e.g.,
- `/usr/bin/autoconf') is correct.
-
-Check out the relevant modules:
-...............................
-
- $ for m in gdb insight dejagnu
- do
- ( mkdir -p $m && cd $m && cvs -q -f -d /cvs/src co -P -r $b $m )
- done
- $
-
-Note:
-
- * The reading of `.cvsrc' is disabled (`-f') so that there isn't any
- confusion between what is written here and what your local `cvs'
- really does.
-
-Update relevant files.
-......................
-
-`gdb/NEWS'
- Major releases get their comments added as part of the mainline.
- Minor releases should probably mention any significant bugs that
- were fixed.
-
- Don't forget to include the `ChangeLog' entry.
-
- $ emacs gdb/src/gdb/NEWS
- ...
- c-x 4 a
- ...
- c-x c-s c-x c-c
- $ cp gdb/src/gdb/NEWS insight/src/gdb/NEWS
- $ cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog
-
-`gdb/README'
- You'll need to update:
-
- * the version
-
- * the update date
-
- * who did it
-
- $ emacs gdb/src/gdb/README
- ...
- c-x 4 a
- ...
- c-x c-s c-x c-c
- $ cp gdb/src/gdb/README insight/src/gdb/README
- $ cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog
-
- _Maintainer note: Hopefully the `README' file was reviewed before
- the initial branch was cut so just a simple substitute is needed
- to get it updated._
-
- _Maintainer note: Other projects generate `README' and `INSTALL'
- from the core documentation. This might be worth pursuing._
-
-`gdb/version.in'
- $ echo $v > gdb/src/gdb/version.in
- $ cat gdb/src/gdb/version.in
- 5.2
- $ emacs gdb/src/gdb/version.in
- ...
- c-x 4 a
- ... Bump to version ...
- c-x c-s c-x c-c
- $ cp gdb/src/gdb/version.in insight/src/gdb/version.in
- $ cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog
-
-`dejagnu/src/dejagnu/configure.in'
- Dejagnu is more complicated. The version number is a parameter to
- `AM_INIT_AUTOMAKE'. Tweak it to read something like gdb-5.1.91.
-
- Don't forget to re-generate `configure'.
-
- Don't forget to include a `ChangeLog' entry.
-
- $ emacs dejagnu/src/dejagnu/configure.in
- ...
- c-x 4 a
- ...
- c-x c-s c-x c-c
- $ ( cd dejagnu/src/dejagnu && autoconf )
-
-
-Do the dirty work
-.................
-
-This is identical to the process used to create the daily snapshot.
-
- $ for m in gdb insight
- do
- ( cd $m/src && gmake -f src-release $m.tar )
- done
- $ ( m=dejagnu; cd $m/src && gmake -f src-release $m.tar.bz2 )
-
- If the top level source directory does not have `src-release' (GDB
-version 5.3.1 or earlier), try these commands instead:
-
- $ for m in gdb insight
- do
- ( cd $m/src && gmake -f Makefile.in $m.tar )
- done
- $ ( m=dejagnu; cd $m/src && gmake -f Makefile.in $m.tar.bz2 )
-
-Check the source files
-......................
-
-You're looking for files that have mysteriously disappeared.
-`distclean' has the habit of deleting files it shouldn't. Watch out
-for the `version.in' update `cronjob'.
-
- $ ( cd gdb/src && cvs -f -q -n update )
- M djunpack.bat
- ? gdb-5.1.91.tar
- ? proto-toplev
- ... lots of generated files ...
- M gdb/ChangeLog
- M gdb/NEWS
- M gdb/README
- M gdb/version.in
- ... lots of generated files ...
- $
-
-_Don't worry about the `gdb.info-??' or `gdb/p-exp.tab.c'. They were
-generated (and yes `gdb.info-1' was also generated only something
-strange with CVS means that they didn't get supressed). Fixing it
-would be nice though._
-
-Create compressed versions of the release
-.........................................
-
- $ cp */src/*.tar .
- $ cp */src/*.bz2 .
- $ ls -F
- dejagnu/ dejagnu-gdb-5.2.tar.bz2 gdb/ gdb-5.2.tar insight/ insight-5.2.tar
- $ for m in gdb insight
- do
- bzip2 -v -9 -c $m-$v.tar > $m-$v.tar.bz2
- gzip -v -9 -c $m-$v.tar > $m-$v.tar.gz
- done
- $
-
-Note:
-
- * A pipe such as `bunzip2 < xxx.bz2 | gzip -9 > xxx.gz' is not since,
- in that mode, `gzip' does not know the name of the file and, hence,
- can not include it in the compressed file. This is also why the
- release process runs `tar' and `bzip2' as separate passes.
-
-Sanity check the tar ball
--------------------------
-
-Pick a popular machine (Solaris/PPC?) and try the build on that.
-
- $ bunzip2 < gdb-5.2.tar.bz2 | tar xpf -
- $ cd gdb-5.2
- $ ./configure
- $ make
- ...
- $ ./gdb/gdb ./gdb/gdb
- GNU gdb 5.2
- ...
- (gdb) b main
- Breakpoint 1 at 0x80732bc: file main.c, line 734.
- (gdb) run
- Starting program: /tmp/gdb-5.2/gdb/gdb
-
- Breakpoint 1, main (argc=1, argv=0xbffff8b4) at main.c:734
- 734 catch_errors (captured_main, &args, "", RETURN_MASK_ALL);
- (gdb) print args
- $1 = {argc = 136426532, argv = 0x821b7f0}
- (gdb)
-
-Make a release candidate available
-----------------------------------
-
-If this is a release candidate then the only remaining steps are:
-
- 1. Commit `version.in' and `ChangeLog'
-
- 2. Tweak `version.in' (and `ChangeLog' to read L.M.N-0000-00-00-cvs
- so that the version update process can restart.
-
- 3. Make the release candidate available in
- `ftp://sources.redhat.com/pub/gdb/snapshots/branch'
-
- 4. Notify the relevant mailing lists ( <gdb@sources.redhat.com> and
- <gdb-testers@sources.redhat.com> that the candidate is available.
-
-Make a formal release available
--------------------------------
-
-(And you thought all that was required was to post an e-mail.)
-
-Install on sware
-................
-
-Copy the new files to both the release and the old release directory:
-
- $ cp *.bz2 *.gz ~ftp/pub/gdb/old-releases/
- $ cp *.bz2 *.gz ~ftp/pub/gdb/releases
-
-Clean up the releases directory so that only the most recent releases
-are available (e.g. keep 5.2 and 5.2.1 but remove 5.1):
-
- $ cd ~ftp/pub/gdb/releases
- $ rm ...
-
-Update the file `README' and `.message' in the releases directory:
-
- $ vi README
- ...
- $ rm -f .message
- $ ln README .message
-
-Update the web pages.
-.....................
-
-`htdocs/download/ANNOUNCEMENT'
- This file, which is posted as the official announcement, includes:
- * General announcement
-
- * News. If making an M.N.1 release, retain the news from
- earlier M.N release.
-
- * Errata
-
-`htdocs/index.html'
-`htdocs/news/index.html'
-`htdocs/download/index.html'
- These files include:
- * announcement of the most recent release
-
- * news entry (remember to update both the top level and the
- news directory).
- These pages also need to be regenerate using `index.sh'.
-
-`download/onlinedocs/'
- You need to find the magic command that is used to generate the
- online docs from the `.tar.bz2'. The best way is to look in the
- output from one of the nightly `cron' jobs and then just edit
- accordingly. Something like:
-
- $ ~/ss/update-web-docs \
- ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
- $PWD/www \
- /www/sourceware/htdocs/gdb/download/onlinedocs \
- gdb
-
-`download/ari/'
- Just like the online documentation. Something like:
-
- $ /bin/sh ~/ss/update-web-ari \
- ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
- $PWD/www \
- /www/sourceware/htdocs/gdb/download/ari \
- gdb
-
-
-Shadow the pages onto gnu
-.........................
-
-Something goes here.
-
-Install the GDB tar ball on GNU
-...............................
-
-At the time of writing, the GNU machine was `gnudist.gnu.org' in
-`~ftp/gnu/gdb'.
-
-Make the `ANNOUNCEMENT'
-.......................
-
-Post the `ANNOUNCEMENT' file you created above to:
-
- * GDB Announcement mailing list <gdb-announce@sources.redhat.com>
-
- * General GNU Announcement list <info-gnu@gnu.org> (but delay it a
- day or so to let things get out)
-
- * GDB Bug Report mailing list <bug-gdb@gnu.org>
-
-Cleanup
--------
-
-The release is out but you're still not finished.
-
-Commit outstanding changes
-..........................
-
-In particular you'll need to commit any changes to:
-
- * `gdb/ChangeLog'
-
- * `gdb/version.in'
-
- * `gdb/NEWS'
-
- * `gdb/README'
-
-Tag the release
-...............
-
-Something like:
-
- $ d=`date -u +%Y-%m-%d`
- $ echo $d
- 2002-01-24
- $ ( cd insight/src/gdb && cvs -f -q update )
- $ ( cd insight/src && cvs -f -q tag gdb_5_2-$d-release )
-
- Insight is used since that contains more of the release than GDB
-(`dejagnu' doesn't get tagged but I think we can live with that).
-
-Mention the release on the trunk
-................................
-
-Just put something in the `ChangeLog' so that the trunk also indicates
-when the release was made.
-
-Restart `gdb/version.in'
-........................
-
-If `gdb/version.in' does not contain an ISO date such as `2002-01-24'
-then the daily `cronjob' won't update it. Having committed all the
-release changes it can be set to `5.2.0_0000-00-00-cvs' which will
-restart things (yes the `_' is important - it affects the snapshot
-process).
-
- Don't forget the `ChangeLog'.
-
-Merge into trunk
-................
-
-The files committed to the branch may also need changes merged into the
-trunk.
-
-Revise the release schedule
-...........................
-
-Post a revised release schedule to GDB Discussion List
-<gdb@sources.redhat.com> with an updated announcement. The schedule
-can be generated by running:
-
- $ ~/ss/schedule `date +%s` schedule
-
-The first parameter is approximate date/time in seconds (from the epoch)
-of the most recent release.
-
- Also update the schedule `cronjob'.
-
-Post release
-============
-
-Remove any `OBSOLETE' code.
-
-
-File: gdbint.info, Node: Testsuite, Next: Hints, Prev: Releasing GDB, Up: Top
-
-Testsuite
-*********
-
-The testsuite is an important component of the GDB package. While it
-is always worthwhile to encourage user testing, in practice this is
-rarely sufficient; users typically use only a small subset of the
-available commands, and it has proven all too common for a change to
-cause a significant regression that went unnoticed for some time.
-
- The GDB testsuite uses the DejaGNU testing framework. DejaGNU is
-built using `Tcl' and `expect'. The tests themselves are calls to
-various `Tcl' procs; the framework runs all the procs and summarizes
-the passes and fails.
-
-Using the Testsuite
-===================
-
-To run the testsuite, simply go to the GDB object directory (or to the
-testsuite's objdir) and type `make check'. This just sets up some
-environment variables and invokes DejaGNU's `runtest' script. While
-the testsuite is running, you'll get mentions of which test file is in
-use, and a mention of any unexpected passes or fails. When the
-testsuite is finished, you'll get a summary that looks like this:
-
- === gdb Summary ===
-
- # of expected passes 6016
- # of unexpected failures 58
- # of unexpected successes 5
- # of expected failures 183
- # of unresolved testcases 3
- # of untested testcases 5
-
- The ideal test run consists of expected passes only; however, reality
-conspires to keep us from this ideal. Unexpected failures indicate
-real problems, whether in GDB or in the testsuite. Expected failures
-are still failures, but ones which have been decided are too hard to
-deal with at the time; for instance, a test case might work everywhere
-except on AIX, and there is no prospect of the AIX case being fixed in
-the near future. Expected failures should not be added lightly, since
-you may be masking serious bugs in GDB. Unexpected successes are
-expected fails that are passing for some reason, while unresolved and
-untested cases often indicate some minor catastrophe, such as the
-compiler being unable to deal with a test program.
-
- When making any significant change to GDB, you should run the
-testsuite before and after the change, to confirm that there are no
-regressions. Note that truly complete testing would require that you
-run the testsuite with all supported configurations and a variety of
-compilers; however this is more than really necessary. In many cases
-testing with a single configuration is sufficient. Other useful
-options are to test one big-endian (Sparc) and one little-endian (x86)
-host, a cross config with a builtin simulator (powerpc-eabi, mips-elf),
-or a 64-bit host (Alpha).
-
- If you add new functionality to GDB, please consider adding tests
-for it as well; this way future GDB hackers can detect and fix their
-changes that break the functionality you added. Similarly, if you fix
-a bug that was not previously reported as a test failure, please add a
-test case for it. Some cases are extremely difficult to test, such as
-code that handles host OS failures or bugs in particular versions of
-compilers, and it's OK not to try to write tests for all of those.
-
-Testsuite Organization
-======================
-
-The testsuite is entirely contained in `gdb/testsuite'. While the
-testsuite includes some makefiles and configury, these are very minimal,
-and used for little besides cleaning up, since the tests themselves
-handle the compilation of the programs that GDB will run. The file
-`testsuite/lib/gdb.exp' contains common utility procs useful for all
-GDB tests, while the directory `testsuite/config' contains
-configuration-specific files, typically used for special-purpose
-definitions of procs like `gdb_load' and `gdb_start'.
-
- The tests themselves are to be found in `testsuite/gdb.*' and
-subdirectories of those. The names of the test files must always end
-with `.exp'. DejaGNU collects the test files by wildcarding in the
-test directories, so both subdirectories and individual files get
-chosen and run in alphabetical order.
-
- The following table lists the main types of subdirectories and what
-they are for. Since DejaGNU finds test files no matter where they are
-located, and since each test file sets up its own compilation and
-execution environment, this organization is simply for convenience and
-intelligibility.
-
-`gdb.base'
- This is the base testsuite. The tests in it should apply to all
- configurations of GDB (but generic native-only tests may live
- here). The test programs should be in the subset of C that is
- valid K&R, ANSI/ISO, and C++ (`#ifdef's are allowed if necessary,
- for instance for prototypes).
-
-`gdb.LANG'
- Language-specific tests for any language LANG besides C. Examples
- are `gdb.cp' and `gdb.java'.
-
-`gdb.PLATFORM'
- Non-portable tests. The tests are specific to a specific
- configuration (host or target), such as HP-UX or eCos. Example is
- `gdb.hp', for HP-UX.
-
-`gdb.COMPILER'
- Tests specific to a particular compiler. As of this writing (June
- 1999), there aren't currently any groups of tests in this category
- that couldn't just as sensibly be made platform-specific, but one
- could imagine a `gdb.gcc', for tests of GDB's handling of GCC
- extensions.
-
-`gdb.SUBSYSTEM'
- Tests that exercise a specific GDB subsystem in more depth. For
- instance, `gdb.disasm' exercises various disassemblers, while
- `gdb.stabs' tests pathways through the stabs symbol reader.
-
-Writing Tests
-=============
-
-In many areas, the GDB tests are already quite comprehensive; you
-should be able to copy existing tests to handle new cases.
-
- You should try to use `gdb_test' whenever possible, since it
-includes cases to handle all the unexpected errors that might happen.
-However, it doesn't cost anything to add new test procedures; for
-instance, `gdb.base/exprs.exp' defines a `test_expr' that calls
-`gdb_test' multiple times.
-
- Only use `send_gdb' and `gdb_expect' when absolutely necessary, such
-as when GDB has several valid responses to a command.
-
- The source language programs do _not_ need to be in a consistent
-style. Since GDB is used to debug programs written in many different
-styles, it's worth having a mix of styles in the testsuite; for
-instance, some GDB bugs involving the display of source lines would
-never manifest themselves if the programs used GNU coding style
-uniformly.
-
-
-File: gdbint.info, Node: Hints, Next: GDB Observers, Prev: Testsuite, Up: Top
-
-Hints
-*****
-
-Check the `README' file, it often has useful information that does not
-appear anywhere else in the directory.
-
-* Menu:
-
-* Getting Started:: Getting started working on GDB
-* Debugging GDB:: Debugging GDB with itself
-
-
-File: gdbint.info, Node: Getting Started, Up: Hints
-
-Getting Started
-===============
-
-GDB is a large and complicated program, and if you first starting to
-work on it, it can be hard to know where to start. Fortunately, if you
-know how to go about it, there are ways to figure out what is going on.
-
- This manual, the GDB Internals manual, has information which applies
-generally to many parts of GDB.
-
- Information about particular functions or data structures are
-located in comments with those functions or data structures. If you
-run across a function or a global variable which does not have a
-comment correctly explaining what is does, this can be thought of as a
-bug in GDB; feel free to submit a bug report, with a suggested comment
-if you can figure out what the comment should say. If you find a
-comment which is actually wrong, be especially sure to report that.
-
- Comments explaining the function of macros defined in host, target,
-or native dependent files can be in several places. Sometimes they are
-repeated every place the macro is defined. Sometimes they are where the
-macro is used. Sometimes there is a header file which supplies a
-default definition of the macro, and the comment is there. This manual
-also documents all the available macros.
-
- Start with the header files. Once you have some idea of how GDB's
-internal symbol tables are stored (see `symtab.h', `gdbtypes.h'), you
-will find it much easier to understand the code which uses and creates
-those symbol tables.
-
- You may wish to process the information you are getting somehow, to
-enhance your understanding of it. Summarize it, translate it to another
-language, add some (perhaps trivial or non-useful) feature to GDB, use
-the code to predict what a test case would do and write the test case
-and verify your prediction, etc. If you are reading code and your eyes
-are starting to glaze over, this is a sign you need to use a more active
-approach.
-
- Once you have a part of GDB to start with, you can find more
-specifically the part you are looking for by stepping through each
-function with the `next' command. Do not use `step' or you will
-quickly get distracted; when the function you are stepping through
-calls another function try only to get a big-picture understanding
-(perhaps using the comment at the beginning of the function being
-called) of what it does. This way you can identify which of the
-functions being called by the function you are stepping through is the
-one which you are interested in. You may need to examine the data
-structures generated at each stage, with reference to the comments in
-the header files explaining what the data structures are supposed to
-look like.
-
- Of course, this same technique can be used if you are just reading
-the code, rather than actually stepping through it. The same general
-principle applies--when the code you are looking at calls something
-else, just try to understand generally what the code being called does,
-rather than worrying about all its details.
-
- A good place to start when tracking down some particular area is with
-a command which invokes that feature. Suppose you want to know how
-single-stepping works. As a GDB user, you know that the `step' command
-invokes single-stepping. The command is invoked via command tables
-(see `command.h'); by convention the function which actually performs
-the command is formed by taking the name of the command and adding
-`_command', or in the case of an `info' subcommand, `_info'. For
-example, the `step' command invokes the `step_command' function and the
-`info display' command invokes `display_info'. When this convention is
-not followed, you might have to use `grep' or `M-x tags-search' in
-emacs, or run GDB on itself and set a breakpoint in `execute_command'.
-
- If all of the above fail, it may be appropriate to ask for
-information on `bug-gdb'. But _never_ post a generic question like "I
-was wondering if anyone could give me some tips about understanding
-GDB"--if we had some magic secret we would put it in this manual.
-Suggestions for improving the manual are always welcome, of course.
-
-
-File: gdbint.info, Node: Debugging GDB, Up: Hints
-
-Debugging GDB with itself
-=========================
-
-If GDB is limping on your machine, this is the preferred way to get it
-fully functional. Be warned that in some ancient Unix systems, like
-Ultrix 4.2, a program can't be running in one process while it is being
-debugged in another. Rather than typing the command `./gdb ./gdb',
-which works on Suns and such, you can copy `gdb' to `gdb2' and then
-type `./gdb ./gdb2'.
-
- When you run GDB in the GDB source directory, it will read a
-`.gdbinit' file that sets up some simple things to make debugging gdb
-easier. The `info' command, when executed without a subcommand in a
-GDB being debugged by gdb, will pop you back up to the top level gdb.
-See `.gdbinit' for details.
-
- If you use emacs, you will probably want to do a `make TAGS' after
-you configure your distribution; this will put the machine dependent
-routines for your local machine where they will be accessed first by
-`M-.'
-
- Also, make sure that you've either compiled GDB with your local cc,
-or have run `fixincludes' if you are compiling with gcc.
-
-Submitting Patches
-==================
-
-Thanks for thinking of offering your changes back to the community of
-GDB users. In general we like to get well designed enhancements.
-Thanks also for checking in advance about the best way to transfer the
-changes.
-
- The GDB maintainers will only install "cleanly designed" patches.
-This manual summarizes what we believe to be clean design for GDB.
-
- If the maintainers don't have time to put the patch in when it
-arrives, or if there is any question about a patch, it goes into a
-large queue with everyone else's patches and bug reports.
-
- The legal issue is that to incorporate substantial changes requires a
-copyright assignment from you and/or your employer, granting ownership
-of the changes to the Free Software Foundation. You can get the
-standard documents for doing this by sending mail to `gnu@gnu.org' and
-asking for it. We recommend that people write in "All programs owned
-by the Free Software Foundation" as "NAME OF PROGRAM", so that changes
-in many programs (not just GDB, but GAS, Emacs, GCC, etc) can be
-contributed with only one piece of legalese pushed through the
-bureaucracy and filed with the FSF. We can't start merging changes
-until this paperwork is received by the FSF (their rules, which we
-follow since we maintain it for them).
-
- Technically, the easiest way to receive changes is to receive each
-feature as a small context diff or unidiff, suitable for `patch'. Each
-message sent to me should include the changes to C code and header
-files for a single feature, plus `ChangeLog' entries for each directory
-where files were modified, and diffs for any changes needed to the
-manuals (`gdb/doc/gdb.texinfo' or `gdb/doc/gdbint.texinfo'). If there
-are a lot of changes for a single feature, they can be split down into
-multiple messages.
-
- In this way, if we read and like the feature, we can add it to the
-sources with a single patch command, do some testing, and check it in.
-If you leave out the `ChangeLog', we have to write one. If you leave
-out the doc, we have to puzzle out what needs documenting. Etc., etc.
-
- The reason to send each change in a separate message is that we will
-not install some of the changes. They'll be returned to you with
-questions or comments. If we're doing our job correctly, the message
-back to you will say what you have to fix in order to make the change
-acceptable. The reason to have separate messages for separate features
-is so that the acceptable changes can be installed while one or more
-changes are being reworked. If multiple features are sent in a single
-message, we tend to not put in the effort to sort out the acceptable
-changes from the unacceptable, so none of the features get installed
-until all are acceptable.
-
- If this sounds painful or authoritarian, well, it is. But we get a
-lot of bug reports and a lot of patches, and many of them don't get
-installed because we don't have the time to finish the job that the bug
-reporter or the contributor could have done. Patches that arrive
-complete, working, and well designed, tend to get installed on the day
-they arrive. The others go into a queue and get installed as time
-permits, which, since the maintainers have many demands to meet, may not
-be for quite some time.
-
- Please send patches directly to the GDB maintainers
-<gdb-patches@sources.redhat.com>.
-
-Obsolete Conditionals
-=====================
-
-Fragments of old code in GDB sometimes reference or set the following
-configuration macros. They should not be used by new code, and old uses
-should be removed as those parts of the debugger are otherwise touched.
-
-`STACK_END_ADDR'
- This macro used to define where the end of the stack appeared, for
- use in interpreting core file formats that don't record this
- address in the core file itself. This information is now
- configured in BFD, and GDB gets the info portably from there. The
- values in GDB's configuration files should be moved into BFD
- configuration files (if needed there), and deleted from all of
- GDB's config files.
-
- Any `FOO-xdep.c' file that references STACK_END_ADDR is so old
- that it has never been converted to use BFD. Now that's old!
-
-
-
-File: gdbint.info, Node: GDB Observers, Next: GNU Free Documentation License, Prev: Hints, Up: Top
-
-GDB Currently available observers
-*********************************
-
-Implementation rationale
-========================
-
-An "observer" is an entity which is interested in being notified when
-GDB reaches certain states, or certain events occur in GDB. The entity
-being observed is called the "subject". To receive notifications, the
-observer attaches a callback to the subject. One subject can have
-several observers.
-
- `observer.c' implements an internal generic low-level event
-notification mechanism. This generic event notification mechanism is
-then re-used to implement the exported high-level notification
-management routines for all possible notifications.
-
- The current implementation of the generic observer provides support
-for contextual data. This contextual data is given to the subject when
-attaching the callback. In return, the subject will provide this
-contextual data back to the observer as a parameter of the callback.
-
- Note that the current support for the contextual data is only
-partial, as it lacks a mechanism that would deallocate this data when
-the callback is detached. This is not a problem so far, as this
-contextual data is only used internally to hold a function pointer.
-Later on, if a certain observer needs to provide support for user-level
-contextual data, then the generic notification mechanism will need to be
-enhanced to allow the observer to provide a routine to deallocate the
-data when attaching the callback.
-
- The observer implementation is also currently not reentrant. In
-particular, it is therefore not possible to call the attach or detach
-routines during a notification.
-
-`normal_stop' Notifications
-===========================
-
-GDB notifies all `normal_stop' observers when the inferior execution
-has just stopped, the associated messages and annotations have been
-printed, and the control is about to be returned to the user.
-
- Note that the `normal_stop' notification is not emitted when the
-execution stops due to a breakpoint, and this breakpoint has a
-condition that is not met. If the breakpoint has any associated
-commands list, the commands are executed after the notification is
-emitted.
-
- The following interface is available to manage `normal_stop'
-observers:
-
- - Function: extern struct observer *observer_attach_normal_stop
- (observer_normal_stop_ftype *F)
- Attach the given `normal_stop' callback function F and return the
- associated observer.
-
- - Function: extern void observer_detach_normal_stop (struct observer
- *OBSERVER);
- Remove OBSERVER from the list of observers to be notified when a
- `normal_stop' event occurs.
-
- - Function: extern void observer_notify_normal_stop (void);
- Send a notification to all `normal_stop' observers.
-
-
-File: gdbint.info, Node: GNU Free Documentation License, Next: Index, Prev: GDB Observers, Up: Top
-
-GNU Free Documentation License
-******************************
-
- Version 1.2, November 2002
- Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 0. PREAMBLE
-
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
-
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
-
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book.
- We recommend this License principally for works whose purpose is
- instruction or reference.
-
- 1. APPLICABILITY AND DEFINITIONS
-
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it
- can be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You
- accept the license if you copy, modify or distribute the work in a
- way requiring permission under copyright law.
-
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
-
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
-
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in
- the notice that says that the Document is released under this
- License. If a section does not fit the above definition of
- Secondary then it is not allowed to be designated as Invariant.
- The Document may contain zero Invariant Sections. If the Document
- does not identify any Invariant Sections then there are none.
-
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
-
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images
- composed of pixels) generic paint programs or (for drawings) some
- widely available drawing editor, and that is suitable for input to
- text formatters or for automatic translation to a variety of
- formats suitable for input to text formatters. A copy made in an
- otherwise Transparent file format whose markup, or absence of
- markup, has been arranged to thwart or discourage subsequent
- modification by readers is not Transparent. An image format is
- not Transparent if used for any substantial amount of text. A
- copy that is not "Transparent" is called "Opaque".
-
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and
- standard-conforming simple HTML, PostScript or PDF designed for
- human modification. Examples of transparent image formats include
- PNG, XCF and JPG. Opaque formats include proprietary formats that
- can be read and edited only by proprietary word processors, SGML or
- XML for which the DTD and/or processing tools are not generally
- available, and the machine-generated HTML, PostScript or PDF
- produced by some word processors for output purposes only.
-
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
-
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
-
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
-
- 2. VERBATIM COPYING
-
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow
- the conditions in section 3.
-
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
-
- 3. COPYING IN QUANTITY
-
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the
- title equally prominent and visible. You may add other material
- on the covers in addition. Copying with changes limited to the
- covers, as long as they preserve the title of the Document and
- satisfy these conditions, can be treated as verbatim copying in
- other respects.
-
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
-
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a
- machine-readable Transparent copy along with each Opaque copy, or
- state in or with each Opaque copy a computer-network location from
- which the general network-using public has access to download
- using public-standard network protocols a complete Transparent
- copy of the Document, free of added material. If you use the
- latter option, you must take reasonably prudent steps, when you
- begin distribution of Opaque copies in quantity, to ensure that
- this Transparent copy will remain thus accessible at the stated
- location until at least one year after the last time you
- distribute an Opaque copy (directly or through your agents or
- retailers) of that edition to the public.
-
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of
- copies, to give them a chance to provide you with an updated
- version of the Document.
-
- 4. MODIFICATIONS
-
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with
- the Modified Version filling the role of the Document, thus
- licensing distribution and modification of the Modified Version to
- whoever possesses a copy of it. In addition, you must do these
- things in the Modified Version:
-
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of
- previous versions (which should, if there were any, be listed
- in the History section of the Document). You may use the
- same title as a previous version if the original publisher of
- that version gives permission.
-
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
-
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
- D. Preserve all the copyright notices of the Document.
-
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
-
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
-
- H. Include an unaltered copy of this License.
-
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on
- the Title Page. If there is no section Entitled "History" in
- the Document, create one stating the title, year, authors,
- and publisher of the Document as given on its Title Page,
- then add an item describing the Modified Version as stated in
- the previous sentence.
-
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in
- the "History" section. You may omit a network location for a
- work that was published at least four years before the
- Document itself, or if the original publisher of the version
- it refers to gives permission.
-
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the
- section all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
-
- L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section
- titles.
-
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
-
- O. Preserve any Warranty Disclaimers.
-
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option
- designate some or all of these sections as invariant. To do this,
- add their titles to the list of Invariant Sections in the Modified
- Version's license notice. These titles must be distinct from any
- other section titles.
-
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
-
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end
- of the list of Cover Texts in the Modified Version. Only one
- passage of Front-Cover Text and one of Back-Cover Text may be
- added by (or through arrangements made by) any one entity. If the
- Document already includes a cover text for the same cover,
- previously added by you or by arrangement made by the same entity
- you are acting on behalf of, you may not add another; but you may
- replace the old one, on explicit permission from the previous
- publisher that added the old one.
-
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
-
- 5. COMBINING DOCUMENTS
-
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination
- all of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
-
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
-
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
-
- 6. COLLECTIONS OF DOCUMENTS
-
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the
- documents in all other respects.
-
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow
- this License in all other respects regarding verbatim copying of
- that document.
-
- 7. AGGREGATION WITH INDEPENDENT WORKS
-
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of
- a storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
-
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
-
- 8. TRANSLATION
-
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
-
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
-
- 9. TERMINATION
-
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided for under this License. Any other
- attempt to copy, modify, sublicense or distribute the Document is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- `http://www.gnu.org/copyleft/'.
-
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If
- the Document does not specify a version number of this License,
- you may choose any version ever published (not as a draft) by the
- Free Software Foundation.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
-
- If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License, to
-permit their use in free software.
-
-
-File: gdbint.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* *ADDRESS_CLASS_TYPE_FLAGS_TO_NAME: Target Architecture Definition.
-* *gdbarch_data: Coding.
-* _initialize_language: Language Support.
-* a.out format: Symbol Handling.
-* add_cmd: User Interface.
-* add_com: User Interface.
-* add_setshow_cmd: User Interface.
-* add_setshow_cmd_full: User Interface.
-* add_symtab_fns: Symbol Handling.
-* adding a new host: Host Definition.
-* adding a symbol-reading module: Symbol Handling.
-* adding a target: Target Architecture Definition.
-* adding debugging info reader: Symbol Handling.
-* adding source language: Language Support.
-* ADDR_BITS_REMOVE: Target Architecture Definition.
-* address classes: Target Architecture Definition.
-* address representation: Target Architecture Definition.
-* address spaces, separate data and code: Target Architecture Definition.
-* ADDRESS_CLASS_NAME_TO_TYPE_FLAGS: Target Architecture Definition.
-* ADDRESS_CLASS_NAME_to_TYPE_FLAGS: Target Architecture Definition.
-* ADDRESS_CLASS_NAME_TO_TYPE_FLAGS_P: Target Architecture Definition.
-* ADDRESS_CLASS_TYPE_FLAGS: Target Architecture Definition.
-* ADDRESS_CLASS_TYPE_FLAGS (BYTE_SIZE, DWARF2_ADDR_CLASS): Target Architecture Definition.
-* ADDRESS_CLASS_TYPE_FLAGS_P: Target Architecture Definition.
-* ADDRESS_CLASS_TYPE_FLAGS_TO_NAME: Target Architecture Definition.
-* ADDRESS_CLASS_TYPE_FLAGS_TO_NAME_P: Target Architecture Definition.
-* ADDRESS_TO_POINTER: Target Architecture Definition.
-* ADJUST_BREAKPOINT_ADDRESS: Target Architecture Definition.
-* algorithms: Algorithms.
-* ALIGN_STACK_ON_STARTUP: Host Definition.
-* allocate_symtab: Language Support.
-* assumptions about targets: Coding.
-* ATTACH_DETACH: Native Debugging.
-* ATTR_NORETURN: Host Definition.
-* BELIEVE_PCC_PROMOTION: Target Architecture Definition.
-* BELIEVE_PCC_PROMOTION_TYPE: Target Architecture Definition.
-* BFD library: Support Libraries.
-* BIG_BREAKPOINT: Target Architecture Definition.
-* BITS_BIG_ENDIAN: Target Architecture Definition.
-* BPT_VECTOR: Target Architecture Definition.
-* BREAKPOINT <1>: Target Architecture Definition.
-* BREAKPOINT: Algorithms.
-* breakpoint address adjusted: Target Architecture Definition.
-* BREAKPOINT_FROM_PC: Target Architecture Definition.
-* breakpoints: Algorithms.
-* bug-gdb mailing list: Getting Started.
-* C data types: Coding.
-* call stack frame: Algorithms.
-* CALL_DUMMY: Target Architecture Definition.
-* CALL_DUMMY_LOCATION: Target Architecture Definition.
-* CANNOT_FETCH_REGISTER: Target Architecture Definition.
-* CANNOT_STEP_HW_WATCHPOINTS: Algorithms.
-* CANNOT_STORE_REGISTER: Target Architecture Definition.
-* CC_HAS_LONG_LONG: Host Definition.
-* char: Target Architecture Definition.
-* CHILD_PREPARE_TO_STORE: Native Debugging.
-* cleanup: User Interface.
-* cleanups: Coding.
-* CLEAR_DEFERRED_STORES: Target Architecture Definition.
-* CLEAR_SOLIB: Native Debugging.
-* CLI: User Interface.
-* code pointers, word-addressed: Target Architecture Definition.
-* coding standards: Coding.
-* COFF debugging info: Symbol Handling.
-* COFF format: Symbol Handling.
-* command implementation: Getting Started.
-* command interpreter: User Interface.
-* comment formatting: Coding.
-* compiler warnings: Coding.
-* CONVERT_REGISTER_P: Target Architecture Definition.
-* converting between pointers and addresses: Target Architecture Definition.
-* converting integers to addresses: Target Architecture Definition.
-* converting targets to multi-arch: Target Architecture Definition.
-* create_new_frame: Algorithms.
-* CRLF_SOURCE_FILES: Host Definition.
-* current_language: Language Support.
-* D10V addresses: Target Architecture Definition.
-* data output: User Interface.
-* data-pointer, per-architecture/per-module: Coding.
-* DEBUG_PTRACE: Native Debugging.
-* debugging GDB: Debugging GDB.
-* DECR_PC_AFTER_BREAK: Target Architecture Definition.
-* DEFAULT_PROMPT: Host Definition.
-* deprecate_cmd: User Interface.
-* DEPRECATED_BIG_REMOTE_BREAKPOINT: Target Architecture Definition.
-* DEPRECATED_CALL_DUMMY_WORDS: Target Architecture Definition.
-* DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS: Target Architecture Definition.
-* DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P: Target Architecture Definition.
-* DEPRECATED_FIX_CALL_DUMMY: Target Architecture Definition.
-* DEPRECATED_FP_REGNUM: Target Architecture Definition.
-* DEPRECATED_FRAME_CHAIN: Target Architecture Definition.
-* DEPRECATED_FRAME_CHAIN_VALID: Target Architecture Definition.
-* DEPRECATED_FRAME_INIT_SAVED_REGS: Target Architecture Definition.
-* DEPRECATED_FRAME_SAVED_PC: Target Architecture Definition.
-* DEPRECATED_FRAMELESS_FUNCTION_INVOCATION: Target Architecture Definition.
-* DEPRECATED_GET_SAVED_REGISTER: Target Architecture Definition.
-* DEPRECATED_IBM6000_TARGET: Target Architecture Definition.
-* DEPRECATED_INIT_EXTRA_FRAME_INFO: Target Architecture Definition.
-* DEPRECATED_INIT_FRAME_PC: Target Architecture Definition.
-* DEPRECATED_LITTLE_REMOTE_BREAKPOINT: Target Architecture Definition.
-* DEPRECATED_POP_FRAME: Target Architecture Definition.
-* DEPRECATED_PUSH_ARGUMENTS.: Target Architecture Definition.
-* DEPRECATED_PUSH_DUMMY_FRAME: Target Architecture Definition.
-* DEPRECATED_REG_STRUCT_HAS_ADDR: Target Architecture Definition.
-* DEPRECATED_REGISTER_BYTES: Target Architecture Definition.
-* DEPRECATED_REGISTER_RAW_SIZE: Target Architecture Definition.
-* DEPRECATED_REGISTER_VIRTUAL_SIZE: Target Architecture Definition.
-* DEPRECATED_REMOTE_BREAKPOINT: Target Architecture Definition.
-* DEPRECATED_SIZEOF_CALL_DUMMY_WORDS: Target Architecture Definition.
-* DEPRECATED_STACK_ALIGN: Target Architecture Definition.
-* deprecating commands: User Interface.
-* design: Coding.
-* DEV_TTY: Host Definition.
-* DIRNAME_SEPARATOR: Coding.
-* DISABLE_UNSETTABLE_BREAK: Target Architecture Definition.
-* discard_cleanups: Coding.
-* do_cleanups: Coding.
-* DO_DEFERRED_STORES: Target Architecture Definition.
-* DOS text files: Host Definition.
-* DW_AT_address_class: Target Architecture Definition.
-* DW_AT_byte_size: Target Architecture Definition.
-* DWARF 1 debugging info: Symbol Handling.
-* DWARF 2 debugging info: Symbol Handling.
-* DWARF2_REG_TO_REGNUM: Target Architecture Definition.
-* DWARF_REG_TO_REGNUM: Target Architecture Definition.
-* ECOFF debugging info: Symbol Handling.
-* ECOFF format: Symbol Handling.
-* ECOFF_REG_TO_REGNUM: Target Architecture Definition.
-* ELF format: Symbol Handling.
-* END_OF_TEXT_DEFAULT: Target Architecture Definition.
-* evaluate_subexp: Language Support.
-* expression evaluation routines: Language Support.
-* expression parser: Language Support.
-* EXTRACT_RETURN_VALUE: Target Architecture Definition.
-* extract_typed_address: Target Architecture Definition.
-* FCLOSE_PROVIDED: Host Definition.
-* FDL, GNU Free Documentation License: GNU Free Documentation License.
-* fetch_core_registers: Native Debugging.
-* FETCH_INFERIOR_REGISTERS: Native Debugging.
-* field output functions: User Interface.
-* file names, portability: Coding.
-* FILENAME_CMP: Coding.
-* FILES_INFO_HOOK: Native Debugging.
-* find_pc_function: Symbol Handling.
-* find_pc_line: Symbol Handling.
-* find_sym_fns: Symbol Handling.
-* finding a symbol: Symbol Handling.
-* fine-tuning gdbarch structure: Target Architecture Definition.
-* FOPEN_RB: Host Definition.
-* FP0_REGNUM: Native Debugging.
-* frame: Algorithms.
-* frame chain: Algorithms.
-* frame pointer register: Algorithms.
-* frame_align: Target Architecture Definition.
-* FRAME_FP: Algorithms.
-* FRAME_NUM_ARGS: Target Architecture Definition.
-* frame_pop: Target Architecture Definition.
-* full symbol table: Symbol Handling.
-* function prototypes: Coding.
-* function usage: Coding.
-* FUNCTION_EPILOGUE_SIZE: Target Architecture Definition.
-* FUNCTION_START_OFFSET: Target Architecture Definition.
-* fundamental types: Symbol Handling.
-* GCC2_COMPILED_FLAG_SYMBOL: Target Architecture Definition.
-* GCC_COMPILED_FLAG_SYMBOL: Target Architecture Definition.
-* GDB_MULTI_ARCH: Target Architecture Definition.
-* gdb_osabi: Target Architecture Definition.
-* GDB_OSABI_ARM_APCS: Target Architecture Definition.
-* GDB_OSABI_ARM_EABI_V1: Target Architecture Definition.
-* GDB_OSABI_ARM_EABI_V2: Target Architecture Definition.
-* GDB_OSABI_FREEBSD_AOUT: Target Architecture Definition.
-* GDB_OSABI_FREEBSD_ELF: Target Architecture Definition.
-* GDB_OSABI_GO32: Target Architecture Definition.
-* GDB_OSABI_HURD: Target Architecture Definition.
-* GDB_OSABI_LINUX: Target Architecture Definition.
-* GDB_OSABI_NETBSD_AOUT: Target Architecture Definition.
-* GDB_OSABI_NETBSD_ELF: Target Architecture Definition.
-* GDB_OSABI_NETWARE: Target Architecture Definition.
-* GDB_OSABI_OSF1: Target Architecture Definition.
-* GDB_OSABI_SOLARIS: Target Architecture Definition.
-* GDB_OSABI_SVR4: Target Architecture Definition.
-* GDB_OSABI_UNKNOWN: Target Architecture Definition.
-* GDB_OSABI_WINCE: Target Architecture Definition.
-* GDB_TARGET_IS_HPPA: Target Architecture Definition.
-* gdbarch_data: Coding.
-* gdbarch_in_function_epilogue_p: Target Architecture Definition.
-* gdbarch_init_osabi: Target Architecture Definition.
-* gdbarch_register_osabi: Target Architecture Definition.
-* gdbarch_register_osabi_sniffer: Target Architecture Definition.
-* gdbarch_return_value: Target Architecture Definition.
-* GDBINIT_FILENAME: Host Definition.
-* generic host support: Host Definition.
-* GET_LONGJMP_TARGET <1>: Native Debugging.
-* GET_LONGJMP_TARGET <2>: Target Architecture Definition.
-* GET_LONGJMP_TARGET: Algorithms.
-* GETENV_PROVIDED: Host Definition.
-* hardware breakpoints: Algorithms.
-* hardware watchpoints: Algorithms.
-* HAVE_CONTINUABLE_WATCHPOINT: Algorithms.
-* HAVE_DOS_BASED_FILE_SYSTEM: Coding.
-* HAVE_LONG_DOUBLE: Host Definition.
-* HAVE_MMAP: Host Definition.
-* HAVE_NONSTEPPABLE_WATCHPOINT: Algorithms.
-* HAVE_STEPPABLE_WATCHPOINT: Algorithms.
-* HAVE_TERMIO: Host Definition.
-* host: Overall Structure.
-* host, adding: Host Definition.
-* i386_cleanup_dregs: Algorithms.
-* I386_DR_LOW_GET_STATUS: Algorithms.
-* I386_DR_LOW_RESET_ADDR: Algorithms.
-* I386_DR_LOW_SET_ADDR: Algorithms.
-* I386_DR_LOW_SET_CONTROL: Algorithms.
-* i386_insert_hw_breakpoint: Algorithms.
-* i386_insert_watchpoint: Algorithms.
-* i386_region_ok_for_watchpoint: Algorithms.
-* i386_remove_hw_breakpoint: Algorithms.
-* i386_remove_watchpoint: Algorithms.
-* i386_stopped_by_hwbp: Algorithms.
-* i386_stopped_data_address: Algorithms.
-* I386_USE_GENERIC_WATCHPOINTS: Algorithms.
-* IN_SOLIB_CALL_TRAMPOLINE: Target Architecture Definition.
-* IN_SOLIB_DYNSYM_RESOLVE_CODE: Target Architecture Definition.
-* IN_SOLIB_RETURN_TRAMPOLINE: Target Architecture Definition.
-* INNER_THAN: Target Architecture Definition.
-* insert or remove hardware breakpoint: Algorithms.
-* INT_MAX: Host Definition.
-* INT_MIN: Host Definition.
-* INTEGER_TO_ADDRESS: Target Architecture Definition.
-* IS_ABSOLUTE_PATH: Coding.
-* IS_DIR_SEPARATOR: Coding.
-* ISATTY: Host Definition.
-* item output functions: User Interface.
-* KERNEL_U_ADDR: Native Debugging.
-* KERNEL_U_ADDR_BSD: Native Debugging.
-* KERNEL_U_ADDR_HPUX: Native Debugging.
-* L_SET: Host Definition.
-* language parser: Language Support.
-* language support: Language Support.
-* legal papers for code contributions: Debugging GDB.
-* length_of_subexp: Language Support.
-* libgdb: libgdb.
-* libiberty library: Support Libraries.
-* line wrap in output: Coding.
-* lint: Host Definition.
-* list output functions: User Interface.
-* LITTLE_BREAKPOINT: Target Architecture Definition.
-* long long data type: Host Definition.
-* LONG_MAX: Host Definition.
-* LONGEST: Host Definition.
-* longjmp debugging: Algorithms.
-* lookup_symbol: Symbol Handling.
-* LSEEK_NOT_LINEAR: Host Definition.
-* make_cleanup: Coding.
-* making a new release of gdb: Releasing GDB.
-* memory representation: Target Architecture Definition.
-* MEMORY_INSERT_BREAKPOINT: Target Architecture Definition.
-* MEMORY_REMOVE_BREAKPOINT: Target Architecture Definition.
-* minimal symbol table: Symbol Handling.
-* minsymtabs: Symbol Handling.
-* mmap: Host Definition.
-* multi-arch data: Coding.
-* NAME_OF_MALLOC: Target Architecture Definition.
-* NATDEPFILES: Native Debugging.
-* native conditionals: Native Debugging.
-* native core files: Native Debugging.
-* native debugging: Native Debugging.
-* nesting level in ui_out functions: User Interface.
-* Netware Loadable Module format: Symbol Handling.
-* NO_HIF_SUPPORT: Target Architecture Definition.
-* NO_SIGINTERRUPT: Host Definition.
-* NO_STD_REGS: Host Definition.
-* NO_SYS_FILE: Host Definition.
-* NORETURN: Host Definition.
-* normal_stop observer: GDB Observers.
-* notification about inferior execution stop: GDB Observers.
-* notifications about changes in internals: Algorithms.
-* object file formats: Symbol Handling.
-* observer pattern interface: Algorithms.
-* observers implementation rationale: GDB Observers.
-* obsolete code: Debugging GDB.
-* obstacks: Support Libraries.
-* ONE_PROCESS_WRITETEXT: Native Debugging.
-* op_print_tab: Language Support.
-* opcodes library: Support Libraries.
-* OS ABI variants: Target Architecture Definition.
-* OS9K_VARIABLES_INSIDE_BLOCK: Target Architecture Definition.
-* PARM_BOUNDARY: Target Architecture Definition.
-* parse_exp_1: Language Support.
-* partial symbol table: Symbol Handling.
-* PC_IN_SIGTRAMP: Target Architecture Definition.
-* PC_LOAD_SEGMENT: Target Architecture Definition.
-* PC_REGNUM: Target Architecture Definition.
-* PCC_SOL_BROKEN: Target Architecture Definition.
-* PE-COFF format: Symbol Handling.
-* per-architecture module data: Coding.
-* pointer representation: Target Architecture Definition.
-* POINTER_TO_ADDRESS: Target Architecture Definition.
-* portability: Coding.
-* portable file name handling: Coding.
-* porting to new machines: Porting GDB.
-* prefixify_subexp: Language Support.
-* PRINT_FLOAT_INFO: Target Architecture Definition.
-* print_registers_info: Target Architecture Definition.
-* print_subexp: Language Support.
-* PRINT_VECTOR_INFO: Target Architecture Definition.
-* PRINTF_HAS_LONG_DOUBLE: Host Definition.
-* PRINTF_HAS_LONG_LONG: Host Definition.
-* PROC_NAME_FMT: Native Debugging.
-* PROCESS_LINENUMBER_HOOK: Target Architecture Definition.
-* program counter: Algorithms.
-* PROLOGUE_FIRSTLINE_OVERLAP: Target Architecture Definition.
-* prompt: Host Definition.
-* PS_REGNUM: Target Architecture Definition.
-* psymtabs: Symbol Handling.
-* PTRACE_ARG3_TYPE: Native Debugging.
-* PTRACE_FP_BUG: Native Debugging.
-* push_dummy_call: Target Architecture Definition.
-* push_dummy_code: Target Architecture Definition.
-* raw register representation: Target Architecture Definition.
-* read_fp: Target Architecture Definition.
-* read_pc: Target Architecture Definition.
-* read_sp: Target Architecture Definition.
-* reading of symbols: Symbol Handling.
-* red zone: Target Architecture Definition.
-* register data formats, converting: Target Architecture Definition.
-* register groups: Target Architecture Definition.
-* register representation: Target Architecture Definition.
-* REGISTER_CONVERT_TO_RAW: Target Architecture Definition.
-* REGISTER_CONVERT_TO_TYPE: Target Architecture Definition.
-* REGISTER_CONVERT_TO_VIRTUAL: Target Architecture Definition.
-* REGISTER_CONVERTIBLE: Target Architecture Definition.
-* REGISTER_NAME: Target Architecture Definition.
-* register_reggroup_p: Target Architecture Definition.
-* REGISTER_TO_VALUE: Target Architecture Definition.
-* register_type: Target Architecture Definition.
-* REGISTER_U_ADDR: Native Debugging.
-* REGISTER_VIRTUAL_TYPE: Target Architecture Definition.
-* regset_from_core_section: Target Architecture Definition.
-* regular expressions library: Support Libraries.
-* remote debugging support: Host Definition.
-* REMOTE_BPT_VECTOR: Target Architecture Definition.
-* representations, raw and virtual registers: Target Architecture Definition.
-* representations, register and memory: Target Architecture Definition.
-* requirements for GDB: Requirements.
-* RETURN_VALUE_ON_STACK: Target Architecture Definition.
-* returning structures by value: Target Architecture Definition.
-* running the test suite: Testsuite.
-* SAVE_DUMMY_FRAME_TOS: Target Architecture Definition.
-* SCANF_HAS_LONG_DOUBLE: Host Definition.
-* SDB_REG_TO_REGNUM: Target Architecture Definition.
-* secondary symbol file: Symbol Handling.
-* SEEK_CUR: Host Definition.
-* SEEK_SET: Host Definition.
-* separate data and code address spaces: Target Architecture Definition.
-* serial line support: Host Definition.
-* set_gdbarch_data: Coding.
-* SHELL_COMMAND_CONCAT: Native Debugging.
-* SHELL_FILE: Native Debugging.
-* siginterrupt: Host Definition.
-* sigtramp: Target Architecture Definition.
-* SIGTRAMP_END: Target Architecture Definition.
-* SIGTRAMP_START: Target Architecture Definition.
-* SIGWINCH_HANDLER: Host Definition.
-* SIGWINCH_HANDLER_BODY: Host Definition.
-* SKIP_PERMANENT_BREAKPOINT: Target Architecture Definition.
-* SKIP_PROLOGUE: Target Architecture Definition.
-* SKIP_SOLIB_RESOLVER: Target Architecture Definition.
-* SKIP_TRAMPOLINE_CODE: Target Architecture Definition.
-* SLASH_STRING: Coding.
-* software breakpoints: Algorithms.
-* software watchpoints: Algorithms.
-* SOFTWARE_SINGLE_STEP: Target Architecture Definition.
-* SOFTWARE_SINGLE_STEP_P: Target Architecture Definition.
-* SOFUN_ADDRESS_MAYBE_MISSING: Target Architecture Definition.
-* SOLIB_ADD: Native Debugging.
-* SOLIB_CREATE_INFERIOR_HOOK: Native Debugging.
-* SOM debugging info: Symbol Handling.
-* SOM format: Symbol Handling.
-* source code formatting: Coding.
-* SP_REGNUM: Target Architecture Definition.
-* spaces, separate data and code address: Target Architecture Definition.
-* STAB_REG_TO_REGNUM: Target Architecture Definition.
-* stabs debugging info: Symbol Handling.
-* stabs_argument_has_addr: Target Architecture Definition.
-* stack alignment: Host Definition.
-* START_INFERIOR_TRAPS_EXPECTED: Native Debugging.
-* STEP_SKIPS_DELAY: Target Architecture Definition.
-* STOP_SIGNAL: Host Definition.
-* STOPPED_BY_WATCHPOINT: Algorithms.
-* STORE_RETURN_VALUE: Target Architecture Definition.
-* store_typed_address: Target Architecture Definition.
-* struct: GDB Observers.
-* struct value, converting register contents to: Target Architecture Definition.
-* structures, returning by value: Target Architecture Definition.
-* submitting patches: Debugging GDB.
-* SUN_FIXED_LBRAC_BUG: Target Architecture Definition.
-* SVR4_SHARED_LIBS: Native Debugging.
-* sym_fns structure: Symbol Handling.
-* symbol files: Symbol Handling.
-* symbol lookup: Symbol Handling.
-* symbol reading: Symbol Handling.
-* SYMBOL_RELOADING_DEFAULT: Target Architecture Definition.
-* SYMBOLS_CAN_START_WITH_DOLLAR: Target Architecture Definition.
-* symtabs: Symbol Handling.
-* system dependencies: Coding.
-* table output functions: User Interface.
-* target: Overall Structure.
-* target architecture definition: Target Architecture Definition.
-* target vector: Target Vector Definition.
-* TARGET_CAN_USE_HARDWARE_WATCHPOINT: Algorithms.
-* TARGET_CHAR_BIT: Target Architecture Definition.
-* TARGET_CHAR_SIGNED: Target Architecture Definition.
-* TARGET_COMPLEX_BIT: Target Architecture Definition.
-* TARGET_DISABLE_HW_WATCHPOINTS: Algorithms.
-* TARGET_DOUBLE_BIT: Target Architecture Definition.
-* TARGET_DOUBLE_COMPLEX_BIT: Target Architecture Definition.
-* TARGET_ENABLE_HW_WATCHPOINTS: Algorithms.
-* TARGET_FLOAT_BIT: Target Architecture Definition.
-* TARGET_HAS_HARDWARE_WATCHPOINTS: Algorithms.
-* target_insert_hw_breakpoint: Algorithms.
-* target_insert_watchpoint: Algorithms.
-* TARGET_INT_BIT: Target Architecture Definition.
-* TARGET_LONG_BIT: Target Architecture Definition.
-* TARGET_LONG_DOUBLE_BIT: Target Architecture Definition.
-* TARGET_LONG_LONG_BIT: Target Architecture Definition.
-* TARGET_PRINT_INSN: Target Architecture Definition.
-* TARGET_PTR_BIT: Target Architecture Definition.
-* TARGET_READ_FP: Target Architecture Definition.
-* TARGET_READ_PC: Target Architecture Definition.
-* TARGET_READ_SP: Target Architecture Definition.
-* TARGET_REGION_OK_FOR_HW_WATCHPOINT: Algorithms.
-* TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT: Algorithms.
-* target_remove_hw_breakpoint: Algorithms.
-* target_remove_watchpoint: Algorithms.
-* TARGET_SHORT_BIT: Target Architecture Definition.
-* target_stopped_data_address: Algorithms.
-* TARGET_VIRTUAL_FRAME_POINTER: Target Architecture Definition.
-* TARGET_WRITE_PC: Target Architecture Definition.
-* TCP remote support: Host Definition.
-* TDEPFILES: Target Architecture Definition.
-* terminal device: Host Definition.
-* test suite: Testsuite.
-* test suite organization: Testsuite.
-* trimming language-dependent code: Language Support.
-* tuple output functions: User Interface.
-* type: Target Architecture Definition.
-* type codes: Symbol Handling.
-* types: Coding.
-* U_REGS_OFFSET: Native Debugging.
-* ui_out functions: User Interface.
-* ui_out functions, usage examples: User Interface.
-* ui_out_field_core_addr: User Interface.
-* ui_out_field_fmt: User Interface.
-* ui_out_field_fmt_int: User Interface.
-* ui_out_field_int: User Interface.
-* ui_out_field_skip: User Interface.
-* ui_out_field_stream: User Interface.
-* ui_out_field_string: User Interface.
-* ui_out_flush: User Interface.
-* ui_out_list_begin: User Interface.
-* ui_out_list_end: User Interface.
-* ui_out_message: User Interface.
-* ui_out_spaces: User Interface.
-* ui_out_stream_delete: User Interface.
-* ui_out_table_begin: User Interface.
-* ui_out_table_body: User Interface.
-* ui_out_table_end: User Interface.
-* ui_out_table_header: User Interface.
-* ui_out_text: User Interface.
-* ui_out_tuple_begin: User Interface.
-* ui_out_tuple_end: User Interface.
-* ui_out_wrap_hint: User Interface.
-* ui_stream: User Interface.
-* UINT_MAX: Host Definition.
-* ULONG_MAX: Host Definition.
-* unwind_dummy_id: Target Architecture Definition.
-* unwind_pc: Target Architecture Definition.
-* unwind_sp: Target Architecture Definition.
-* USE_O_NOCTTY: Host Definition.
-* USE_PROC_FS: Native Debugging.
-* USE_STRUCT_CONVENTION: Target Architecture Definition.
-* USG: Host Definition.
-* using ui_out functions: User Interface.
-* value_as_address: Target Architecture Definition.
-* value_from_pointer: Target Architecture Definition.
-* VALUE_TO_REGISTER: Target Architecture Definition.
-* VARIABLES_INSIDE_BLOCK: Target Architecture Definition.
-* virtual register representation: Target Architecture Definition.
-* void: GDB Observers.
-* volatile: Host Definition.
-* watchpoints: Algorithms.
-* watchpoints, on x86: Algorithms.
-* word-addressed machines: Target Architecture Definition.
-* wrap_here: Coding.
-* write_pc: Target Architecture Definition.
-* writing tests: Testsuite.
-* x86 debug registers: Algorithms.
-* XCOFF format: Symbol Handling.
-
-
-
-Tag Table:
-Node: Top868
-Node: Requirements1649
-Node: Overall Structure3133
-Node: Algorithms6392
-Node: User Interface25616
-Ref: User Interface-Footnote-149281
-Ref: User Interface-Footnote-249330
-Node: libgdb49565
-Node: Symbol Handling53480
-Node: Language Support67561
-Node: Host Definition72950
-Node: Target Architecture Definition80989
-Ref: BREAKPOINT_FROM_PC107296
-Ref: DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS114612
-Ref: frame_align115444
-Ref: DEPRECATED_FRAME_SAVED_PC117821
-Ref: unwind_pc118007
-Ref: unwind_sp118560
-Ref: stabs_argument_has_addr132839
-Ref: push_dummy_call133614
-Ref: push_dummy_code134048
-Ref: DEPRECATED_REG_STRUCT_HAS_ADDR135428
-Ref: SAVE_DUMMY_FRAME_TOS135662
-Ref: gdbarch_return_value136281
-Ref: DEPRECATED_STACK_ALIGN139566
-Ref: TARGET_WRITE_PC142262
-Ref: TARGET_READ_SP142296
-Ref: unwind_dummy_id143991
-Ref: Target Architecture Definition-Footnote-1152402
-Ref: Target Architecture Definition-Footnote-2152645
-Node: Target Vector Definition152764
-Node: Native Debugging155323
-Node: Support Libraries166180
-Node: Coding170914
-Node: Porting GDB196485
-Node: Releasing GDB198380
-Node: Testsuite220293
-Node: Hints226765
-Node: Getting Started227081
-Node: Debugging GDB231214
-Node: GDB Observers236546
-Node: GNU Free Documentation License239415
-Node: Index261828
-
-End Tag Table
diff --git a/gnu/usr.bin/binutils/gdb/doc/stabs.info b/gnu/usr.bin/binutils/gdb/doc/stabs.info
deleted file mode 100644
index a5bba1579ab..00000000000
--- a/gnu/usr.bin/binutils/gdb/doc/stabs.info
+++ /dev/null
@@ -1,4418 +0,0 @@
-This is stabs.info, produced by makeinfo version 4.6 from
-./stabs.texinfo.
-
-INFO-DIR-SECTION Programming & development tools.
-START-INFO-DIR-ENTRY
-* Stabs: (stabs). The "stabs" debugging information format.
-END-INFO-DIR-ENTRY
-
- This document describes the stabs debugging symbol tables.
-
- Copyright 1992,1993,1994,1995,1997,1998,2000,2001 Free Software
-Foundation, Inc. Contributed by Cygnus Support. Written by Julia
-Menapace, Jim Kingdon, and David MacKenzie.
-
- Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts. A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
-
-File: stabs.info, Node: Top, Next: Overview, Up: (dir)
-
-The "stabs" representation of debugging information
-***************************************************
-
-This document describes the stabs debugging format.
-
-* Menu:
-
-* Overview:: Overview of stabs
-* Program Structure:: Encoding of the structure of the program
-* Constants:: Constants
-* Variables::
-* Types:: Type definitions
-* Symbol Tables:: Symbol information in symbol tables
-* Cplusplus:: Stabs specific to C++
-* Stab Types:: Symbol types in a.out files
-* Symbol Descriptors:: Table of symbol descriptors
-* Type Descriptors:: Table of type descriptors
-* Expanded Reference:: Reference information by stab type
-* Questions:: Questions and anomalies
-* Stab Sections:: In some object file formats, stabs are
- in sections.
-* Symbol Types Index:: Index of symbolic stab symbol type names.
-* GNU Free Documentation License:: The license for this documentation
-
-
-File: stabs.info, Node: Overview, Next: Program Structure, Prev: Top, Up: Top
-
-Overview of Stabs
-*****************
-
-"Stabs" refers to a format for information that describes a program to
-a debugger. This format was apparently invented by Peter Kessler at
-the University of California at Berkeley, for the `pdx' Pascal
-debugger; the format has spread widely since then.
-
- This document is one of the few published sources of documentation on
-stabs. It is believed to be comprehensive for stabs used by C. The
-lists of symbol descriptors (*note Symbol Descriptors::) and type
-descriptors (*note Type Descriptors::) are believed to be completely
-comprehensive. Stabs for COBOL-specific features and for variant
-records (used by Pascal and Modula-2) are poorly documented here.
-
- Other sources of information on stabs are `Dbx and Dbxtool
-Interfaces', 2nd edition, by Sun, 1988, and `AIX Version 3.2 Files
-Reference', Fourth Edition, September 1992, "dbx Stabstring Grammar" in
-the a.out section, page 2-31. This document is believed to incorporate
-the information from those two sources except where it explicitly
-directs you to them for more information.
-
-* Menu:
-
-* Flow:: Overview of debugging information flow
-* Stabs Format:: Overview of stab format
-* String Field:: The string field
-* C Example:: A simple example in C source
-* Assembly Code:: The simple example at the assembly level
-
-
-File: stabs.info, Node: Flow, Next: Stabs Format, Up: Overview
-
-Overview of Debugging Information Flow
-======================================
-
-The GNU C compiler compiles C source in a `.c' file into assembly
-language in a `.s' file, which the assembler translates into a `.o'
-file, which the linker combines with other `.o' files and libraries to
-produce an executable file.
-
- With the `-g' option, GCC puts in the `.s' file additional debugging
-information, which is slightly transformed by the assembler and linker,
-and carried through into the final executable. This debugging
-information describes features of the source file like line numbers,
-the types and scopes of variables, and function names, parameters, and
-scopes.
-
- For some object file formats, the debugging information is
-encapsulated in assembler directives known collectively as "stab"
-(symbol table) directives, which are interspersed with the generated
-code. Stabs are the native format for debugging information in the
-a.out and XCOFF object file formats. The GNU tools can also emit stabs
-in the COFF and ECOFF object file formats.
-
- The assembler adds the information from stabs to the symbol
-information it places by default in the symbol table and the string
-table of the `.o' file it is building. The linker consolidates the `.o'
-files into one executable file, with one symbol table and one string
-table. Debuggers use the symbol and string tables in the executable as
-a source of debugging information about the program.
-
-
-File: stabs.info, Node: Stabs Format, Next: String Field, Prev: Flow, Up: Overview
-
-Overview of Stab Format
-=======================
-
-There are three overall formats for stab assembler directives,
-differentiated by the first word of the stab. The name of the directive
-describes which combination of four possible data fields follows. It is
-either `.stabs' (string), `.stabn' (number), or `.stabd' (dot). IBM's
-XCOFF assembler uses `.stabx' (and some other directives such as
-`.file' and `.bi') instead of `.stabs', `.stabn' or `.stabd'.
-
- The overall format of each class of stab is:
-
- .stabs "STRING",TYPE,OTHER,DESC,VALUE
- .stabn TYPE,OTHER,DESC,VALUE
- .stabd TYPE,OTHER,DESC
- .stabx "STRING",VALUE,TYPE,SDB-TYPE
-
- For `.stabn' and `.stabd', there is no STRING (the `n_strx' field is
-zero; see *Note Symbol Tables::). For `.stabd', the VALUE field is
-implicit and has the value of the current file location. For `.stabx',
-the SDB-TYPE field is unused for stabs and can always be set to zero.
-The OTHER field is almost always unused and can be set to zero.
-
- The number in the TYPE field gives some basic information about
-which type of stab this is (or whether it _is_ a stab, as opposed to an
-ordinary symbol). Each valid type number defines a different stab
-type; further, the stab type defines the exact interpretation of, and
-possible values for, any remaining STRING, DESC, or VALUE fields
-present in the stab. *Note Stab Types::, for a list in numeric order
-of the valid TYPE field values for stab directives.
-
-
-File: stabs.info, Node: String Field, Next: C Example, Prev: Stabs Format, Up: Overview
-
-The String Field
-================
-
-For most stabs the string field holds the meat of the debugging
-information. The flexible nature of this field is what makes stabs
-extensible. For some stab types the string field contains only a name.
-For other stab types the contents can be a great deal more complex.
-
- The overall format of the string field for most stab types is:
-
- "NAME:SYMBOL-DESCRIPTOR TYPE-INFORMATION"
-
- NAME is the name of the symbol represented by the stab; it can
-contain a pair of colons (*note Nested Symbols::). NAME can be
-omitted, which means the stab represents an unnamed object. For
-example, `:t10=*2' defines type 10 as a pointer to type 2, but does not
-give the type a name. Omitting the NAME field is supported by AIX dbx
-and GDB after about version 4.8, but not other debuggers. GCC
-sometimes uses a single space as the name instead of omitting the name
-altogether; apparently that is supported by most debuggers.
-
- The SYMBOL-DESCRIPTOR following the `:' is an alphabetic character
-that tells more specifically what kind of symbol the stab represents.
-If the SYMBOL-DESCRIPTOR is omitted, but type information follows, then
-the stab represents a local variable. For a list of symbol
-descriptors, see *Note Symbol Descriptors::. The `c' symbol descriptor
-is an exception in that it is not followed by type information. *Note
-Constants::.
-
- TYPE-INFORMATION is either a TYPE-NUMBER, or `TYPE-NUMBER='. A
-TYPE-NUMBER alone is a type reference, referring directly to a type
-that has already been defined.
-
- The `TYPE-NUMBER=' form is a type definition, where the number
-represents a new type which is about to be defined. The type
-definition may refer to other types by number, and those type numbers
-may be followed by `=' and nested definitions. Also, the Lucid
-compiler will repeat `TYPE-NUMBER=' more than once if it wants to
-define several type numbers at once.
-
- In a type definition, if the character that follows the equals sign
-is non-numeric then it is a TYPE-DESCRIPTOR, and tells what kind of
-type is about to be defined. Any other values following the
-TYPE-DESCRIPTOR vary, depending on the TYPE-DESCRIPTOR. *Note Type
-Descriptors::, for a list of TYPE-DESCRIPTOR values. If a number
-follows the `=' then the number is a TYPE-REFERENCE. For a full
-description of types, *Note Types::.
-
- A TYPE-NUMBER is often a single number. The GNU and Sun tools
-additionally permit a TYPE-NUMBER to be a pair
-(FILE-NUMBER,FILETYPE-NUMBER) (the parentheses appear in the string,
-and serve to distinguish the two cases). The FILE-NUMBER is 0 for the
-base source file, 1 for the first included file, 2 for the next, and so
-on. The FILETYPE-NUMBER is a number starting with 1 which is
-incremented for each new type defined in the file. (Separating the
-file number and the type number permits the `N_BINCL' optimization to
-succeed more often; see *Note Include Files::).
-
- There is an AIX extension for type attributes. Following the `='
-are any number of type attributes. Each one starts with `@' and ends
-with `;'. Debuggers, including AIX's dbx and GDB 4.10, skip any type
-attributes they do not recognize. GDB 4.9 and other versions of dbx
-may not do this. Because of a conflict with C++ (*note Cplusplus::),
-new attributes should not be defined which begin with a digit, `(', or
-`-'; GDB may be unable to distinguish those from the C++ type
-descriptor `@'. The attributes are:
-
-`aBOUNDARY'
- BOUNDARY is an integer specifying the alignment. I assume it
- applies to all variables of this type.
-
-`pINTEGER'
- Pointer class (for checking). Not sure what this means, or how
- INTEGER is interpreted.
-
-`P'
- Indicate this is a packed type, meaning that structure fields or
- array elements are placed more closely in memory, to save memory
- at the expense of speed.
-
-`sSIZE'
- Size in bits of a variable of this type. This is fully supported
- by GDB 4.11 and later.
-
-`S'
- Indicate that this type is a string instead of an array of
- characters, or a bitstring instead of a set. It doesn't change
- the layout of the data being represented, but does enable the
- debugger to know which type it is.
-
-`V'
- Indicate that this type is a vector instead of an array. The only
- major difference between vectors and arrays is that vectors are
- passed by value instead of by reference (vector coprocessor
- extension).
-
-
- All of this can make the string field quite long. All versions of
-GDB, and some versions of dbx, can handle arbitrarily long strings.
-But many versions of dbx (or assemblers or linkers, I'm not sure which)
-cretinously limit the strings to about 80 characters, so compilers which
-must work with such systems need to split the `.stabs' directive into
-several `.stabs' directives. Each stab duplicates every field except
-the string field. The string field of every stab except the last is
-marked as continued with a backslash at the end (in the assembly code
-this may be written as a double backslash, depending on the assembler).
-Removing the backslashes and concatenating the string fields of each
-stab produces the original, long string. Just to be incompatible (or so
-they don't have to worry about what the assembler does with
-backslashes), AIX can use `?' instead of backslash.
-
-
-File: stabs.info, Node: C Example, Next: Assembly Code, Prev: String Field, Up: Overview
-
-A Simple Example in C Source
-============================
-
-To get the flavor of how stabs describe source information for a C
-program, let's look at the simple program:
-
- main()
- {
- printf("Hello world");
- }
-
- When compiled with `-g', the program above yields the following `.s'
-file. Line numbers have been added to make it easier to refer to parts
-of the `.s' file in the description of the stabs that follows.
-
-
-File: stabs.info, Node: Assembly Code, Prev: C Example, Up: Overview
-
-The Simple Example at the Assembly Level
-========================================
-
-This simple "hello world" example demonstrates several of the stab
-types used to describe C language source files.
-
- 1 gcc2_compiled.:
- 2 .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0
- 3 .stabs "hello.c",100,0,0,Ltext0
- 4 .text
- 5 Ltext0:
- 6 .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
- 7 .stabs "char:t2=r2;0;127;",128,0,0,0
- 8 .stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
- 9 .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
- 10 .stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
- 11 .stabs "short int:t6=r1;-32768;32767;",128,0,0,0
- 12 .stabs "long long int:t7=r1;0;-1;",128,0,0,0
- 13 .stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
- 14 .stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
- 15 .stabs "signed char:t10=r1;-128;127;",128,0,0,0
- 16 .stabs "unsigned char:t11=r1;0;255;",128,0,0,0
- 17 .stabs "float:t12=r1;4;0;",128,0,0,0
- 18 .stabs "double:t13=r1;8;0;",128,0,0,0
- 19 .stabs "long double:t14=r1;8;0;",128,0,0,0
- 20 .stabs "void:t15=15",128,0,0,0
- 21 .align 4
- 22 LC0:
- 23 .ascii "Hello, world!\12\0"
- 24 .align 4
- 25 .global _main
- 26 .proc 1
- 27 _main:
- 28 .stabn 68,0,4,LM1
- 29 LM1:
- 30 !#PROLOGUE# 0
- 31 save %sp,-136,%sp
- 32 !#PROLOGUE# 1
- 33 call ___main,0
- 34 nop
- 35 .stabn 68,0,5,LM2
- 36 LM2:
- 37 LBB2:
- 38 sethi %hi(LC0),%o1
- 39 or %o1,%lo(LC0),%o0
- 40 call _printf,0
- 41 nop
- 42 .stabn 68,0,6,LM3
- 43 LM3:
- 44 LBE2:
- 45 .stabn 68,0,6,LM4
- 46 LM4:
- 47 L1:
- 48 ret
- 49 restore
- 50 .stabs "main:F1",36,0,0,_main
- 51 .stabn 192,0,0,LBB2
- 52 .stabn 224,0,0,LBE2
-
-
-File: stabs.info, Node: Program Structure, Next: Constants, Prev: Overview, Up: Top
-
-Encoding the Structure of the Program
-*************************************
-
-The elements of the program structure that stabs encode include the name
-of the main function, the names of the source and include files, the
-line numbers, procedure names and types, and the beginnings and ends of
-blocks of code.
-
-* Menu:
-
-* Main Program:: Indicate what the main program is
-* Source Files:: The path and name of the source file
-* Include Files:: Names of include files
-* Line Numbers::
-* Procedures::
-* Nested Procedures::
-* Block Structure::
-* Alternate Entry Points:: Entering procedures except at the beginning.
-
-
-File: stabs.info, Node: Main Program, Next: Source Files, Up: Program Structure
-
-Main Program
-============
-
-Most languages allow the main program to have any name. The `N_MAIN'
-stab type tells the debugger the name that is used in this program.
-Only the string field is significant; it is the name of a function
-which is the main program. Most C compilers do not use this stab (they
-expect the debugger to assume that the name is `main'), but some C
-compilers emit an `N_MAIN' stab for the `main' function. I'm not sure
-how XCOFF handles this.
-
-
-File: stabs.info, Node: Source Files, Next: Include Files, Prev: Main Program, Up: Program Structure
-
-Paths and Names of the Source Files
-===================================
-
-Before any other stabs occur, there must be a stab specifying the source
-file. This information is contained in a symbol of stab type `N_SO';
-the string field contains the name of the file. The value of the
-symbol is the start address of the portion of the text section
-corresponding to that file.
-
- With the Sun Solaris2 compiler, the desc field contains a
-source-language code.
-
- Some compilers (for example, GCC2 and SunOS4 `/bin/cc') also include
-the directory in which the source was compiled, in a second `N_SO'
-symbol preceding the one containing the file name. This symbol can be
-distinguished by the fact that it ends in a slash. Code from the
-`cfront' C++ compiler can have additional `N_SO' symbols for
-nonexistent source files after the `N_SO' for the real source file;
-these are believed to contain no useful information.
-
- For example:
-
- .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0 # 100 is N_SO
- .stabs "hello.c",100,0,0,Ltext0
- .text
- Ltext0:
-
- Instead of `N_SO' symbols, XCOFF uses a `.file' assembler directive
-which assembles to a `C_FILE' symbol; explaining this in detail is
-outside the scope of this document.
-
- If it is useful to indicate the end of a source file, this is done
-with an `N_SO' symbol with an empty string for the name. The value is
-the address of the end of the text section for the file. For some
-systems, there is no indication of the end of a source file, and you
-just need to figure it ended when you see an `N_SO' for a different
-source file, or a symbol ending in `.o' (which at least some linkers
-insert to mark the start of a new `.o' file).
-
-
-File: stabs.info, Node: Include Files, Next: Line Numbers, Prev: Source Files, Up: Program Structure
-
-Names of Include Files
-======================
-
-There are several schemes for dealing with include files: the
-traditional `N_SOL' approach, Sun's `N_BINCL' approach, and the XCOFF
-`C_BINCL' approach (which despite the similar name has little in common
-with `N_BINCL').
-
- An `N_SOL' symbol specifies which include file subsequent symbols
-refer to. The string field is the name of the file and the value is the
-text address corresponding to the end of the previous include file and
-the start of this one. To specify the main source file again, use an
-`N_SOL' symbol with the name of the main source file.
-
- The `N_BINCL' approach works as follows. An `N_BINCL' symbol
-specifies the start of an include file. In an object file, only the
-string is significant; the linker puts data into some of the other
-fields. The end of the include file is marked by an `N_EINCL' symbol
-(which has no string field). In an object file, there is no
-significant data in the `N_EINCL' symbol. `N_BINCL' and `N_EINCL' can
-be nested.
-
- If the linker detects that two source files have identical stabs
-between an `N_BINCL' and `N_EINCL' pair (as will generally be the case
-for a header file), then it only puts out the stabs once. Each
-additional occurrence is replaced by an `N_EXCL' symbol. I believe the
-GNU linker and the Sun (both SunOS4 and Solaris) linker are the only
-ones which supports this feature.
-
- A linker which supports this feature will set the value of a
-`N_BINCL' symbol to the total of all the characters in the stabs
-strings included in the header file, omitting any file numbers. The
-value of an `N_EXCL' symbol is the same as the value of the `N_BINCL'
-symbol it replaces. This information can be used to match up `N_EXCL'
-and `N_BINCL' symbols which have the same filename. The `N_EINCL'
-value, and the values of the other and description fields for all
-three, appear to always be zero.
-
- For the start of an include file in XCOFF, use the `.bi' assembler
-directive, which generates a `C_BINCL' symbol. A `.ei' directive,
-which generates a `C_EINCL' symbol, denotes the end of the include
-file. Both directives are followed by the name of the source file in
-quotes, which becomes the string for the symbol. The value of each
-symbol, produced automatically by the assembler and linker, is the
-offset into the executable of the beginning (inclusive, as you'd
-expect) or end (inclusive, as you would not expect) of the portion of
-the COFF line table that corresponds to this include file. `C_BINCL'
-and `C_EINCL' do not nest.
-
-
-File: stabs.info, Node: Line Numbers, Next: Procedures, Prev: Include Files, Up: Program Structure
-
-Line Numbers
-============
-
-An `N_SLINE' symbol represents the start of a source line. The desc
-field contains the line number and the value contains the code address
-for the start of that source line. On most machines the address is
-absolute; for stabs in sections (*note Stab Sections::), it is relative
-to the function in which the `N_SLINE' symbol occurs.
-
- GNU documents `N_DSLINE' and `N_BSLINE' symbols for line numbers in
-the data or bss segments, respectively. They are identical to
-`N_SLINE' but are relocated differently by the linker. They were
-intended to be used to describe the source location of a variable
-declaration, but I believe that GCC2 actually puts the line number in
-the desc field of the stab for the variable itself. GDB has been
-ignoring these symbols (unless they contain a string field) since at
-least GDB 3.5.
-
- For single source lines that generate discontiguous code, such as
-flow of control statements, there may be more than one line number
-entry for the same source line. In this case there is a line number
-entry at the start of each code range, each with the same line number.
-
- XCOFF does not use stabs for line numbers. Instead, it uses COFF
-line numbers (which are outside the scope of this document). Standard
-COFF line numbers cannot deal with include files, but in XCOFF this is
-fixed with the `C_BINCL' method of marking include files (*note Include
-Files::).
-
-
-File: stabs.info, Node: Procedures, Next: Nested Procedures, Prev: Line Numbers, Up: Program Structure
-
-Procedures
-==========
-
-All of the following stabs normally use the `N_FUN' symbol type.
-However, Sun's `acc' compiler on SunOS4 uses `N_GSYM' and `N_STSYM',
-which means that the value of the stab for the function is useless and
-the debugger must get the address of the function from the non-stab
-symbols instead. On systems where non-stab symbols have leading
-underscores, the stabs will lack underscores and the debugger needs to
-know about the leading underscore to match up the stab and the non-stab
-symbol. BSD Fortran is said to use `N_FNAME' with the same
-restriction; the value of the symbol is not useful (I'm not sure it
-really does use this, because GDB doesn't handle this and no one has
-complained).
-
- A function is represented by an `F' symbol descriptor for a global
-(extern) function, and `f' for a static (local) function. For a.out,
-the value of the symbol is the address of the start of the function; it
-is already relocated. For stabs in ELF, the SunPRO compiler version
-2.0.1 and GCC put out an address which gets relocated by the linker.
-In a future release SunPRO is planning to put out zero, in which case
-the address can be found from the ELF (non-stab) symbol. Because
-looking things up in the ELF symbols would probably be slow, I'm not
-sure how to find which symbol of that name is the right one, and this
-doesn't provide any way to deal with nested functions, it would
-probably be better to make the value of the stab an address relative to
-the start of the file, or just absolute. See *Note ELF Linker
-Relocation:: for more information on linker relocation of stabs in ELF
-files. For XCOFF, the stab uses the `C_FUN' storage class and the
-value of the stab is meaningless; the address of the function can be
-found from the csect symbol (XTY_LD/XMC_PR).
-
- The type information of the stab represents the return type of the
-function; thus `foo:f5' means that foo is a function returning type 5.
-There is no need to try to get the line number of the start of the
-function from the stab for the function; it is in the next `N_SLINE'
-symbol.
-
- Some compilers (such as Sun's Solaris compiler) support an extension
-for specifying the types of the arguments. I suspect this extension is
-not used for old (non-prototyped) function definitions in C. If the
-extension is in use, the type information of the stab for the function
-is followed by type information for each argument, with each argument
-preceded by `;'. An argument type of 0 means that additional arguments
-are being passed, whose types and number may vary (`...' in ANSI C).
-GDB has tolerated this extension (parsed the syntax, if not necessarily
-used the information) since at least version 4.8; I don't know whether
-all versions of dbx tolerate it. The argument types given here are not
-redundant with the symbols for the formal parameters (*note
-Parameters::); they are the types of the arguments as they are passed,
-before any conversions might take place. For example, if a C function
-which is declared without a prototype takes a `float' argument, the
-value is passed as a `double' but then converted to a `float'.
-Debuggers need to use the types given in the arguments when printing
-values, but when calling the function they need to use the types given
-in the symbol defining the function.
-
- If the return type and types of arguments of a function which is
-defined in another source file are specified (i.e., a function
-prototype in ANSI C), traditionally compilers emit no stab; the only
-way for the debugger to find the information is if the source file
-where the function is defined was also compiled with debugging symbols.
-As an extension the Solaris compiler uses symbol descriptor `P'
-followed by the return type of the function, followed by the arguments,
-each preceded by `;', as in a stab with symbol descriptor `f' or `F'.
-This use of symbol descriptor `P' can be distinguished from its use for
-register parameters (*note Register Parameters::) by the fact that it
-has symbol type `N_FUN'.
-
- The AIX documentation also defines symbol descriptor `J' as an
-internal function. I assume this means a function nested within another
-function. It also says symbol descriptor `m' is a module in Modula-2
-or extended Pascal.
-
- Procedures (functions which do not return values) are represented as
-functions returning the `void' type in C. I don't see why this couldn't
-be used for all languages (inventing a `void' type for this purpose if
-necessary), but the AIX documentation defines `I', `P', and `Q' for
-internal, global, and static procedures, respectively. These symbol
-descriptors are unusual in that they are not followed by type
-information.
-
- The following example shows a stab for a function `main' which
-returns type number `1'. The `_main' specified for the value is a
-reference to an assembler label which is used to fill in the start
-address of the function.
-
- .stabs "main:F1",36,0,0,_main # 36 is N_FUN
-
- The stab representing a procedure is located immediately following
-the code of the procedure. This stab is in turn directly followed by a
-group of other stabs describing elements of the procedure. These other
-stabs describe the procedure's parameters, its block local variables,
-and its block structure.
-
- If functions can appear in different sections, then the debugger may
-not be able to find the end of a function. Recent versions of GCC will
-mark the end of a function with an `N_FUN' symbol with an empty string
-for the name. The value is the address of the end of the current
-function. Without such a symbol, there is no indication of the address
-of the end of a function, and you must assume that it ended at the
-starting address of the next function or at the end of the text section
-for the program.
-
-
-File: stabs.info, Node: Nested Procedures, Next: Block Structure, Prev: Procedures, Up: Program Structure
-
-Nested Procedures
-=================
-
-For any of the symbol descriptors representing procedures, after the
-symbol descriptor and the type information is optionally a scope
-specifier. This consists of a comma, the name of the procedure, another
-comma, and the name of the enclosing procedure. The first name is local
-to the scope specified, and seems to be redundant with the name of the
-symbol (before the `:'). This feature is used by GCC, and presumably
-Pascal, Modula-2, etc., compilers, for nested functions.
-
- If procedures are nested more than one level deep, only the
-immediately containing scope is specified. For example, this code:
-
- int
- foo (int x)
- {
- int bar (int y)
- {
- int baz (int z)
- {
- return x + y + z;
- }
- return baz (x + 2 * y);
- }
- return x + bar (3 * x);
- }
-
-produces the stabs:
-
- .stabs "baz:f1,baz,bar",36,0,0,_baz.15 # 36 is N_FUN
- .stabs "bar:f1,bar,foo",36,0,0,_bar.12
- .stabs "foo:F1",36,0,0,_foo
-
-
-File: stabs.info, Node: Block Structure, Next: Alternate Entry Points, Prev: Nested Procedures, Up: Program Structure
-
-Block Structure
-===============
-
-The program's block structure is represented by the `N_LBRAC' (left
-brace) and the `N_RBRAC' (right brace) stab types. The variables
-defined inside a block precede the `N_LBRAC' symbol for most compilers,
-including GCC. Other compilers, such as the Convex, Acorn RISC
-machine, and Sun `acc' compilers, put the variables after the `N_LBRAC'
-symbol. The values of the `N_LBRAC' and `N_RBRAC' symbols are the
-start and end addresses of the code of the block, respectively. For
-most machines, they are relative to the starting address of this source
-file. For the Gould NP1, they are absolute. For stabs in sections
-(*note Stab Sections::), they are relative to the function in which
-they occur.
-
- The `N_LBRAC' and `N_RBRAC' stabs that describe the block scope of a
-procedure are located after the `N_FUN' stab that represents the
-procedure itself.
-
- Sun documents the desc field of `N_LBRAC' and `N_RBRAC' symbols as
-containing the nesting level of the block. However, dbx seems to not
-care, and GCC always sets desc to zero.
-
- For XCOFF, block scope is indicated with `C_BLOCK' symbols. If the
-name of the symbol is `.bb', then it is the beginning of the block; if
-the name of the symbol is `.be'; it is the end of the block.
-
-
-File: stabs.info, Node: Alternate Entry Points, Prev: Block Structure, Up: Program Structure
-
-Alternate Entry Points
-======================
-
-Some languages, like Fortran, have the ability to enter procedures at
-some place other than the beginning. One can declare an alternate entry
-point. The `N_ENTRY' stab is for this; however, the Sun FORTRAN
-compiler doesn't use it. According to AIX documentation, only the name
-of a `C_ENTRY' stab is significant; the address of the alternate entry
-point comes from the corresponding external symbol. A previous
-revision of this document said that the value of an `N_ENTRY' stab was
-the address of the alternate entry point, but I don't know the source
-for that information.
-
-
-File: stabs.info, Node: Constants, Next: Variables, Prev: Program Structure, Up: Top
-
-Constants
-*********
-
-The `c' symbol descriptor indicates that this stab represents a
-constant. This symbol descriptor is an exception to the general rule
-that symbol descriptors are followed by type information. Instead, it
-is followed by `=' and one of the following:
-
-`b VALUE'
- Boolean constant. VALUE is a numeric value; I assume it is 0 for
- false or 1 for true.
-
-`c VALUE'
- Character constant. VALUE is the numeric value of the constant.
-
-`e TYPE-INFORMATION , VALUE'
- Constant whose value can be represented as integral.
- TYPE-INFORMATION is the type of the constant, as it would appear
- after a symbol descriptor (*note String Field::). VALUE is the
- numeric value of the constant. GDB 4.9 does not actually get the
- right value if VALUE does not fit in a host `int', but it does not
- do anything violent, and future debuggers could be extended to
- accept integers of any size (whether unsigned or not). This
- constant type is usually documented as being only for enumeration
- constants, but GDB has never imposed that restriction; I don't
- know about other debuggers.
-
-`i VALUE'
- Integer constant. VALUE is the numeric value. The type is some
- sort of generic integer type (for GDB, a host `int'); to specify
- the type explicitly, use `e' instead.
-
-`r VALUE'
- Real constant. VALUE is the real value, which can be `INF'
- (optionally preceded by a sign) for infinity, `QNAN' for a quiet
- NaN (not-a-number), or `SNAN' for a signalling NaN. If it is a
- normal number the format is that accepted by the C library function
- `atof'.
-
-`s STRING'
- String constant. STRING is a string enclosed in either `'' (in
- which case `'' characters within the string are represented as
- `\'' or `"' (in which case `"' characters within the string are
- represented as `\"').
-
-`S TYPE-INFORMATION , ELEMENTS , BITS , PATTERN'
- Set constant. TYPE-INFORMATION is the type of the constant, as it
- would appear after a symbol descriptor (*note String Field::).
- ELEMENTS is the number of elements in the set (does this means how
- many bits of PATTERN are actually used, which would be redundant
- with the type, or perhaps the number of bits set in PATTERN? I
- don't get it), BITS is the number of bits in the constant (meaning
- it specifies the length of PATTERN, I think), and PATTERN is a
- hexadecimal representation of the set. AIX documentation refers
- to a limit of 32 bytes, but I see no reason why this limit should
- exist. This form could probably be used for arbitrary constants,
- not just sets; the only catch is that PATTERN should be understood
- to be target, not host, byte order and format.
-
- The boolean, character, string, and set constants are not supported
-by GDB 4.9, but it ignores them. GDB 4.8 and earlier gave an error
-message and refused to read symbols from the file containing the
-constants.
-
- The above information is followed by `;'.
-
-
-File: stabs.info, Node: Variables, Next: Types, Prev: Constants, Up: Top
-
-Variables
-*********
-
-Different types of stabs describe the various ways that variables can be
-allocated: on the stack, globally, in registers, in common blocks,
-statically, or as arguments to a function.
-
-* Menu:
-
-* Stack Variables:: Variables allocated on the stack.
-* Global Variables:: Variables used by more than one source file.
-* Register Variables:: Variables in registers.
-* Common Blocks:: Variables statically allocated together.
-* Statics:: Variables local to one source file.
-* Based Variables:: Fortran pointer based variables.
-* Parameters:: Variables for arguments to functions.
-
-
-File: stabs.info, Node: Stack Variables, Next: Global Variables, Up: Variables
-
-Automatic Variables Allocated on the Stack
-==========================================
-
-If a variable's scope is local to a function and its lifetime is only as
-long as that function executes (C calls such variables "automatic"), it
-can be allocated in a register (*note Register Variables::) or on the
-stack.
-
- Each variable allocated on the stack has a stab with the symbol
-descriptor omitted. Since type information should begin with a digit,
-`-', or `(', only those characters precluded from being used for symbol
-descriptors. However, the Acorn RISC machine (ARM) is said to get this
-wrong: it puts out a mere type definition here, without the preceding
-`TYPE-NUMBER='. This is a bad idea; there is no guarantee that type
-descriptors are distinct from symbol descriptors. Stabs for stack
-variables use the `N_LSYM' stab type, or `C_LSYM' for XCOFF.
-
- The value of the stab is the offset of the variable within the local
-variables. On most machines this is an offset from the frame pointer
-and is negative. The location of the stab specifies which block it is
-defined in; see *Note Block Structure::.
-
- For example, the following C code:
-
- int
- main ()
- {
- int x;
- }
-
- produces the following stabs:
-
- .stabs "main:F1",36,0,0,_main # 36 is N_FUN
- .stabs "x:1",128,0,0,-12 # 128 is N_LSYM
- .stabn 192,0,0,LBB2 # 192 is N_LBRAC
- .stabn 224,0,0,LBE2 # 224 is N_RBRAC
-
- See *Note Procedures:: for more information on the `N_FUN' stab, and
-*Note Block Structure:: for more information on the `N_LBRAC' and
-`N_RBRAC' stabs.
-
-
-File: stabs.info, Node: Global Variables, Next: Register Variables, Prev: Stack Variables, Up: Variables
-
-Global Variables
-================
-
-A variable whose scope is not specific to just one source file is
-represented by the `G' symbol descriptor. These stabs use the `N_GSYM'
-stab type (C_GSYM for XCOFF). The type information for the stab (*note
-String Field::) gives the type of the variable.
-
- For example, the following source code:
-
- char g_foo = 'c';
-
-yields the following assembly code:
-
- .stabs "g_foo:G2",32,0,0,0 # 32 is N_GSYM
- .global _g_foo
- .data
- _g_foo:
- .byte 99
-
- The address of the variable represented by the `N_GSYM' is not
-contained in the `N_GSYM' stab. The debugger gets this information
-from the external symbol for the global variable. In the example above,
-the `.global _g_foo' and `_g_foo:' lines tell the assembler to produce
-an external symbol.
-
- Some compilers, like GCC, output `N_GSYM' stabs only once, where the
-variable is defined. Other compilers, like SunOS4 /bin/cc, output a
-`N_GSYM' stab for each compilation unit which references the variable.
-
-
-File: stabs.info, Node: Register Variables, Next: Common Blocks, Prev: Global Variables, Up: Variables
-
-Register Variables
-==================
-
-Register variables have their own stab type, `N_RSYM' (`C_RSYM' for
-XCOFF), and their own symbol descriptor, `r'. The stab's value is the
-number of the register where the variable data will be stored.
-
- AIX defines a separate symbol descriptor `d' for floating point
-registers. This seems unnecessary; why not just just give floating
-point registers different register numbers? I have not verified whether
-the compiler actually uses `d'.
-
- If the register is explicitly allocated to a global variable, but not
-initialized, as in:
-
- register int g_bar asm ("%g5");
-
-then the stab may be emitted at the end of the object file, with the
-other bss symbols.
-
-
-File: stabs.info, Node: Common Blocks, Next: Statics, Prev: Register Variables, Up: Variables
-
-Common Blocks
-=============
-
-A common block is a statically allocated section of memory which can be
-referred to by several source files. It may contain several variables.
-I believe Fortran is the only language with this feature.
-
- A `N_BCOMM' stab begins a common block and an `N_ECOMM' stab ends
-it. The only field that is significant in these two stabs is the
-string, which names a normal (non-debugging) symbol that gives the
-address of the common block. According to IBM documentation, only the
-`N_BCOMM' has the name of the common block (even though their compiler
-actually puts it both places).
-
- The stabs for the members of the common block are between the
-`N_BCOMM' and the `N_ECOMM'; the value of each stab is the offset
-within the common block of that variable. IBM uses the `C_ECOML' stab
-type, and there is a corresponding `N_ECOML' stab type, but Sun's
-Fortran compiler uses `N_GSYM' instead. The variables within a common
-block use the `V' symbol descriptor (I believe this is true of all
-Fortran variables). Other stabs (at least type declarations using
-`C_DECL') can also be between the `N_BCOMM' and the `N_ECOMM'.
-
-
-File: stabs.info, Node: Statics, Next: Based Variables, Prev: Common Blocks, Up: Variables
-
-Static Variables
-================
-
-Initialized static variables are represented by the `S' and `V' symbol
-descriptors. `S' means file scope static, and `V' means procedure
-scope static. One exception: in XCOFF, IBM's xlc compiler always uses
-`V', and whether it is file scope or not is distinguished by whether
-the stab is located within a function.
-
- In a.out files, `N_STSYM' means the data section, `N_FUN' means the
-text section, and `N_LCSYM' means the bss section. For those systems
-with a read-only data section separate from the text section (Solaris),
-`N_ROSYM' means the read-only data section.
-
- For example, the source lines:
-
- static const int var_const = 5;
- static int var_init = 2;
- static int var_noinit;
-
-yield the following stabs:
-
- .stabs "var_const:S1",36,0,0,_var_const # 36 is N_FUN
- ...
- .stabs "var_init:S1",38,0,0,_var_init # 38 is N_STSYM
- ...
- .stabs "var_noinit:S1",40,0,0,_var_noinit # 40 is N_LCSYM
-
- In XCOFF files, the stab type need not indicate the section;
-`C_STSYM' can be used for all statics. Also, each static variable is
-enclosed in a static block. A `C_BSTAT' (emitted with a `.bs'
-assembler directive) symbol begins the static block; its value is the
-symbol number of the csect symbol whose value is the address of the
-static block, its section is the section of the variables in that
-static block, and its name is `.bs'. A `C_ESTAT' (emitted with a `.es'
-assembler directive) symbol ends the static block; its name is `.es'
-and its value and section are ignored.
-
- In ECOFF files, the storage class is used to specify the section, so
-the stab type need not indicate the section.
-
- In ELF files, for the SunPRO compiler version 2.0.1, symbol
-descriptor `S' means that the address is absolute (the linker relocates
-it) and symbol descriptor `V' means that the address is relative to the
-start of the relevant section for that compilation unit. SunPRO has
-plans to have the linker stop relocating stabs; I suspect that their the
-debugger gets the address from the corresponding ELF (not stab) symbol.
-I'm not sure how to find which symbol of that name is the right one.
-The clean way to do all this would be to have a the value of a symbol
-descriptor `S' symbol be an offset relative to the start of the file,
-just like everything else, but that introduces obvious compatibility
-problems. For more information on linker stab relocation, *Note ELF
-Linker Relocation::.
-
-
-File: stabs.info, Node: Based Variables, Next: Parameters, Prev: Statics, Up: Variables
-
-Fortran Based Variables
-=======================
-
-Fortran (at least, the Sun and SGI dialects of FORTRAN-77) has a feature
-which allows allocating arrays with `malloc', but which avoids blurring
-the line between arrays and pointers the way that C does. In stabs
-such a variable uses the `b' symbol descriptor.
-
- For example, the Fortran declarations
-
- real foo, foo10(10), foo10_5(10,5)
- pointer (foop, foo)
- pointer (foo10p, foo10)
- pointer (foo105p, foo10_5)
-
- produce the stabs
-
- foo:b6
- foo10:bar3;1;10;6
- foo10_5:bar3;1;5;ar3;1;10;6
-
- In this example, `real' is type 6 and type 3 is an integral type
-which is the type of the subscripts of the array (probably `integer').
-
- The `b' symbol descriptor is like `V' in that it denotes a
-statically allocated symbol whose scope is local to a function; see
-*Note Statics::. The value of the symbol, instead of being the address
-of the variable itself, is the address of a pointer to that variable.
-So in the above example, the value of the `foo' stab is the address of
-a pointer to a real, the value of the `foo10' stab is the address of a
-pointer to a 10-element array of reals, and the value of the `foo10_5'
-stab is the address of a pointer to a 5-element array of 10-element
-arrays of reals.
-
-
-File: stabs.info, Node: Parameters, Prev: Based Variables, Up: Variables
-
-Parameters
-==========
-
-Formal parameters to a function are represented by a stab (or sometimes
-two; see below) for each parameter. The stabs are in the order in which
-the debugger should print the parameters (i.e., the order in which the
-parameters are declared in the source file). The exact form of the stab
-depends on how the parameter is being passed.
-
- Parameters passed on the stack use the symbol descriptor `p' and the
-`N_PSYM' symbol type (or `C_PSYM' for XCOFF). The value of the symbol
-is an offset used to locate the parameter on the stack; its exact
-meaning is machine-dependent, but on most machines it is an offset from
-the frame pointer.
-
- As a simple example, the code:
-
- main (argc, argv)
- int argc;
- char **argv;
-
- produces the stabs:
-
- .stabs "main:F1",36,0,0,_main # 36 is N_FUN
- .stabs "argc:p1",160,0,0,68 # 160 is N_PSYM
- .stabs "argv:p20=*21=*2",160,0,0,72
-
- The type definition of `argv' is interesting because it contains
-several type definitions. Type 21 is pointer to type 2 (char) and
-`argv' (type 20) is pointer to type 21.
-
- The following symbol descriptors are also said to go with `N_PSYM'.
-The value of the symbol is said to be an offset from the argument
-pointer (I'm not sure whether this is true or not).
-
- pP (<<??>>)
- pF Fortran function parameter
- X (function result variable)
-
-* Menu:
-
-* Register Parameters::
-* Local Variable Parameters::
-* Reference Parameters::
-* Conformant Arrays::
-
-
-File: stabs.info, Node: Register Parameters, Next: Local Variable Parameters, Up: Parameters
-
-Passing Parameters in Registers
--------------------------------
-
-If the parameter is passed in a register, then traditionally there are
-two symbols for each argument:
-
- .stabs "arg:p1" . . . ; N_PSYM
- .stabs "arg:r1" . . . ; N_RSYM
-
- Debuggers use the second one to find the value, and the first one to
-know that it is an argument.
-
- Because that approach is kind of ugly, some compilers use symbol
-descriptor `P' or `R' to indicate an argument which is in a register.
-Symbol type `C_RPSYM' is used in XCOFF and `N_RSYM' is used otherwise.
-The symbol's value is the register number. `P' and `R' mean the same
-thing; the difference is that `P' is a GNU invention and `R' is an IBM
-(XCOFF) invention. As of version 4.9, GDB should handle either one.
-
- There is at least one case where GCC uses a `p' and `r' pair rather
-than `P'; this is where the argument is passed in the argument list and
-then loaded into a register.
-
- According to the AIX documentation, symbol descriptor `D' is for a
-parameter passed in a floating point register. This seems
-unnecessary--why not just use `R' with a register number which
-indicates that it's a floating point register? I haven't verified
-whether the system actually does what the documentation indicates.
-
- On the sparc and hppa, for a `P' symbol whose type is a structure or
-union, the register contains the address of the structure. On the
-sparc, this is also true of a `p' and `r' pair (using Sun `cc') or a
-`p' symbol. However, if a (small) structure is really in a register,
-`r' is used. And, to top it all off, on the hppa it might be a
-structure which was passed on the stack and loaded into a register and
-for which there is a `p' and `r' pair! I believe that symbol
-descriptor `i' is supposed to deal with this case (it is said to mean
-"value parameter by reference, indirect access"; I don't know the
-source for this information), but I don't know details or what
-compilers or debuggers use it, if any (not GDB or GCC). It is not
-clear to me whether this case needs to be dealt with differently than
-parameters passed by reference (*note Reference Parameters::).
-
-
-File: stabs.info, Node: Local Variable Parameters, Next: Reference Parameters, Prev: Register Parameters, Up: Parameters
-
-Storing Parameters as Local Variables
--------------------------------------
-
-There is a case similar to an argument in a register, which is an
-argument that is actually stored as a local variable. Sometimes this
-happens when the argument was passed in a register and then the compiler
-stores it as a local variable. If possible, the compiler should claim
-that it's in a register, but this isn't always done.
-
- If a parameter is passed as one type and converted to a smaller type
-by the prologue (for example, the parameter is declared as a `float',
-but the calling conventions specify that it is passed as a `double'),
-then GCC2 (sometimes) uses a pair of symbols. The first symbol uses
-symbol descriptor `p' and the type which is passed. The second symbol
-has the type and location which the parameter actually has after the
-prologue. For example, suppose the following C code appears with no
-prototypes involved:
-
- void
- subr (f)
- float f;
- {
-
- if `f' is passed as a double at stack offset 8, and the prologue
-converts it to a float in register number 0, then the stabs look like:
-
- .stabs "f:p13",160,0,3,8 # 160 is `N_PSYM', here 13 is `double'
- .stabs "f:r12",64,0,3,0 # 64 is `N_RSYM', here 12 is `float'
-
- In both stabs 3 is the line number where `f' is declared (*note Line
-Numbers::).
-
- GCC, at least on the 960, has another solution to the same problem.
-It uses a single `p' symbol descriptor for an argument which is stored
-as a local variable but uses `N_LSYM' instead of `N_PSYM'. In this
-case, the value of the symbol is an offset relative to the local
-variables for that function, not relative to the arguments; on some
-machines those are the same thing, but not on all.
-
- On the VAX or on other machines in which the calling convention
-includes the number of words of arguments actually passed, the debugger
-(GDB at least) uses the parameter symbols to keep track of whether it
-needs to print nameless arguments in addition to the formal parameters
-which it has printed because each one has a stab. For example, in
-
- extern int fprintf (FILE *stream, char *format, ...);
- ...
- fprintf (stdout, "%d\n", x);
-
- there are stabs for `stream' and `format'. On most machines, the
-debugger can only print those two arguments (because it has no way of
-knowing that additional arguments were passed), but on the VAX or other
-machines with a calling convention which indicates the number of words
-of arguments, the debugger can print all three arguments. To do so,
-the parameter symbol (symbol descriptor `p') (not necessarily `r' or
-symbol descriptor omitted symbols) needs to contain the actual type as
-passed (for example, `double' not `float' if it is passed as a double
-and converted to a float).
-
-
-File: stabs.info, Node: Reference Parameters, Next: Conformant Arrays, Prev: Local Variable Parameters, Up: Parameters
-
-Passing Parameters by Reference
--------------------------------
-
-If the parameter is passed by reference (e.g., Pascal `VAR'
-parameters), then the symbol descriptor is `v' if it is in the argument
-list, or `a' if it in a register. Other than the fact that these
-contain the address of the parameter rather than the parameter itself,
-they are identical to `p' and `R', respectively. I believe `a' is an
-AIX invention; `v' is supported by all stabs-using systems as far as I
-know.
-
-
-File: stabs.info, Node: Conformant Arrays, Prev: Reference Parameters, Up: Parameters
-
-Passing Conformant Array Parameters
------------------------------------
-
-Conformant arrays are a feature of Modula-2, and perhaps other
-languages, in which the size of an array parameter is not known to the
-called function until run-time. Such parameters have two stabs: a `x'
-for the array itself, and a `C', which represents the size of the
-array. The value of the `x' stab is the offset in the argument list
-where the address of the array is stored (it this right? it is a
-guess); the value of the `C' stab is the offset in the argument list
-where the size of the array (in elements? in bytes?) is stored.
-
-
-File: stabs.info, Node: Types, Next: Symbol Tables, Prev: Variables, Up: Top
-
-Defining Types
-**************
-
-The examples so far have described types as references to previously
-defined types, or defined in terms of subranges of or pointers to
-previously defined types. This chapter describes the other type
-descriptors that may follow the `=' in a type definition.
-
-* Menu:
-
-* Builtin Types:: Integers, floating point, void, etc.
-* Miscellaneous Types:: Pointers, sets, files, etc.
-* Cross-References:: Referring to a type not yet defined.
-* Subranges:: A type with a specific range.
-* Arrays:: An aggregate type of same-typed elements.
-* Strings:: Like an array but also has a length.
-* Enumerations:: Like an integer but the values have names.
-* Structures:: An aggregate type of different-typed elements.
-* Typedefs:: Giving a type a name.
-* Unions:: Different types sharing storage.
-* Function Types::
-
-
-File: stabs.info, Node: Builtin Types, Next: Miscellaneous Types, Up: Types
-
-Builtin Types
-=============
-
-Certain types are built in (`int', `short', `void', `float', etc.); the
-debugger recognizes these types and knows how to handle them. Thus,
-don't be surprised if some of the following ways of specifying builtin
-types do not specify everything that a debugger would need to know
-about the type--in some cases they merely specify enough information to
-distinguish the type from other types.
-
- The traditional way to define builtin types is convoluted, so new
-ways have been invented to describe them. Sun's `acc' uses special
-builtin type descriptors (`b' and `R'), and IBM uses negative type
-numbers. GDB accepts all three ways, as of version 4.8; dbx just
-accepts the traditional builtin types and perhaps one of the other two
-formats. The following sections describe each of these formats.
-
-* Menu:
-
-* Traditional Builtin Types:: Put on your seat belts and prepare for kludgery
-* Builtin Type Descriptors:: Builtin types with special type descriptors
-* Negative Type Numbers:: Builtin types using negative type numbers
-
-
-File: stabs.info, Node: Traditional Builtin Types, Next: Builtin Type Descriptors, Up: Builtin Types
-
-Traditional Builtin Types
--------------------------
-
-This is the traditional, convoluted method for defining builtin types.
-There are several classes of such type definitions: integer, floating
-point, and `void'.
-
-* Menu:
-
-* Traditional Integer Types::
-* Traditional Other Types::
-
-
-File: stabs.info, Node: Traditional Integer Types, Next: Traditional Other Types, Up: Traditional Builtin Types
-
-Traditional Integer Types
-.........................
-
-Often types are defined as subranges of themselves. If the bounding
-values fit within an `int', then they are given normally. For example:
-
- .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0 # 128 is N_LSYM
- .stabs "char:t2=r2;0;127;",128,0,0,0
-
- Builtin types can also be described as subranges of `int':
-
- .stabs "unsigned short:t6=r1;0;65535;",128,0,0,0
-
- If the lower bound of a subrange is 0 and the upper bound is -1, the
-type is an unsigned integral type whose bounds are too big to describe
-in an `int'. Traditionally this is only used for `unsigned int' and
-`unsigned long':
-
- .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
-
- For larger types, GCC 2.4.5 puts out bounds in octal, with one or
-more leading zeroes. In this case a negative bound consists of a number
-which is a 1 bit (for the sign bit) followed by a 0 bit for each bit in
-the number (except the sign bit), and a positive bound is one which is a
-1 bit for each bit in the number (except possibly the sign bit). All
-known versions of dbx and GDB version 4 accept this (at least in the
-sense of not refusing to process the file), but GDB 3.5 refuses to read
-the whole file containing such symbols. So GCC 2.3.3 did not output the
-proper size for these types. As an example of octal bounds, the string
-fields of the stabs for 64 bit integer types look like:
-
- long int:t3=r1;001000000000000000000000;000777777777777777777777;
- long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777;
-
- If the lower bound of a subrange is 0 and the upper bound is
-negative, the type is an unsigned integral type whose size in bytes is
-the absolute value of the upper bound. I believe this is a Convex
-convention for `unsigned long long'.
-
- If the lower bound of a subrange is negative and the upper bound is
-0, the type is a signed integral type whose size in bytes is the
-absolute value of the lower bound. I believe this is a Convex
-convention for `long long'. To distinguish this from a legitimate
-subrange, the type should be a subrange of itself. I'm not sure whether
-this is the case for Convex.
-
-
-File: stabs.info, Node: Traditional Other Types, Prev: Traditional Integer Types, Up: Traditional Builtin Types
-
-Traditional Other Types
-.......................
-
-If the upper bound of a subrange is 0 and the lower bound is positive,
-the type is a floating point type, and the lower bound of the subrange
-indicates the number of bytes in the type:
-
- .stabs "float:t12=r1;4;0;",128,0,0,0
- .stabs "double:t13=r1;8;0;",128,0,0,0
-
- However, GCC writes `long double' the same way it writes `double',
-so there is no way to distinguish.
-
- .stabs "long double:t14=r1;8;0;",128,0,0,0
-
- Complex types are defined the same way as floating-point types;
-there is no way to distinguish a single-precision complex from a
-double-precision floating-point type.
-
- The C `void' type is defined as itself:
-
- .stabs "void:t15=15",128,0,0,0
-
- I'm not sure how a boolean type is represented.
-
-
-File: stabs.info, Node: Builtin Type Descriptors, Next: Negative Type Numbers, Prev: Traditional Builtin Types, Up: Builtin Types
-
-Defining Builtin Types Using Builtin Type Descriptors
------------------------------------------------------
-
-This is the method used by Sun's `acc' for defining builtin types.
-These are the type descriptors to define builtin types:
-
-`b SIGNED CHAR-FLAG WIDTH ; OFFSET ; NBITS ;'
- Define an integral type. SIGNED is `u' for unsigned or `s' for
- signed. CHAR-FLAG is `c' which indicates this is a character
- type, or is omitted. I assume this is to distinguish an integral
- type from a character type of the same size, for example it might
- make sense to set it for the C type `wchar_t' so the debugger can
- print such variables differently (Solaris does not do this). Sun
- sets it on the C types `signed char' and `unsigned char' which
- arguably is wrong. WIDTH and OFFSET appear to be for small
- objects stored in larger ones, for example a `short' in an `int'
- register. WIDTH is normally the number of bytes in the type.
- OFFSET seems to always be zero. NBITS is the number of bits in
- the type.
-
- Note that type descriptor `b' used for builtin types conflicts with
- its use for Pascal space types (*note Miscellaneous Types::); they
- can be distinguished because the character following the type
- descriptor will be a digit, `(', or `-' for a Pascal space type, or
- `u' or `s' for a builtin type.
-
-`w'
- Documented by AIX to define a wide character type, but their
- compiler actually uses negative type numbers (*note Negative Type
- Numbers::).
-
-`R FP-TYPE ; BYTES ;'
- Define a floating point type. FP-TYPE has one of the following
- values:
-
- `1 (NF_SINGLE)'
- IEEE 32-bit (single precision) floating point format.
-
- `2 (NF_DOUBLE)'
- IEEE 64-bit (double precision) floating point format.
-
- `3 (NF_COMPLEX)'
-
- `4 (NF_COMPLEX16)'
-
- `5 (NF_COMPLEX32)'
- These are for complex numbers. A comment in the GDB source
- describes them as Fortran `complex', `double complex', and
- `complex*16', respectively, but what does that mean? (i.e.,
- Single precision? Double precision?).
-
- `6 (NF_LDOUBLE)'
- Long double. This should probably only be used for Sun format
- `long double', and new codes should be used for other floating
- point formats (`NF_DOUBLE' can be used if a `long double' is
- really just an IEEE double, of course).
-
- BYTES is the number of bytes occupied by the type. This allows a
- debugger to perform some operations with the type even if it
- doesn't understand FP-TYPE.
-
-`g TYPE-INFORMATION ; NBITS'
- Documented by AIX to define a floating type, but their compiler
- actually uses negative type numbers (*note Negative Type
- Numbers::).
-
-`c TYPE-INFORMATION ; NBITS'
- Documented by AIX to define a complex type, but their compiler
- actually uses negative type numbers (*note Negative Type
- Numbers::).
-
- The C `void' type is defined as a signed integral type 0 bits long:
- .stabs "void:t19=bs0;0;0",128,0,0,0
- The Solaris compiler seems to omit the trailing semicolon in this
-case. Getting sloppy in this way is not a swift move because if a type
-is embedded in a more complex expression it is necessary to be able to
-tell where it ends.
-
- I'm not sure how a boolean type is represented.
-
-
-File: stabs.info, Node: Negative Type Numbers, Prev: Builtin Type Descriptors, Up: Builtin Types
-
-Negative Type Numbers
----------------------
-
-This is the method used in XCOFF for defining builtin types. Since the
-debugger knows about the builtin types anyway, the idea of negative
-type numbers is simply to give a special type number which indicates
-the builtin type. There is no stab defining these types.
-
- There are several subtle issues with negative type numbers.
-
- One is the size of the type. A builtin type (for example the C types
-`int' or `long') might have different sizes depending on compiler
-options, the target architecture, the ABI, etc. This issue doesn't
-come up for IBM tools since (so far) they just target the RS/6000; the
-sizes indicated below for each size are what the IBM RS/6000 tools use.
-To deal with differing sizes, either define separate negative type
-numbers for each size (which works but requires changing the debugger,
-and, unless you get both AIX dbx and GDB to accept the change,
-introduces an incompatibility), or use a type attribute (*note String
-Field::) to define a new type with the appropriate size (which merely
-requires a debugger which understands type attributes, like AIX dbx or
-GDB). For example,
-
- .stabs "boolean:t10=@s8;-16",128,0,0,0
-
- defines an 8-bit boolean type, and
-
- .stabs "boolean:t10=@s64;-16",128,0,0,0
-
- defines a 64-bit boolean type.
-
- A similar issue is the format of the type. This comes up most often
-for floating-point types, which could have various formats (particularly
-extended doubles, which vary quite a bit even among IEEE systems).
-Again, it is best to define a new negative type number for each
-different format; changing the format based on the target system has
-various problems. One such problem is that the Alpha has both VAX and
-IEEE floating types. One can easily imagine one library using the VAX
-types and another library in the same executable using the IEEE types.
-Another example is that the interpretation of whether a boolean is true
-or false can be based on the least significant bit, most significant
-bit, whether it is zero, etc., and different compilers (or different
-options to the same compiler) might provide different kinds of boolean.
-
- The last major issue is the names of the types. The name of a given
-type depends _only_ on the negative type number given; these do not
-vary depending on the language, the target system, or anything else.
-One can always define separate type numbers--in the following list you
-will see for example separate `int' and `integer*4' types which are
-identical except for the name. But compatibility can be maintained by
-not inventing new negative type numbers and instead just defining a new
-type with a new name. For example:
-
- .stabs "CARDINAL:t10=-8",128,0,0,0
-
- Here is the list of negative type numbers. The phrase "integral
-type" is used to mean twos-complement (I strongly suspect that all
-machines which use stabs use twos-complement; most machines use
-twos-complement these days).
-
-`-1'
- `int', 32 bit signed integral type.
-
-`-2'
- `char', 8 bit type holding a character. Both GDB and dbx on AIX
- treat this as signed. GCC uses this type whether `char' is signed
- or not, which seems like a bad idea. The AIX compiler (`xlc')
- seems to avoid this type; it uses -5 instead for `char'.
-
-`-3'
- `short', 16 bit signed integral type.
-
-`-4'
- `long', 32 bit signed integral type.
-
-`-5'
- `unsigned char', 8 bit unsigned integral type.
-
-`-6'
- `signed char', 8 bit signed integral type.
-
-`-7'
- `unsigned short', 16 bit unsigned integral type.
-
-`-8'
- `unsigned int', 32 bit unsigned integral type.
-
-`-9'
- `unsigned', 32 bit unsigned integral type.
-
-`-10'
- `unsigned long', 32 bit unsigned integral type.
-
-`-11'
- `void', type indicating the lack of a value.
-
-`-12'
- `float', IEEE single precision.
-
-`-13'
- `double', IEEE double precision.
-
-`-14'
- `long double', IEEE double precision. The compiler claims the size
- will increase in a future release, and for binary compatibility
- you have to avoid using `long double'. I hope when they increase
- it they use a new negative type number.
-
-`-15'
- `integer'. 32 bit signed integral type.
-
-`-16'
- `boolean'. 32 bit type. GDB and GCC assume that zero is false,
- one is true, and other values have unspecified meaning. I hope
- this agrees with how the IBM tools use the type.
-
-`-17'
- `short real'. IEEE single precision.
-
-`-18'
- `real'. IEEE double precision.
-
-`-19'
- `stringptr'. *Note Strings::.
-
-`-20'
- `character', 8 bit unsigned character type.
-
-`-21'
- `logical*1', 8 bit type. This Fortran type has a split
- personality in that it is used for boolean variables, but can also
- be used for unsigned integers. 0 is false, 1 is true, and other
- values are non-boolean.
-
-`-22'
- `logical*2', 16 bit type. This Fortran type has a split
- personality in that it is used for boolean variables, but can also
- be used for unsigned integers. 0 is false, 1 is true, and other
- values are non-boolean.
-
-`-23'
- `logical*4', 32 bit type. This Fortran type has a split
- personality in that it is used for boolean variables, but can also
- be used for unsigned integers. 0 is false, 1 is true, and other
- values are non-boolean.
-
-`-24'
- `logical', 32 bit type. This Fortran type has a split personality
- in that it is used for boolean variables, but can also be used for
- unsigned integers. 0 is false, 1 is true, and other values are
- non-boolean.
-
-`-25'
- `complex'. A complex type consisting of two IEEE single-precision
- floating point values.
-
-`-26'
- `complex'. A complex type consisting of two IEEE double-precision
- floating point values.
-
-`-27'
- `integer*1', 8 bit signed integral type.
-
-`-28'
- `integer*2', 16 bit signed integral type.
-
-`-29'
- `integer*4', 32 bit signed integral type.
-
-`-30'
- `wchar'. Wide character, 16 bits wide, unsigned (what format?
- Unicode?).
-
-`-31'
- `long long', 64 bit signed integral type.
-
-`-32'
- `unsigned long long', 64 bit unsigned integral type.
-
-`-33'
- `logical*8', 64 bit unsigned integral type.
-
-`-34'
- `integer*8', 64 bit signed integral type.
-
-
-File: stabs.info, Node: Miscellaneous Types, Next: Cross-References, Prev: Builtin Types, Up: Types
-
-Miscellaneous Types
-===================
-
-`b TYPE-INFORMATION ; BYTES'
- Pascal space type. This is documented by IBM; what does it mean?
-
- This use of the `b' type descriptor can be distinguished from its
- use for builtin integral types (*note Builtin Type Descriptors::)
- because the character following the type descriptor is always a
- digit, `(', or `-'.
-
-`B TYPE-INFORMATION'
- A volatile-qualified version of TYPE-INFORMATION. This is a Sun
- extension. References and stores to a variable with a
- volatile-qualified type must not be optimized or cached; they must
- occur as the user specifies them.
-
-`d TYPE-INFORMATION'
- File of type TYPE-INFORMATION. As far as I know this is only used
- by Pascal.
-
-`k TYPE-INFORMATION'
- A const-qualified version of TYPE-INFORMATION. This is a Sun
- extension. A variable with a const-qualified type cannot be
- modified.
-
-`M TYPE-INFORMATION ; LENGTH'
- Multiple instance type. The type seems to composed of LENGTH
- repetitions of TYPE-INFORMATION, for example `character*3' is
- represented by `M-2;3', where `-2' is a reference to a character
- type (*note Negative Type Numbers::). I'm not sure how this
- differs from an array. This appears to be a Fortran feature.
- LENGTH is a bound, like those in range types; see *Note
- Subranges::.
-
-`S TYPE-INFORMATION'
- Pascal set type. TYPE-INFORMATION must be a small type such as an
- enumeration or a subrange, and the type is a bitmask whose length
- is specified by the number of elements in TYPE-INFORMATION.
-
- In CHILL, if it is a bitstring instead of a set, also use the `S'
- type attribute (*note String Field::).
-
-`* TYPE-INFORMATION'
- Pointer to TYPE-INFORMATION.
-
-
-File: stabs.info, Node: Cross-References, Next: Subranges, Prev: Miscellaneous Types, Up: Types
-
-Cross-References to Other Types
-===============================
-
-A type can be used before it is defined; one common way to deal with
-that situation is just to use a type reference to a type which has not
-yet been defined.
-
- Another way is with the `x' type descriptor, which is followed by
-`s' for a structure tag, `u' for a union tag, or `e' for a enumerator
-tag, followed by the name of the tag, followed by `:'. If the name
-contains `::' between a `<' and `>' pair (for C++ templates), such a
-`::' does not end the name--only a single `:' ends the name; see *Note
-Nested Symbols::.
-
- For example, the following C declarations:
-
- struct foo;
- struct foo *bar;
-
-produce:
-
- .stabs "bar:G16=*17=xsfoo:",32,0,0,0
-
- Not all debuggers support the `x' type descriptor, so on some
-machines GCC does not use it. I believe that for the above example it
-would just emit a reference to type 17 and never define it, but I
-haven't verified that.
-
- Modula-2 imported types, at least on AIX, use the `i' type
-descriptor, which is followed by the name of the module from which the
-type is imported, followed by `:', followed by the name of the type.
-There is then optionally a comma followed by type information for the
-type. This differs from merely naming the type (*note Typedefs::) in
-that it identifies the module; I don't understand whether the name of
-the type given here is always just the same as the name we are giving
-it, or whether this type descriptor is used with a nameless stab (*note
-String Field::), or what. The symbol ends with `;'.
-
-
-File: stabs.info, Node: Subranges, Next: Arrays, Prev: Cross-References, Up: Types
-
-Subrange Types
-==============
-
-The `r' type descriptor defines a type as a subrange of another type.
-It is followed by type information for the type of which it is a
-subrange, a semicolon, an integral lower bound, a semicolon, an
-integral upper bound, and a semicolon. The AIX documentation does not
-specify the trailing semicolon, in an effort to specify array indexes
-more cleanly, but a subrange which is not an array index has always
-included a trailing semicolon (*note Arrays::).
-
- Instead of an integer, either bound can be one of the following:
-
-`A OFFSET'
- The bound is passed by reference on the stack at offset OFFSET
- from the argument list. *Note Parameters::, for more information
- on such offsets.
-
-`T OFFSET'
- The bound is passed by value on the stack at offset OFFSET from
- the argument list.
-
-`a REGISTER-NUMBER'
- The bound is passed by reference in register number
- REGISTER-NUMBER.
-
-`t REGISTER-NUMBER'
- The bound is passed by value in register number REGISTER-NUMBER.
-
-`J'
- There is no bound.
-
- Subranges are also used for builtin types; see *Note Traditional
-Builtin Types::.
-
-
-File: stabs.info, Node: Arrays, Next: Strings, Prev: Subranges, Up: Types
-
-Array Types
-===========
-
-Arrays use the `a' type descriptor. Following the type descriptor is
-the type of the index and the type of the array elements. If the index
-type is a range type, it ends in a semicolon; otherwise (for example,
-if it is a type reference), there does not appear to be any way to tell
-where the types are separated. In an effort to clean up this mess, IBM
-documents the two types as being separated by a semicolon, and a range
-type as not ending in a semicolon (but this is not right for range
-types which are not array indexes, *note Subranges::). I think
-probably the best solution is to specify that a semicolon ends a range
-type, and that the index type and element type of an array are
-separated by a semicolon, but that if the index type is a range type,
-the extra semicolon can be omitted. GDB (at least through version 4.9)
-doesn't support any kind of index type other than a range anyway; I'm
-not sure about dbx.
-
- It is well established, and widely used, that the type of the index,
-unlike most types found in the stabs, is merely a type definition, not
-type information (*note String Field::) (that is, it need not start with
-`TYPE-NUMBER=' if it is defining a new type). According to a comment
-in GDB, this is also true of the type of the array elements; it gives
-`ar1;1;10;ar1;1;10;4' as a legitimate way to express a two dimensional
-array. According to AIX documentation, the element type must be type
-information. GDB accepts either.
-
- The type of the index is often a range type, expressed as the type
-descriptor `r' and some parameters. It defines the size of the array.
-In the example below, the range `r1;0;2;' defines an index type which
-is a subrange of type 1 (integer), with a lower bound of 0 and an upper
-bound of 2. This defines the valid range of subscripts of a
-three-element C array.
-
- For example, the definition:
-
- char char_vec[3] = {'a','b','c'};
-
-produces the output:
-
- .stabs "char_vec:G19=ar1;0;2;2",32,0,0,0
- .global _char_vec
- .align 4
- _char_vec:
- .byte 97
- .byte 98
- .byte 99
-
- If an array is "packed", the elements are spaced more closely than
-normal, saving memory at the expense of speed. For example, an array
-of 3-byte objects might, if unpacked, have each element aligned on a
-4-byte boundary, but if packed, have no padding. One way to specify
-that something is packed is with type attributes (*note String
-Field::). In the case of arrays, another is to use the `P' type
-descriptor instead of `a'. Other than specifying a packed array, `P'
-is identical to `a'.
-
- An open array is represented by the `A' type descriptor followed by
-type information specifying the type of the array elements.
-
- An N-dimensional dynamic array is represented by
-
- D DIMENSIONS ; TYPE-INFORMATION
-
- DIMENSIONS is the number of dimensions; TYPE-INFORMATION specifies
-the type of the array elements.
-
- A subarray of an N-dimensional array is represented by
-
- E DIMENSIONS ; TYPE-INFORMATION
-
- DIMENSIONS is the number of dimensions; TYPE-INFORMATION specifies
-the type of the array elements.
-
-
-File: stabs.info, Node: Strings, Next: Enumerations, Prev: Arrays, Up: Types
-
-Strings
-=======
-
-Some languages, like C or the original Pascal, do not have string types,
-they just have related things like arrays of characters. But most
-Pascals and various other languages have string types, which are
-indicated as follows:
-
-`n TYPE-INFORMATION ; BYTES'
- BYTES is the maximum length. I'm not sure what TYPE-INFORMATION
- is; I suspect that it means that this is a string of
- TYPE-INFORMATION (thus allowing a string of integers, a string of
- wide characters, etc., as well as a string of characters). Not
- sure what the format of this type is. This is an AIX feature.
-
-`z TYPE-INFORMATION ; BYTES'
- Just like `n' except that this is a gstring, not an ordinary
- string. I don't know the difference.
-
-`N'
- Pascal Stringptr. What is this? This is an AIX feature.
-
- Languages, such as CHILL which have a string type which is basically
-just an array of characters use the `S' type attribute (*note String
-Field::).
-
-
-File: stabs.info, Node: Enumerations, Next: Structures, Prev: Strings, Up: Types
-
-Enumerations
-============
-
-Enumerations are defined with the `e' type descriptor.
-
- The source line below declares an enumeration type at file scope.
-The type definition is located after the `N_RBRAC' that marks the end of
-the previous procedure's block scope, and before the `N_FUN' that marks
-the beginning of the next procedure's block scope. Therefore it does
-not describe a block local symbol, but a file local one.
-
- The source line:
-
- enum e_places {first,second=3,last};
-
-generates the following stab:
-
- .stabs "e_places:T22=efirst:0,second:3,last:4,;",128,0,0,0
-
- The symbol descriptor (`T') says that the stab describes a
-structure, enumeration, or union tag. The type descriptor `e',
-following the `22=' of the type definition narrows it down to an
-enumeration type. Following the `e' is a list of the elements of the
-enumeration. The format is `NAME:VALUE,'. The list of elements ends
-with `;'. The fact that VALUE is specified as an integer can cause
-problems if the value is large. GCC 2.5.2 tries to output it in octal
-in that case with a leading zero, which is probably a good thing,
-although GDB 4.11 supports octal only in cases where decimal is
-perfectly good. Negative decimal values are supported by both GDB and
-dbx.
-
- There is no standard way to specify the size of an enumeration type;
-it is determined by the architecture (normally all enumerations types
-are 32 bits). Type attributes can be used to specify an enumeration
-type of another size for debuggers which support them; see *Note String
-Field::.
-
- Enumeration types are unusual in that they define symbols for the
-enumeration values (`first', `second', and `third' in the above
-example), and even though these symbols are visible in the file as a
-whole (rather than being in a more local namespace like structure
-member names), they are defined in the type definition for the
-enumeration type rather than each having their own symbol. In order to
-be fast, GDB will only get symbols from such types (in its initial scan
-of the stabs) if the type is the first thing defined after a `T' or `t'
-symbol descriptor (the above example fulfills this requirement). If
-the type does not have a name, the compiler should emit it in a
-nameless stab (*note String Field::); GCC does this.
-
-
-File: stabs.info, Node: Structures, Next: Typedefs, Prev: Enumerations, Up: Types
-
-Structures
-==========
-
-The encoding of structures in stabs can be shown with an example.
-
- The following source code declares a structure tag and defines an
-instance of the structure in global scope. Then a `typedef' equates the
-structure tag with a new type. Separate stabs are generated for the
-structure tag, the structure `typedef', and the structure instance. The
-stabs for the tag and the `typedef' are emitted when the definitions are
-encountered. Since the structure elements are not initialized, the
-stab and code for the structure variable itself is located at the end
-of the program in the bss section.
-
- struct s_tag {
- int s_int;
- float s_float;
- char s_char_vec[8];
- struct s_tag* s_next;
- } g_an_s;
-
- typedef struct s_tag s_typedef;
-
- The structure tag has an `N_LSYM' stab type because, like the
-enumeration, the symbol has file scope. Like the enumeration, the
-symbol descriptor is `T', for enumeration, structure, or tag type. The
-type descriptor `s' following the `16=' of the type definition narrows
-the symbol type to structure.
-
- Following the `s' type descriptor is the number of bytes the
-structure occupies, followed by a description of each structure element.
-The structure element descriptions are of the form `NAME:TYPE, BIT
-OFFSET FROM THE START OF THE STRUCT, NUMBER OF BITS IN THE ELEMENT'.
-
- # 128 is N_LSYM
- .stabs "s_tag:T16=s20s_int:1,0,32;s_float:12,32,32;
- s_char_vec:17=ar1;0;7;2,64,64;s_next:18=*16,128,32;;",128,0,0,0
-
- In this example, the first two structure elements are previously
-defined types. For these, the type following the `NAME:' part of the
-element description is a simple type reference. The other two structure
-elements are new types. In this case there is a type definition
-embedded after the `NAME:'. The type definition for the array element
-looks just like a type definition for a stand-alone array. The
-`s_next' field is a pointer to the same kind of structure that the
-field is an element of. So the definition of structure type 16
-contains a type definition for an element which is a pointer to type 16.
-
- If a field is a static member (this is a C++ feature in which a
-single variable appears to be a field of every structure of a given
-type) it still starts out with the field name, a colon, and the type,
-but then instead of a comma, bit position, comma, and bit size, there
-is a colon followed by the name of the variable which each such field
-refers to.
-
- If the structure has methods (a C++ feature), they follow the
-non-method fields; see *Note Cplusplus::.
-
-
-File: stabs.info, Node: Typedefs, Next: Unions, Prev: Structures, Up: Types
-
-Giving a Type a Name
-====================
-
-To give a type a name, use the `t' symbol descriptor. The type is
-specified by the type information (*note String Field::) for the stab.
-For example,
-
- .stabs "s_typedef:t16",128,0,0,0 # 128 is N_LSYM
-
- specifies that `s_typedef' refers to type number 16. Such stabs
-have symbol type `N_LSYM' (or `C_DECL' for XCOFF). (The Sun
-documentation mentions using `N_GSYM' in some cases).
-
- If you are specifying the tag name for a structure, union, or
-enumeration, use the `T' symbol descriptor instead. I believe C is the
-only language with this feature.
-
- If the type is an opaque type (I believe this is a Modula-2 feature),
-AIX provides a type descriptor to specify it. The type descriptor is
-`o' and is followed by a name. I don't know what the name means--is it
-always the same as the name of the type, or is this type descriptor
-used with a nameless stab (*note String Field::)? There optionally
-follows a comma followed by type information which defines the type of
-this type. If omitted, a semicolon is used in place of the comma and
-the type information, and the type is much like a generic pointer
-type--it has a known size but little else about it is specified.
-
-
-File: stabs.info, Node: Unions, Next: Function Types, Prev: Typedefs, Up: Types
-
-Unions
-======
-
- union u_tag {
- int u_int;
- float u_float;
- char* u_char;
- } an_u;
-
- This code generates a stab for a union tag and a stab for a union
-variable. Both use the `N_LSYM' stab type. If a union variable is
-scoped locally to the procedure in which it is defined, its stab is
-located immediately preceding the `N_LBRAC' for the procedure's block
-start.
-
- The stab for the union tag, however, is located preceding the code
-for the procedure in which it is defined. The stab type is `N_LSYM'.
-This would seem to imply that the union type is file scope, like the
-struct type `s_tag'. This is not true. The contents and position of
-the stab for `u_type' do not convey any information about its procedure
-local scope.
-
- # 128 is N_LSYM
- .stabs "u_tag:T23=u4u_int:1,0,32;u_float:12,0,32;u_char:21,0,32;;",
- 128,0,0,0
-
- The symbol descriptor `T', following the `name:' means that the stab
-describes an enumeration, structure, or union tag. The type descriptor
-`u', following the `23=' of the type definition, narrows it down to a
-union type definition. Following the `u' is the number of bytes in the
-union. After that is a list of union element descriptions. Their
-format is `NAME:TYPE, BIT OFFSET INTO THE UNION, NUMBER OF BYTES FOR
-THE ELEMENT;'.
-
- The stab for the union variable is:
-
- .stabs "an_u:23",128,0,0,-20 # 128 is N_LSYM
-
- `-20' specifies where the variable is stored (*note Stack
-Variables::).
-
-
-File: stabs.info, Node: Function Types, Prev: Unions, Up: Types
-
-Function Types
-==============
-
-Various types can be defined for function variables. These types are
-not used in defining functions (*note Procedures::); they are used for
-things like pointers to functions.
-
- The simple, traditional, type is type descriptor `f' is followed by
-type information for the return type of the function, followed by a
-semicolon.
-
- This does not deal with functions for which the number and types of
-the parameters are part of the type, as in Modula-2 or ANSI C. AIX
-provides extensions to specify these, using the `f', `F', `p', and `R'
-type descriptors.
-
- First comes the type descriptor. If it is `f' or `F', this type
-involves a function rather than a procedure, and the type information
-for the return type of the function follows, followed by a comma. Then
-comes the number of parameters to the function and a semicolon. Then,
-for each parameter, there is the name of the parameter followed by a
-colon (this is only present for type descriptors `R' and `F' which
-represent Pascal function or procedure parameters), type information
-for the parameter, a comma, 0 if passed by reference or 1 if passed by
-value, and a semicolon. The type definition ends with a semicolon.
-
- For example, this variable definition:
-
- int (*g_pf)();
-
-generates the following code:
-
- .stabs "g_pf:G24=*25=f1",32,0,0,0
- .common _g_pf,4,"bss"
-
- The variable defines a new type, 24, which is a pointer to another
-new type, 25, which is a function returning `int'.
-
-
-File: stabs.info, Node: Symbol Tables, Next: Cplusplus, Prev: Types, Up: Top
-
-Symbol Information in Symbol Tables
-***********************************
-
-This chapter describes the format of symbol table entries and how stab
-assembler directives map to them. It also describes the
-transformations that the assembler and linker make on data from stabs.
-
-* Menu:
-
-* Symbol Table Format::
-* Transformations On Symbol Tables::
-
-
-File: stabs.info, Node: Symbol Table Format, Next: Transformations On Symbol Tables, Up: Symbol Tables
-
-Symbol Table Format
-===================
-
-Each time the assembler encounters a stab directive, it puts each field
-of the stab into a corresponding field in a symbol table entry of its
-output file. If the stab contains a string field, the symbol table
-entry for that stab points to a string table entry containing the
-string data from the stab. Assembler labels become relocatable
-addresses. Symbol table entries in a.out have the format:
-
- struct internal_nlist {
- unsigned long n_strx; /* index into string table of name */
- unsigned char n_type; /* type of symbol */
- unsigned char n_other; /* misc info (usually empty) */
- unsigned short n_desc; /* description field */
- bfd_vma n_value; /* value of symbol */
- };
-
- If the stab has a string, the `n_strx' field holds the offset in
-bytes of the string within the string table. The string is terminated
-by a NUL character. If the stab lacks a string (for example, it was
-produced by a `.stabn' or `.stabd' directive), the `n_strx' field is
-zero.
-
- Symbol table entries with `n_type' field values greater than 0x1f
-originated as stabs generated by the compiler (with one random
-exception). The other entries were placed in the symbol table of the
-executable by the assembler or the linker.
-
-
-File: stabs.info, Node: Transformations On Symbol Tables, Prev: Symbol Table Format, Up: Symbol Tables
-
-Transformations on Symbol Tables
-================================
-
-The linker concatenates object files and does fixups of externally
-defined symbols.
-
- You can see the transformations made on stab data by the assembler
-and linker by examining the symbol table after each pass of the build.
-To do this, use `nm -ap', which dumps the symbol table, including
-debugging information, unsorted. For stab entries the columns are:
-VALUE, OTHER, DESC, TYPE, STRING. For assembler and linker symbols,
-the columns are: VALUE, TYPE, STRING.
-
- The low 5 bits of the stab type tell the linker how to relocate the
-value of the stab. Thus for stab types like `N_RSYM' and `N_LSYM',
-where the value is an offset or a register number, the low 5 bits are
-`N_ABS', which tells the linker not to relocate the value.
-
- Where the value of a stab contains an assembly language label, it is
-transformed by each build step. The assembler turns it into a
-relocatable address and the linker turns it into an absolute address.
-
-* Menu:
-
-* Transformations On Static Variables::
-* Transformations On Global Variables::
-* Stab Section Transformations:: For some object file formats,
- things are a bit different.
-
-
-File: stabs.info, Node: Transformations On Static Variables, Next: Transformations On Global Variables, Up: Transformations On Symbol Tables
-
-Transformations on Static Variables
------------------------------------
-
-This source line defines a static variable at file scope:
-
- static int s_g_repeat
-
-The following stab describes the symbol:
-
- .stabs "s_g_repeat:S1",38,0,0,_s_g_repeat
-
-The assembler transforms the stab into this symbol table entry in the
-`.o' file. The location is expressed as a data segment offset.
-
- 00000084 - 00 0000 STSYM s_g_repeat:S1
-
-In the symbol table entry from the executable, the linker has made the
-relocatable address absolute.
-
- 0000e00c - 00 0000 STSYM s_g_repeat:S1
-
-
-File: stabs.info, Node: Transformations On Global Variables, Next: Stab Section Transformations, Prev: Transformations On Static Variables, Up: Transformations On Symbol Tables
-
-Transformations on Global Variables
------------------------------------
-
-Stabs for global variables do not contain location information. In this
-case, the debugger finds location information in the assembler or
-linker symbol table entry describing the variable. The source line:
-
- char g_foo = 'c';
-
-generates the stab:
-
- .stabs "g_foo:G2",32,0,0,0
-
- The variable is represented by two symbol table entries in the object
-file (see below). The first one originated as a stab. The second one
-is an external symbol. The upper case `D' signifies that the `n_type'
-field of the symbol table contains 7, `N_DATA' with local linkage. The
-stab's value is zero since the value is not used for `N_GSYM' stabs.
-The value of the linker symbol is the relocatable address corresponding
-to the variable.
-
- 00000000 - 00 0000 GSYM g_foo:G2
- 00000080 D _g_foo
-
-These entries as transformed by the linker. The linker symbol table
-entry now holds an absolute address:
-
- 00000000 - 00 0000 GSYM g_foo:G2
- ...
- 0000e008 D _g_foo
-
-
-File: stabs.info, Node: Stab Section Transformations, Prev: Transformations On Global Variables, Up: Transformations On Symbol Tables
-
-Transformations of Stabs in separate sections
----------------------------------------------
-
-For object file formats using stabs in separate sections (*note Stab
-Sections::), use `objdump --stabs' instead of `nm' to show the stabs in
-an object or executable file. `objdump' is a GNU utility; Sun does not
-provide any equivalent.
-
- The following example is for a stab whose value is an address is
-relative to the compilation unit (*note ELF Linker Relocation::). For
-example, if the source line
-
- static int ld = 5;
-
- appears within a function, then the assembly language output from the
-compiler contains:
-
- .Ddata.data:
- ...
- .stabs "ld:V(0,3)",0x26,0,4,.L18-Ddata.data # 0x26 is N_STSYM
- ...
- .L18:
- .align 4
- .word 0x5
-
- Because the value is formed by subtracting one symbol from another,
-the value is absolute, not relocatable, and so the object file contains
-
- Symnum n_type n_othr n_desc n_value n_strx String
- 31 STSYM 0 4 00000004 680 ld:V(0,3)
-
- without any relocations, and the executable file also contains
-
- Symnum n_type n_othr n_desc n_value n_strx String
- 31 STSYM 0 4 00000004 680 ld:V(0,3)
-
-
-File: stabs.info, Node: Cplusplus, Next: Stab Types, Prev: Symbol Tables, Up: Top
-
-GNU C++ Stabs
-*************
-
-* Menu:
-
-* Class Names:: C++ class names are both tags and typedefs.
-* Nested Symbols:: C++ symbol names can be within other types.
-* Basic Cplusplus Types::
-* Simple Classes::
-* Class Instance::
-* Methods:: Method definition
-* Method Type Descriptor:: The `#' type descriptor
-* Member Type Descriptor:: The `@' type descriptor
-* Protections::
-* Method Modifiers::
-* Virtual Methods::
-* Inheritance::
-* Virtual Base Classes::
-* Static Members::
-
-
-File: stabs.info, Node: Class Names, Next: Nested Symbols, Up: Cplusplus
-
-C++ Class Names
-===============
-
-In C++, a class name which is declared with `class', `struct', or
-`union', is not only a tag, as in C, but also a type name. Thus there
-should be stabs with both `t' and `T' symbol descriptors (*note
-Typedefs::).
-
- To save space, there is a special abbreviation for this case. If the
-`T' symbol descriptor is followed by `t', then the stab defines both a
-type name and a tag.
-
- For example, the C++ code
-
- struct foo {int x;};
-
- can be represented as either
-
- .stabs "foo:T19=s4x:1,0,32;;",128,0,0,0 # 128 is N_LSYM
- .stabs "foo:t19",128,0,0,0
-
- or
-
- .stabs "foo:Tt19=s4x:1,0,32;;",128,0,0,0
-
-
-File: stabs.info, Node: Nested Symbols, Next: Basic Cplusplus Types, Prev: Class Names, Up: Cplusplus
-
-Defining a Symbol Within Another Type
-=====================================
-
-In C++, a symbol (such as a type name) can be defined within another
-type.
-
- In stabs, this is sometimes represented by making the name of a
-symbol which contains `::'. Such a pair of colons does not end the name
-of the symbol, the way a single colon would (*note String Field::). I'm
-not sure how consistently used or well thought out this mechanism is.
-So that a pair of colons in this position always has this meaning, `:'
-cannot be used as a symbol descriptor.
-
- For example, if the string for a stab is `foo::bar::baz:t5=*6', then
-`foo::bar::baz' is the name of the symbol, `t' is the symbol
-descriptor, and `5=*6' is the type information.
-
-
-File: stabs.info, Node: Basic Cplusplus Types, Next: Simple Classes, Prev: Nested Symbols, Up: Cplusplus
-
-Basic Types For C++
-===================
-
-<< the examples that follow are based on a01.C >>
-
- C++ adds two more builtin types to the set defined for C. These are
-the unknown type and the vtable record type. The unknown type, type
-16, is defined in terms of itself like the void type.
-
- The vtable record type, type 17, is defined as a structure type and
-then as a structure tag. The structure has four fields: delta, index,
-pfn, and delta2. pfn is the function pointer.
-
- << In boilerplate $vtbl_ptr_type, what are the fields delta, index,
-and delta2 used for? >>
-
- This basic type is present in all C++ programs even if there are no
-virtual methods defined.
-
- .stabs "struct_name:sym_desc(type)type_def(17)=type_desc(struct)struct_bytes(8)
- elem_name(delta):type_ref(short int),bit_offset(0),field_bits(16);
- elem_name(index):type_ref(short int),bit_offset(16),field_bits(16);
- elem_name(pfn):type_def(18)=type_desc(ptr to)type_ref(void),
- bit_offset(32),field_bits(32);
- elem_name(delta2):type_def(short int);bit_offset(32),field_bits(16);;"
- N_LSYM, NIL, NIL
-
- .stabs "$vtbl_ptr_type:t17=s8
- delta:6,0,16;index:6,16,16;pfn:18=*15,32,32;delta2:6,32,16;;"
- ,128,0,0,0
-
- .stabs "name:sym_dec(struct tag)type_ref($vtbl_ptr_type)",N_LSYM,NIL,NIL,NIL
-
- .stabs "$vtbl_ptr_type:T17",128,0,0,0
-
-
-File: stabs.info, Node: Simple Classes, Next: Class Instance, Prev: Basic Cplusplus Types, Up: Cplusplus
-
-Simple Class Definition
-=======================
-
-The stabs describing C++ language features are an extension of the
-stabs describing C. Stabs representing C++ class types elaborate
-extensively on the stab format used to describe structure types in C.
-Stabs representing class type variables look just like stabs
-representing C language variables.
-
- Consider the following very simple class definition.
-
- class baseA {
- public:
- int Adat;
- int Ameth(int in, char other);
- };
-
- The class `baseA' is represented by two stabs. The first stab
-describes the class as a structure type. The second stab describes a
-structure tag of the class type. Both stabs are of stab type `N_LSYM'.
-Since the stab is not located between an `N_FUN' and an `N_LBRAC' stab
-this indicates that the class is defined at file scope. If it were,
-then the `N_LSYM' would signify a local variable.
-
- A stab describing a C++ class type is similar in format to a stab
-describing a C struct, with each class member shown as a field in the
-structure. The part of the struct format describing fields is expanded
-to include extra information relevant to C++ class members. In
-addition, if the class has multiple base classes or virtual functions
-the struct format outside of the field parts is also augmented.
-
- In this simple example the field part of the C++ class stab
-representing member data looks just like the field part of a C struct
-stab. The section on protections describes how its format is sometimes
-extended for member data.
-
- The field part of a C++ class stab representing a member function
-differs substantially from the field part of a C struct stab. It still
-begins with `name:' but then goes on to define a new type number for
-the member function, describe its return type, its argument types, its
-protection level, any qualifiers applied to the method definition, and
-whether the method is virtual or not. If the method is virtual then
-the method description goes on to give the vtable index of the method,
-and the type number of the first base class defining the method.
-
- When the field name is a method name it is followed by two colons
-rather than one. This is followed by a new type definition for the
-method. This is a number followed by an equal sign and the type of the
-method. Normally this will be a type declared using the `#' type
-descriptor; see *Note Method Type Descriptor::; static member functions
-are declared using the `f' type descriptor instead; see *Note Function
-Types::.
-
- The format of an overloaded operator method name differs from that of
-other methods. It is `op$::OPERATOR-NAME.' where OPERATOR-NAME is the
-operator name such as `+' or `+='. The name ends with a period, and
-any characters except the period can occur in the OPERATOR-NAME string.
-
- The next part of the method description represents the arguments to
-the method, preceded by a colon and ending with a semi-colon. The
-types of the arguments are expressed in the same way argument types are
-expressed in C++ name mangling. In this example an `int' and a `char'
-map to `ic'.
-
- This is followed by a number, a letter, and an asterisk or period,
-followed by another semicolon. The number indicates the protections
-that apply to the member function. Here the 2 means public. The
-letter encodes any qualifier applied to the method definition. In this
-case, `A' means that it is a normal function definition. The dot shows
-that the method is not virtual. The sections that follow elaborate
-further on these fields and describe the additional information present
-for virtual methods.
-
- .stabs "class_name:sym_desc(type)type_def(20)=type_desc(struct)struct_bytes(4)
- field_name(Adat):type(int),bit_offset(0),field_bits(32);
-
- method_name(Ameth)::type_def(21)=type_desc(method)return_type(int);
- :arg_types(int char);
- protection(public)qualifier(normal)virtual(no);;"
- N_LSYM,NIL,NIL,NIL
-
- .stabs "baseA:t20=s4Adat:1,0,32;Ameth::21=##1;:ic;2A.;;",128,0,0,0
-
- .stabs "class_name:sym_desc(struct tag)",N_LSYM,NIL,NIL,NIL
-
- .stabs "baseA:T20",128,0,0,0
-
-
-File: stabs.info, Node: Class Instance, Next: Methods, Prev: Simple Classes, Up: Cplusplus
-
-Class Instance
-==============
-
-As shown above, describing even a simple C++ class definition is
-accomplished by massively extending the stab format used in C to
-describe structure types. However, once the class is defined, C stabs
-with no modifications can be used to describe class instances. The
-following source:
-
- main () {
- baseA AbaseA;
- }
-
-yields the following stab describing the class instance. It looks no
-different from a standard C stab describing a local variable.
-
- .stabs "name:type_ref(baseA)", N_LSYM, NIL, NIL, frame_ptr_offset
-
- .stabs "AbaseA:20",128,0,0,-20
-
-
-File: stabs.info, Node: Methods, Next: Method Type Descriptor, Prev: Class Instance, Up: Cplusplus
-
-Method Definition
-=================
-
-The class definition shown above declares Ameth. The C++ source below
-defines Ameth:
-
- int
- baseA::Ameth(int in, char other)
- {
- return in;
- };
-
- This method definition yields three stabs following the code of the
-method. One stab describes the method itself and following two describe
-its parameters. Although there is only one formal argument all methods
-have an implicit argument which is the `this' pointer. The `this'
-pointer is a pointer to the object on which the method was called. Note
-that the method name is mangled to encode the class name and argument
-types. Name mangling is described in the ARM (`The Annotated C++
-Reference Manual', by Ellis and Stroustrup, ISBN 0-201-51459-1);
-`gpcompare.texi' in Cygnus GCC distributions describes the differences
-between GNU mangling and ARM mangling.
-
- .stabs "name:symbol_descriptor(global function)return_type(int)",
- N_FUN, NIL, NIL, code_addr_of_method_start
-
- .stabs "Ameth__5baseAic:F1",36,0,0,_Ameth__5baseAic
-
- Here is the stab for the `this' pointer implicit argument. The name
-of the `this' pointer is always `this'. Type 19, the `this' pointer is
-defined as a pointer to type 20, `baseA', but a stab defining `baseA'
-has not yet been emitted. Since the compiler knows it will be emitted
-shortly, here it just outputs a cross reference to the undefined
-symbol, by prefixing the symbol name with `xs'.
-
- .stabs "name:sym_desc(register param)type_def(19)=
- type_desc(ptr to)type_ref(baseA)=
- type_desc(cross-reference to)baseA:",N_RSYM,NIL,NIL,register_number
-
- .stabs "this:P19=*20=xsbaseA:",64,0,0,8
-
- The stab for the explicit integer argument looks just like a
-parameter to a C function. The last field of the stab is the offset
-from the argument pointer, which in most systems is the same as the
-frame pointer.
-
- .stabs "name:sym_desc(value parameter)type_ref(int)",
- N_PSYM,NIL,NIL,offset_from_arg_ptr
-
- .stabs "in:p1",160,0,0,72
-
- << The examples that follow are based on A1.C >>
-
-
-File: stabs.info, Node: Method Type Descriptor, Next: Member Type Descriptor, Prev: Methods, Up: Cplusplus
-
-The `#' Type Descriptor
-=======================
-
-This is used to describe a class method. This is a function which takes
-an extra argument as its first argument, for the `this' pointer.
-
- If the `#' is immediately followed by another `#', the second one
-will be followed by the return type and a semicolon. The class and
-argument types are not specified, and must be determined by demangling
-the name of the method if it is available.
-
- Otherwise, the single `#' is followed by the class type, a comma,
-the return type, a comma, and zero or more parameter types separated by
-commas. The list of arguments is terminated by a semicolon. In the
-debugging output generated by gcc, a final argument type of `void'
-indicates a method which does not take a variable number of arguments.
-If the final argument type of `void' does not appear, the method was
-declared with an ellipsis.
-
- Note that although such a type will normally be used to describe
-fields in structures, unions, or classes, for at least some versions of
-the compiler it can also be used in other contexts.
-
-
-File: stabs.info, Node: Member Type Descriptor, Next: Protections, Prev: Method Type Descriptor, Up: Cplusplus
-
-The `@' Type Descriptor
-=======================
-
-The `@' type descriptor is used together with the `*' type descriptor
-for a pointer-to-non-static-member-data type. It is followed by type
-information for the class (or union), a comma, and type information for
-the member data.
-
- The following C++ source:
-
- typedef int A::*int_in_a;
-
- generates the following stab:
-
- .stabs "int_in_a:t20=*21=@19,1",128,0,0,0
-
- Note that there is a conflict between this and type attributes
-(*note String Field::); both use type descriptor `@'. Fortunately, the
-`@' type descriptor used in this C++ sense always will be followed by a
-digit, `(', or `-', and type attributes never start with those things.
-
-
-File: stabs.info, Node: Protections, Next: Method Modifiers, Prev: Member Type Descriptor, Up: Cplusplus
-
-Protections
-===========
-
-In the simple class definition shown above all member data and
-functions were publicly accessible. The example that follows contrasts
-public, protected and privately accessible fields and shows how these
-protections are encoded in C++ stabs.
-
- If the character following the `FIELD-NAME:' part of the string is
-`/', then the next character is the visibility. `0' means private, `1'
-means protected, and `2' means public. Debuggers should ignore
-visibility characters they do not recognize, and assume a reasonable
-default (such as public) (GDB 4.11 does not, but this should be fixed
-in the next GDB release). If no visibility is specified the field is
-public. The visibility `9' means that the field has been optimized out
-and is public (there is no way to specify an optimized out field with a
-private or protected visibility). Visibility `9' is not supported by
-GDB 4.11; this should be fixed in the next GDB release.
-
- The following C++ source:
-
- class vis {
- private:
- int priv;
- protected:
- char prot;
- public:
- float pub;
- };
-
-generates the following stab:
-
- # 128 is N_LSYM
- .stabs "vis:T19=s12priv:/01,0,32;prot:/12,32,8;pub:12,64,32;;",128,0,0,0
-
- `vis:T19=s12' indicates that type number 19 is a 12 byte structure
-named `vis' The `priv' field has public visibility (`/0'), type int
-(`1'), and offset and size `,0,32;'. The `prot' field has protected
-visibility (`/1'), type char (`2') and offset and size `,32,8;'. The
-`pub' field has type float (`12'), and offset and size `,64,32;'.
-
- Protections for member functions are signified by one digit embedded
-in the field part of the stab describing the method. The digit is 0 if
-private, 1 if protected and 2 if public. Consider the C++ class
-definition below:
-
- class all_methods {
- private:
- int priv_meth(int in){return in;};
- protected:
- char protMeth(char in){return in;};
- public:
- float pubMeth(float in){return in;};
- };
-
- It generates the following stab. The digit in question is to the
-left of an `A' in each case. Notice also that in this case two symbol
-descriptors apply to the class name struct tag and struct type.
-
- .stabs "class_name:sym_desc(struct tag&type)type_def(21)=
- sym_desc(struct)struct_bytes(1)
- meth_name::type_def(22)=sym_desc(method)returning(int);
- :args(int);protection(private)modifier(normal)virtual(no);
- meth_name::type_def(23)=sym_desc(method)returning(char);
- :args(char);protection(protected)modifier(normal)virtual(no);
- meth_name::type_def(24)=sym_desc(method)returning(float);
- :args(float);protection(public)modifier(normal)virtual(no);;",
- N_LSYM,NIL,NIL,NIL
-
- .stabs "all_methods:Tt21=s1priv_meth::22=##1;:i;0A.;protMeth::23=##2;:c;1A.;
- pubMeth::24=##12;:f;2A.;;",128,0,0,0
-
-
-File: stabs.info, Node: Method Modifiers, Next: Virtual Methods, Prev: Protections, Up: Cplusplus
-
-Method Modifiers (`const', `volatile', `const volatile')
-========================================================
-
-<< based on a6.C >>
-
- In the class example described above all the methods have the normal
-modifier. This method modifier information is located just after the
-protection information for the method. This field has four possible
-character values. Normal methods use `A', const methods use `B',
-volatile methods use `C', and const volatile methods use `D'. Consider
-the class definition below:
-
- class A {
- public:
- int ConstMeth (int arg) const { return arg; };
- char VolatileMeth (char arg) volatile { return arg; };
- float ConstVolMeth (float arg) const volatile {return arg; };
- };
-
- This class is described by the following stab:
-
- .stabs "class(A):sym_desc(struct)type_def(20)=type_desc(struct)struct_bytes(1)
- meth_name(ConstMeth)::type_def(21)sym_desc(method)
- returning(int);:arg(int);protection(public)modifier(const)virtual(no);
- meth_name(VolatileMeth)::type_def(22)=sym_desc(method)
- returning(char);:arg(char);protection(public)modifier(volatile)virt(no)
- meth_name(ConstVolMeth)::type_def(23)=sym_desc(method)
- returning(float);:arg(float);protection(public)modifier(const volatile)
- virtual(no);;", ...
-
- .stabs "A:T20=s1ConstMeth::21=##1;:i;2B.;VolatileMeth::22=##2;:c;2C.;
- ConstVolMeth::23=##12;:f;2D.;;",128,0,0,0
-
-
-File: stabs.info, Node: Virtual Methods, Next: Inheritance, Prev: Method Modifiers, Up: Cplusplus
-
-Virtual Methods
-===============
-
-<< The following examples are based on a4.C >>
-
- The presence of virtual methods in a class definition adds additional
-data to the class description. The extra data is appended to the
-description of the virtual method and to the end of the class
-description. Consider the class definition below:
-
- class A {
- public:
- int Adat;
- virtual int A_virt (int arg) { return arg; };
- };
-
- This results in the stab below describing class A. It defines a new
-type (20) which is an 8 byte structure. The first field of the class
-struct is `Adat', an integer, starting at structure offset 0 and
-occupying 32 bits.
-
- The second field in the class struct is not explicitly defined by the
-C++ class definition but is implied by the fact that the class contains
-a virtual method. This field is the vtable pointer. The name of the
-vtable pointer field starts with `$vf' and continues with a type
-reference to the class it is part of. In this example the type
-reference for class A is 20 so the name of its vtable pointer field is
-`$vf20', followed by the usual colon.
-
- Next there is a type definition for the vtable pointer type (21).
-This is in turn defined as a pointer to another new type (22).
-
- Type 22 is the vtable itself, which is defined as an array, indexed
-by a range of integers between 0 and 1, and whose elements are of type
-17. Type 17 was the vtable record type defined by the boilerplate C++
-type definitions, as shown earlier.
-
- The bit offset of the vtable pointer field is 32. The number of bits
-in the field are not specified when the field is a vtable pointer.
-
- Next is the method definition for the virtual member function
-`A_virt'. Its description starts out using the same format as the
-non-virtual member functions described above, except instead of a dot
-after the `A' there is an asterisk, indicating that the function is
-virtual. Since is is virtual some addition information is appended to
-the end of the method description.
-
- The first number represents the vtable index of the method. This is
-a 32 bit unsigned number with the high bit set, followed by a
-semi-colon.
-
- The second number is a type reference to the first base class in the
-inheritance hierarchy defining the virtual member function. In this
-case the class stab describes a base class so the virtual function is
-not overriding any other definition of the method. Therefore the
-reference is to the type number of the class that the stab is
-describing (20).
-
- This is followed by three semi-colons. One marks the end of the
-current sub-section, one marks the end of the method field, and the
-third marks the end of the struct definition.
-
- For classes containing virtual functions the very last section of the
-string part of the stab holds a type reference to the first base class.
-This is preceded by `~%' and followed by a final semi-colon.
-
- .stabs "class_name(A):type_def(20)=sym_desc(struct)struct_bytes(8)
- field_name(Adat):type_ref(int),bit_offset(0),field_bits(32);
- field_name(A virt func ptr):type_def(21)=type_desc(ptr to)type_def(22)=
- sym_desc(array)index_type_ref(range of int from 0 to 1);
- elem_type_ref(vtbl elem type),
- bit_offset(32);
- meth_name(A_virt)::typedef(23)=sym_desc(method)returning(int);
- :arg_type(int),protection(public)normal(yes)virtual(yes)
- vtable_index(1);class_first_defining(A);;;~%first_base(A);",
- N_LSYM,NIL,NIL,NIL
-
- .stabs "A:t20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
- A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
-
-
-File: stabs.info, Node: Inheritance, Next: Virtual Base Classes, Prev: Virtual Methods, Up: Cplusplus
-
-Inheritance
-===========
-
-Stabs describing C++ derived classes include additional sections that
-describe the inheritance hierarchy of the class. A derived class stab
-also encodes the number of base classes. For each base class it tells
-if the base class is virtual or not, and if the inheritance is private
-or public. It also gives the offset into the object of the portion of
-the object corresponding to each base class.
-
- This additional information is embedded in the class stab following
-the number of bytes in the struct. First the number of base classes
-appears bracketed by an exclamation point and a comma.
-
- Then for each base type there repeats a series: a virtual character,
-a visibility character, a number, a comma, another number, and a
-semi-colon.
-
- The virtual character is `1' if the base class is virtual and `0' if
-not. The visibility character is `2' if the derivation is public, `1'
-if it is protected, and `0' if it is private. Debuggers should ignore
-virtual or visibility characters they do not recognize, and assume a
-reasonable default (such as public and non-virtual) (GDB 4.11 does not,
-but this should be fixed in the next GDB release).
-
- The number following the virtual and visibility characters is the
-offset from the start of the object to the part of the object
-pertaining to the base class.
-
- After the comma, the second number is a type_descriptor for the base
-type. Finally a semi-colon ends the series, which repeats for each
-base class.
-
- The source below defines three base classes `A', `B', and `C' and
-the derived class `D'.
-
- class A {
- public:
- int Adat;
- virtual int A_virt (int arg) { return arg; };
- };
-
- class B {
- public:
- int B_dat;
- virtual int B_virt (int arg) {return arg; };
- };
-
- class C {
- public:
- int Cdat;
- virtual int C_virt (int arg) {return arg; };
- };
-
- class D : A, virtual B, public C {
- public:
- int Ddat;
- virtual int A_virt (int arg ) { return arg+1; };
- virtual int B_virt (int arg) { return arg+2; };
- virtual int C_virt (int arg) { return arg+3; };
- virtual int D_virt (int arg) { return arg; };
- };
-
- Class stabs similar to the ones described earlier are generated for
-each base class.
-
- .stabs "A:T20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
- A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
-
- .stabs "B:Tt25=s8Bdat:1,0,32;$vf25:21,32;B_virt::26=##1;
- :i;2A*-2147483647;25;;;~%25;",128,0,0,0
-
- .stabs "C:Tt28=s8Cdat:1,0,32;$vf28:21,32;C_virt::29=##1;
- :i;2A*-2147483647;28;;;~%28;",128,0,0,0
-
- In the stab describing derived class `D' below, the information about
-the derivation of this class is encoded as follows.
-
- .stabs "derived_class_name:symbol_descriptors(struct tag&type)=
- type_descriptor(struct)struct_bytes(32)!num_bases(3),
- base_virtual(no)inheritance_public(no)base_offset(0),
- base_class_type_ref(A);
- base_virtual(yes)inheritance_public(no)base_offset(NIL),
- base_class_type_ref(B);
- base_virtual(no)inheritance_public(yes)base_offset(64),
- base_class_type_ref(C); ...
-
- .stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:
- 1,160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt:
- :32:i;2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;
- 28;;D_virt::32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
-
-
-File: stabs.info, Node: Virtual Base Classes, Next: Static Members, Prev: Inheritance, Up: Cplusplus
-
-Virtual Base Classes
-====================
-
-A derived class object consists of a concatenation in memory of the data
-areas defined by each base class, starting with the leftmost and ending
-with the rightmost in the list of base classes. The exception to this
-rule is for virtual inheritance. In the example above, class `D'
-inherits virtually from base class `B'. This means that an instance of
-a `D' object will not contain its own `B' part but merely a pointer to
-a `B' part, known as a virtual base pointer.
-
- In a derived class stab, the base offset part of the derivation
-information, described above, shows how the base class parts are
-ordered. The base offset for a virtual base class is always given as 0.
-Notice that the base offset for `B' is given as 0 even though `B' is
-not the first base class. The first base class `A' starts at offset 0.
-
- The field information part of the stab for class `D' describes the
-field which is the pointer to the virtual base class `B'. The vbase
-pointer name is `$vb' followed by a type reference to the virtual base
-class. Since the type id for `B' in this example is 25, the vbase
-pointer name is `$vb25'.
-
- .stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:1,
- 160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt::32:i;
- 2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;28;;D_virt:
- :32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
-
- Following the name and a semicolon is a type reference describing the
-type of the virtual base class pointer, in this case 24. Type 24 was
-defined earlier as the type of the `B' class `this' pointer. The
-`this' pointer for a class is a pointer to the class type.
-
- .stabs "this:P24=*25=xsB:",64,0,0,8
-
- Finally the field offset part of the vbase pointer field description
-shows that the vbase pointer is the first field in the `D' object,
-before any data fields defined by the class. The layout of a `D' class
-object is a follows, `Adat' at 0, the vtable pointer for `A' at 32,
-`Cdat' at 64, the vtable pointer for C at 96, the virtual base pointer
-for `B' at 128, and `Ddat' at 160.
-
-
-File: stabs.info, Node: Static Members, Prev: Virtual Base Classes, Up: Cplusplus
-
-Static Members
-==============
-
-The data area for a class is a concatenation of the space used by the
-data members of the class. If the class has virtual methods, a vtable
-pointer follows the class data. The field offset part of each field
-description in the class stab shows this ordering.
-
- << How is this reflected in stabs? See Cygnus bug #677 for some
-info. >>
-
-
-File: stabs.info, Node: Stab Types, Next: Symbol Descriptors, Prev: Cplusplus, Up: Top
-
-Table of Stab Types
-*******************
-
-The following are all the possible values for the stab type field, for
-a.out files, in numeric order. This does not apply to XCOFF, but it
-does apply to stabs in sections (*note Stab Sections::). Stabs in
-ECOFF use these values but add 0x8f300 to distinguish them from non-stab
-symbols.
-
- The symbolic names are defined in the file `include/aout/stabs.def'.
-
-* Menu:
-
-* Non-Stab Symbol Types:: Types from 0 to 0x1f
-* Stab Symbol Types:: Types from 0x20 to 0xff
-
-
-File: stabs.info, Node: Non-Stab Symbol Types, Next: Stab Symbol Types, Up: Stab Types
-
-Non-Stab Symbol Types
-=====================
-
-The following types are used by the linker and assembler, not by stab
-directives. Since this document does not attempt to describe aspects of
-object file format other than the debugging format, no details are
-given.
-
-`0x0 N_UNDF'
- Undefined symbol
-
-`0x2 N_ABS'
- File scope absolute symbol
-
-`0x3 N_ABS | N_EXT'
- External absolute symbol
-
-`0x4 N_TEXT'
- File scope text symbol
-
-`0x5 N_TEXT | N_EXT'
- External text symbol
-
-`0x6 N_DATA'
- File scope data symbol
-
-`0x7 N_DATA | N_EXT'
- External data symbol
-
-`0x8 N_BSS'
- File scope BSS symbol
-
-`0x9 N_BSS | N_EXT'
- External BSS symbol
-
-`0x0c N_FN_SEQ'
- Same as `N_FN', for Sequent compilers
-
-`0x0a N_INDR'
- Symbol is indirected to another symbol
-
-`0x12 N_COMM'
- Common--visible after shared library dynamic link
-
-`0x14 N_SETA'
-`0x15 N_SETA | N_EXT'
- Absolute set element
-
-`0x16 N_SETT'
-`0x17 N_SETT | N_EXT'
- Text segment set element
-
-`0x18 N_SETD'
-`0x19 N_SETD | N_EXT'
- Data segment set element
-
-`0x1a N_SETB'
-`0x1b N_SETB | N_EXT'
- BSS segment set element
-
-`0x1c N_SETV'
-`0x1d N_SETV | N_EXT'
- Pointer to set vector
-
-`0x1e N_WARNING'
- Print a warning message during linking
-
-`0x1f N_FN'
- File name of a `.o' file
-
-
-File: stabs.info, Node: Stab Symbol Types, Prev: Non-Stab Symbol Types, Up: Stab Types
-
-Stab Symbol Types
-=================
-
-The following symbol types indicate that this is a stab. This is the
-full list of stab numbers, including stab types that are used in
-languages other than C.
-
-`0x20 N_GSYM'
- Global symbol; see *Note Global Variables::.
-
-`0x22 N_FNAME'
- Function name (for BSD Fortran); see *Note Procedures::.
-
-`0x24 N_FUN'
- Function name (*note Procedures::) or text segment variable (*note
- Statics::).
-
-`0x26 N_STSYM'
- Data segment file-scope variable; see *Note Statics::.
-
-`0x28 N_LCSYM'
- BSS segment file-scope variable; see *Note Statics::.
-
-`0x2a N_MAIN'
- Name of main routine; see *Note Main Program::.
-
-`0x2c N_ROSYM'
- Variable in `.rodata' section; see *Note Statics::.
-
-`0x30 N_PC'
- Global symbol (for Pascal); see *Note N_PC::.
-
-`0x32 N_NSYMS'
- Number of symbols (according to Ultrix V4.0); see *Note N_NSYMS::.
-
-`0x34 N_NOMAP'
- No DST map; see *Note N_NOMAP::.
-
-`0x38 N_OBJ'
- Object file (Solaris2).
-
-`0x3c N_OPT'
- Debugger options (Solaris2).
-
-`0x40 N_RSYM'
- Register variable; see *Note Register Variables::.
-
-`0x42 N_M2C'
- Modula-2 compilation unit; see *Note N_M2C::.
-
-`0x44 N_SLINE'
- Line number in text segment; see *Note Line Numbers::.
-
-`0x46 N_DSLINE'
- Line number in data segment; see *Note Line Numbers::.
-
-`0x48 N_BSLINE'
- Line number in bss segment; see *Note Line Numbers::.
-
-`0x48 N_BROWS'
- Sun source code browser, path to `.cb' file; see *Note N_BROWS::.
-
-`0x4a N_DEFD'
- GNU Modula2 definition module dependency; see *Note N_DEFD::.
-
-`0x4c N_FLINE'
- Function start/body/end line numbers (Solaris2).
-
-`0x50 N_EHDECL'
- GNU C++ exception variable; see *Note N_EHDECL::.
-
-`0x50 N_MOD2'
- Modula2 info "for imc" (according to Ultrix V4.0); see *Note
- N_MOD2::.
-
-`0x54 N_CATCH'
- GNU C++ `catch' clause; see *Note N_CATCH::.
-
-`0x60 N_SSYM'
- Structure of union element; see *Note N_SSYM::.
-
-`0x62 N_ENDM'
- Last stab for module (Solaris2).
-
-`0x64 N_SO'
- Path and name of source file; see *Note Source Files::.
-
-`0x80 N_LSYM'
- Stack variable (*note Stack Variables::) or type (*note
- Typedefs::).
-
-`0x82 N_BINCL'
- Beginning of an include file (Sun only); see *Note Include Files::.
-
-`0x84 N_SOL'
- Name of include file; see *Note Include Files::.
-
-`0xa0 N_PSYM'
- Parameter variable; see *Note Parameters::.
-
-`0xa2 N_EINCL'
- End of an include file; see *Note Include Files::.
-
-`0xa4 N_ENTRY'
- Alternate entry point; see *Note Alternate Entry Points::.
-
-`0xc0 N_LBRAC'
- Beginning of a lexical block; see *Note Block Structure::.
-
-`0xc2 N_EXCL'
- Place holder for a deleted include file; see *Note Include Files::.
-
-`0xc4 N_SCOPE'
- Modula2 scope information (Sun linker); see *Note N_SCOPE::.
-
-`0xe0 N_RBRAC'
- End of a lexical block; see *Note Block Structure::.
-
-`0xe2 N_BCOMM'
- Begin named common block; see *Note Common Blocks::.
-
-`0xe4 N_ECOMM'
- End named common block; see *Note Common Blocks::.
-
-`0xe8 N_ECOML'
- Member of a common block; see *Note Common Blocks::.
-
-`0xea N_WITH'
- Pascal `with' statement: type,,0,0,offset (Solaris2).
-
-`0xf0 N_NBTEXT'
- Gould non-base registers; see *Note Gould::.
-
-`0xf2 N_NBDATA'
- Gould non-base registers; see *Note Gould::.
-
-`0xf4 N_NBBSS'
- Gould non-base registers; see *Note Gould::.
-
-`0xf6 N_NBSTS'
- Gould non-base registers; see *Note Gould::.
-
-`0xf8 N_NBLCS'
- Gould non-base registers; see *Note Gould::.
-
-
-File: stabs.info, Node: Symbol Descriptors, Next: Type Descriptors, Prev: Stab Types, Up: Top
-
-Table of Symbol Descriptors
-***************************
-
-The symbol descriptor is the character which follows the colon in many
-stabs, and which tells what kind of stab it is. *Note String Field::,
-for more information about their use.
-
-`DIGIT'
-`('
-`-'
- Variable on the stack; see *Note Stack Variables::.
-
-`:'
- C++ nested symbol; see *Note Nested Symbols::.
-
-`a'
- Parameter passed by reference in register; see *Note Reference
- Parameters::.
-
-`b'
- Based variable; see *Note Based Variables::.
-
-`c'
- Constant; see *Note Constants::.
-
-`C'
- Conformant array bound (Pascal, maybe other languages); *Note
- Conformant Arrays::. Name of a caught exception (GNU C++). These
- can be distinguished because the latter uses `N_CATCH' and the
- former uses another symbol type.
-
-`d'
- Floating point register variable; see *Note Register Variables::.
-
-`D'
- Parameter in floating point register; see *Note Register
- Parameters::.
-
-`f'
- File scope function; see *Note Procedures::.
-
-`F'
- Global function; see *Note Procedures::.
-
-`G'
- Global variable; see *Note Global Variables::.
-
-`i'
- *Note Register Parameters::.
-
-`I'
- Internal (nested) procedure; see *Note Nested Procedures::.
-
-`J'
- Internal (nested) function; see *Note Nested Procedures::.
-
-`L'
- Label name (documented by AIX, no further information known).
-
-`m'
- Module; see *Note Procedures::.
-
-`p'
- Argument list parameter; see *Note Parameters::.
-
-`pP'
- *Note Parameters::.
-
-`pF'
- Fortran Function parameter; see *Note Parameters::.
-
-`P'
- Unfortunately, three separate meanings have been independently
- invented for this symbol descriptor. At least the GNU and Sun
- uses can be distinguished by the symbol type. Global Procedure
- (AIX) (symbol type used unknown); see *Note Procedures::.
- Register parameter (GNU) (symbol type `N_PSYM'); see *Note
- Parameters::. Prototype of function referenced by this file (Sun
- `acc') (symbol type `N_FUN').
-
-`Q'
- Static Procedure; see *Note Procedures::.
-
-`R'
- Register parameter; see *Note Register Parameters::.
-
-`r'
- Register variable; see *Note Register Variables::.
-
-`S'
- File scope variable; see *Note Statics::.
-
-`s'
- Local variable (OS9000).
-
-`t'
- Type name; see *Note Typedefs::.
-
-`T'
- Enumeration, structure, or union tag; see *Note Typedefs::.
-
-`v'
- Parameter passed by reference; see *Note Reference Parameters::.
-
-`V'
- Procedure scope static variable; see *Note Statics::.
-
-`x'
- Conformant array; see *Note Conformant Arrays::.
-
-`X'
- Function return variable; see *Note Parameters::.
-
-
-File: stabs.info, Node: Type Descriptors, Next: Expanded Reference, Prev: Symbol Descriptors, Up: Top
-
-Table of Type Descriptors
-*************************
-
-The type descriptor is the character which follows the type number and
-an equals sign. It specifies what kind of type is being defined.
-*Note String Field::, for more information about their use.
-
-`DIGIT'
-`('
- Type reference; see *Note String Field::.
-
-`-'
- Reference to builtin type; see *Note Negative Type Numbers::.
-
-`#'
- Method (C++); see *Note Method Type Descriptor::.
-
-`*'
- Pointer; see *Note Miscellaneous Types::.
-
-`&'
- Reference (C++).
-
-`@'
- Type Attributes (AIX); see *Note String Field::. Member (class
- and variable) type (GNU C++); see *Note Member Type Descriptor::.
-
-`a'
- Array; see *Note Arrays::.
-
-`A'
- Open array; see *Note Arrays::.
-
-`b'
- Pascal space type (AIX); see *Note Miscellaneous Types::. Builtin
- integer type (Sun); see *Note Builtin Type Descriptors::. Const
- and volatile qualified type (OS9000).
-
-`B'
- Volatile-qualified type; see *Note Miscellaneous Types::.
-
-`c'
- Complex builtin type (AIX); see *Note Builtin Type Descriptors::.
- Const-qualified type (OS9000).
-
-`C'
- COBOL Picture type. See AIX documentation for details.
-
-`d'
- File type; see *Note Miscellaneous Types::.
-
-`D'
- N-dimensional dynamic array; see *Note Arrays::.
-
-`e'
- Enumeration type; see *Note Enumerations::.
-
-`E'
- N-dimensional subarray; see *Note Arrays::.
-
-`f'
- Function type; see *Note Function Types::.
-
-`F'
- Pascal function parameter; see *Note Function Types::
-
-`g'
- Builtin floating point type; see *Note Builtin Type Descriptors::.
-
-`G'
- COBOL Group. See AIX documentation for details.
-
-`i'
- Imported type (AIX); see *Note Cross-References::.
- Volatile-qualified type (OS9000).
-
-`k'
- Const-qualified type; see *Note Miscellaneous Types::.
-
-`K'
- COBOL File Descriptor. See AIX documentation for details.
-
-`M'
- Multiple instance type; see *Note Miscellaneous Types::.
-
-`n'
- String type; see *Note Strings::.
-
-`N'
- Stringptr; see *Note Strings::.
-
-`o'
- Opaque type; see *Note Typedefs::.
-
-`p'
- Procedure; see *Note Function Types::.
-
-`P'
- Packed array; see *Note Arrays::.
-
-`r'
- Range type; see *Note Subranges::.
-
-`R'
- Builtin floating type; see *Note Builtin Type Descriptors:: (Sun).
- Pascal subroutine parameter; see *Note Function Types:: (AIX).
- Detecting this conflict is possible with careful parsing (hint: a
- Pascal subroutine parameter type will always contain a comma, and
- a builtin type descriptor never will).
-
-`s'
- Structure type; see *Note Structures::.
-
-`S'
- Set type; see *Note Miscellaneous Types::.
-
-`u'
- Union; see *Note Unions::.
-
-`v'
- Variant record. This is a Pascal and Modula-2 feature which is
- like a union within a struct in C. See AIX documentation for
- details.
-
-`w'
- Wide character; see *Note Builtin Type Descriptors::.
-
-`x'
- Cross-reference; see *Note Cross-References::.
-
-`Y'
- Used by IBM's xlC C++ compiler (for structures, I think).
-
-`z'
- gstring; see *Note Strings::.
-
-
-File: stabs.info, Node: Expanded Reference, Next: Questions, Prev: Type Descriptors, Up: Top
-
-Expanded Reference by Stab Type
-*******************************
-
-For a full list of stab types, and cross-references to where they are
-described, see *Note Stab Types::. This appendix just covers certain
-stabs which are not yet described in the main body of this document;
-eventually the information will all be in one place.
-
- Format of an entry:
-
- The first line is the symbol type (see `include/aout/stab.def').
-
- The second line describes the language constructs the symbol type
-represents.
-
- The third line is the stab format with the significant stab fields
-named and the rest NIL.
-
- Subsequent lines expand upon the meaning and possible values for each
-significant stab field.
-
- Finally, any further information.
-
-* Menu:
-
-* N_PC:: Pascal global symbol
-* N_NSYMS:: Number of symbols
-* N_NOMAP:: No DST map
-* N_M2C:: Modula-2 compilation unit
-* N_BROWS:: Path to .cb file for Sun source code browser
-* N_DEFD:: GNU Modula2 definition module dependency
-* N_EHDECL:: GNU C++ exception variable
-* N_MOD2:: Modula2 information "for imc"
-* N_CATCH:: GNU C++ "catch" clause
-* N_SSYM:: Structure or union element
-* N_SCOPE:: Modula2 scope information (Sun only)
-* Gould:: non-base register symbols used on Gould systems
-* N_LENG:: Length of preceding entry
-
-
-File: stabs.info, Node: N_PC, Next: N_NSYMS, Up: Expanded Reference
-
-N_PC
-====
-
- - `.stabs': N_PC
- Global symbol (for Pascal).
-
- "name" -> "symbol_name" <<?>>
- value -> supposedly the line number (stab.def is skeptical)
-
- `stabdump.c' says:
-
- global pascal symbol: name,,0,subtype,line
- << subtype? >>
-
-
-File: stabs.info, Node: N_NSYMS, Next: N_NOMAP, Prev: N_PC, Up: Expanded Reference
-
-N_NSYMS
-=======
-
- - `.stabn': N_NSYMS
- Number of symbols (according to Ultrix V4.0).
-
- 0, files,,funcs,lines (stab.def)
-
-
-File: stabs.info, Node: N_NOMAP, Next: N_M2C, Prev: N_NSYMS, Up: Expanded Reference
-
-N_NOMAP
-=======
-
- - `.stabs': N_NOMAP
- No DST map for symbol (according to Ultrix V4.0). I think this
- means a variable has been optimized out.
-
- name, ,0,type,ignored (stab.def)
-
-
-File: stabs.info, Node: N_M2C, Next: N_BROWS, Prev: N_NOMAP, Up: Expanded Reference
-
-N_M2C
-=====
-
- - `.stabs': N_M2C
- Modula-2 compilation unit.
-
- "string" -> "unit_name,unit_time_stamp[,code_time_stamp]"
- desc -> unit_number
- value -> 0 (main unit)
- 1 (any other unit)
-
- See `Dbx and Dbxtool Interfaces', 2nd edition, by Sun, 1988, for
- more information.
-
-
-
-File: stabs.info, Node: N_BROWS, Next: N_DEFD, Prev: N_M2C, Up: Expanded Reference
-
-N_BROWS
-=======
-
- - `.stabs': N_BROWS
- Sun source code browser, path to `.cb' file
-
- <<?>> "path to associated `.cb' file"
-
- Note: N_BROWS has the same value as N_BSLINE.
-
-
-File: stabs.info, Node: N_DEFD, Next: N_EHDECL, Prev: N_BROWS, Up: Expanded Reference
-
-N_DEFD
-======
-
- - `.stabn': N_DEFD
- GNU Modula2 definition module dependency.
-
- GNU Modula-2 definition module dependency. The value is the
- modification time of the definition file. The other field is
- non-zero if it is imported with the GNU M2 keyword `%INITIALIZE'.
- Perhaps `N_M2C' can be used if there are enough empty fields?
-
-
-File: stabs.info, Node: N_EHDECL, Next: N_MOD2, Prev: N_DEFD, Up: Expanded Reference
-
-N_EHDECL
-========
-
- - `.stabs': N_EHDECL
- GNU C++ exception variable <<?>>.
-
- "STRING is variable name"
-
- Note: conflicts with `N_MOD2'.
-
-
-File: stabs.info, Node: N_MOD2, Next: N_CATCH, Prev: N_EHDECL, Up: Expanded Reference
-
-N_MOD2
-======
-
- - `.stab?': N_MOD2
- Modula2 info "for imc" (according to Ultrix V4.0)
-
- Note: conflicts with `N_EHDECL' <<?>>
-
-
-File: stabs.info, Node: N_CATCH, Next: N_SSYM, Prev: N_MOD2, Up: Expanded Reference
-
-N_CATCH
-=======
-
- - `.stabn': N_CATCH
- GNU C++ `catch' clause
-
- GNU C++ `catch' clause. The value is its address. The desc field
- is nonzero if this entry is immediately followed by a `CAUGHT' stab
- saying what exception was caught. Multiple `CAUGHT' stabs means
- that multiple exceptions can be caught here. If desc is 0, it
- means all exceptions are caught here.
-
-
-File: stabs.info, Node: N_SSYM, Next: N_SCOPE, Prev: N_CATCH, Up: Expanded Reference
-
-N_SSYM
-======
-
- - `.stabn': N_SSYM
- Structure or union element.
-
- The value is the offset in the structure.
-
- <<?looking at structs and unions in C I didn't see these>>
-
-
-File: stabs.info, Node: N_SCOPE, Next: Gould, Prev: N_SSYM, Up: Expanded Reference
-
-N_SCOPE
-=======
-
- - `.stab?': N_SCOPE
- Modula2 scope information (Sun linker) <<?>>
-
-
-File: stabs.info, Node: Gould, Next: N_LENG, Prev: N_SCOPE, Up: Expanded Reference
-
-Non-base registers on Gould systems
-===================================
-
- - `.stab?': N_NBTEXT
- - `.stab?': N_NBDATA
- - `.stab?': N_NBBSS
- - `.stab?': N_NBSTS
- - `.stab?': N_NBLCS
- These are used on Gould systems for non-base registers syms.
-
- However, the following values are not the values used by Gould;
- they are the values which GNU has been documenting for these
- values for a long time, without actually checking what Gould uses.
- I include these values only because perhaps some someone actually
- did something with the GNU information (I hope not, why GNU
- knowingly assigned wrong values to these in the header file is a
- complete mystery to me).
-
- 240 0xf0 N_NBTEXT ??
- 242 0xf2 N_NBDATA ??
- 244 0xf4 N_NBBSS ??
- 246 0xf6 N_NBSTS ??
- 248 0xf8 N_NBLCS ??
-
-
-File: stabs.info, Node: N_LENG, Prev: Gould, Up: Expanded Reference
-
-N_LENG
-======
-
- - `.stabn': N_LENG
- Second symbol entry containing a length-value for the preceding
- entry. The value is the length.
-
-
-File: stabs.info, Node: Questions, Next: Stab Sections, Prev: Expanded Reference, Up: Top
-
-Questions and Anomalies
-***********************
-
- * For GNU C stabs defining local and global variables (`N_LSYM' and
- `N_GSYM'), the desc field is supposed to contain the source line
- number on which the variable is defined. In reality the desc
- field is always 0. (This behavior is defined in `dbxout.c' and
- putting a line number in desc is controlled by `#ifdef
- WINNING_GDB', which defaults to false). GDB supposedly uses this
- information if you say `list VAR'. In reality, VAR can be a
- variable defined in the program and GDB says `function VAR not
- defined'.
-
- * In GNU C stabs, there seems to be no way to differentiate tag
- types: structures, unions, and enums (symbol descriptor `T') and
- typedefs (symbol descriptor `t') defined at file scope from types
- defined locally to a procedure or other more local scope. They
- all use the `N_LSYM' stab type. Types defined at procedure scope
- are emitted after the `N_RBRAC' of the preceding function and
- before the code of the procedure in which they are defined. This
- is exactly the same as types defined in the source file between
- the two procedure bodies. GDB over-compensates by placing all
- types in block #1, the block for symbols of file scope. This is
- true for default, `-ansi' and `-traditional' compiler options.
- (Bugs gcc/1063, gdb/1066.)
-
- * What ends the procedure scope? Is it the proc block's `N_RBRAC'
- or the next `N_FUN'? (I believe its the first.)
-
-
-File: stabs.info, Node: Stab Sections, Next: Symbol Types Index, Prev: Questions, Up: Top
-
-Using Stabs in Their Own Sections
-*********************************
-
-Many object file formats allow tools to create object files with custom
-sections containing any arbitrary data. For any such object file
-format, stabs can be embedded in special sections. This is how stabs
-are used with ELF and SOM, and aside from ECOFF and XCOFF, is how stabs
-are used with COFF.
-
-* Menu:
-
-* Stab Section Basics:: How to embed stabs in sections
-* ELF Linker Relocation:: Sun ELF hacks
-
-
-File: stabs.info, Node: Stab Section Basics, Next: ELF Linker Relocation, Up: Stab Sections
-
-How to Embed Stabs in Sections
-==============================
-
-The assembler creates two custom sections, a section named `.stab'
-which contains an array of fixed length structures, one struct per stab,
-and a section named `.stabstr' containing all the variable length
-strings that are referenced by stabs in the `.stab' section. The byte
-order of the stabs binary data depends on the object file format. For
-ELF, it matches the byte order of the ELF file itself, as determined
-from the `EI_DATA' field in the `e_ident' member of the ELF header.
-For SOM, it is always big-endian (is this true??? FIXME). For COFF, it
-matches the byte order of the COFF headers. The meaning of the fields
-is the same as for a.out (*note Symbol Table Format::), except that the
-`n_strx' field is relative to the strings for the current compilation
-unit (which can be found using the synthetic N_UNDF stab described
-below), rather than the entire string table.
-
- The first stab in the `.stab' section for each compilation unit is
-synthetic, generated entirely by the assembler, with no corresponding
-`.stab' directive as input to the assembler. This stab contains the
-following fields:
-
-`n_strx'
- Offset in the `.stabstr' section to the source filename.
-
-`n_type'
- `N_UNDF'.
-
-`n_other'
- Unused field, always zero. This may eventually be used to hold
- overflows from the count in the `n_desc' field.
-
-`n_desc'
- Count of upcoming symbols, i.e., the number of remaining stabs for
- this source file.
-
-`n_value'
- Size of the string table fragment associated with this source
- file, in bytes.
-
- The `.stabstr' section always starts with a null byte (so that string
-offsets of zero reference a null string), followed by random length
-strings, each of which is null byte terminated.
-
- The ELF section header for the `.stab' section has its `sh_link'
-member set to the section number of the `.stabstr' section, and the
-`.stabstr' section has its ELF section header `sh_type' member set to
-`SHT_STRTAB' to mark it as a string table. SOM and COFF have no way of
-linking the sections together or marking them as string tables.
-
- For COFF, the `.stab' and `.stabstr' sections may be simply
-concatenated by the linker. GDB then uses the `n_desc' fields to
-figure out the extent of the original sections. Similarly, the
-`n_value' fields of the header symbols are added together in order to
-get the actual position of the strings in a desired `.stabstr' section.
-Although this design obviates any need for the linker to relocate or
-otherwise manipulate `.stab' and `.stabstr' sections, it also requires
-some care to ensure that the offsets are calculated correctly. For
-instance, if the linker were to pad in between the `.stabstr' sections
-before concatenating, then the offsets to strings in the middle of the
-executable's `.stabstr' section would be wrong.
-
- The GNU linker is able to optimize stabs information by merging
-duplicate strings and removing duplicate header file information (*note
-Include Files::). When some versions of the GNU linker optimize stabs
-in sections, they remove the leading `N_UNDF' symbol and arranges for
-all the `n_strx' fields to be relative to the start of the `.stabstr'
-section.
-
-
-File: stabs.info, Node: ELF Linker Relocation, Prev: Stab Section Basics, Up: Stab Sections
-
-Having the Linker Relocate Stabs in ELF
-=======================================
-
-This section describes some Sun hacks for Stabs in ELF; it does not
-apply to COFF or SOM.
-
- To keep linking fast, you don't want the linker to have to relocate
-very many stabs. Making sure this is done for `N_SLINE', `N_RBRAC',
-and `N_LBRAC' stabs is the most important thing (see the descriptions
-of those stabs for more information). But Sun's stabs in ELF has taken
-this further, to make all addresses in the `n_value' field (functions
-and static variables) relative to the source file. For the `N_SO'
-symbol itself, Sun simply omits the address. To find the address of
-each section corresponding to a given source file, the compiler puts
-out symbols giving the address of each section for a given source file.
-Since these are ELF (not stab) symbols, the linker relocates them
-correctly without having to touch the stabs section. They are named
-`Bbss.bss' for the bss section, `Ddata.data' for the data section, and
-`Drodata.rodata' for the rodata section. For the text section, there
-is no such symbol (but there should be, see below). For an example of
-how these symbols work, *Note Stab Section Transformations::. GCC does
-not provide these symbols; it instead relies on the stabs getting
-relocated. Thus addresses which would normally be relative to
-`Bbss.bss', etc., are already relocated. The Sun linker provided with
-Solaris 2.2 and earlier relocates stabs using normal ELF relocation
-information, as it would do for any section. Sun has been threatening
-to kludge their linker to not do this (to speed up linking), even
-though the correct way to avoid having the linker do these relocations
-is to have the compiler no longer output relocatable values. Last I
-heard they had been talked out of the linker kludge. See Sun point
-patch 101052-01 and Sun bug 1142109. With the Sun compiler this
-affects `S' symbol descriptor stabs (*note Statics::) and functions
-(*note Procedures::). In the latter case, to adopt the clean solution
-(making the value of the stab relative to the start of the compilation
-unit), it would be necessary to invent a `Ttext.text' symbol, analogous
-to the `Bbss.bss', etc., symbols. I recommend this rather than using a
-zero value and getting the address from the ELF symbols.
-
- Finding the correct `Bbss.bss', etc., symbol is difficult, because
-the linker simply concatenates the `.stab' sections from each `.o' file
-without including any information about which part of a `.stab' section
-comes from which `.o' file. The way GDB does this is to look for an
-ELF `STT_FILE' symbol which has the same name as the last component of
-the file name from the `N_SO' symbol in the stabs (for example, if the
-file name is `../../gdb/main.c', it looks for an ELF `STT_FILE' symbol
-named `main.c'). This loses if different files have the same name
-(they could be in different directories, a library could have been
-copied from one system to another, etc.). It would be much cleaner to
-have the `Bbss.bss' symbols in the stabs themselves. Having the linker
-relocate them there is no more work than having the linker relocate ELF
-symbols, and it solves the problem of having to associate the ELF and
-stab symbols. However, no one has yet designed or implemented such a
-scheme.
-
-
-File: stabs.info, Node: GNU Free Documentation License, Prev: Symbol Types Index, Up: Top
-
-GNU Free Documentation License
-******************************
-
- Version 1.2, November 2002
- Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 0. PREAMBLE
-
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
-
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
-
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book.
- We recommend this License principally for works whose purpose is
- instruction or reference.
-
- 1. APPLICABILITY AND DEFINITIONS
-
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it
- can be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You
- accept the license if you copy, modify or distribute the work in a
- way requiring permission under copyright law.
-
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
-
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
-
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in
- the notice that says that the Document is released under this
- License. If a section does not fit the above definition of
- Secondary then it is not allowed to be designated as Invariant.
- The Document may contain zero Invariant Sections. If the Document
- does not identify any Invariant Sections then there are none.
-
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
-
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images
- composed of pixels) generic paint programs or (for drawings) some
- widely available drawing editor, and that is suitable for input to
- text formatters or for automatic translation to a variety of
- formats suitable for input to text formatters. A copy made in an
- otherwise Transparent file format whose markup, or absence of
- markup, has been arranged to thwart or discourage subsequent
- modification by readers is not Transparent. An image format is
- not Transparent if used for any substantial amount of text. A
- copy that is not "Transparent" is called "Opaque".
-
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and
- standard-conforming simple HTML, PostScript or PDF designed for
- human modification. Examples of transparent image formats include
- PNG, XCF and JPG. Opaque formats include proprietary formats that
- can be read and edited only by proprietary word processors, SGML or
- XML for which the DTD and/or processing tools are not generally
- available, and the machine-generated HTML, PostScript or PDF
- produced by some word processors for output purposes only.
-
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
-
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
-
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
-
- 2. VERBATIM COPYING
-
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow
- the conditions in section 3.
-
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
-
- 3. COPYING IN QUANTITY
-
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the
- title equally prominent and visible. You may add other material
- on the covers in addition. Copying with changes limited to the
- covers, as long as they preserve the title of the Document and
- satisfy these conditions, can be treated as verbatim copying in
- other respects.
-
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
-
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a
- machine-readable Transparent copy along with each Opaque copy, or
- state in or with each Opaque copy a computer-network location from
- which the general network-using public has access to download
- using public-standard network protocols a complete Transparent
- copy of the Document, free of added material. If you use the
- latter option, you must take reasonably prudent steps, when you
- begin distribution of Opaque copies in quantity, to ensure that
- this Transparent copy will remain thus accessible at the stated
- location until at least one year after the last time you
- distribute an Opaque copy (directly or through your agents or
- retailers) of that edition to the public.
-
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of
- copies, to give them a chance to provide you with an updated
- version of the Document.
-
- 4. MODIFICATIONS
-
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with
- the Modified Version filling the role of the Document, thus
- licensing distribution and modification of the Modified Version to
- whoever possesses a copy of it. In addition, you must do these
- things in the Modified Version:
-
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of
- previous versions (which should, if there were any, be listed
- in the History section of the Document). You may use the
- same title as a previous version if the original publisher of
- that version gives permission.
-
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
-
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
- D. Preserve all the copyright notices of the Document.
-
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
-
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
-
- H. Include an unaltered copy of this License.
-
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on
- the Title Page. If there is no section Entitled "History" in
- the Document, create one stating the title, year, authors,
- and publisher of the Document as given on its Title Page,
- then add an item describing the Modified Version as stated in
- the previous sentence.
-
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in
- the "History" section. You may omit a network location for a
- work that was published at least four years before the
- Document itself, or if the original publisher of the version
- it refers to gives permission.
-
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the
- section all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
-
- L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section
- titles.
-
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
-
- O. Preserve any Warranty Disclaimers.
-
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option
- designate some or all of these sections as invariant. To do this,
- add their titles to the list of Invariant Sections in the Modified
- Version's license notice. These titles must be distinct from any
- other section titles.
-
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
-
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end
- of the list of Cover Texts in the Modified Version. Only one
- passage of Front-Cover Text and one of Back-Cover Text may be
- added by (or through arrangements made by) any one entity. If the
- Document already includes a cover text for the same cover,
- previously added by you or by arrangement made by the same entity
- you are acting on behalf of, you may not add another; but you may
- replace the old one, on explicit permission from the previous
- publisher that added the old one.
-
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
-
- 5. COMBINING DOCUMENTS
-
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination
- all of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
-
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
-
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
-
- 6. COLLECTIONS OF DOCUMENTS
-
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the
- documents in all other respects.
-
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow
- this License in all other respects regarding verbatim copying of
- that document.
-
- 7. AGGREGATION WITH INDEPENDENT WORKS
-
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of
- a storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
-
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
-
- 8. TRANSLATION
-
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
-
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
-
- 9. TERMINATION
-
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided for under this License. Any other
- attempt to copy, modify, sublicense or distribute the Document is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- `http://www.gnu.org/copyleft/'.
-
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If
- the Document does not specify a version number of this License,
- you may choose any version ever published (not as a draft) by the
- Free Software Foundation.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
-
- If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License, to
-permit their use in free software.
-
-
-File: stabs.info, Node: Symbol Types Index, Next: GNU Free Documentation License, Prev: Stab Sections, Up: Top
-
-Symbol Types Index
-******************
-
-* Menu:
-
-* .bb: Block Structure.
-* .be: Block Structure.
-* C_BCOMM: Common Blocks.
-* C_BINCL: Include Files.
-* C_BLOCK: Block Structure.
-* C_BSTAT: Statics.
-* C_DECL, for types: Typedefs.
-* C_ECOML: Common Blocks.
-* C_ECOMM: Common Blocks.
-* C_EINCL: Include Files.
-* C_ENTRY: Alternate Entry Points.
-* C_ESTAT: Statics.
-* C_FILE: Source Files.
-* C_FUN: Procedures.
-* C_GSYM: Global Variables.
-* C_LSYM: Stack Variables.
-* C_PSYM: Parameters.
-* C_RPSYM: Register Parameters.
-* C_RSYM: Register Variables.
-* C_STSYM: Statics.
-* N_BCOMM: Common Blocks.
-* N_BINCL: Include Files.
-* N_BROWS: N_BROWS.
-* N_BSLINE: Line Numbers.
-* N_CATCH: N_CATCH.
-* N_DEFD: N_DEFD.
-* N_DSLINE: Line Numbers.
-* N_ECOML: Common Blocks.
-* N_ECOMM: Common Blocks.
-* N_EHDECL: N_EHDECL.
-* N_EINCL: Include Files.
-* N_ENTRY: Alternate Entry Points.
-* N_EXCL: Include Files.
-* N_FNAME: Procedures.
-* N_FUN, for functions: Procedures.
-* N_FUN, for variables: Statics.
-* N_GSYM: Global Variables.
-* N_GSYM, for functions (Sun acc): Procedures.
-* N_LBRAC: Block Structure.
-* N_LCSYM: Statics.
-* N_LENG: N_LENG.
-* N_LSYM, for parameter: Local Variable Parameters.
-* N_LSYM, for stack variables: Stack Variables.
-* N_LSYM, for types: Typedefs.
-* N_M2C: N_M2C.
-* N_MAIN: Main Program.
-* N_MOD2: N_MOD2.
-* N_NBBSS: Gould.
-* N_NBDATA: Gould.
-* N_NBLCS: Gould.
-* N_NBSTS: Gould.
-* N_NBTEXT: Gould.
-* N_NOMAP: N_NOMAP.
-* N_NSYMS: N_NSYMS.
-* N_PC: N_PC.
-* N_PSYM: Parameters.
-* N_RBRAC: Block Structure.
-* N_ROSYM: Statics.
-* N_RSYM: Register Variables.
-* N_RSYM, for parameters: Register Parameters.
-* N_SCOPE: N_SCOPE.
-* N_SLINE: Line Numbers.
-* N_SO: Source Files.
-* N_SOL: Include Files.
-* N_SSYM: N_SSYM.
-* N_STSYM: Statics.
-* N_STSYM, for functions (Sun acc): Procedures.
-
-
-
-Tag Table:
-Node: Top871
-Node: Overview1851
-Node: Flow3262
-Node: Stabs Format4780
-Node: String Field6334
-Node: C Example11757
-Node: Assembly Code12294
-Node: Program Structure14257
-Node: Main Program14979
-Node: Source Files15532
-Node: Include Files17354
-Node: Line Numbers20011
-Node: Procedures21537
-Node: Nested Procedures27419
-Node: Block Structure28587
-Node: Alternate Entry Points29985
-Node: Constants30710
-Node: Variables33818
-Node: Stack Variables34502
-Node: Global Variables36195
-Node: Register Variables37343
-Node: Common Blocks38157
-Node: Statics39403
-Node: Based Variables41976
-Node: Parameters43353
-Node: Register Parameters44957
-Node: Local Variable Parameters47206
-Node: Reference Parameters50109
-Node: Conformant Arrays50717
-Node: Types51422
-Node: Builtin Types52353
-Node: Traditional Builtin Types53491
-Node: Traditional Integer Types53880
-Node: Traditional Other Types56172
-Node: Builtin Type Descriptors57070
-Node: Negative Type Numbers60558
-Node: Miscellaneous Types66901
-Node: Cross-References68779
-Node: Subranges70446
-Node: Arrays71677
-Node: Strings74894
-Node: Enumerations75948
-Node: Structures78325
-Node: Typedefs81029
-Node: Unions82345
-Node: Function Types83916
-Node: Symbol Tables85488
-Node: Symbol Table Format85916
-Node: Transformations On Symbol Tables87356
-Node: Transformations On Static Variables88702
-Node: Transformations On Global Variables89426
-Node: Stab Section Transformations90657
-Node: Cplusplus92028
-Node: Class Names92607
-Node: Nested Symbols93344
-Node: Basic Cplusplus Types94182
-Node: Simple Classes95734
-Node: Class Instance100035
-Node: Methods100744
-Node: Method Type Descriptor102970
-Node: Member Type Descriptor104162
-Node: Protections104985
-Node: Method Modifiers108067
-Node: Virtual Methods109685
-Node: Inheritance113476
-Node: Virtual Base Classes117187
-Node: Static Members119421
-Node: Stab Types119881
-Node: Non-Stab Symbol Types120483
-Node: Stab Symbol Types121906
-Node: Symbol Descriptors125621
-Node: Type Descriptors128378
-Node: Expanded Reference131568
-Node: N_PC132964
-Node: N_NSYMS133333
-Node: N_NOMAP133565
-Node: N_M2C133862
-Node: N_BROWS134287
-Node: N_DEFD134561
-Node: N_EHDECL135009
-Node: N_MOD2135251
-Node: N_CATCH135480
-Node: N_SSYM135965
-Node: N_SCOPE136239
-Node: Gould136418
-Node: N_LENG137395
-Node: Questions137612
-Node: Stab Sections139234
-Node: Stab Section Basics139810
-Node: ELF Linker Relocation143143
-Node: GNU Free Documentation License146545
-Node: Symbol Types Index168948
-
-End Tag Table