diff options
Diffstat (limited to 'contrib/gdb/gdb/doc')
-rw-r--r-- | contrib/gdb/gdb/doc/GDBvn.texi | 1 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/LRS | 197 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/a4rc.sed | 11 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/agentexpr.texi | 837 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/all-cfg.texi | 45 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/annotate.texinfo | 834 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/fdl.texi | 452 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/gdb.info-1 | 7636 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/gdb.info-2 | 9133 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/gdb.info-3 | 6665 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/gdb.texinfo | 21780 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/gdbint.texinfo | 6757 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/gpl.texi | 409 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/lpsrc.sed | 13 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/observer.texi | 70 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/psrc.sed | 13 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/refcard.tex | 647 | ||||
-rw-r--r-- | contrib/gdb/gdb/doc/stabs.texinfo | 4046 |
18 files changed, 0 insertions, 59546 deletions
diff --git a/contrib/gdb/gdb/doc/GDBvn.texi b/contrib/gdb/gdb/doc/GDBvn.texi deleted file mode 100644 index 38987b5cff03..000000000000 --- a/contrib/gdb/gdb/doc/GDBvn.texi +++ /dev/null @@ -1 +0,0 @@ -@set GDBVN 6.1.1 diff --git a/contrib/gdb/gdb/doc/LRS b/contrib/gdb/gdb/doc/LRS deleted file mode 100644 index 7e25d432a3ee..000000000000 --- a/contrib/gdb/gdb/doc/LRS +++ /dev/null @@ -1,197 +0,0 @@ -What's LRS? -=========== - -LRS, or Live Range Splitting is an optimization technique which allows -a user variable to reside in different locations during different parts -of a function. - -For example, a variable might reside in the stack for part of a function -and in a register during a loop and in a different register during -another loop. - -Clearly, if a variable may reside in different locations, then the -compiler must describe to the debugger where the variable resides for -any given part of the function. - -This document describes the debug format for encoding these extensions -in stabs. - -Since these extensions are gcc specific, these additional symbols and -stabs can be disabled by the gcc command option -gstabs. - - -GNU extensions for LRS under stabs: -=================================== - - -range symbols: -------------- - - A range symbol will be used to mark the beginning or end of a - live range (the range which describes where a symbol is active, - or live). These symbols will later be referenced in the stabs for - debug purposes. For simplicity, we'll use the terms "range_start" - and "range_end" to identify the range symbols which mark the beginning - and end of a live range respectively. - - Any text symbol which would normally appear in the symbol table - (eg. a function name) can be used as range symbol. If an address - is needed to delimit a live range and does not match any of the - values of symbols which would normally appear in the symbol table, - a new symbol will be added to the table whose value is that address. - - The three new symbol types described below have been added for this - purpose. - - For efficiency, the compiler should use existing symbols as range - symbols whenever possible; this reduces the number of additional - symbols which need to be added to the symbol table. - - -New debug symbol type for defining ranges: ------------------------------------------- - - range_off - contains PC function offset for start/end of a live range. - Its location is relative to the function start and therefore - eliminates the need for additional relocation. - - This symbol has a values in the text section, and does not have a name. - - NOTE: the following may not be needed but are included here just - in case. - range - contains PC value of beginning or end of a live range - (relocs required). - - NOTE: the following will be required if we desire LRS debugging - to work with old style a.out stabs. - range_abs - contains absolute PC value of start/end of a live - range. The range_abs debug symbol is provided for - completeness, in case there is a need to describe addresses - in ROM, etc. - - -Live range: ------------ - - The compiler and debugger view a variable with multiple homes as - a primary symbol and aliases for that symbol. The primary symbol - describes the default home of the variable while aliases describe - alternate homes for the variable. - - A live range defines the interval of instructions beginning with - range_start and ending at range_end-1, and is used to specify a - range of instructions where an alias is active or "live". So, - the actual end of the range will be one less than the value of the - range_end symbol. - - Ranges do not have to be nested. Eg. Two ranges may intersect while - each range contains subranges which are not in the other range. - - There does not have to be a 1-1 mapping from range_start to - range_end symbols. Eg. Two range_starts can share the same - range_end, while one symbol's range_start can be another symbol's - range_end. - - When a variable's storage class changes (eg. from stack to register, - or from one register to another), a new symbol entry will be - added to the symbol table with stabs describing the new type, - and appropriate live ranges refering to the variable's initial - symbol index. - - For variables which are defined in the source but optimized away, - a symbol should be emitted with the live range l(0,0). - - Live ranges for aliases of a particular variable should always - be disjoint. Overlapping ranges for aliases of the same variable - will be treated as an error by the debugger, and the overlapping - range will be ignored. - - If no live range information is given, the live range will be assumed to - span the symbol's entire lexical scope. - - -New stabs string identifiers: ------------------------------ - - "id" in "#id" in the following section refers to a numeric value. - - New stab syntax for live range: l(<ref_from>,<ref_to>) - - <ref_from> - "#id" where #id identifies the text symbol (range symbol) to - use as the start of live range (range_start). The value for - the referenced text symbol is the starting address of the - live range. - - <ref_to> - "#id" where #id identifies the text symbol (range symbol) to - use as the end of live range (range_end). The value for - the referenced text symbol is ONE BYTE PAST the ending - address of the live range. - - - New stab syntax for identifying symbols. - - <def> - "#id=" - - Uses: - <def><name>:<typedef1>... - When used in front of a symbol name, "#id=" defines a - unique reference number for this symbol. The reference - number can be used later when defining aliases for this - symbol. - <def> - When used as the entire stab string, "#id=" identifies this - nameless symbol as being the symbol for which "#id" refers to. - - - <ref> - "#id" where "#id" refers to the symbol for which the string - "#id=" identifies. - Uses: - <ref>:<typedef2>;<liverange>;<liverange>... - Defines an alias for the symbol identified by the reference - number ID. - l(<ref1>,<ref2>) - When used within a live range, "#id" refers to the text - symbol identified by "#id=" to use as the range symbol. - - <liverange> - "l(<ref_from>,<ref_to>)" - specifies a live range for a - symbol. Multiple "l" specifiers can be combined to represent - mutiple live ranges, separated by semicolons. - - - - -Example: -======== - -Consider a program of the form: - - void foo(){ - int a = ...; - ... - while (b--) - c += a; - .. - d = a; - .. - } - -Assume that "a" lives in the stack at offset -8, except for inside the -loop where "a" resides in register "r5". - -The way to describe this is to create a stab for the variable "a" which -describes "a" as living in the stack and an alias for the variable "a" -which describes it as living in register "r5" in the loop. - -Let's assume that "#1" and "#2" are symbols which bound the area where -"a" lives in a register. - -The stabs to describe "a" and its alias would look like this: - - .stabs "#3=a:1",128,0,8,-8 - .stabs "#3:r1;l(#1,#2)",64,0,0,5 - - -This design implies that the debugger will keep a chain of aliases for -any given variable with aliases and that chain will be searched first -to find out if an alias is active. If no alias is active, then the -debugger will assume that the main variable is active. diff --git a/contrib/gdb/gdb/doc/a4rc.sed b/contrib/gdb/gdb/doc/a4rc.sed deleted file mode 100644 index 22922904efc9..000000000000 --- a/contrib/gdb/gdb/doc/a4rc.sed +++ /dev/null @@ -1,11 +0,0 @@ -/--- Papersize params:/,/--- end papersize params/c\ -%------- Papersize params:\ -%% A4 paper (297x210mm)\ -%%\ -\\totalwidth=297mm % total width of paper\ -\\totalheight=210mm % total height of paper\ -\\hmargin=5mm % horizontal margin width\ -\\vmargin=10mm % vertical margin width\ -\\secskip=.6pc % space between refcard secs\ -\\lskip=1pt % extra skip between \\sec entries\ -%------- end papersize params diff --git a/contrib/gdb/gdb/doc/agentexpr.texi b/contrib/gdb/gdb/doc/agentexpr.texi deleted file mode 100644 index 491ae2e0ec3d..000000000000 --- a/contrib/gdb/gdb/doc/agentexpr.texi +++ /dev/null @@ -1,837 +0,0 @@ -@c \input texinfo -@c %**start of header -@c @setfilename agentexpr.info -@c @settitle GDB Agent Expressions -@c @setchapternewpage off -@c %**end of header - -@c Revision: $Id: agentexpr.texi,v 1.2 1998/12/09 21:23:46 jimb Exp $ - -@node Agent Expressions -@appendix 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 @code{trace} and @code{collect} commands, the user can -specify locations in the program, and arbitrary expressions to evaluate -when those locations are reached. Later, using the @code{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 @dfn{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. -@end menu - - -@c @node Rationale -@c @section Rationale - - -@node General Bytecode Design -@section General Bytecode Design - -The agent represents bytecode expressions as an array of bytes. Each -instruction is one byte long (thus the term @dfn{bytecode}). Some -instructions are followed by operand bytes; for example, the @code{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: -@example -union agent_val @{ - LONGEST l; - DOUBLEST d; -@}; -@end example -@noindent -where @code{LONGEST} and @code{DOUBLEST} are @code{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, @code{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: -@table @code -@item pc -The address of the next bytecode to execute. - -@item start -The address of the start of the bytecode expression, necessary for -interpreting the @code{goto} and @code{if_goto} instructions. - -@end table -@noindent -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: -@table @asis - -@item memory reference instructions (@code{ref}@var{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 @code{ext} instruction -exists for this purpose. - -@item the sign-extension instruction (@code{ext} @var{n}) -These clearly need to know which portion of their operand is to be -extended to occupy the full length of the word. - -@end table - -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 @code{x + y * z} would typically produce -code like the following, assuming that @code{x} and @code{y} live in -registers, and @code{z} is a global variable holding a 32-bit -@code{int}: -@example -reg 1 -reg 2 -const32 @i{address of z} -ref32 -ext 32 -mul -add -end -@end example - -In detail, these mean: -@table @code - -@item reg 1 -Push the value of register 1 (presumably holding @code{x}) onto the -stack. - -@item reg 2 -Push the value of register 2 (holding @code{y}). - -@item const32 @i{address of z} -Push the address of @code{z} onto the stack. - -@item 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 @code{z} with @code{z}'s value. - -@item ext 32 -Sign-extend the value on the top of the stack from 32 bits to full -length. This is necessary because @code{z} is a signed integer. - -@item 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 -@code{y * z}. - -@item add -Pop the top two numbers, add them, and push the sum. Now the top of the -stack contains the value of @code{x + y * z}. - -@item end -Stop executing; the value left on the stack top is the value to be -recorded. - -@end table - - -@node Bytecode Descriptions -@section Bytecode Descriptions - -Each bytecode description has the following form: - -@table @asis - -@item @code{add} (0x02): @var{a} @var{b} @result{} @var{a+b} - -Pop the top two stack items, @var{a} and @var{b}, as integers; push -their sum, as an integer. - -@end table - -In this example, @code{add} is the name of the bytecode, and -@code{(0x02)} is the one-byte value used to encode the bytecode, in -hexidecimal. The phrase ``@var{a} @var{b} @result{} @var{a+b}'' shows -the stack before and after the bytecode executes. Beforehand, the stack -must contain at least two values, @var{a} and @var{b}; since the top of -the stack is to the right, @var{b} is on the top of the stack, and -@var{a} is underneath it. After execution, the bytecode will have -popped @var{a} and @var{b} from the stack, and replaced them with a -single value, @var{a+b}. There may be other values on the stack below -those shown, but the bytecode affects only those shown. - -Here is another example: - -@table @asis - -@item @code{const8} (0x22) @var{n}: @result{} @var{n} -Push the 8-bit integer constant @var{n} on the stack, without sign -extension. - -@end table - -In this example, the bytecode @code{const8} takes an operand @var{n} -directly from the bytecode stream; the operand follows the @code{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 @code{const8} bytecode, there are no stack items given before -the @result{}; 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 @result{} may be empty. - -If a value is written as @var{a}, @var{b}, or @var{n}, then the bytecode -treats it as an integer. If a value is written is @var{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. - - -@table @asis - -@item @code{float} (0x01): @result{} - -Prefix for floating-point bytecodes. Not implemented yet. - -@item @code{add} (0x02): @var{a} @var{b} @result{} @var{a+b} -Pop two integers from the stack, and push their sum, as an integer. - -@item @code{sub} (0x03): @var{a} @var{b} @result{} @var{a-b} -Pop two integers from the stack, subtract the top value from the -next-to-top value, and push the difference. - -@item @code{mul} (0x04): @var{a} @var{b} @result{} @var{a*b} -Pop two integers from the stack, multiply them, and push the product on -the stack. Note that, when one multiplies two @var{n}-bit numbers -yielding another @var{n}-bit number, it is irrelevant whether the -numbers are signed or not; the results are the same. - -@item @code{div_signed} (0x05): @var{a} @var{b} @result{} @var{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. - -@item @code{div_unsigned} (0x06): @var{a} @var{b} @result{} @var{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. - -@item @code{rem_signed} (0x07): @var{a} @var{b} @result{} @var{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. - -@item @code{rem_unsigned} (0x08): @var{a} @var{b} @result{} @var{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. - -@item @code{lsh} (0x09): @var{a} @var{b} @result{} @var{a<<b} -Pop two integers from the stack; let @var{a} be the next-to-top value, -and @var{b} be the top value. Shift @var{a} left by @var{b} bits, and -push the result. - -@item @code{rsh_signed} (0x0a): @var{a} @var{b} @result{} @code{(signed)}@var{a>>b} -Pop two integers from the stack; let @var{a} be the next-to-top value, -and @var{b} be the top value. Shift @var{a} right by @var{b} bits, -inserting copies of the top bit at the high end, and push the result. - -@item @code{rsh_unsigned} (0x0b): @var{a} @var{b} @result{} @var{a>>b} -Pop two integers from the stack; let @var{a} be the next-to-top value, -and @var{b} be the top value. Shift @var{a} right by @var{b} bits, -inserting zero bits at the high end, and push the result. - -@item @code{log_not} (0x0e): @var{a} @result{} @var{!a} -Pop an integer from the stack; if it is zero, push the value one; -otherwise, push the value zero. - -@item @code{bit_and} (0x0f): @var{a} @var{b} @result{} @var{a&b} -Pop two integers from the stack, and push their bitwise @code{and}. - -@item @code{bit_or} (0x10): @var{a} @var{b} @result{} @var{a|b} -Pop two integers from the stack, and push their bitwise @code{or}. - -@item @code{bit_xor} (0x11): @var{a} @var{b} @result{} @var{a^b} -Pop two integers from the stack, and push their bitwise -exclusive-@code{or}. - -@item @code{bit_not} (0x12): @var{a} @result{} @var{~a} -Pop an integer from the stack, and push its bitwise complement. - -@item @code{equal} (0x13): @var{a} @var{b} @result{} @var{a=b} -Pop two integers from the stack; if they are equal, push the value one; -otherwise, push the value zero. - -@item @code{less_signed} (0x14): @var{a} @var{b} @result{} @var{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. - -@item @code{less_unsigned} (0x15): @var{a} @var{b} @result{} @var{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. - -@item @code{ext} (0x16) @var{n}: @var{a} @result{} @var{a}, sign-extended from @var{n} bits -Pop an unsigned value from the stack; treating it as an @var{n}-bit -twos-complement value, extend it to full length. This means that all -bits to the left of bit @var{n-1} (where the least significant bit is bit -0) are set to the value of bit @var{n-1}. Note that @var{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, @var{n}, is encoded as a single -byte unsigned integer following the @code{ext} bytecode. - -@item @code{zero_ext} (0x2a) @var{n}: @var{a} @result{} @var{a}, zero-extended from @var{n} bits -Pop an unsigned value from the stack; zero all but the bottom @var{n} -bits. This means that all bits to the left of bit @var{n-1} (where the -least significant bit is bit 0) are set to the value of bit @var{n-1}. - -The number of source bits to preserve, @var{n}, is encoded as a single -byte unsigned integer following the @code{zero_ext} bytecode. - -@item @code{ref8} (0x17): @var{addr} @result{} @var{a} -@itemx @code{ref16} (0x18): @var{addr} @result{} @var{a} -@itemx @code{ref32} (0x19): @var{addr} @result{} @var{a} -@itemx @code{ref64} (0x1a): @var{addr} @result{} @var{a} -Pop an address @var{addr} from the stack. For bytecode -@code{ref}@var{n}, fetch an @var{n}-bit value from @var{addr}, using the -natural target endianness. Push the fetched value as an unsigned -integer. - -Note that @var{addr} may not be aligned in any particular way; the -@code{ref@var{n}} bytecodes should operate correctly for any address. - -If attempting to access memory at @var{addr} would cause a processor -exception of some sort, terminate with an error. - -@item @code{ref_float} (0x1b): @var{addr} @result{} @var{d} -@itemx @code{ref_double} (0x1c): @var{addr} @result{} @var{d} -@itemx @code{ref_long_double} (0x1d): @var{addr} @result{} @var{d} -@itemx @code{l_to_d} (0x1e): @var{a} @result{} @var{d} -@itemx @code{d_to_l} (0x1f): @var{d} @result{} @var{a} -Not implemented yet. - -@item @code{dup} (0x28): @var{a} => @var{a} @var{a} -Push another copy of the stack's top element. - -@item @code{swap} (0x2b): @var{a} @var{b} => @var{b} @var{a} -Exchange the top two items on the stack. - -@item @code{pop} (0x29): @var{a} => -Discard the top value on the stack. - -@item @code{if_goto} (0x20) @var{offset}: @var{a} @result{} -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 @var{a} is -non-zero, set the @code{pc} register to @code{start} + @var{offset}. -Thus, an offset of zero denotes the beginning of the expression. - -The @var{offset} is stored as a sixteen-bit unsigned value, stored -immediately following the @code{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. - -@item @code{goto} (0x21) @var{offset}: @result{} -Branch unconditionally to @var{offset}; in other words, set the -@code{pc} register to @code{start} + @var{offset}. - -The offset is stored in the same way as for the @code{if_goto} bytecode. - -@item @code{const8} (0x22) @var{n}: @result{} @var{n} -@itemx @code{const16} (0x23) @var{n}: @result{} @var{n} -@itemx @code{const32} (0x24) @var{n}: @result{} @var{n} -@itemx @code{const64} (0x25) @var{n}: @result{} @var{n} -Push the integer constant @var{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 @code{ext} bytecode. - -The constant @var{n} is stored in the appropriate number of bytes -following the @code{const}@var{b} bytecode. The constant @var{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 @var{n} one byte at a time. - -@item @code{reg} (0x26) @var{n}: @result{} @var{a} -Push the value of register number @var{n}, without sign extension. The -registers are numbered following GDB's conventions. - -The register number @var{n} is encoded as a 16-bit unsigned integer -immediately following the @code{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. - -@item @code{trace} (0x0c): @var{addr} @var{size} @result{} -Record the contents of the @var{size} bytes at @var{addr} in a trace -buffer, for later retrieval by GDB. - -@item @code{trace_quick} (0x0d) @var{size}: @var{addr} @result{} @var{addr} -Record the contents of the @var{size} bytes at @var{addr} in a trace -buffer, for later retrieval by GDB. @var{size} is a single byte -unsigned integer following the @code{trace} opcode. - -This bytecode is equivalent to the sequence @code{dup const8 @var{size} -trace}, but we provide it anyway to save space in bytecode strings. - -@item @code{trace16} (0x30) @var{size}: @var{addr} @result{} @var{addr} -Identical to trace_quick, except that @var{size} is a 16-bit big-endian -unsigned integer, not a single byte. This should probably have been -named @code{trace_quick16}, for consistency. - -@item @code{end} (0x27): @result{} -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. - -@end table - - -@node Using Agent Expressions -@section Using Agent Expressions - -Here is a sketch of a full non-stop debugging cycle, showing how agent -expressions fit into the process. - -@itemize @bullet - -@item -The user selects trace points in the program's code at which GDB should -collect data. - -@item -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. - -@item -GDB transmits the tracepoints and their associated expressions to the -GDB agent, running on the debugging target. - -@item -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 @ref{Tracing on Symmetrix}. - -@item -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. - -@item -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. - -@end itemize - - -@node Varying Target Capabilities -@section Varying Target Capabilities - -Some targets don't support floating-point, and some would rather not -have to deal with @code{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: - -@itemize @bullet - -@item -whether floating point is supported - -@item -whether @code{long long} is supported - -@item -maximum acceptable size of bytecode stack - -@item -maximum acceptable length of bytecode expressions - -@item -which registers are actually available for collection - -@item -whether the target supports disabled tracepoints - -@end itemize - - - -@node Tracing on Symmetrix -@section 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. - -@deftypefn Function DTC_RESPONSE adbg_find_memory_in_frame (FRAME_DEF *@var{frame}, char *@var{address}, char **@var{buffer}, unsigned int *@var{size}) -Search the trace frame @var{frame} for memory saved from @var{address}. -If the memory is available, provide the address of the buffer holding -it; otherwise, provide the address of the next saved area. - -@itemize @bullet - -@item -If the memory at @var{address} was saved in @var{frame}, set -@code{*@var{buffer}} to point to the buffer in which that memory was -saved, set @code{*@var{size}} to the number of bytes from @var{address} -that are saved at @code{*@var{buffer}}, and return -@code{OK_TARGET_RESPONSE}. (Clearly, in this case, the function will -always set @code{*@var{size}} to a value greater than zero.) - -@item -If @var{frame} does not record any memory at @var{address}, set -@code{*@var{size}} to the distance from @var{address} to the start of -the saved region with the lowest address higher than @var{address}. If -there is no memory saved from any higher address, set @code{*@var{size}} -to zero. Return @code{NOT_FOUND_TARGET_RESPONSE}. -@end itemize - -These two possibilities allow the caller to either retrieve the data, or -walk the address space to the next saved area. -@end deftypefn - -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 @var{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 @code{f} has saved sixteen bytes -from address @code{0x8000} in a buffer at @code{0x1000}, and thirty-two -bytes from address @code{0xc000} in a buffer at @code{0x1010}. Here are -some sample calls, and the effect each would have: - -@table @code - -@item adbg_find_memory_in_frame (f, (char*) 0x8000, &buffer, &size) -This would set @code{buffer} to @code{0x1000}, set @code{size} to -sixteen, and return @code{OK_TARGET_RESPONSE}, since @code{f} saves -sixteen bytes from @code{0x8000} at @code{0x1000}. - -@item adbg_find_memory_in_frame (f, (char *) 0x8004, &buffer, &size) -This would set @code{buffer} to @code{0x1004}, set @code{size} to -twelve, and return @code{OK_TARGET_RESPONSE}, since @file{f} saves the -twelve bytes from @code{0x8004} starting four bytes into the buffer at -@code{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. - -@item adbg_find_memory_in_frame (f, (char *) 0x8100, &buffer, &size) -This would set @code{size} to @code{0x3f00} and return -@code{NOT_FOUND_TARGET_RESPONSE}, since there is no memory saved in -@code{f} from the address @code{0x8100}, and the next memory available -is at @code{0x8100 + 0x3f00}, or @code{0xc000}. This shows that request -addresses may fall outside of all saved memory ranges; the function -should indicate the next saved area, if any. - -@item adbg_find_memory_in_frame (f, (char *) 0x7000, &buffer, &size) -This would set @code{size} to @code{0x1000} and return -@code{NOT_FOUND_TARGET_RESPONSE}, since the next saved memory is at -@code{0x7000 + 0x1000}, or @code{0x8000}. - -@item adbg_find_memory_in_frame (f, (char *) 0xf000, &buffer, &size) -This would set @code{size} to zero, and return -@code{NOT_FOUND_TARGET_RESPONSE}. This shows how the function tells the -caller that no further memory ranges have been saved. - -@end table - -As another example, here is a function which will print out the -addresses of all memory saved in the trace frame @code{frame} on the -Symmetrix INLINES console: -@example -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; - @} -@} -@end example - -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 -@code{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.]] - -@node Rationale -@section Rationale - -Some of the design decisions apparent above are arguable. - -@table @b - -@item 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. - -@item 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 @emph{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. - - -@item Why don't you have @code{>} or @code{<=} operators? -I want to keep the interpreter small, and we don't need them. We can -combine the @code{less_} opcodes with @code{log_not}, and swap the order -of the operands, yielding all four asymmetrical comparison operators. -For example, @code{(x <= y)} is @code{! (x > y)}, which is @code{! (y < -x)}. - -@item Why do you have @code{log_not}? -@itemx Why do you have @code{ext}? -@itemx Why do you have @code{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. - -@code{log_not} is equivalent to @code{const8 0 equal}; it's used in half -the relational operators. - -@code{ext @var{n}} is equivalent to @code{const8 @var{s-n} lsh const8 -@var{s-n} rsh_signed}, where @var{s} is the size of the stack elements; -it follows @code{ref@var{m}} and @var{reg} bytecodes when the value -should be signed. See the next bulleted item. - -@code{zero_ext @var{n}} is equivalent to @code{const@var{m} @var{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. - -@item Why not have sign-extending variants of the @code{ref} operators? -Because that would double the number of @code{ref} operators, and we -need the @code{ext} bytecode anyway for accessing bitfields. - -@item Why not have constant-address variants of the @code{ref} operators? -Because that would double the number of @code{ref} operators again, and -@code{const32 @var{address} ref32} is only one byte longer. - -@item Why do the @code{ref@var{n}} 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. - -@item 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. - -@item Why aren't the @code{goto} ops PC-relative? -The interpreter has the base address around anyway for PC bounds -checking, and it seemed simpler. - -@item Why is there only one offset size for the @code{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. - -@item Where is the function call bytecode? - -When we add side-effects, we should add this. - -@item Why does the @code{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. - -@item Why do we need @code{trace} and @code{trace_quick}? -Because GDB needs to record all the memory contents and registers an -expression touches. If the user wants to evaluate an expression -@code{x->y->z}, the agent must record the values of @code{x} and -@code{x->y} as well as the value of @code{x->y->z}. - -@item Don't the @code{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 @code{trace} bytecodes, they don't get in -its way. - -@item Why doesn't @code{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, @code{trace_quick} is a kludge to save space; it -only exists so we needn't write @code{dup const8 @var{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. - -@item Why does @code{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 @code{dup const16 -@var{size} trace} in those cases. - -Whatever we decide to do with @code{trace16}, we should at least leave -opcode 0x30 reserved, to remain compatible with the customer who added -it. - -@end table diff --git a/contrib/gdb/gdb/doc/all-cfg.texi b/contrib/gdb/gdb/doc/all-cfg.texi deleted file mode 100644 index b680ea2b4925..000000000000 --- a/contrib/gdb/gdb/doc/all-cfg.texi +++ /dev/null @@ -1,45 +0,0 @@ -@c GDB MANUAL configuration file. -@c -@c Copyright 1993, 1995, 1999, 2002 Free Software Foundation, Inc. -@c -@c NOTE: While the GDB manual is configurable (by changing these -@c switches), its configuration is ***NOT*** automatically tied in to -@c source configuration---because the authors expect that, save in -@c unusual cases, the most inclusive form of the manual is appropriate -@c no matter how the program itself is configured. -@c -@c The only automatically-varying variable is the GDB version number, -@c which the Makefile rewrites based on the VERSION variable from -@c `../Makefile.in'. -@c -@c GDB version number is recorded in the variable GDBVN -@include GDBvn.texi -@c -@c ---------------------------------------------------------------------- -@c PLATFORM FLAGS: -@set GENERIC -@c -@c HP PA-RISC target ONLY: -@clear HPPA -@c -@c Refrain from discussing how to configure sw and format doc? -@clear PRECONFIGURED -@c -@c ---------------------------------------------------------------------- -@c STRINGS: -@c -@c Name of GDB program. Used also for (gdb) prompt string. -@set GDBP gdb -@c -@c Name of GDB product. Used in running text. -@set GDBN @sc{gdb} -@c -@c Name of host. Should not be used in generic configs, but generic -@c value may catch some flubs. -@set HOST machine specific -@c -@c Name of GCC product -@set NGCC @sc{gcc} -@c -@c Name of GCC program -@set GCC gcc diff --git a/contrib/gdb/gdb/doc/annotate.texinfo b/contrib/gdb/gdb/doc/annotate.texinfo deleted file mode 100644 index 2fb79d39d0e7..000000000000 --- a/contrib/gdb/gdb/doc/annotate.texinfo +++ /dev/null @@ -1,834 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename annotate.info - -@c This is a dir.info fragment to support semi-automated addition of -@c manuals to an info tree. -@dircategory Software development -@direntry -* Annotate: (annotate). The obsolete annotation interface. -@end direntry - -@c -@include gdb-cfg.texi -@c -@settitle @value{GDBN}'s Obsolete Annotations -@setchapternewpage off -@c %**end of header - -@set EDITION 1.0 -@set DATE July 2003 - -@c NOTE: cagney/2003-07-28: -@c Don't make this migration doccument an appendix of GDB's user guide. -@c By keeping this separate, the size of the user guide is contained. If -@c the user guide to get much bigger it would need to switch to a larger, -@c more expensive, form factor and would drive up the manuals publication -@c cost. Having a smaller cheaper manual helps the GNU Press with its sales. - -@ifinfo -This file documents @value{GDBN}'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''. - -@end ifinfo - -@titlepage -@title @value{GDBN}'s Obsolete Annotations -@subtitle Edition @value{EDITION} -@subtitle @value{DATE} -@author Free Software Foundation -@page -@vskip 0pt plus 1filll -Copyright @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''. -@end titlepage - -@ifinfo -@node Top -@top GDB Annotations - -This document describes the obsolete level two annotation interface -implemented in older @value{GDBN} versions. - -@ignore -This is Edition @value{EDITION}, @value{DATE}. -@end ignore -@end ifinfo - -@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:: @value{GDBN} can be told to display something periodically. -* Prompting:: Annotations marking @value{GDBN}'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:: -@end menu - -@contents - -@node Annotations Overview -@chapter What is an Annotation? -@cindex annotations - -To produce obsolete level two annotations, start @value{GDBN} with the -@code{--annotate=2} option. - -Annotations start with a newline character, two @samp{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 @samp{control-z} -characters denotes literal output from @value{GDBN}. Currently there is -no need for @value{GDBN} to output a newline followed by two -@samp{control-z} characters, but if there was such a need, the -annotations could be extended with an @samp{escape} annotation which -means those three characters as output. - -A simple example of starting up @value{GDBN} with annotations is: - -@smallexample -$ 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 -$ -@end smallexample - -Here @samp{quit} is input to @value{GDBN}; the rest is output from -@value{GDBN}. The three lines beginning @samp{^Z^Z} (where @samp{^Z} -denotes a @samp{control-z} character) are annotations; the rest is -output from @value{GDBN}. - -@node Limitations -@chapter 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 @value{GDBN} 5.1 and the addition of @sc{gdb/mi}, -the annotation interface was marked as deprecated. - -This chapter discusses the known problems. - -@section Dependant on @sc{cli} output - -The annotation interface works by interspersing markups with -@value{GDBN} normal command-line interpreter output. Unfortunately, this -makes the annotation client dependant on not just the annotations, but -also the @sc{cli} output. This is because the client is forced to -assume that specific @value{GDBN} commands provide specific information. -Any change to @value{GDBN}'s @sc{cli} output modifies or removes that -information and, consequently, likely breaks the client. - -Since the @sc{gdb/mi} output is independant of the @sc{cli}, it does not -have this problem. - -@section Scalability - -The annotation interface relies on value annotations (@pxref{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 @value{GDBN}, and then re-display, all those -values. The client should instead only request and update the values -that changed. - -The @sc{gdb/mi} Variable Objects provide just that mechanism. - -@section 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 @sc{gdb/mi} Variable Objects include a mechanism for efficiently -reporting such changes. - -@section Reliability - -The @sc{gdb/mi} interface includes a dedicated test directory -(@file{gdb/gdb.mi}), and any addition or fix to @sc{gdb/mi} must include -testsuite changes. - -@section Maintainability - -The annotation mechanism was implemented by interspersing @sc{cli} print -statements with various annotations. As a consequence, any @sc{cli} -output change can alter the annotation output. - -Since the @sc{gdb/mi} output is independant of the @sc{cli}, and the -@sc{gdb/mi} is increasingly implemented independant of the @sc{cli} -code, its long term maintenance is much easier. - -@node Migrating to GDB/MI -@chapter Migrating to @sc{gdb/mi} - -By using the @samp{interp mi} command, it is possible for annotation -clients to invoke @sc{gdb/mi} commands, and hence access the -@sc{gdb/mi}. By doing this, existing annotation clients have a -migration path from this obsolete interface to @sc{gdb/mi}. - -@node Server Prefix -@chapter The Server Prefix -@cindex server prefix for annotations - -To issue a command to @value{GDBN} without affecting certain aspects of -the state which is seen by users, prefix it with @samp{server }. This -means that this command will not affect the command history, nor will it -affect @value{GDBN}'s notion of which command to repeat if @key{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 @code{output} command instead of the @code{print} command. - -@node Value Annotations -@chapter Values - -@emph{Value Annotations have been removed. @sc{gdb/mi} instead provides -Variable Objects.} - -@cindex annotations for values -When a value is printed in various contexts, @value{GDBN} uses -annotations to delimit the value from the surrounding text. - -@findex value-history-begin -@findex value-history-value -@findex value-history-end -If a value is printed using @code{print} and added to the value history, -the annotation looks like - -@smallexample -^Z^Zvalue-history-begin @var{history-number} @var{value-flags} -@var{history-string} -^Z^Zvalue-history-value -@var{the-value} -^Z^Zvalue-history-end -@end smallexample - -@noindent -where @var{history-number} is the number it is getting in the value -history, @var{history-string} is a string, such as @samp{$5 = }, which -introduces the value to the user, @var{the-value} is the output -corresponding to the value itself, and @var{value-flags} is @samp{*} for -a value which can be dereferenced and @samp{-} for a value which cannot. - -@findex value-begin -@findex value-end -If the value is not added to the value history (it is an invalid float -or it is printed with the @code{output} command), the annotation is similar: - -@smallexample -^Z^Zvalue-begin @var{value-flags} -@var{the-value} -^Z^Zvalue-end -@end smallexample - -@findex arg-begin -@findex arg-name-end -@findex arg-value -@findex arg-end -When @value{GDBN} prints an argument to a function (for example, in the output -from the @code{backtrace} command), it annotates it as follows: - -@smallexample -^Z^Zarg-begin -@var{argument-name} -^Z^Zarg-name-end -@var{separator-string} -^Z^Zarg-value @var{value-flags} -@var{the-value} -^Z^Zarg-end -@end smallexample - -@noindent -where @var{argument-name} is the name of the argument, -@var{separator-string} is text which separates the name from the value -for the user's benefit (such as @samp{=}), and @var{value-flags} and -@var{the-value} have the same meanings as in a -@code{value-history-begin} annotation. - -@findex field-begin -@findex field-name-end -@findex field-value -@findex field-end -When printing a structure, @value{GDBN} annotates it as follows: - -@smallexample -^Z^Zfield-begin @var{value-flags} -@var{field-name} -^Z^Zfield-name-end -@var{separator-string} -^Z^Zfield-value -@var{the-value} -^Z^Zfield-end -@end smallexample - -@noindent -where @var{field-name} is the name of the field, @var{separator-string} -is text which separates the name from the value for the user's benefit -(such as @samp{=}), and @var{value-flags} and @var{the-value} have the -same meanings as in a @code{value-history-begin} annotation. - -When printing an array, @value{GDBN} annotates it as follows: - -@smallexample -^Z^Zarray-section-begin @var{array-index} @var{value-flags} -@end smallexample - -@noindent -where @var{array-index} is the index of the first element being -annotated and @var{value-flags} has the same meaning as in a -@code{value-history-begin} annotation. This is followed by any number -of elements, where is element can be either a single element: - -@findex elt -@smallexample -@samp{,} @var{whitespace} ; @r{omitted for the first element} -@var{the-value} -^Z^Zelt -@end smallexample - -or a repeated element - -@findex elt-rep -@findex elt-rep-end -@smallexample -@samp{,} @var{whitespace} ; @r{omitted for the first element} -@var{the-value} -^Z^Zelt-rep @var{number-of-repetitions} -@var{repetition-string} -^Z^Zelt-rep-end -@end smallexample - -In both cases, @var{the-value} is the output for the value of the -element and @var{whitespace} can contain spaces, tabs, and newlines. In -the repeated case, @var{number-of-repetitions} is the number of -consecutive array elements which contain that value, and -@var{repetition-string} is a string which is designed to convey to the -user that repetition is being depicted. - -@findex array-section-end -Once all the array elements have been output, the array annotation is -ended with - -@smallexample -^Z^Zarray-section-end -@end smallexample - -@node Frame Annotations -@chapter Frames - -@emph{Value Annotations have been removed. @sc{gdb/mi} instead provides -a number of frame commands.} - -@emph{Frame annotations are no longer available. The @sc{gdb/mi} -provides @samp{-stack-list-arguments}, @samp{-stack-list-locals}, and -@samp{-stack-list-frames} commands.} - -@cindex annotations for frames -Whenever @value{GDBN} prints a frame, it annotates it. For example, this applies -to frames printed when @value{GDBN} stops, output from commands such as -@code{backtrace} or @code{up}, etc. - -@findex frame-begin -The frame annotation begins with - -@smallexample -^Z^Zframe-begin @var{level} @var{address} -@var{level-string} -@end smallexample - -@noindent -where @var{level} is the number of the frame (0 is the innermost frame, -and other frames have positive numbers), @var{address} is the address of -the code executing in that frame, and @var{level-string} is a string -designed to convey the level to the user. @var{address} is in the form -@samp{0x} followed by one or more lowercase hex digits (note that this -does not depend on the language). The frame ends with - -@findex frame-end -@smallexample -^Z^Zframe-end -@end smallexample - -Between these annotations is the main body of the frame, which can -consist of - -@itemize @bullet -@item -@findex function-call -@smallexample -^Z^Zfunction-call -@var{function-call-string} -@end smallexample - -where @var{function-call-string} is text designed to convey to the user -that this frame is associated with a function call made by @value{GDBN} to a -function in the program being debugged. - -@item -@findex signal-handler-caller -@smallexample -^Z^Zsignal-handler-caller -@var{signal-handler-caller-string} -@end smallexample - -where @var{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). - -@item -A normal frame. - -@findex frame-address -@findex frame-address-end -This can optionally (depending on whether this is thought of as -interesting information for the user to see) begin with - -@smallexample -^Z^Zframe-address -@var{address} -^Z^Zframe-address-end -@var{separator-string} -@end smallexample - -where @var{address} is the address executing in the frame (the same -address as in the @code{frame-begin} annotation, but printed in a form -which is intended for user consumption---in particular, the syntax varies -depending on the language), and @var{separator-string} is a string -intended to separate this address from what follows for the user's -benefit. - -@findex frame-function-name -@findex frame-args -Then comes - -@smallexample -^Z^Zframe-function-name -@var{function-name} -^Z^Zframe-args -@var{arguments} -@end smallexample - -where @var{function-name} is the name of the function executing in the -frame, or @samp{??} if not known, and @var{arguments} are the arguments -to the frame, with parentheses around them (each argument is annotated -individually as well, @pxref{Value Annotations}). - -@findex frame-source-begin -@findex frame-source-file -@findex frame-source-file-end -@findex frame-source-line -@findex frame-source-end -If source information is available, a reference to it is then printed: - -@smallexample -^Z^Zframe-source-begin -@var{source-intro-string} -^Z^Zframe-source-file -@var{filename} -^Z^Zframe-source-file-end -: -^Z^Zframe-source-line -@var{line-number} -^Z^Zframe-source-end -@end smallexample - -where @var{source-intro-string} separates for the user's benefit the -reference from the text which precedes it, @var{filename} is the name of -the source file, and @var{line-number} is the line number within that -file (the first line is line 1). - -@findex frame-where -If @value{GDBN} 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 - -@smallexample -^Z^Zframe-where -@var{information} -@end smallexample - -Then, if source is to actually be displayed for this frame (for example, -this is not true for output from the @code{backtrace} command), then a -@code{source} annotation (@pxref{Source Annotations}) is displayed. Unlike -most annotations, this is output instead of the normal text which would be -output, not in addition. -@end itemize - -@node Displays -@chapter Displays - -@emph{Display Annotations have been removed. @sc{gdb/mi} instead -provides Variable Objects.} - -@findex display-begin -@findex display-number-end -@findex display-format -@findex display-expression -@findex display-expression-end -@findex display-value -@findex display-end -@cindex annotations for display -When @value{GDBN} is told to display something using the @code{display} command, -the results of the display are annotated: - -@smallexample -^Z^Zdisplay-begin -@var{number} -^Z^Zdisplay-number-end -@var{number-separator} -^Z^Zdisplay-format -@var{format} -^Z^Zdisplay-expression -@var{expression} -^Z^Zdisplay-expression-end -@var{expression-separator} -^Z^Zdisplay-value -@var{value} -^Z^Zdisplay-end -@end smallexample - -@noindent -where @var{number} is the number of the display, @var{number-separator} -is intended to separate the number from what follows for the user, -@var{format} includes information such as the size, format, or other -information about how the value is being displayed, @var{expression} is -the expression being displayed, @var{expression-separator} is intended -to separate the expression from the text that follows for the user, -and @var{value} is the actual value being displayed. - -@node Prompting -@chapter Annotation for @value{GDBN} Input - -@cindex annotations for prompts -When @value{GDBN} 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 @dfn{input type}. Each -input type has three annotations: a @code{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 @code{post-} -annotation which denotes the end of any echo which may (or may not) be -associated with the input. For example, the @code{prompt} input type -features the following annotations: - -@smallexample -^Z^Zpre-prompt -^Z^Zprompt -^Z^Zpost-prompt -@end smallexample - -The input types are - -@table @code -@findex pre-prompt -@findex prompt -@findex post-prompt -@item prompt -When @value{GDBN} is prompting for a command (the main @value{GDBN} prompt). - -@findex pre-commands -@findex commands -@findex post-commands -@item commands -When @value{GDBN} prompts for a set of commands, like in the @code{commands} -command. The annotations are repeated for each command which is input. - -@findex pre-overload-choice -@findex overload-choice -@findex post-overload-choice -@item overload-choice -When @value{GDBN} wants the user to select between various overloaded functions. - -@findex pre-query -@findex query -@findex post-query -@item query -When @value{GDBN} wants the user to confirm a potentially dangerous operation. - -@findex pre-prompt-for-continue -@findex prompt-for-continue -@findex post-prompt-for-continue -@item prompt-for-continue -When @value{GDBN} is asking the user to press return to continue. Note: Don't -expect this to work well; instead use @code{set height 0} to disable -prompting. This is because the counting of lines is buggy in the -presence of annotations. -@end table - -@node Errors -@chapter Errors -@cindex annotations for errors, warnings and interrupts - -@findex quit -@smallexample -^Z^Zquit -@end smallexample - -This annotation occurs right before @value{GDBN} responds to an interrupt. - -@findex error -@smallexample -^Z^Zerror -@end smallexample - -This annotation occurs right before @value{GDBN} responds to an error. - -Quit and error annotations indicate that any annotations which @value{GDBN} was -in the middle of may end abruptly. For example, if a -@code{value-history-begin} annotation is followed by a @code{error}, one -cannot expect to receive the matching @code{value-history-end}. One -cannot expect not to receive it either, however; an error annotation -does not necessarily mean that @value{GDBN} is immediately returning all the way -to the top level. - -@findex error-begin -A quit or error annotation may be preceded by - -@smallexample -^Z^Zerror-begin -@end smallexample - -Any output between that and the quit or error annotation is the error -message. - -Warning messages are not yet annotated. -@c If we want to change that, need to fix warning(), type_error(), -@c range_error(), and possibly other places. - -@node Breakpoint Info -@chapter Information on Breakpoints - -@emph{Breakpoint Annotations have been removed. @sc{gdb/mi} instead -provides breakpoint commands.} - -@cindex annotations for breakpoints -The output from the @code{info breakpoints} command is annotated as follows: - -@findex breakpoints-headers -@findex breakpoints-table -@smallexample -^Z^Zbreakpoints-headers -@var{header-entry} -^Z^Zbreakpoints-table -@end smallexample - -@noindent -where @var{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: - -@findex record -@findex field -@smallexample -^Z^Zrecord -^Z^Zfield 0 -@var{number} -^Z^Zfield 1 -@var{type} -^Z^Zfield 2 -@var{disposition} -^Z^Zfield 3 -@var{enable} -^Z^Zfield 4 -@var{address} -^Z^Zfield 5 -@var{what} -^Z^Zfield 6 -@var{frame} -^Z^Zfield 7 -@var{condition} -^Z^Zfield 8 -@var{ignore-count} -^Z^Zfield 9 -@var{commands} -@end smallexample - -Note that @var{address} is intended for user consumption---the syntax -varies depending on the language. - -The output ends with - -@findex breakpoints-table-end -@smallexample -^Z^Zbreakpoints-table-end -@end smallexample - -@node Invalidation -@chapter Invalidation Notices - -@cindex annotations for invalidation messages -The following annotations say that certain pieces of state may have -changed. - -@table @code -@findex frames-invalid -@item ^Z^Zframes-invalid - -The frames (for example, output from the @code{backtrace} command) may -have changed. - -@findex breakpoints-invalid -@item ^Z^Zbreakpoints-invalid - -The breakpoints may have changed. For example, the user just added or -deleted a breakpoint. -@end table - -@node Annotations for Running -@chapter Running the Program -@cindex annotations for running programs - -@findex starting -@findex stopping -When the program starts executing due to a @value{GDBN} command such as -@code{step} or @code{continue}, - -@smallexample -^Z^Zstarting -@end smallexample - -is output. When the program stops, - -@smallexample -^Z^Zstopped -@end smallexample - -is output. Before the @code{stopped} annotation, a variety of -annotations describe how the program stopped. - -@table @code -@findex exited -@item ^Z^Zexited @var{exit-status} -The program exited, and @var{exit-status} is the exit status (zero for -successful exit, otherwise nonzero). - -@findex signalled -@findex signal-name -@findex signal-name-end -@findex signal-string -@findex signal-string-end -@item ^Z^Zsignalled -The program exited with a signal. After the @code{^Z^Zsignalled}, the -annotation continues: - -@smallexample -@var{intro-text} -^Z^Zsignal-name -@var{name} -^Z^Zsignal-name-end -@var{middle-text} -^Z^Zsignal-string -@var{string} -^Z^Zsignal-string-end -@var{end-text} -@end smallexample - -@noindent -where @var{name} is the name of the signal, such as @code{SIGILL} or -@code{SIGSEGV}, and @var{string} is the explanation of the signal, such -as @code{Illegal Instruction} or @code{Segmentation fault}. -@var{intro-text}, @var{middle-text}, and @var{end-text} are for the -user's benefit and have no particular format. - -@findex signal -@item ^Z^Zsignal -The syntax of this annotation is just like @code{signalled}, but @value{GDBN} is -just saying that the program received the signal, not that it was -terminated with it. - -@findex breakpoint -@item ^Z^Zbreakpoint @var{number} -The program hit breakpoint number @var{number}. - -@findex watchpoint -@item ^Z^Zwatchpoint @var{number} -The program hit watchpoint number @var{number}. -@end table - -@node Source Annotations -@chapter Displaying Source -@cindex annotations for source display - -@findex source -The following annotation is used instead of displaying source code: - -@smallexample -^Z^Zsource @var{filename}:@var{line}:@var{character}:@var{middle}:@var{addr} -@end smallexample - -where @var{filename} is an absolute file name indicating which source -file, @var{line} is the line number within that file (where 1 is the -first line in the file), @var{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), -@var{middle} is @samp{middle} if @var{addr} is in the middle of the -line, or @samp{beg} if @var{addr} is at the beginning of the line, and -@var{addr} is the address in the target program associated with the -source which is being displayed. @var{addr} is in the form @samp{0x} -followed by one or more lowercase hex digits (note that this does not -depend on the language). - -@raisesections -@include fdl.texi -@lowersections - -@ignore -@node Index -@unnumbered Index - -@printindex fn -@end ignore - -@bye diff --git a/contrib/gdb/gdb/doc/fdl.texi b/contrib/gdb/gdb/doc/fdl.texi deleted file mode 100644 index 11737cc89bd1..000000000000 --- a/contrib/gdb/gdb/doc/fdl.texi +++ /dev/null @@ -1,452 +0,0 @@ - -@node GNU Free Documentation License -@appendixsec GNU Free Documentation License - -@cindex FDL, GNU Free Documentation License -@center Version 1.2, November 2002 - -@display -Copyright @copyright{} 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. -@end display - -@enumerate 0 -@item -PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document @dfn{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. - -@item -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 -@sc{ascii} without markup, Texinfo input format, La@TeX{} input -format, @acronym{SGML} or @acronym{XML} using a publicly available -@acronym{DTD}, and standard-conforming simple @acronym{HTML}, -PostScript or @acronym{PDF} designed for human modification. Examples -of transparent image formats include @acronym{PNG}, @acronym{XCF} and -@acronym{JPG}. Opaque formats include proprietary formats that can be -read and edited only by proprietary word processors, @acronym{SGML} or -@acronym{XML} for which the @acronym{DTD} and/or processing tools are -not generally available, and the machine-generated @acronym{HTML}, -PostScript or @acronym{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. - -@item -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. - -@item -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. - -@item -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: - -@enumerate A -@item -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. - -@item -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. - -@item -State on the Title page the name of the publisher of the -Modified Version, as the publisher. - -@item -Preserve all the copyright notices of the Document. - -@item -Add an appropriate copyright notice for your modifications -adjacent to the other copyright notices. - -@item -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. - -@item -Preserve in that license notice the full lists of Invariant Sections -and required Cover Texts given in the Document's license notice. - -@item -Include an unaltered copy of this License. - -@item -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. - -@item -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. - -@item -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. - -@item -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. - -@item -Delete any section Entitled ``Endorsements''. Such a section -may not be included in the Modified Version. - -@item -Do not retitle any existing section to be Entitled ``Endorsements'' or -to conflict in title with any Invariant Section. - -@item -Preserve any Warranty Disclaimers. -@end enumerate - -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. - -@item -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.'' - -@item -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. - -@item -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. - -@item -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. - -@item -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. - -@item -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 -@uref{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. -@end enumerate - -@page -@appendixsubsec 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: - -@smallexample -@group - Copyright (C) @var{year} @var{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''. -@end group -@end smallexample - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the ``with...Texts.'' line with this: - -@smallexample -@group - with the Invariant Sections being @var{list their titles}, with - the Front-Cover Texts being @var{list}, and with the Back-Cover Texts - being @var{list}. -@end group -@end smallexample - -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. - -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: - diff --git a/contrib/gdb/gdb/doc/gdb.info-1 b/contrib/gdb/gdb/doc/gdb.info-1 deleted file mode 100644 index decf4543461a..000000000000 --- a/contrib/gdb/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 Software development -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.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.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.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/contrib/gdb/gdb/doc/gdb.info-2 b/contrib/gdb/gdb/doc/gdb.info-2 deleted file mode 100644 index 4dcf4353b5b2..000000000000 --- a/contrib/gdb/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 Software development -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.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.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/contrib/gdb/gdb/doc/gdb.info-3 b/contrib/gdb/gdb/doc/gdb.info-3 deleted file mode 100644 index ada53b48bb5f..000000000000 --- a/contrib/gdb/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 Software development -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.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.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.1', in the case of version 6.1.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.1/gdb') and type: - - make gdb.dvi - - Then give `gdb.dvi' to your DVI printing program. - - ---------- Footnotes ---------- - - (1) In `gdb-6.1.1/gdb/refcard.ps' of the version 6.1.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.1 distribution is in the -`gdb-6.1.1' directory. That directory contains: - -`gdb-6.1.1/configure (and supporting files)' - script for configuring GDB and all its supporting libraries - -`gdb-6.1.1/gdb' - the source specific to GDB itself - -`gdb-6.1.1/bfd' - source for the Binary File Descriptor library - -`gdb-6.1.1/include' - GNU include files - -`gdb-6.1.1/libiberty' - source for the `-liberty' free software library - -`gdb-6.1.1/opcodes' - source for the library of opcode tables and disassemblers - -`gdb-6.1.1/readline' - source for the GNU command-line interface - -`gdb-6.1.1/glob' - source for the GNU filename pattern-matching subroutine - -`gdb-6.1.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.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.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.1' -source directory for version 6.1.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.1, you can build GDB in a separate -directory for a Sun 4 like this: - - cd gdb-6.1.1 - mkdir ../gdb-sun4 - cd ../gdb-sun4 - ../gdb-6.1.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.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.1' (or in a separate configured directory configured with -`--srcdir=DIRNAME/gdb-6.1.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.1', for version 6.1.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/contrib/gdb/gdb/doc/gdb.texinfo b/contrib/gdb/gdb/doc/gdb.texinfo deleted file mode 100644 index 772d1ebf128e..000000000000 --- a/contrib/gdb/gdb/doc/gdb.texinfo +++ /dev/null @@ -1,21780 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, -@c 1999, 2000, 2001, 2002, 2003, 2004 -@c Free Software Foundation, Inc. -@c -@c %**start of header -@c makeinfo ignores cmds prev to setfilename, so its arg cannot make use -@c of @set vars. However, you can override filename with makeinfo -o. -@setfilename gdb.info -@c -@include gdb-cfg.texi -@c -@settitle Debugging with @value{GDBN} -@setchapternewpage odd -@c %**end of header - -@iftex -@c @smallbook -@c @cropmarks -@end iftex - -@finalout -@syncodeindex ky cp - -@c readline appendices use @vindex, @findex and @ftable, -@c annotate.texi and gdbmi use @findex. -@syncodeindex vr cp -@syncodeindex fn cp - -@c !!set GDB manual's edition---not the same as GDB version! -@c This is updated by GNU Press. -@set EDITION Ninth - -@c !!set GDB edit command default editor -@set EDITOR /bin/ex - -@c THIS MANUAL REQUIRES TEXINFO 4.0 OR LATER. - -@c This is a dir.info fragment to support semi-automated addition of -@c manuals to an info tree. -@dircategory Software development -@direntry -* Gdb: (gdb). The GNU debugger. -@end direntry - -@ifinfo -This file documents the @sc{gnu} debugger @value{GDBN}. - - -This is the @value{EDITION} Edition, of @cite{Debugging with -@value{GDBN}: the @sc{gnu} Source-Level Debugger} for @value{GDBN} -Version @value{GDBVN}. - -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.'' -@end ifinfo - -@titlepage -@title Debugging with @value{GDBN} -@subtitle The @sc{gnu} Source-Level Debugger -@sp 1 -@subtitle @value{EDITION} Edition, for @value{GDBN} version @value{GDBVN} -@author Richard Stallman, Roland Pesch, Stan Shebs, et al. -@page -@tex -{\parskip=0pt -\hfill (Send bugs and comments on @value{GDBN} to bug-gdb\@gnu.org.)\par -\hfill {\it Debugging with @value{GDBN}}\par -\hfill \TeX{}info \texinfoversion\par -} -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, -1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. -@sp 2 -Published by the Free Software Foundation @* -59 Temple Place - Suite 330, @* -Boston, MA 02111-1307 USA @* -ISBN 1-882114-77-9 @* - -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.'' -@end titlepage -@page - -@ifnottex -@node Top, Summary, (dir), (dir) - -@top Debugging with @value{GDBN} - -This file describes @value{GDBN}, the @sc{gnu} symbolic debugger. - -This is the @value{EDITION} Edition, for @value{GDBN} Version -@value{GDBVN}. - -Copyright (C) 1988-2004 Free Software Foundation, Inc. - -@menu -* Summary:: Summary of @value{GDBN} -* Sample Session:: A sample @value{GDBN} session - -* Invocation:: Getting in and out of @value{GDBN} -* Commands:: @value{GDBN} commands -* Running:: Running programs under @value{GDBN} -* 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 @value{GDBN} with different languages - -* Symbols:: Examining the symbol table -* Altering:: Altering execution -* GDB Files:: @value{GDBN} files -* Targets:: Specifying a debugging target -* Remote Debugging:: Debugging remote programs -* Configurations:: Configuration-specific information -* Controlling GDB:: Controlling @value{GDBN} -* Sequences:: Canned sequences of commands -* TUI:: @value{GDBN} Text User Interface -* Interpreters:: Command Interpreters -* Emacs:: Using @value{GDBN} under @sc{gnu} Emacs -* Annotations:: @value{GDBN}'s annotation interface. -* GDB/MI:: @value{GDBN}'s Machine Interface. - -* GDB Bugs:: Reporting bugs in @value{GDBN} -* Formatting Documentation:: How to format and print @value{GDBN} 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 -@end menu - -@end ifnottex - -@contents - -@node Summary -@unnumbered Summary of @value{GDBN} - -The purpose of a debugger such as @value{GDBN} 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. - -@value{GDBN} can do four main kinds of things (plus other things in support of -these) to help you catch bugs in the act: - -@itemize @bullet -@item -Start your program, specifying anything that might affect its behavior. - -@item -Make your program stop on specified conditions. - -@item -Examine what has happened, when your program has stopped. - -@item -Change things in your program, so you can experiment with correcting the -effects of one bug and go on to learn about another. -@end itemize - -You can use @value{GDBN} to debug programs written in C and C@t{++}. -For more information, see @ref{Support,,Supported languages}. -For more information, see @ref{C,,C and C++}. - -@cindex Modula-2 -Support for Modula-2 is partial. For information on Modula-2, see -@ref{Modula-2,,Modula-2}. - -@cindex Pascal -Debugging Pascal programs which use sets, subranges, file variables, or -nested functions does not currently work. @value{GDBN} does not support -entering expressions, printing values, or similar features using Pascal -syntax. - -@cindex Fortran -@value{GDBN} can be used to debug programs written in Fortran, although -it may be necessary to refer to some variables with a trailing -underscore. - -@value{GDBN} 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 -@end menu - -@node Free Software -@unnumberedsec Free software - -@value{GDBN} is @dfn{free software}, protected by the @sc{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. - -@unnumberedsec 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 @emph{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 @email{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 -@url{http://www.fsf.org/doc/other-free-books.html}. - -@node Contributors -@unnumberedsec Contributors to @value{GDBN} - -Richard Stallman was the original author of @value{GDBN}, and of many -other @sc{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 @file{ChangeLog} in the @value{GDBN} distribution approximates a -blow-by-blow account. - -Changes much prior to version 2.0 are lost in the mists of time. - -@quotation -@emph{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! -@end quotation - -So that they may not regard their many labors as thankless, we -particularly thank those who shepherded @value{GDBN} 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 @sc{gnu} C@t{++} support -in @value{GDBN}, with significant additional contributions from Per -Bothner and Daniel Berlin. James Clark wrote the @sc{gnu} C@t{++} -demangler. Early work on C@t{++} was by Peter TerMaat (who also did -much general update work leading to release 3.0). - -@value{GDBN} 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 @sc{gnu}/Linux support. - -Rich Schaefer and Peter Schauer helped with support of SunOS shared -libraries. - -Jay Fenlason and Roland McGrath ensured that @value{GDBN} 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@t{++} 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 @value{GDBN}. - -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@t{++} -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 @value{GDBN} to MS-DOS, for the DJGPP project. -Robert Hoehne made significant contributions to the DJGPP port. - -Cygnus Solutions has sponsored @value{GDBN} maintenance and much of its -development since 1991. Cygnus engineers who have worked on @value{GDBN} -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. - -@node Sample Session -@chapter A Sample @value{GDBN} Session - -You can use this manual at your leisure to read all about @value{GDBN}. -However, a handful of commands are enough to get started using the -debugger. This chapter illustrates those commands. - -@iftex -In this sample session, we emphasize user input like this: @b{input}, -to make it easier to pick out from the surrounding output. -@end iftex - -@c FIXME: this example may not be appropriate for some configs, where -@c FIXME...primary interest is in remote use. - -One of the preliminary versions of @sc{gnu} @code{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 @code{m4} -session, we define a macro @code{foo} which expands to @code{0000}; we -then use the @code{m4} built-in @code{defn} to define @code{bar} as the -same thing. However, when we change the open quote string to -@code{<QUOTE>} and the close quote string to @code{<UNQUOTE>}, the same -procedure fails to define a new synonym @code{baz}: - -@smallexample -$ @b{cd gnu/m4} -$ @b{./m4} -@b{define(foo,0000)} - -@b{foo} -0000 -@b{define(bar,defn(`foo'))} - -@b{bar} -0000 -@b{changequote(<QUOTE>,<UNQUOTE>)} - -@b{define(baz,defn(<QUOTE>foo<UNQUOTE>))} -@b{baz} -@b{C-d} -m4: End of input: 0: fatal error: EOF in string -@end smallexample - -@noindent -Let us use @value{GDBN} to try to see what is going on. - -@smallexample -$ @b{@value{GDBP} m4} -@c FIXME: this falsifies the exact text played out, to permit smallbook -@c FIXME... format to come out better. -@value{GDBN} 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 @value{GDBN}; type "show warranty" - for details. - -@value{GDBN} @value{GDBVN}, Copyright 1999 Free Software Foundation, Inc... -(@value{GDBP}) -@end smallexample - -@noindent -@value{GDBN} 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 @value{GDBN} to use a narrower display width than usual, so -that examples fit in this manual. - -@smallexample -(@value{GDBP}) @b{set width 70} -@end smallexample - -@noindent -We need to see how the @code{m4} built-in @code{changequote} works. -Having looked at the source, we know the relevant subroutine is -@code{m4_changequote}, so we set a breakpoint there with the @value{GDBN} -@code{break} command. - -@smallexample -(@value{GDBP}) @b{break m4_changequote} -Breakpoint 1 at 0x62f4: file builtin.c, line 879. -@end smallexample - -@noindent -Using the @code{run} command, we start @code{m4} running under @value{GDBN} -control; as long as control does not reach the @code{m4_changequote} -subroutine, the program runs as usual: - -@smallexample -(@value{GDBP}) @b{run} -Starting program: /work/Editorial/gdb/gnu/m4/m4 -@b{define(foo,0000)} - -@b{foo} -0000 -@end smallexample - -@noindent -To trigger the breakpoint, we call @code{changequote}. @value{GDBN} -suspends execution of @code{m4}, displaying information about the -context where it stops. - -@smallexample -@b{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)) -@end smallexample - -@noindent -Now we use the command @code{n} (@code{next}) to advance execution to -the next line of the current function. - -@smallexample -(@value{GDBP}) @b{n} -882 set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\ - : nil, -@end smallexample - -@noindent -@code{set_quotes} looks like a promising subroutine. We can go into it -by using the command @code{s} (@code{step}) instead of @code{next}. -@code{step} goes to the next line to be executed in @emph{any} -subroutine, so it steps into @code{set_quotes}. - -@smallexample -(@value{GDBP}) @b{s} -set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>") - at input.c:530 -530 if (lquote != def_lquote) -@end smallexample - -@noindent -The display that shows the subroutine where @code{m4} is now -suspended (and its arguments) is called a stack frame display. It -shows a summary of the stack. We can use the @code{backtrace} -command (which can also be spelled @code{bt}), to see where we are -in the stack as a whole: the @code{backtrace} command displays a -stack frame for each active subroutine. - -@smallexample -(@value{GDBP}) @b{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 -@end smallexample - -@noindent -We step through a few more lines to see what happens. The first two -times, we can use @samp{s}; the next two times we use @code{n} to avoid -falling into the @code{xstrdup} subroutine. - -@smallexample -(@value{GDBP}) @b{s} -0x3b5c 532 if (rquote != def_rquote) -(@value{GDBP}) @b{s} -0x3b80 535 lquote = (lq == nil || *lq == '\0') ? \ -def_lquote : xstrdup(lq); -(@value{GDBP}) @b{n} -536 rquote = (rq == nil || *rq == '\0') ? def_rquote\ - : xstrdup(rq); -(@value{GDBP}) @b{n} -538 len_lquote = strlen(rquote); -@end smallexample - -@noindent -The last line displayed looks a little odd; we can examine the variables -@code{lquote} and @code{rquote} to see if they are in fact the new left -and right quotes we specified. We use the command @code{p} -(@code{print}) to see their values. - -@smallexample -(@value{GDBP}) @b{p lquote} -$1 = 0x35d40 "<QUOTE>" -(@value{GDBP}) @b{p rquote} -$2 = 0x35d50 "<UNQUOTE>" -@end smallexample - -@noindent -@code{lquote} and @code{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 @code{l} (@code{list}) command. - -@smallexample -(@value{GDBP}) @b{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 -@end smallexample - -@noindent -Let us step past the two lines that set @code{len_lquote} and -@code{len_rquote}, and then examine the values of those variables. - -@smallexample -(@value{GDBP}) @b{n} -539 len_rquote = strlen(lquote); -(@value{GDBP}) @b{n} -540 @} -(@value{GDBP}) @b{p len_lquote} -$3 = 9 -(@value{GDBP}) @b{p len_rquote} -$4 = 7 -@end smallexample - -@noindent -That certainly looks wrong, assuming @code{len_lquote} and -@code{len_rquote} are meant to be the lengths of @code{lquote} and -@code{rquote} respectively. We can set them to better values using -the @code{p} command, since it can print the value of -any expression---and that expression can include subroutine calls and -assignments. - -@smallexample -(@value{GDBP}) @b{p len_lquote=strlen(lquote)} -$5 = 7 -(@value{GDBP}) @b{p len_rquote=strlen(rquote)} -$6 = 9 -@end smallexample - -@noindent -Is that enough to fix the problem of using the new quotes with the -@code{m4} built-in @code{defn}? We can allow @code{m4} to continue -executing with the @code{c} (@code{continue}) command, and then try the -example that caused trouble initially: - -@smallexample -(@value{GDBP}) @b{c} -Continuing. - -@b{define(baz,defn(<QUOTE>foo<UNQUOTE>))} - -baz -0000 -@end smallexample - -@noindent -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 @code{m4} exit by giving it an EOF as input: - -@smallexample -@b{C-d} -Program exited normally. -@end smallexample - -@noindent -The message @samp{Program exited normally.} is from @value{GDBN}; it -indicates @code{m4} has finished executing. We can end our @value{GDBN} -session with the @value{GDBN} @code{quit} command. - -@smallexample -(@value{GDBP}) @b{quit} -@end smallexample - -@node Invocation -@chapter Getting In and Out of @value{GDBN} - -This chapter discusses how to start @value{GDBN}, and how to get out of it. -The essentials are: -@itemize @bullet -@item -type @samp{@value{GDBP}} to start @value{GDBN}. -@item -type @kbd{quit} or @kbd{C-d} to exit. -@end itemize - -@menu -* Invoking GDB:: How to start @value{GDBN} -* Quitting GDB:: How to quit @value{GDBN} -* Shell Commands:: How to use shell commands inside @value{GDBN} -* Logging output:: How to log @value{GDBN}'s output to a file -@end menu - -@node Invoking GDB -@section Invoking @value{GDBN} - -Invoke @value{GDBN} by running the program @code{@value{GDBP}}. Once started, -@value{GDBN} reads commands from the terminal until you tell it to exit. - -You can also run @code{@value{GDBP}} 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 @value{GDBN} is with one argument, -specifying an executable program: - -@smallexample -@value{GDBP} @var{program} -@end smallexample - -@noindent -You can also start with both an executable program and a core file -specified: - -@smallexample -@value{GDBP} @var{program} @var{core} -@end smallexample - -You can, instead, specify a process ID as a second argument, if you want -to debug a running process: - -@smallexample -@value{GDBP} @var{program} 1234 -@end smallexample - -@noindent -would attach @value{GDBN} to process @code{1234} (unless you also have a file -named @file{1234}; @value{GDBN} does check for a core file first). - -Taking advantage of the second command-line argument requires a fairly -complete operating system; when you use @value{GDBN} 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. @value{GDBN} -will warn you if it is unable to attach or to read core dumps. - -You can optionally have @code{@value{GDBP}} pass any arguments after the -executable file to the inferior using @code{--args}. This option stops -option processing. -@smallexample -gdb --args gcc -O2 -c foo.c -@end smallexample -This will cause @code{@value{GDBP}} to debug @code{gcc}, and to set -@code{gcc}'s command-line arguments (@pxref{Arguments}) to @samp{-O2 -c foo.c}. - -You can run @code{@value{GDBP}} without printing the front material, which describes -@value{GDBN}'s non-warranty, by specifying @code{-silent}: - -@smallexample -@value{GDBP} -silent -@end smallexample - -@noindent -You can further control how @value{GDBN} starts up by using command-line -options. @value{GDBN} itself can remind you of the options available. - -@noindent -Type - -@smallexample -@value{GDBP} -help -@end smallexample - -@noindent -to display all available options and briefly describe their use -(@samp{@value{GDBP} -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 -@samp{-x} option is used. - - -@menu -* File Options:: Choosing files -* Mode Options:: Choosing modes -@end menu - -@node File Options -@subsection Choosing files - -When @value{GDBN} 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 @samp{-se} and -@samp{-c} (or @samp{-p} options respectively. (@value{GDBN} reads the -first argument that does not have an associated option flag as -equivalent to the @samp{-se} option followed by that argument; and the -second argument that does not have an associated option flag, if any, as -equivalent to the @samp{-c}/@samp{-p} option followed by that argument.) -If the second argument begins with a decimal digit, @value{GDBN} 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 @value{GDBN} from treating it as a pid by -prefixing it with @file{./}, eg. @file{./12345}. - -If @value{GDBN} 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. @value{GDBN} 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 @samp{--} rather -than @samp{-}, though we illustrate the more usual convention.) - -@c NOTE: the @cindex entries here use double dashes ON PURPOSE. This -@c way, both those who look for -foo and --foo in the index, will find -@c it. - -@table @code -@item -symbols @var{file} -@itemx -s @var{file} -@cindex @code{--symbols} -@cindex @code{-s} -Read symbol table from file @var{file}. - -@item -exec @var{file} -@itemx -e @var{file} -@cindex @code{--exec} -@cindex @code{-e} -Use file @var{file} as the executable file to execute when appropriate, -and for examining pure data in conjunction with a core dump. - -@item -se @var{file} -@cindex @code{--se} -Read symbol table from file @var{file} and use it as the executable -file. - -@item -core @var{file} -@itemx -c @var{file} -@cindex @code{--core} -@cindex @code{-c} -Use file @var{file} as a core dump to examine. - -@item -c @var{number} -@item -pid @var{number} -@itemx -p @var{number} -@cindex @code{--pid} -@cindex @code{-p} -Connect to process ID @var{number}, as with the @code{attach} command. -If there is no such process, @value{GDBN} will attempt to open a core -file named @var{number}. - -@item -command @var{file} -@itemx -x @var{file} -@cindex @code{--command} -@cindex @code{-x} -Execute @value{GDBN} commands from file @var{file}. @xref{Command -Files,, Command files}. - -@item -directory @var{directory} -@itemx -d @var{directory} -@cindex @code{--directory} -@cindex @code{-d} -Add @var{directory} to the path to search for source files. - -@item -m -@itemx -mapped -@cindex @code{--mapped} -@cindex @code{-m} -@emph{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 @code{mmap} -system call, you can use this option -to have @value{GDBN} write the symbols from your -program into a reusable file in the current directory. If the program you are debugging is -called @file{/tmp/fred}, the mapped symbol file is @file{/tmp/fred.syms}. -Future @value{GDBN} 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 @file{.syms} file is specific to the host machine where @value{GDBN} -is run. It holds an exact image of the internal @value{GDBN} symbol -table. It cannot be shared across multiple host platforms. - -@item -r -@itemx -readnow -@cindex @code{--readnow} -@cindex @code{-r} -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. - -@end table - -You typically combine the @code{-mapped} and @code{-readnow} options in -order to build a @file{.syms} file that contains complete symbol -information. (@xref{Files,,Commands to specify files}, for information -on @file{.syms} files.) A simple @value{GDBN} invocation to do nothing -but build a @file{.syms} file for future use is: - -@smallexample -gdb -batch -nx -mapped -readnow programname -@end smallexample - -@node Mode Options -@subsection Choosing modes - -You can run @value{GDBN} in various alternative modes---for example, in -batch mode or quiet mode. - -@table @code -@item -nx -@itemx -n -@cindex @code{--nx} -@cindex @code{-n} -Do not execute commands found in any initialization files. Normally, -@value{GDBN} executes the commands in these files after all the command -options and arguments have been processed. @xref{Command Files,,Command -files}. - -@item -quiet -@itemx -silent -@itemx -q -@cindex @code{--quiet} -@cindex @code{--silent} -@cindex @code{-q} -``Quiet''. Do not print the introductory and copyright messages. These -messages are also suppressed in batch mode. - -@item -batch -@cindex @code{--batch} -Run in batch mode. Exit with status @code{0} after processing all the -command files specified with @samp{-x} (and all commands from -initialization files, if not inhibited with @samp{-n}). Exit with -nonzero status if an error occurs in executing the @value{GDBN} commands -in the command files. - -Batch mode may be useful for running @value{GDBN} as a filter, for -example to download and run a program on another computer; in order to -make this more useful, the message - -@smallexample -Program exited normally. -@end smallexample - -@noindent -(which is ordinarily issued whenever a program running under -@value{GDBN} control terminates) is not issued when running in batch -mode. - -@item -nowindows -@itemx -nw -@cindex @code{--nowindows} -@cindex @code{-nw} -``No windows''. If @value{GDBN} comes with a graphical user interface -(GUI) built in, then this option tells @value{GDBN} to only use the command-line -interface. If no GUI is available, this option has no effect. - -@item -windows -@itemx -w -@cindex @code{--windows} -@cindex @code{-w} -If @value{GDBN} includes a GUI, then this option requires it to be -used if possible. - -@item -cd @var{directory} -@cindex @code{--cd} -Run @value{GDBN} using @var{directory} as its working directory, -instead of the current directory. - -@item -fullname -@itemx -f -@cindex @code{--fullname} -@cindex @code{-f} -@sc{gnu} Emacs sets this option when it runs @value{GDBN} as a -subprocess. It tells @value{GDBN} 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 @samp{\032} characters, followed by -the file name, line number and character position separated by colons, -and a newline. The Emacs-to-@value{GDBN} interface program uses the two -@samp{\032} characters as a signal to display the source code for the -frame. - -@item -epoch -@cindex @code{--epoch} -The Epoch Emacs-@value{GDBN} interface sets this option when it runs -@value{GDBN} as a subprocess. It tells @value{GDBN} to modify its print -routines so as to allow Epoch to display values of expressions in a -separate window. - -@item -annotate @var{level} -@cindex @code{--annotate} -This option sets the @dfn{annotation level} inside @value{GDBN}. Its -effect is identical to using @samp{set annotate @var{level}} -(@pxref{Annotations}). The annotation @var{level} controls how much -information @value{GDBN} 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 @value{GDBN} is run as a subprocess of -@sc{gnu} Emacs, level 3 is the maximum annotation suitable for programs -that control @value{GDBN}, and level 2 has been deprecated. - -The annotation mechanism has largely been superseeded by @sc{gdb/mi} -(@pxref{GDB/MI}). - -@item -async -@cindex @code{--async} -Use the asynchronous event loop for the command-line interface. -@value{GDBN} processes all events, such as user keyboard input, via a -special event loop. This allows @value{GDBN} to accept and process user -commands in parallel with the debugged process being -run@footnote{@value{GDBN} built with @sc{djgpp} tools for -MS-DOS/MS-Windows supports this mode of operation, but the event loop is -suspended when the debuggee runs.}, so you don't need to wait for -control to return to @value{GDBN} before you type the next command. -(@emph{Note:} as of version 5.1, the target side of the asynchronous -operation is not yet in place, so @samp{-async} does not work fully -yet.) -@c FIXME: when the target side of the event loop is done, the above NOTE -@c should be removed. - -When the standard input is connected to a terminal device, @value{GDBN} -uses the asynchronous event loop by default, unless disabled by the -@samp{-noasync} option. - -@item -noasync -@cindex @code{--noasync} -Disable the asynchronous event loop for the command-line interface. - -@item --args -@cindex @code{--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. - -@item -baud @var{bps} -@itemx -b @var{bps} -@cindex @code{--baud} -@cindex @code{-b} -Set the line speed (baud rate or bits per second) of any serial -interface used by @value{GDBN} for remote debugging. - -@item -tty @var{device} -@itemx -t @var{device} -@cindex @code{--tty} -@cindex @code{-t} -Run using @var{device} for your program's standard input and output. -@c FIXME: kingdon thinks there is more to -tty. Investigate. - -@c resolve the situation of these eventually -@item -tui -@cindex @code{--tui} -Activate the @dfn{Text User Interface} when starting. The Text User -Interface manages several text windows on the terminal, showing -source, assembly, registers and @value{GDBN} command outputs -(@pxref{TUI, ,@value{GDBN} Text User Interface}). Alternatively, the -Text User Interface can be enabled by invoking the program -@samp{gdbtui}. Do not use this option if you run @value{GDBN} from -Emacs (@pxref{Emacs, ,Using @value{GDBN} under @sc{gnu} Emacs}). - -@c @item -xdb -@c @cindex @code{--xdb} -@c Run in XDB compatibility mode, allowing the use of certain XDB commands. -@c For information, see the file @file{xdb_trans.html}, which is usually -@c installed in the directory @code{/opt/langtools/wdb/doc} on HP-UX -@c systems. - -@item -interpreter @var{interp} -@cindex @code{--interpreter} -Use the interpreter @var{interp} for interface with the controlling -program or device. This option is meant to be set by programs which -communicate with @value{GDBN} using it as a back end. -@xref{Interpreters, , Command Interpreters}. - -@samp{--interpreter=mi} (or @samp{--interpreter=mi2}) causes -@value{GDBN} to use the @dfn{@sc{gdb/mi} interface} (@pxref{GDB/MI, , -The @sc{gdb/mi} Interface}) included since @var{GDBN} version 6.0. The -previous @sc{gdb/mi} interface, included in @value{GDBN} version 5.3 and -selected with @samp{--interpreter=mi1}, is deprecated. Earlier -@sc{gdb/mi} interfaces are no longer supported. - -@item -write -@cindex @code{--write} -Open the executable and core files for both reading and writing. This -is equivalent to the @samp{set write on} command inside @value{GDBN} -(@pxref{Patching}). - -@item -statistics -@cindex @code{--statistics} -This option causes @value{GDBN} to print statistics about time and -memory usage after it completes each command and returns to the prompt. - -@item -version -@cindex @code{--version} -This option causes @value{GDBN} to print its version number and -no-warranty blurb, and exit. - -@end table - -@node Quitting GDB -@section Quitting @value{GDBN} -@cindex exiting @value{GDBN} -@cindex leaving @value{GDBN} - -@table @code -@kindex quit @r{[}@var{expression}@r{]} -@kindex q @r{(@code{quit})} -@item quit @r{[}@var{expression}@r{]} -@itemx q -To exit @value{GDBN}, use the @code{quit} command (abbreviated -@code{q}), or type an end-of-file character (usually @kbd{C-d}). If you -do not supply @var{expression}, @value{GDBN} will terminate normally; -otherwise it will terminate using the result of @var{expression} as the -error code. -@end table - -@cindex interrupt -An interrupt (often @kbd{C-c}) does not exit from @value{GDBN}, but rather -terminates the action of any @value{GDBN} command that is in progress and -returns to @value{GDBN} command level. It is safe to type the interrupt -character at any time because @value{GDBN} does not allow it to take effect -until a time when it is safe. - -If you have been using @value{GDBN} to control an attached process or -device, you can release it with the @code{detach} command -(@pxref{Attach, ,Debugging an already-running process}). - -@node Shell Commands -@section Shell commands - -If you need to execute occasional shell commands during your -debugging session, there is no need to leave or suspend @value{GDBN}; you can -just use the @code{shell} command. - -@table @code -@kindex shell -@cindex shell escape -@item shell @var{command string} -Invoke a standard shell to execute @var{command string}. -If it exists, the environment variable @code{SHELL} determines which -shell to run. Otherwise @value{GDBN} uses the default shell -(@file{/bin/sh} on Unix systems, @file{COMMAND.COM} on MS-DOS, etc.). -@end table - -The utility @code{make} is often needed in development environments. -You do not have to use the @code{shell} command for this purpose in -@value{GDBN}: - -@table @code -@kindex make -@cindex calling make -@item make @var{make-args} -Execute the @code{make} program with the specified -arguments. This is equivalent to @samp{shell make @var{make-args}}. -@end table - -@node Logging output -@section Logging output -@cindex logging @value{GDBN} output - -You may want to save the output of @value{GDBN} commands to a file. -There are several commands to control @value{GDBN}'s logging. - -@table @code -@kindex set logging -@item set logging on -Enable logging. -@item set logging off -Disable logging. -@item set logging file @var{file} -Change the name of the current logfile. The default logfile is @file{gdb.txt}. -@item set logging overwrite [on|off] -By default, @value{GDBN} will append to the logfile. Set @code{overwrite} if -you want @code{set logging on} to overwrite the logfile instead. -@item set logging redirect [on|off] -By default, @value{GDBN} output will go to both the terminal and the logfile. -Set @code{redirect} if you want output to go only to the log file. -@kindex show logging -@item show logging -Show the current values of the logging settings. -@end table - -@node Commands -@chapter @value{GDBN} Commands - -You can abbreviate a @value{GDBN} command to the first few letters of the command -name, if that abbreviation is unambiguous; and you can repeat certain -@value{GDBN} commands by typing just @key{RET}. You can also use the @key{TAB} -key to get @value{GDBN} 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 @value{GDBN} -* Completion:: Command completion -* Help:: How to ask @value{GDBN} for help -@end menu - -@node Command Syntax -@section Command syntax - -A @value{GDBN} 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 @code{step} accepts an argument which is the number of times to -step, as in @samp{step 5}. You can also use the @code{step} command -with no arguments. Some commands do not allow any arguments. - -@cindex abbreviation -@value{GDBN} 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, @code{s} is specially defined as -equivalent to @code{step} even though there are other commands whose -names start with @code{s}. You can test abbreviations by using them as -arguments to the @code{help} command. - -@cindex repeating commands -@kindex RET @r{(repeat last command)} -A blank line as input to @value{GDBN} (typing just @key{RET}) means to -repeat the previous command. Certain commands (for example, @code{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 @code{list} and @code{x} commands, when you repeat them with -@key{RET}, construct new arguments rather than repeating -exactly as typed. This permits easy scanning of source or memory. - -@value{GDBN} can also use @key{RET} in another way: to partition lengthy -output, in a way similar to the common utility @code{more} -(@pxref{Screen Size,,Screen size}). Since it is easy to press one -@key{RET} too many in this situation, @value{GDBN} disables command -repetition after any command that generates this sort of display. - -@kindex # @r{(a comment)} -@cindex comment -Any text from a @kbd{#} to the end of the line is a comment; it does -nothing. This is useful mainly in command files (@pxref{Command -Files,,Command files}). - -@cindex repeating command sequences -@kindex C-o @r{(operate-and-get-next)} -The @kbd{C-o} binding is useful for repeating a complex sequence of -commands. This command accepts the current line, like @kbd{RET}, and -then fetches the next line relative to the current line from the history -for editing. - -@node Completion -@section Command completion - -@cindex completion -@cindex word completion -@value{GDBN} 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 @value{GDBN} -commands, @value{GDBN} subcommands, and the names of symbols in your program. - -Press the @key{TAB} key whenever you want @value{GDBN} to fill out the rest -of a word. If there is only one possibility, @value{GDBN} fills in the -word, and waits for you to finish the command (or press @key{RET} to -enter it). For example, if you type - -@c FIXME "@key" does not distinguish its argument sufficiently to permit -@c complete accuracy in these examples; space introduced for clarity. -@c If texinfo enhancements make it unnecessary, it would be nice to -@c replace " @key" by "@key" in the following... -@smallexample -(@value{GDBP}) info bre @key{TAB} -@end smallexample - -@noindent -@value{GDBN} fills in the rest of the word @samp{breakpoints}, since that is -the only @code{info} subcommand beginning with @samp{bre}: - -@smallexample -(@value{GDBP}) info breakpoints -@end smallexample - -@noindent -You can either press @key{RET} at this point, to run the @code{info -breakpoints} command, or backspace and enter something else, if -@samp{breakpoints} does not look like the command you expected. (If you -were sure you wanted @code{info breakpoints} in the first place, you -might as well just type @key{RET} immediately after @samp{info bre}, -to exploit command abbreviations rather than command completion). - -If there is more than one possibility for the next word when you press -@key{TAB}, @value{GDBN} sounds a bell. You can either supply more -characters and try again, or just press @key{TAB} a second time; -@value{GDBN} displays all the possible completions for that word. For -example, you might want to set a breakpoint on a subroutine whose name -begins with @samp{make_}, but when you type @kbd{b make_@key{TAB}} @value{GDBN} -just sounds the bell. Typing @key{TAB} again displays all the -function names in your program that begin with those characters, for -example: - -@smallexample -(@value{GDBP}) b make_ @key{TAB} -@exdent @value{GDBN} sounds bell; press @key{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 -(@value{GDBP}) b make_ -@end smallexample - -@noindent -After displaying the available possibilities, @value{GDBN} copies your -partial input (@samp{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 @kbd{M-?} rather than pressing @key{TAB} twice. @kbd{M-?} -means @kbd{@key{META} ?}. You can type this either by holding down a -key designated as the @key{META} shift on your keyboard (if there is -one) while typing @kbd{?}, or as @key{ESC} followed by @kbd{?}. - -@cindex quotes in commands -@cindex completion of quoted strings -Sometimes the string you need, while logically a ``word'', may contain -parentheses or other characters that @value{GDBN} normally excludes from -its notion of a word. To permit word completion to work in this -situation, you may enclose words in @code{'} (single quote marks) in -@value{GDBN} commands. - -The most likely situation where you might need this is in typing the -name of a C@t{++} function. This is because C@t{++} 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 @code{name} -that takes an @code{int} parameter, @code{name(int)}, or the version -that takes a @code{float} parameter, @code{name(float)}. To use the -word-completion facilities in this situation, type a single quote -@code{'} at the beginning of the function name. This alerts -@value{GDBN} that it may need to consider more information than usual -when you press @key{TAB} or @kbd{M-?} to request word completion: - -@smallexample -(@value{GDBP}) b 'bubble( @kbd{M-?} -bubble(double,double) bubble(int,int) -(@value{GDBP}) b 'bubble( -@end smallexample - -In some cases, @value{GDBN} can tell that completing a name requires using -quotes. When this happens, @value{GDBN} inserts the quote for you (while -completing as much as it can) if you do not type the quote in the first -place: - -@smallexample -(@value{GDBP}) b bub @key{TAB} -@exdent @value{GDBN} alters your input line to the following, and rings a bell: -(@value{GDBP}) b 'bubble( -@end smallexample - -@noindent -In general, @value{GDBN} 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 @ref{C plus plus -expressions, ,C@t{++} expressions}. You can use the command @code{set -overload-resolution off} to disable overload resolution; -see @ref{Debugging C plus plus, ,@value{GDBN} features for C@t{++}}. - - -@node Help -@section Getting help -@cindex online documentation -@kindex help - -You can always ask @value{GDBN} itself for information on its commands, -using the command @code{help}. - -@table @code -@kindex h @r{(@code{help})} -@item help -@itemx h -You can use @code{help} (abbreviated @code{h}) with no arguments to -display a short list of named classes of commands: - -@smallexample -(@value{GDBP}) 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. -(@value{GDBP}) -@end smallexample -@c the above line break eliminates huge line overfull... - -@item help @var{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 @code{status}: - -@smallexample -(@value{GDBP}) help status -Status inquiries. - -List of commands: - -@c Line break in "show" line falsifies real output, but needed -@c to fit in smallbook page size. -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. -(@value{GDBP}) -@end smallexample - -@item help @var{command} -With a command name as @code{help} argument, @value{GDBN} displays a -short paragraph on how to use that command. - -@kindex apropos -@item apropos @var{args} -The @code{apropos @var{args}} command searches through all of the @value{GDBN} -commands, and their documentation, for the regular expression specified in -@var{args}. It prints out all matches found. For example: - -@smallexample -apropos reload -@end smallexample - -@noindent -results in: - -@smallexample -@c @group -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 -@c @end group -@end smallexample - -@kindex complete -@item complete @var{args} -The @code{complete @var{args}} command lists all the possible completions -for the beginning of a command. Use @var{args} to specify the beginning of the -command you want completed. For example: - -@smallexample -complete i -@end smallexample - -@noindent results in: - -@smallexample -@group -if -ignore -info -inspect -@end group -@end smallexample - -@noindent This is intended for use by @sc{gnu} Emacs. -@end table - -In addition to @code{help}, you can use the @value{GDBN} commands @code{info} -and @code{show} to inquire about the state of your program, or the state -of @value{GDBN} itself. Each command supports many topics of inquiry; this -manual introduces each of them in the appropriate context. The listings -under @code{info} and under @code{show} in the Index point to -all the sub-commands. @xref{Index}. - -@c @group -@table @code -@kindex info -@kindex i @r{(@code{info})} -@item info -This command (abbreviated @code{i}) is for describing the state of your -program. For example, you can list the arguments given to your program -with @code{info args}, list the registers currently in use with @code{info -registers}, or list the breakpoints you have set with @code{info breakpoints}. -You can get a complete list of the @code{info} sub-commands with -@w{@code{help info}}. - -@kindex set -@item set -You can assign the result of an expression to an environment variable with -@code{set}. For example, you can set the @value{GDBN} prompt to a $-sign with -@code{set prompt $}. - -@kindex show -@item show -In contrast to @code{info}, @code{show} is for describing the state of -@value{GDBN} itself. -You can change most of the things you can @code{show}, by using the -related command @code{set}; for example, you can control what number -system is used for displays with @code{set radix}, or simply inquire -which is currently in use with @code{show radix}. - -@kindex info set -To display all the settable parameters and their current -values, you can use @code{show} with no arguments; you may also use -@code{info set}. Both commands produce the same display. -@c FIXME: "info set" violates the rule that "info" is for state of -@c FIXME...program. Ck w/ GNU: "info set" to be called something else, -@c FIXME...or change desc of rule---eg "state of prog and debugging session"? -@end table -@c @end group - -Here are three miscellaneous @code{show} subcommands, all of which are -exceptional in lacking corresponding @code{set} commands: - -@table @code -@kindex show version -@cindex version number -@item show version -Show what version of @value{GDBN} is running. You should include this -information in @value{GDBN} bug-reports. If multiple versions of -@value{GDBN} are in use at your site, you may need to determine which -version of @value{GDBN} you are running; as @value{GDBN} evolves, new -commands are introduced, and old ones may wither away. Also, many -system vendors ship variant versions of @value{GDBN}, and there are -variant versions of @value{GDBN} in @sc{gnu}/Linux distributions as well. -The version number is the same as the one announced when you start -@value{GDBN}. - -@kindex show copying -@item show copying -Display information about permission for copying @value{GDBN}. - -@kindex show warranty -@item show warranty -Display the @sc{gnu} ``NO WARRANTY'' statement, or a warranty, -if your version of @value{GDBN} comes with one. - -@end table - -@node Running -@chapter Running Programs Under @value{GDBN} - -When you run a program under @value{GDBN}, you must first generate -debugging information when you compile it. - -You may start @value{GDBN} 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 -@end menu - -@node Compilation -@section 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 @samp{-g} option when you run -the compiler. - -Most compilers do not include information about preprocessor macros in -the debugging information if you specify the @option{-g} flag alone, -because this information is rather large. Version 3.1 of @value{NGCC}, -the @sc{gnu} C compiler, provides macro information if you specify the -options @option{-gdwarf-2} and @option{-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 -@option{-g} alone. - -Many C compilers are unable to handle the @samp{-g} and @samp{-O} -options together. Using those compilers, you cannot generate optimized -executables containing debugging information. - -@value{NGCC}, the @sc{gnu} C compiler, supports @samp{-g} with or -without @samp{-O}, making it possible to debug optimized code. We -recommend that you @emph{always} use @samp{-g} whenever you compile a -program. You may think your program is correct, but there is no sense -in pushing your luck. - -@cindex optimized code, debugging -@cindex debugging optimized code -When you debug a program compiled with @samp{-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, @value{GDBN} never sees that -variable---because the compiler optimizes it out of existence. - -Some things do not work as well with @samp{-g -O} as with just -@samp{-g}, particularly on machines with instruction scheduling. If in -doubt, recompile with @samp{-g} alone, and if this fixes the problem, -please report it to us as a bug (including a test case!). - -Older versions of the @sc{gnu} C compiler permitted a variant option -@w{@samp{-gg}} for debugging information. @value{GDBN} no longer supports this -format; if your @sc{gnu} C compiler has this option, do not use it. - -@need 2000 -@node Starting -@section Starting your program -@cindex starting -@cindex running - -@table @code -@kindex run -@kindex r @r{(@code{run})} -@item run -@itemx r -Use the @code{run} command to start your program under @value{GDBN}. -You must first specify the program name (except on VxWorks) with an -argument to @value{GDBN} (@pxref{Invocation, ,Getting In and Out of -@value{GDBN}}), or by using the @code{file} or @code{exec-file} command -(@pxref{Files, ,Commands to specify files}). - -@end table - -If you are running your program in an execution environment that -supports processes, @code{run} creates an inferior process and makes -that process run your program. (In environments without processes, -@code{run} jumps to the start of your program.) - -The execution of a program is affected by certain information it -receives from its superior. @value{GDBN} provides ways to specify this -information, which you must do @emph{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: - -@table @asis -@item The @emph{arguments.} -Specify the arguments to give your program as the arguments of the -@code{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 -@code{SHELL} environment variable. -@xref{Arguments, ,Your program's arguments}. - -@item The @emph{environment.} -Your program normally inherits its environment from @value{GDBN}, but you can -use the @value{GDBN} commands @code{set environment} and @code{unset -environment} to change parts of the environment that affect -your program. @xref{Environment, ,Your program's environment}. - -@item The @emph{working directory.} -Your program inherits its working directory from @value{GDBN}. You can set -the @value{GDBN} working directory with the @code{cd} command in @value{GDBN}. -@xref{Working Directory, ,Your program's working directory}. - -@item The @emph{standard input and output.} -Your program normally uses the same device for standard input and -standard output as @value{GDBN} is using. You can redirect input and output -in the @code{run} command line, or you can use the @code{tty} command to -set a different device for your program. -@xref{Input/Output, ,Your program's input and output}. - -@cindex pipes -@emph{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, @value{GDBN} is likely to wind up debugging the -wrong program. -@end table - -When you issue the @code{run} command, your program begins to execute -immediately. @xref{Stopping, ,Stopping and continuing}, 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 @code{print} -or @code{call} commands. @xref{Data, ,Examining Data}. - -If the modification time of your symbol file has changed since the last -time @value{GDBN} read its symbols, @value{GDBN} discards its symbol -table, and reads it again. When it does this, @value{GDBN} tries to retain -your current breakpoints. - -@node Arguments -@section Your program's arguments - -@cindex arguments (to your program) -The arguments to your program can be specified by the arguments of the -@code{run} command. -They are passed to a shell, which expands wildcard characters and -performs redirection of I/O, and thence to your program. Your -@code{SHELL} environment variable (if it exists) specifies what shell -@value{GDBN} uses. If you do not define @code{SHELL}, @value{GDBN} uses -the default shell (@file{/bin/sh} on Unix). - -On non-Unix systems, the program is usually invoked directly by -@value{GDBN}, 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. - -@code{run} with no arguments uses the same arguments used by the previous -@code{run}, or those set by the @code{set args} command. - -@table @code -@kindex set args -@item set args -Specify the arguments to be used the next time your program is run. If -@code{set args} has no arguments, @code{run} executes your program -with no arguments. Once you have run your program with arguments, -using @code{set args} before the next @code{run} is the only way to run -it again without arguments. - -@kindex show args -@item show args -Show the arguments to give your program when it is started. -@end table - -@node Environment -@section Your program's environment - -@cindex environment (of your program) -The @dfn{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 @value{GDBN} over again. - -@table @code -@kindex path -@item path @var{directory} -Add @var{directory} to the front of the @code{PATH} environment variable -(the search path for executables) that will be passed to your program. -The value of @code{PATH} used by @value{GDBN} does not change. -You may specify several directory names, separated by whitespace or by a -system-dependent separator character (@samp{:} on Unix, @samp{;} on -MS-DOS and MS-Windows). If @var{directory} is already in the path, it -is moved to the front, so it is searched sooner. - -You can use the string @samp{$cwd} to refer to whatever is the current -working directory at the time @value{GDBN} searches the path. If you -use @samp{.} instead, it refers to the directory where you executed the -@code{path} command. @value{GDBN} replaces @samp{.} in the -@var{directory} argument (with the current path) before adding -@var{directory} to the search path. -@c 'path' is explicitly nonrepeatable, but RMS points out it is silly to -@c document that, since repeating it would be a no-op. - -@kindex show paths -@item show paths -Display the list of search paths for executables (the @code{PATH} -environment variable). - -@kindex show environment -@item show environment @r{[}@var{varname}@r{]} -Print the value of environment variable @var{varname} to be given to -your program when it starts. If you do not supply @var{varname}, -print the names and values of all environment variables to be given to -your program. You can abbreviate @code{environment} as @code{env}. - -@kindex set environment -@item set environment @var{varname} @r{[}=@var{value}@r{]} -Set environment variable @var{varname} to @var{value}. The value -changes for your program only, not for @value{GDBN} itself. @var{value} may -be any string; the values of environment variables are just strings, and -any interpretation is supplied by your program itself. The @var{value} -parameter is optional; if it is eliminated, the variable is set to a -null value. -@c "any string" here does not include leading, trailing -@c blanks. Gnu asks: does anyone care? - -For example, this command: - -@smallexample -set env USER = foo -@end smallexample - -@noindent -tells the debugged program, when subsequently run, that its user is named -@samp{foo}. (The spaces around @samp{=} are used for clarity here; they -are not actually required.) - -@kindex unset environment -@item unset environment @var{varname} -Remove variable @var{varname} from the environment to be passed to your -program. This is different from @samp{set env @var{varname} =}; -@code{unset environment} removes the variable from the environment, -rather than assigning it an empty value. -@end table - -@emph{Warning:} On Unix systems, @value{GDBN} runs your program using -the shell indicated -by your @code{SHELL} environment variable if it exists (or -@code{/bin/sh} if not). If your @code{SHELL} variable names a shell -that runs an initialization file---such as @file{.cshrc} for C-shell, or -@file{.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 @file{.login} or -@file{.profile}. - -@node Working Directory -@section Your program's working directory - -@cindex working directory (of your program) -Each time you start your program with @code{run}, it inherits its -working directory from the current working directory of @value{GDBN}. -The @value{GDBN} working directory is initially whatever it inherited -from its parent process (typically the shell), but you can specify a new -working directory in @value{GDBN} with the @code{cd} command. - -The @value{GDBN} working directory also serves as a default for the commands -that specify files for @value{GDBN} to operate on. @xref{Files, ,Commands to -specify files}. - -@table @code -@kindex cd -@item cd @var{directory} -Set the @value{GDBN} working directory to @var{directory}. - -@kindex pwd -@item pwd -Print the @value{GDBN} working directory. -@end table - -@node Input/Output -@section Your program's input and output - -@cindex redirection -@cindex i/o -@cindex terminal -By default, the program you run under @value{GDBN} does input and output to -the same terminal that @value{GDBN} uses. @value{GDBN} 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. - -@table @code -@kindex info terminal -@item info terminal -Displays information recorded by @value{GDBN} about the terminal modes your -program is using. -@end table - -You can redirect your program's input and/or output using shell -redirection with the @code{run} command. For example, - -@smallexample -run > outfile -@end smallexample - -@noindent -starts your program, diverting its output to the file @file{outfile}. - -@kindex tty -@cindex controlling terminal -Another way to specify where your program should do input and output is -with the @code{tty} command. This command accepts a file name as -argument, and causes this file to be the default for future @code{run} -commands. It also resets the controlling terminal for the child -process, for future @code{run} commands. For example, - -@smallexample -tty /dev/ttyb -@end smallexample - -@noindent -directs that processes started with subsequent @code{run} commands -default to do input and output on the terminal @file{/dev/ttyb} and have -that as their controlling terminal. - -An explicit redirection in @code{run} overrides the @code{tty} command's -effect on the input/output device, but not its effect on the controlling -terminal. - -When you use the @code{tty} command or redirect input in the @code{run} -command, only the input @emph{for your program} is affected. The input -for @value{GDBN} still comes from your terminal. - -@node Attach -@section Debugging an already-running process -@kindex attach -@cindex attach - -@table @code -@item attach @var{process-id} -This command attaches to a running process---one that was started -outside @value{GDBN}. (@code{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 @code{ps} utility, -or with the @samp{jobs -l} shell command. - -@code{attach} does not repeat if you press @key{RET} a second time after -executing the command. -@end table - -To use @code{attach}, your program must be running in an environment -which supports processes; for example, @code{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 @code{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 -(@pxref{Source Path, ,Specifying source directories}). You can also use -the @code{file} command to load the program. @xref{Files, ,Commands to -Specify Files}. - -The first thing @value{GDBN} does after arranging to debug the specified -process is to stop it. You can examine and modify an attached process -with all the @value{GDBN} commands that are ordinarily available when -you start processes with @code{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 @code{continue} command after -attaching @value{GDBN} to the process. - -@table @code -@kindex detach -@item detach -When you have finished debugging the attached process, you can use the -@code{detach} command to release it from @value{GDBN} control. Detaching -the process continues its execution. After the @code{detach} command, -that process and @value{GDBN} become completely independent once more, and you -are ready to @code{attach} another process or start one with @code{run}. -@code{detach} does not repeat if you press @key{RET} again after -executing the command. -@end table - -If you exit @value{GDBN} or use the @code{run} command while you have an -attached process, you kill that process. By default, @value{GDBN} 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 @code{set -confirm} command (@pxref{Messages/Warnings, ,Optional warnings and -messages}). - -@node Kill Process -@section Killing the child process - -@table @code -@kindex kill -@item kill -Kill the child process in which your program is running under @value{GDBN}. -@end table - -This command is useful if you wish to debug a core dump instead of a -running process. @value{GDBN} ignores any core dump file while your program -is running. - -On some operating systems, a program cannot be executed outside @value{GDBN} -while you have breakpoints set on it inside @value{GDBN}. You can use the -@code{kill} command in this situation to permit running your program -outside the debugger. - -The @code{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 @code{run}, @value{GDBN} notices that the file has changed, and -reads the symbol table again (while trying to preserve your current -breakpoint settings). - -@node Threads -@section Debugging programs with multiple threads - -@cindex threads of execution -@cindex multiple threads -@cindex switching threads -In some operating systems, such as HP-UX and Solaris, a single program -may have more than one @dfn{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. - -@value{GDBN} provides these facilities for debugging multi-thread -programs: - -@itemize @bullet -@item automatic notification of new threads -@item @samp{thread @var{threadno}}, a command to switch among threads -@item @samp{info threads}, a command to inquire about existing threads -@item @samp{thread apply [@var{threadno}] [@var{all}] @var{args}}, -a command to apply a command to a list of threads -@item thread-specific breakpoints -@end itemize - -@quotation -@emph{Warning:} These facilities are not yet available on every -@value{GDBN} configuration where the operating system supports threads. -If your @value{GDBN} does not support threads, these commands have no -effect. For example, a system without thread support shows no output -from @samp{info threads}, and always rejects the @code{thread} command, -like this: - -@smallexample -(@value{GDBP}) info threads -(@value{GDBP}) thread 1 -Thread ID 1 not known. Use the "info threads" command to -see the IDs of currently known threads. -@end smallexample -@c FIXME to implementors: how hard would it be to say "sorry, this GDB -@c doesn't support threads"? -@end quotation - -@cindex focus of debugging -@cindex current thread -The @value{GDBN} thread debugging facility allows you to observe all -threads while your program runs---but whenever @value{GDBN} takes -control, one thread in particular is always the focus of debugging. -This thread is called the @dfn{current thread}. Debugging commands show -program information from the perspective of the current thread. - -@cindex @code{New} @var{systag} message -@cindex thread identifier (system) -@c FIXME-implementors!! It would be more helpful if the [New...] message -@c included GDB's numeric thread handle, so you could just go to that -@c thread without first checking `info threads'. -Whenever @value{GDBN} detects a new thread in your program, it displays -the target system's identification for the thread with a message in the -form @samp{[New @var{systag}]}. @var{systag} is a thread identifier -whose form varies depending on the particular system. For example, on -LynxOS, you might see - -@smallexample -[New process 35 thread 27] -@end smallexample - -@noindent -when @value{GDBN} notices a new thread. In contrast, on an SGI system, -the @var{systag} is simply something like @samp{process 368}, with no -further qualifier. - -@c FIXME!! (1) Does the [New...] message appear even for the very first -@c thread of a program, or does it only appear for the -@c second---i.e.@: when it becomes obvious we have a multithread -@c program? -@c (2) *Is* there necessarily a first thread always? Or do some -@c multithread systems permit starting a program with multiple -@c threads ab initio? - -@cindex thread number -@cindex thread identifier (GDB) -For debugging purposes, @value{GDBN} associates its own thread -number---always a single integer---with each thread in your program. - -@table @code -@kindex info threads -@item info threads -Display a summary of all threads currently in your -program. @value{GDBN} displays for each thread (in this order): - -@enumerate -@item the thread number assigned by @value{GDBN} - -@item the target system's thread identifier (@var{systag}) - -@item the current stack frame summary for that thread -@end enumerate - -@noindent -An asterisk @samp{*} to the left of the @value{GDBN} thread number -indicates the current thread. - -For example, -@end table -@c end table here to get a little more width for example - -@smallexample -(@value{GDBP}) 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 -@end smallexample - -On HP-UX systems: - -@cindex thread number -@cindex thread identifier (GDB) -For debugging purposes, @value{GDBN} associates its own thread -number---a small integer assigned in thread-creation order---with each -thread in your program. - -@cindex @code{New} @var{systag} message, on HP-UX -@cindex thread identifier (system), on HP-UX -@c FIXME-implementors!! It would be more helpful if the [New...] message -@c included GDB's numeric thread handle, so you could just go to that -@c thread without first checking `info threads'. -Whenever @value{GDBN} detects a new thread in your program, it displays -both @value{GDBN}'s thread number and the target system's identification for the thread with a message in the -form @samp{[New @var{systag}]}. @var{systag} is a thread identifier -whose form varies depending on the particular system. For example, on -HP-UX, you see - -@smallexample -[New thread 2 (system thread 26594)] -@end smallexample - -@noindent -when @value{GDBN} notices a new thread. - -@table @code -@kindex info threads -@item info threads -Display a summary of all threads currently in your -program. @value{GDBN} displays for each thread (in this order): - -@enumerate -@item the thread number assigned by @value{GDBN} - -@item the target system's thread identifier (@var{systag}) - -@item the current stack frame summary for that thread -@end enumerate - -@noindent -An asterisk @samp{*} to the left of the @value{GDBN} thread number -indicates the current thread. - -For example, -@end table -@c end table here to get a little more width for example - -@smallexample -(@value{GDBP}) 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 -@end smallexample - -@table @code -@kindex thread @var{threadno} -@item thread @var{threadno} -Make thread number @var{threadno} the current thread. The command -argument @var{threadno} is the internal @value{GDBN} thread number, as -shown in the first field of the @samp{info threads} display. -@value{GDBN} responds by displaying the system identifier of the thread -you selected, and its current stack frame summary: - -@smallexample -@c FIXME!! This example made up; find a @value{GDBN} w/threads and get real one -(@value{GDBP}) thread 2 -[Switching to process 35 thread 23] -0x34e5 in sigpause () -@end smallexample - -@noindent -As with the @samp{[New @dots{}]} message, the form of the text after -@samp{Switching to} depends on your system's conventions for identifying -threads. - -@kindex thread apply -@item thread apply [@var{threadno}] [@var{all}] @var{args} -The @code{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 @var{threadno}. @var{threadno} is the internal -@value{GDBN} thread number, as shown in the first field of the @samp{info -threads} display. To apply a command to all threads, use -@code{thread apply all} @var{args}. -@end table - -@cindex automatic thread selection -@cindex switching threads automatically -@cindex threads, automatic switching -Whenever @value{GDBN} stops your program, due to a breakpoint or a -signal, it automatically selects the thread where that breakpoint or -signal happened. @value{GDBN} alerts you to the context switch with a -message of the form @samp{[Switching to @var{systag}]} to identify the -thread. - -@xref{Thread Stops,,Stopping and starting multi-thread programs}, for -more information about how @value{GDBN} behaves when you stop and start -programs with multiple threads. - -@xref{Set Watchpoints,,Setting watchpoints}, for information about -watchpoints in programs with multiple threads. - -@node Processes -@section Debugging programs with multiple processes - -@cindex fork, debugging programs which call -@cindex multiple processes -@cindex processes, multiple -On most systems, @value{GDBN} has no special support for debugging -programs which create additional processes using the @code{fork} -function. When a program forks, @value{GDBN} 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 @code{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 @code{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 @value{GDBN} -on the child. While the child is sleeping, use the @code{ps} program to -get its process ID. Then tell @value{GDBN} (a new invocation of -@value{GDBN} if you are also debugging the parent process) to attach to -the child process (@pxref{Attach}). From that point on you can debug -the child process just like any other process which you attached to. - -On some systems, @value{GDBN} provides support for debugging programs that -create additional processes using the @code{fork} or @code{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, @value{GDBN} 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 @w{@code{set follow-fork-mode}}. - -@table @code -@kindex set follow-fork-mode -@item set follow-fork-mode @var{mode} -Set the debugger response to a program call of @code{fork} or -@code{vfork}. A call to @code{fork} or @code{vfork} creates a new -process. The @var{mode} can be: - -@table @code -@item parent -The original process is debugged after a fork. The child process runs -unimpeded. This is the default. - -@item child -The new process is debugged after a fork. The parent process runs -unimpeded. - -@end table - -@item show follow-fork-mode -Display the current debugger response to a @code{fork} or @code{vfork} call. -@end table - -If you ask to debug a child process and a @code{vfork} is followed by an -@code{exec}, @value{GDBN} executes the new target up to the first -breakpoint in the new target. If you have a breakpoint set on -@code{main} in your original program, the breakpoint will also be set on -the child process's @code{main}. - -When a child process is spawned by @code{vfork}, you cannot debug the -child or parent until an @code{exec} call completes. - -If you issue a @code{run} command to @value{GDBN} after an @code{exec} -call executes, the new target restarts. To restart the parent process, -use the @code{file} command with the parent executable name as its -argument. - -You can use the @code{catch} command to make @value{GDBN} stop whenever -a @code{fork}, @code{vfork}, or @code{exec} call is made. @xref{Set -Catchpoints, ,Setting catchpoints}. - -@node Stopping -@chapter 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 @value{GDBN}, your program may stop for any of several reasons, -such as a signal, a breakpoint, or reaching a new line after a -@value{GDBN} command such as @code{step}. You may then examine and -change variables, set new breakpoints or remove old ones, and then -continue execution. Usually, the messages shown by @value{GDBN} provide -ample explanation of the status of your program---but you can also -explicitly request this information at any time. - -@table @code -@kindex info program -@item info program -Display information about the status of your program: whether it is -running or not, what process it is, and why it stopped. -@end table - -@menu -* Breakpoints:: Breakpoints, watchpoints, and catchpoints -* Continuing and Stepping:: Resuming execution -* Signals:: Signals -* Thread Stops:: Stopping and starting multi-thread programs -@end menu - -@node Breakpoints -@section Breakpoints, watchpoints, and catchpoints - -@cindex breakpoints -A @dfn{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 @code{break} command and its variants (@pxref{Set -Breaks, ,Setting breakpoints}), 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 @code{pthread_create} call). - -@cindex watchpoints -@cindex memory tracing -@cindex breakpoint on memory address -@cindex breakpoint on variable modification -A @dfn{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 (@pxref{Set Watchpoints, ,Setting -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 @value{GDBN} stops at a breakpoint. @xref{Auto Display,, -Automatic display}. - -@cindex catchpoints -@cindex breakpoint on events -A @dfn{catchpoint} is another special breakpoint that stops your program -when a certain kind of event occurs, such as the throwing of a C@t{++} -exception or the loading of a library. As with watchpoints, you use a -different command to set a catchpoint (@pxref{Set Catchpoints, ,Setting -catchpoints}), but aside from that, you can manage a catchpoint like any -other breakpoint. (To stop when your program receives a signal, use the -@code{handle} command; see @ref{Signals, ,Signals}.) - -@cindex breakpoint numbers -@cindex numbers for breakpoints -@value{GDBN} 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 @dfn{enabled} or -@dfn{disabled}; if disabled, it has no effect on your program until you -enable it again. - -@cindex breakpoint ranges -@cindex ranges of breakpoints -Some @value{GDBN} commands accept a range of breakpoints on which to -operate. A breakpoint range is either a single breakpoint number, like -@samp{5}, or two such numbers, in increasing order, separated by a -hyphen, like @samp{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...'' -@end menu - -@node Set Breaks -@subsection Setting breakpoints - -@c FIXME LMB what does GDB do if no code on line of breakpt? -@c consider in particular declaration with/without initialization. -@c -@c FIXME 2 is there stuff on this already? break at fun start, already init? - -@kindex break -@kindex b @r{(@code{break})} -@vindex $bpnum@r{, convenience variable} -@cindex latest breakpoint -Breakpoints are set with the @code{break} command (abbreviated -@code{b}). The debugger convenience variable @samp{$bpnum} records the -number of the breakpoint you've set most recently; see @ref{Convenience -Vars,, Convenience variables}, for a discussion of what you can do with -convenience variables. - -You have several ways to say where the breakpoint should go. - -@table @code -@item break @var{function} -Set a breakpoint at entry to function @var{function}. -When using source languages that permit overloading of symbols, such as -C@t{++}, @var{function} may refer to more than one possible place to break. -@xref{Breakpoint Menus,,Breakpoint menus}, for a discussion of that situation. - -@item break +@var{offset} -@itemx break -@var{offset} -Set a breakpoint some number of lines forward or back from the position -at which execution stopped in the currently selected @dfn{stack frame}. -(@xref{Frames, ,Frames}, for a description of stack frames.) - -@item break @var{linenum} -Set a breakpoint at line @var{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. - -@item break @var{filename}:@var{linenum} -Set a breakpoint at line @var{linenum} in source file @var{filename}. - -@item break @var{filename}:@var{function} -Set a breakpoint at entry to function @var{function} found in file -@var{filename}. Specifying a file name as well as a function name is -superfluous except when multiple files contain similarly named -functions. - -@item break *@var{address} -Set a breakpoint at address @var{address}. You can use this to set -breakpoints in parts of your program which do not have debugging -information or source files. - -@item break -When called without any arguments, @code{break} sets a breakpoint at -the next instruction to be executed in the selected stack frame -(@pxref{Stack, ,Examining the 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 -@code{finish} command in the frame inside the selected frame---except -that @code{finish} does not leave an active breakpoint. If you use -@code{break} without an argument in the innermost frame, @value{GDBN} stops -the next time it reaches the current location; this may be useful -inside loops. - -@value{GDBN} 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. - -@item break @dots{} if @var{cond} -Set a breakpoint with condition @var{cond}; evaluate the expression -@var{cond} each time the breakpoint is reached, and stop only if the -value is nonzero---that is, if @var{cond} evaluates as true. -@samp{@dots{}} stands for one of the possible arguments described -above (or no argument) specifying where to break. @xref{Conditions, -,Break conditions}, for more information on breakpoint conditions. - -@kindex tbreak -@item tbreak @var{args} -Set a breakpoint enabled only for one stop. @var{args} are the -same as for the @code{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. @xref{Disabling, ,Disabling breakpoints}. - -@kindex hbreak -@item hbreak @var{args} -Set a hardware-assisted breakpoint. @var{args} are the same as for the -@code{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 -@value{GDBN} will reject this command if more than two are used. Delete -or disable unused hardware breakpoints before setting new ones -(@pxref{Disabling, ,Disabling}). @xref{Conditions, ,Break conditions}. -@xref{set remote hardware-breakpoint-limit}. - - -@kindex thbreak -@item thbreak @var{args} -Set a hardware-assisted breakpoint enabled only for one stop. @var{args} -are the same as for the @code{hbreak} command and the breakpoint is set in -the same way. However, like the @code{tbreak} command, -the breakpoint is automatically deleted after the -first time your program stops there. Also, like the @code{hbreak} -command, the breakpoint requires hardware support and some target hardware -may not have this support. @xref{Disabling, ,Disabling breakpoints}. -See also @ref{Conditions, ,Break conditions}. - -@kindex rbreak -@cindex regular expression -@item rbreak @var{regex} -Set breakpoints on all functions matching the regular expression -@var{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 @code{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 @file{grep}. Note that this is different from the syntax used by -shells, so for instance @code{foo*} matches all functions that include -an @code{fo} followed by zero or more @code{o}s. There is an implicit -@code{.*} leading and trailing the regular expression you supply, so to -match only functions that begin with @code{foo}, use @code{^foo}. - -When debugging C@t{++} programs, @code{rbreak} is useful for setting -breakpoints on overloaded functions that are not members of any special -classes. - -@kindex info breakpoints -@cindex @code{$_} and @code{info breakpoints} -@item info breakpoints @r{[}@var{n}@r{]} -@itemx info break @r{[}@var{n}@r{]} -@itemx info watchpoints @r{[}@var{n}@r{]} -Print a table of all breakpoints, watchpoints, and catchpoints set and -not deleted, with the following columns for each breakpoint: - -@table @emph -@item Breakpoint Numbers -@item Type -Breakpoint, watchpoint, or catchpoint. -@item Disposition -Whether the breakpoint is marked to be disabled or deleted when hit. -@item Enabled or Disabled -Enabled breakpoints are marked with @samp{y}. @samp{n} marks breakpoints -that are not enabled. -@item 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 @samp{<PENDING>}. -@item 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. -@end table - -@noindent -If a breakpoint is conditional, @code{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. - -@noindent -@code{info break} with a breakpoint -number @var{n} as argument lists only that breakpoint. The -convenience variable @code{$_} and the default examining-address for -the @code{x} command are set to the address of the last breakpoint -listed (@pxref{Memory, ,Examining memory}). - -@noindent -@code{info break} displays a count of the number of times the breakpoint -has been hit. This is especially useful in conjunction with the -@code{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. -@end table - -@value{GDBN} 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 -(@pxref{Conditions, ,Break conditions}). - -@cindex pending breakpoints -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 @value{GDBN} to create a special breakpoint (known as -a @dfn{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 -@value{GDBN} 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. - -@value{GDBN} provides some additional commands for controlling pending -breakpoint support: - -@kindex set breakpoint pending -@kindex show breakpoint pending -@table @code -@item set breakpoint pending auto -This is the default behavior. When @value{GDBN} cannot find the breakpoint -location, it queries you whether a pending breakpoint should be created. - -@item set breakpoint pending on -This indicates that an unrecognized breakpoint location should automatically -result in a pending breakpoint being created. - -@item 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. - -@item show breakpoint pending -Show the current behavior setting for creating pending breakpoints. -@end table - -@cindex operations allowed on 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 @value{GDBN} to not attempt to resolve the breakpoint on any subsequent -shared library load. When a pending breakpoint is re-enabled, -@value{GDBN} 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. - -@cindex negative breakpoint numbers -@cindex internal @value{GDBN} breakpoints -@value{GDBN} itself sometimes sets breakpoints in your program for -special purposes, such as proper handling of @code{longjmp} (in C -programs). These internal breakpoints are assigned negative numbers, -starting with @code{-1}; @samp{info breakpoints} does not display them. -You can see these breakpoints with the @value{GDBN} maintenance command -@samp{maint info breakpoints} (@pxref{maint info breakpoints}). - - -@node Set Watchpoints -@subsection Setting watchpoints - -@cindex setting watchpoints -@cindex software watchpoints -@cindex hardware 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. @value{GDBN} 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, @sc{gnu}/Linux and some other x86-based targets, -@value{GDBN} includes support for -hardware watchpoints, which do not slow down the running of your -program. - -@table @code -@kindex watch -@item watch @var{expr} -Set a watchpoint for an expression. @value{GDBN} will break when @var{expr} -is written into by the program and its value changes. - -@kindex rwatch -@item rwatch @var{expr} -Set a watchpoint that will break when watch @var{expr} is read by the program. - -@kindex awatch -@item awatch @var{expr} -Set a watchpoint that will break when @var{expr} is either read or written into -by the program. - -@kindex info watchpoints -@item info watchpoints -This command prints a list of watchpoints, breakpoints, and catchpoints; -it is the same as @code{info break}. -@end table - -@value{GDBN} sets a @dfn{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 @value{GDBN} -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 @code{watch} command, @value{GDBN} reports - -@smallexample -Hardware watchpoint @var{num}: @var{expr} -@end smallexample - -@noindent -if it was able to set a hardware watchpoint. - -Currently, the @code{awatch} and @code{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 @value{GDBN} does not do -that currently. If @value{GDBN} finds that it is unable to set a -hardware breakpoint with the @code{awatch} or @code{rwatch} command, it -will print a message like this: - -@smallexample -Expression cannot be implemented with read/access watchpoint. -@end smallexample - -Sometimes, @value{GDBN} 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, @value{GDBN} 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, @value{GDBN} 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: - -@smallexample -Hardware watchpoint @var{num}: Could not insert watchpoint -@end smallexample - -@noindent -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 @code{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 @code{watch} commands, two with @code{rwatch} commands, -@strong{or} two with @code{awatch} commands, but you cannot set one -watchpoint with one command and the other with a different command. -@value{GDBN} 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 @code{print} or @code{call}, -any watchpoints you have set will be inactive until @value{GDBN} reaches another -kind of breakpoint or the call completes. - -@value{GDBN} 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, @emph{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 -@code{main} function and when it breaks, set all the watchpoints. - -@quotation -@cindex watchpoints and threads -@cindex threads and watchpoints -@emph{Warning:} In multi-thread programs, watchpoints have only limited -usefulness. With the current watchpoint implementation, @value{GDBN} -can only watch the value of an expression @emph{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, -@value{GDBN} may not notice when a non-current thread's activity changes -the expression. - -@c FIXME: this is almost identical to the previous paragraph. -@emph{HP-UX Warning:} In multi-thread programs, software watchpoints -have only limited usefulness. If @value{GDBN} creates a software -watchpoint, it can only watch the value of an expression @emph{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, @value{GDBN} may not notice -when a non-current thread's activity changes the expression. (Hardware -watchpoints, in contrast, watch an expression in all threads.) -@end quotation - -@xref{set remote hardware-watchpoint-limit}. - -@node Set Catchpoints -@subsection Setting catchpoints -@cindex catchpoints, setting -@cindex exception handlers -@cindex event handling - -You can use @dfn{catchpoints} to cause the debugger to stop for certain -kinds of program events, such as C@t{++} exceptions or the loading of a -shared library. Use the @code{catch} command to set a catchpoint. - -@table @code -@kindex catch -@item catch @var{event} -Stop when @var{event} occurs. @var{event} can be any of the following: -@table @code -@item throw -@kindex catch throw -The throwing of a C@t{++} exception. - -@item catch -@kindex catch catch -The catching of a C@t{++} exception. - -@item exec -@kindex catch exec -A call to @code{exec}. This is currently only available for HP-UX. - -@item fork -@kindex catch fork -A call to @code{fork}. This is currently only available for HP-UX. - -@item vfork -@kindex catch vfork -A call to @code{vfork}. This is currently only available for HP-UX. - -@item load -@itemx load @var{libname} -@kindex catch load -The dynamic loading of any shared library, or the loading of the library -@var{libname}. This is currently only available for HP-UX. - -@item unload -@itemx unload @var{libname} -@kindex catch unload -The unloading of any dynamically loaded shared library, or the unloading -of the library @var{libname}. This is currently only available for HP-UX. -@end table - -@item tcatch @var{event} -Set a catchpoint that is enabled only for one stop. The catchpoint is -automatically deleted after the first time the event is caught. - -@end table - -Use the @code{info break} command to list the current catchpoints. - -There are currently some limitations to C@t{++} exception handling -(@code{catch throw} and @code{catch catch}) in @value{GDBN}: - -@itemize @bullet -@item -If you call a function interactively, @value{GDBN} 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 @value{GDBN} 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. - -@item -You cannot raise an exception interactively. - -@item -You cannot install an exception handler interactively. -@end itemize - -@cindex raise exceptions -Sometimes @code{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 @emph{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 @sc{gnu} C@t{++}, exceptions are -raised by calling a library function named @code{__raise_exception} -which has the following ANSI C interface: - -@smallexample - /* @var{addr} is where the exception identifier is stored. - @var{id} is the exception identifier. */ - void __raise_exception (void **addr, void *id); -@end smallexample - -@noindent -To make the debugger catch all exceptions before any stack -unwinding takes place, set a breakpoint on @code{__raise_exception} -(@pxref{Breakpoints, ,Breakpoints; watchpoints; and exceptions}). - -With a conditional breakpoint (@pxref{Conditions, ,Break conditions}) -that depends on the value of @var{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. - - -@node Delete Breaks -@subsection Deleting breakpoints - -@cindex clearing breakpoints, watchpoints, catchpoints -@cindex deleting breakpoints, watchpoints, catchpoints -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 @dfn{deleting} the breakpoint. A -breakpoint that has been deleted no longer exists; it is forgotten. - -With the @code{clear} command you can delete breakpoints according to -where they are in your program. With the @code{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. @value{GDBN} -automatically ignores breakpoints on the first instruction to be executed -when you continue execution without changing the execution address. - -@table @code -@kindex clear -@item clear -Delete any breakpoints at the next instruction to be executed in the -selected stack frame (@pxref{Selection, ,Selecting a frame}). When -the innermost frame is selected, this is a good way to delete a -breakpoint where your program just stopped. - -@item clear @var{function} -@itemx clear @var{filename}:@var{function} -Delete any breakpoints set at entry to the function @var{function}. - -@item clear @var{linenum} -@itemx clear @var{filename}:@var{linenum} -Delete any breakpoints set at or within the code of the specified line. - -@cindex delete breakpoints -@kindex delete -@kindex d @r{(@code{delete})} -@item delete @r{[}breakpoints@r{]} @r{[}@var{range}@dots{}@r{]} -Delete the breakpoints, watchpoints, or catchpoints of the breakpoint -ranges specified as arguments. If no argument is specified, delete all -breakpoints (@value{GDBN} asks confirmation, unless you have @code{set -confirm off}). You can abbreviate this command as @code{d}. -@end table - -@node Disabling -@subsection Disabling breakpoints - -@kindex disable breakpoints -@kindex enable breakpoints -Rather than deleting a breakpoint, watchpoint, or catchpoint, you might -prefer to @dfn{disable} it. This makes the breakpoint inoperative as if -it had been deleted, but remembers the information on the breakpoint so -that you can @dfn{enable} it again later. - -You disable and enable breakpoints, watchpoints, and catchpoints with -the @code{enable} and @code{disable} commands, optionally specifying one -or more breakpoint numbers as arguments. Use @code{info break} or -@code{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: - -@itemize @bullet -@item -Enabled. The breakpoint stops your program. A breakpoint set -with the @code{break} command starts out in this state. -@item -Disabled. The breakpoint has no effect on your program. -@item -Enabled once. The breakpoint stops your program, but then becomes -disabled. -@item -Enabled for deletion. The breakpoint stops your program, but -immediately after it does so it is deleted permanently. A breakpoint -set with the @code{tbreak} command starts out in this state. -@end itemize - -You can use the following commands to enable or disable breakpoints, -watchpoints, and catchpoints: - -@table @code -@kindex disable breakpoints -@kindex disable -@kindex dis @r{(@code{disable})} -@item disable @r{[}breakpoints@r{]} @r{[}@var{range}@dots{}@r{]} -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 -@code{disable} as @code{dis}. - -@kindex enable breakpoints -@kindex enable -@item enable @r{[}breakpoints@r{]} @r{[}@var{range}@dots{}@r{]} -Enable the specified breakpoints (or all defined breakpoints). They -become effective once again in stopping your program. - -@item enable @r{[}breakpoints@r{]} once @var{range}@dots{} -Enable the specified breakpoints temporarily. @value{GDBN} disables any -of these breakpoints immediately after stopping your program. - -@item enable @r{[}breakpoints@r{]} delete @var{range}@dots{} -Enable the specified breakpoints to work once, then die. @value{GDBN} -deletes any of these breakpoints as soon as your program stops there. -@end table - -@c FIXME: I think the following ``Except for [...] @code{tbreak}'' is -@c confusing: tbreak is also initially enabled. -Except for a breakpoint set with @code{tbreak} (@pxref{Set Breaks, -,Setting breakpoints}), breakpoints that you set are initially enabled; -subsequently, they become disabled or enabled only when you use one of -the commands above. (The command @code{until} can set and delete a -breakpoint of its own, but it does not change the state of your other -breakpoints; see @ref{Continuing and Stepping, ,Continuing and -stepping}.) - -@node Conditions -@subsection Break conditions -@cindex conditional breakpoints -@cindex breakpoint conditions - -@c FIXME what is scope of break condition expr? Context where wanted? -@c in particular for a watchpoint? -The simplest sort of breakpoint breaks every time your program reaches a -specified place. You can also specify a @dfn{condition} for a -breakpoint. A condition is just a Boolean expression in your -programming language (@pxref{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 @emph{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 @var{assert}, you should set the condition -@samp{! @var{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, @value{GDBN} 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 -(@pxref{Break Commands, ,Breakpoint command lists}). - -Break conditions can be specified when a breakpoint is set, by using -@samp{if} in the arguments to the @code{break} command. @xref{Set -Breaks, ,Setting breakpoints}. They can also be changed at any time -with the @code{condition} command. - -You can also use the @code{if} keyword with the @code{watch} command. -The @code{catch} command does not recognize the @code{if} keyword; -@code{condition} is the only way to impose a further condition on a -catchpoint. - -@table @code -@kindex condition -@item condition @var{bnum} @var{expression} -Specify @var{expression} as the break condition for breakpoint, -watchpoint, or catchpoint number @var{bnum}. After you set a condition, -breakpoint @var{bnum} stops your program only if the value of -@var{expression} is true (nonzero, in C). When you use -@code{condition}, @value{GDBN} checks @var{expression} immediately for -syntactic correctness, and to determine whether symbols in it have -referents in the context of your breakpoint. If @var{expression} uses -symbols not referenced in the context of the breakpoint, @value{GDBN} -prints an error message: - -@smallexample -No symbol "foo" in current context. -@end smallexample - -@noindent -@value{GDBN} does -not actually evaluate @var{expression} at the time the @code{condition} -command (or a command that sets a breakpoint with a condition, like -@code{break if @dots{}}) is given, however. @xref{Expressions, ,Expressions}. - -@item condition @var{bnum} -Remove the condition from breakpoint number @var{bnum}. It becomes -an ordinary unconditional breakpoint. -@end table - -@cindex ignore count (of 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 @dfn{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 @var{n}, the breakpoint does not stop the next @var{n} times -your program reaches it. - -@table @code -@kindex ignore -@item ignore @var{bnum} @var{count} -Set the ignore count of breakpoint number @var{bnum} to @var{count}. -The next @var{count} times the breakpoint is reached, your program's -execution does not stop; other than to decrement the ignore count, @value{GDBN} -takes no action. - -To make the breakpoint stop the next time it is reached, specify -a count of zero. - -When you use @code{continue} to resume execution of your program from a -breakpoint, you can specify an ignore count directly as an argument to -@code{continue}, rather than using @code{ignore}. @xref{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, -@value{GDBN} resumes checking the condition. - -You could achieve the effect of the ignore count with a condition such -as @w{@samp{$foo-- <= 0}} using a debugger convenience variable that -is decremented each time. @xref{Convenience Vars, ,Convenience -variables}. -@end table - -Ignore counts apply to breakpoints, watchpoints, and catchpoints. - - -@node Break Commands -@subsection Breakpoint command lists - -@cindex breakpoint commands -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. - -@table @code -@kindex commands -@kindex end -@item commands @r{[}@var{bnum}@r{]} -@itemx @dots{} @var{command-list} @dots{} -@itemx end -Specify a list of commands for breakpoint number @var{bnum}. The commands -themselves appear on the following lines. Type a line containing just -@code{end} to terminate the commands. - -To remove all commands from a breakpoint, type @code{commands} and -follow it immediately with @code{end}; that is, give no commands. - -With no @var{bnum} argument, @code{commands} refers to the last -breakpoint, watchpoint, or catchpoint set (not to the breakpoint most -recently encountered). -@end table - -Pressing @key{RET} as a means of repeating the last @value{GDBN} command is -disabled within a @var{command-list}. - -You can use breakpoint commands to start your program up again. Simply -use the @code{continue} command, or @code{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 @code{next} or @code{step}), you may encounter -another breakpoint---which could have its own command list, leading to -ambiguities about which list to execute. - -@kindex silent -If the first command you specify in a command list is @code{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. @code{silent} is -meaningful only at the beginning of a breakpoint command list. - -The commands @code{echo}, @code{output}, and @code{printf} allow you to -print precisely controlled output, and are often useful in silent -breakpoints. @xref{Output, ,Commands for controlled output}. - -For example, here is how you could use breakpoint commands to print the -value of @code{x} at entry to @code{foo} whenever @code{x} is positive. - -@smallexample -break foo if x>0 -commands -silent -printf "x is %d\n",x -cont -end -@end smallexample - -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 @code{continue} command -so that your program does not stop, and start with the @code{silent} -command so that no output is produced. Here is an example: - -@smallexample -break 403 -commands -silent -set x = y + 4 -cont -end -@end smallexample - -@node Breakpoint Menus -@subsection Breakpoint menus -@cindex overloading -@cindex symbol overloading - -Some programming languages (notably C@t{++} and Objective-C) permit a -single function name -to be defined several times, for application in different contexts. -This is called @dfn{overloading}. When a function name is overloaded, -@samp{break @var{function}} is not enough to tell @value{GDBN} where you want -a breakpoint. If you realize this is a problem, you can use -something like @samp{break @var{function}(@var{types})} to specify which -particular version of the function you want. Otherwise, @value{GDBN} offers -you a menu of numbered choices for different possible breakpoints, and -waits for your selection with the prompt @samp{>}. The first two -options are always @samp{[0] cancel} and @samp{[1] all}. Typing @kbd{1} -sets a breakpoint at each definition of @var{function}, and typing -@kbd{0} aborts the @code{break} command without setting any new -breakpoints. - -For example, the following session excerpt shows an attempt to set a -breakpoint at the overloaded symbol @code{String::after}. -We choose three particular definitions of that function name: - -@c FIXME! This is likely to change to show arg type lists, at least -@smallexample -@group -(@value{GDBP}) 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. -(@value{GDBP}) -@end group -@end smallexample - -@c @ifclear BARETARGET -@node Error in Breakpoints -@subsection ``Cannot insert breakpoints'' -@c -@c FIXME!! 14/6/95 Is there a real example of this? Let's use it. -@c -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 -@value{GDBN} to print an error message: - -@smallexample -Cannot insert breakpoints. -The same program may be running in another process. -@end smallexample - -When this happens, you have three ways to proceed: - -@enumerate -@item -Remove or disable the breakpoints, then continue. - -@item -Suspend @value{GDBN}, and copy the file containing your program to a new -name. Resume @value{GDBN} and use the @code{exec-file} command to specify -that @value{GDBN} should run your program under that name. -Then start your program again. - -@item -Relink your program so that the text segment is nonsharable, using the -linker option @samp{-N}. The operating system limitation may not apply -to nonsharable executables. -@end enumerate -@c @end ifclear - -A similar message can be printed if you request too many active -hardware-assisted breakpoints and watchpoints: - -@c FIXME: the precise wording of this message may change; the relevant -@c source change is not committed yet (Sep 3, 1999). -@smallexample -Stopped; cannot insert breakpoints. -You may have requested too many hardware breakpoints and watchpoints. -@end smallexample - -@noindent -This message is printed when you attempt to resume the program, since -only then @value{GDBN} 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. - -@node Breakpoint related warnings -@subsection ``Breakpoint address adjusted...'' -@cindex breakpoint address adjusted - -Some processor architectures place constraints on the addresses at -which breakpoints may be placed. For architectures thus constrained, -@value{GDBN} 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. @value{GDBN} -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 @value{GDBN}'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: - -@smallexample -warning: Breakpoint address adjusted from 0x00010414 to 0x00010410. -@end smallexample - -Such warnings are printed both for user settable and @value{GDBN}'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. - -@value{GDBN} will also issue a warning when stopping at one of these -adjusted breakpoints: - -@smallexample -warning: Breakpoint 1 address previously adjusted from 0x00010414 -to 0x00010410. -@end smallexample - -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. - -@node Continuing and Stepping -@section Continuing and stepping - -@cindex stepping -@cindex continuing -@cindex resuming execution -@dfn{Continuing} means resuming program execution until your program -completes normally. In contrast, @dfn{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 @code{handle}, or use -@samp{signal 0} to resume execution. @xref{Signals, ,Signals}.) - -@table @code -@kindex continue -@kindex c @r{(@code{continue})} -@kindex fg @r{(resume foreground execution)} -@item continue @r{[}@var{ignore-count}@r{]} -@itemx c @r{[}@var{ignore-count}@r{]} -@itemx fg @r{[}@var{ignore-count}@r{]} -Resume program execution, at the address where your program last stopped; -any breakpoints set at that address are bypassed. The optional argument -@var{ignore-count} allows you to specify a further number of times to -ignore a breakpoint at this location; its effect is like that of -@code{ignore} (@pxref{Conditions, ,Break conditions}). - -The argument @var{ignore-count} is meaningful only when your program -stopped due to a breakpoint. At other times, the argument to -@code{continue} is ignored. - -The synonyms @code{c} and @code{fg} (for @dfn{foreground}, as the -debugged program is deemed to be the foreground program) are provided -purely for convenience, and have exactly the same behavior as -@code{continue}. -@end table - -To resume execution at a different place, you can use @code{return} -(@pxref{Returning, ,Returning from a function}) to go back to the -calling function; or @code{jump} (@pxref{Jumping, ,Continuing at a -different address}) to go to an arbitrary location in your program. - -A typical technique for using stepping is to set a breakpoint -(@pxref{Breakpoints, ,Breakpoints; watchpoints; and catchpoints}) 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. - -@table @code -@kindex step -@kindex s @r{(@code{step})} -@item step -Continue running your program until control reaches a different source -line, then stop it and return control to @value{GDBN}. This command is -abbreviated @code{s}. - -@quotation -@c "without debugging information" is imprecise; actually "without line -@c numbers in the debugging information". (gcc -g1 has debugging info but -@c not line numbers). But it seems complex to try to make that -@c distinction here. -@emph{Warning:} If you use the @code{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 @code{stepi} command, described -below. -@end quotation - -The @code{step} command only stops at the first instruction of a source -line. This prevents the multiple stops that could otherwise occur in -@code{switch} statements, @code{for} loops, etc. @code{step} continues -to stop if a function that has debugging information is called within -the line. In other words, @code{step} @emph{steps inside} any functions -called within the line. - -Also, the @code{step} command only enters a function if there is line -number information for the function. Otherwise it acts like the -@code{next} command. This avoids problems when using @code{cc -gl} -on MIPS machines. Previously, @code{step} entered subroutines if there -was any debugging information about the routine. - -@item step @var{count} -Continue running as in @code{step}, but do so @var{count} times. If a -breakpoint is reached, or a signal not related to stepping occurs before -@var{count} steps, stepping stops right away. - -@kindex next -@kindex n @r{(@code{next})} -@item next @r{[}@var{count}@r{]} -Continue to the next source line in the current (innermost) stack frame. -This is similar to @code{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 @code{next} command. This command -is abbreviated @code{n}. - -An argument @var{count} is a repeat count, as for @code{step}. - - -@c FIX ME!! Do we delete this, or is there a way it fits in with -@c the following paragraph? --- Vctoria -@c -@c @code{next} within a function that lacks debugging information acts like -@c @code{step}, but any function calls appearing within the code of the -@c function are executed without stopping. - -The @code{next} command only stops at the first instruction of a -source line. This prevents multiple stops that could otherwise occur in -@code{switch} statements, @code{for} loops, etc. - -@kindex set step-mode -@item set step-mode -@cindex functions without line info, and stepping -@cindex stepping into functions with no line info -@itemx set step-mode on -The @code{set step-mode on} command causes the @code{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 @value{GDBN} to automatically skip over this function. - -@item set step-mode off -Causes the @code{step} command to step over any functions which contains no -debug information. This is the default. - -@kindex finish -@item finish -Continue running until just after function in the selected stack frame -returns. Print the returned value (if any). - -Contrast this with the @code{return} command (@pxref{Returning, -,Returning from a function}). - -@kindex until -@kindex u @r{(@code{until})} -@item until -@itemx 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 @code{next} -command, except that when @code{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, @code{until} makes your program continue execution until it -exits the loop. In contrast, a @code{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. - -@code{until} always stops your program if it attempts to exit the current -stack frame. - -@code{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 @code{f} -(@code{frame}) command shows that execution is stopped at line -@code{206}; yet when we use @code{until}, we get to line @code{195}: - -@smallexample -(@value{GDBP}) f -#0 main (argc=4, argv=0xf7fffae8) at m4.c:206 -206 expand_input(); -(@value{GDBP}) until -195 for ( ; argc > 0; NEXTARG) @{ -@end smallexample - -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 @code{for}-loop is -written before the body of the loop. The @code{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. - -@code{until} with no argument works by means of single -instruction stepping, and hence is slower than @code{until} with an -argument. - -@item until @var{location} -@itemx u @var{location} -Continue running your program until either the specified location is -reached, or the current stack frame returns. @var{location} is any of -the forms of argument acceptable to @code{break} (@pxref{Set Breaks, -,Setting breakpoints}). This form of the command uses breakpoints, and -hence is quicker than @code{until} without an argument. The specified -location is actually reached only if it is in the current frame. This -implies that @code{until} can be used to skip over recursive function -invocations. For instance in the code below, if the current location is -line @code{96}, issuing @code{until 99} will execute the program up to -line @code{99} in the same invocation of factorial, i.e. after the inner -invocations have returned. - -@smallexample -94 int factorial (int value) -95 @{ -96 if (value > 1) @{ -97 value *= factorial (value - 1); -98 @} -99 return (value); -100 @} -@end smallexample - - -@kindex advance @var{location} -@itemx advance @var{location} -Continue running the program up to the given location. An argument is -required, anything of the same form as arguments for the @code{break} -command. Execution will also stop upon exit from the current stack -frame. This command is similar to @code{until}, but @code{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. - - -@kindex stepi -@kindex si @r{(@code{stepi})} -@item stepi -@itemx stepi @var{arg} -@itemx si -Execute one machine instruction, then stop and return to the debugger. - -It is often useful to do @samp{display/i $pc} when stepping by machine -instructions. This makes @value{GDBN} automatically display the next -instruction to be executed, each time your program stops. @xref{Auto -Display,, Automatic display}. - -An argument is a repeat count, as in @code{step}. - -@need 750 -@kindex nexti -@kindex ni @r{(@code{nexti})} -@item nexti -@itemx nexti @var{arg} -@itemx 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 @code{next}. -@end table - -@node Signals -@section Signals -@cindex 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 @code{SIGINT} is the -signal a program gets when you type an interrupt character (often @kbd{C-c}); -@code{SIGSEGV} is the signal a program gets from referencing a place in -memory far away from all the areas in use; @code{SIGALRM} occurs when -the alarm clock timer goes off (which happens only if your program has -requested an alarm). - -@cindex fatal signals -Some signals, including @code{SIGALRM}, are a normal part of the -functioning of your program. Others, such as @code{SIGSEGV}, indicate -errors; these signals are @dfn{fatal} (they kill your program immediately) if the -program has not specified in advance some other way to handle the signal. -@code{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. - -@value{GDBN} has the ability to detect any occurrence of a signal in your -program. You can tell @value{GDBN} in advance what to do for each kind of -signal. - -@cindex handling signals -Normally, @value{GDBN} is set up to let the non-erroneous signals like -@code{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 @code{handle} command. - -@table @code -@kindex info signals -@item info signals -@itemx info handle -Print a table of all the kinds of signals and how @value{GDBN} has been told to -handle each one. You can use this to see the signal numbers of all -the defined types of signals. - -@code{info handle} is an alias for @code{info signals}. - -@kindex handle -@item handle @var{signal} @var{keywords}@dots{} -Change the way @value{GDBN} handles signal @var{signal}. @var{signal} -can be the number of a signal or its name (with or without the -@samp{SIG} at the beginning); a list of signal numbers of the form -@samp{@var{low}-@var{high}}; or the word @samp{all}, meaning all the -known signals. The @var{keywords} say what change to make. -@end table - -@c @group -The keywords allowed by the @code{handle} command can be abbreviated. -Their full names are: - -@table @code -@item nostop -@value{GDBN} should not stop your program when this signal happens. It may -still print a message telling you that the signal has come in. - -@item stop -@value{GDBN} should stop your program when this signal happens. This implies -the @code{print} keyword as well. - -@item print -@value{GDBN} should print a message when this signal happens. - -@item noprint -@value{GDBN} should not mention the occurrence of the signal at all. This -implies the @code{nostop} keyword as well. - -@item pass -@itemx noignore -@value{GDBN} 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. @code{pass} and @code{noignore} are synonyms. - -@item nopass -@itemx ignore -@value{GDBN} should not allow your program to see this signal. -@code{nopass} and @code{ignore} are synonyms. -@end table -@c @end group - -When a signal stops your program, the signal is not visible to the -program until you -continue. Your program sees the signal then, if @code{pass} is in -effect for the signal in question @emph{at that time}. In other words, -after @value{GDBN} reports a signal, you can use the @code{handle} -command with @code{pass} or @code{nopass} to control whether your -program sees that signal when you continue. - -The default is set to @code{nostop}, @code{noprint}, @code{pass} for -non-erroneous signals such as @code{SIGALRM}, @code{SIGWINCH} and -@code{SIGCHLD}, and to @code{stop}, @code{print}, @code{pass} for the -erroneous signals. - -You can also use the @code{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 @samp{signal 0}. @xref{Signaling, ,Giving your -program a signal}. - -@node Thread Stops -@section Stopping and starting multi-thread programs - -When your program has multiple threads (@pxref{Threads,, Debugging -programs with multiple threads}), you can choose whether to set -breakpoints on all threads, or on a particular thread. - -@table @code -@cindex breakpoints and threads -@cindex thread breakpoints -@kindex break @dots{} thread @var{threadno} -@item break @var{linespec} thread @var{threadno} -@itemx break @var{linespec} thread @var{threadno} if @dots{} -@var{linespec} specifies source lines; there are several ways of -writing them, but the effect is always to specify some source line. - -Use the qualifier @samp{thread @var{threadno}} with a breakpoint command -to specify that you only want @value{GDBN} to stop the program when a -particular thread reaches this breakpoint. @var{threadno} is one of the -numeric thread identifiers assigned by @value{GDBN}, shown in the first -column of the @samp{info threads} display. - -If you do not specify @samp{thread @var{threadno}} when you set a -breakpoint, the breakpoint applies to @emph{all} threads of your -program. - -You can use the @code{thread} qualifier on conditional breakpoints as -well; in this case, place @samp{thread @var{threadno}} before the -breakpoint condition, like this: - -@smallexample -(@value{GDBP}) break frik.c:13 thread 28 if bartab > lim -@end smallexample - -@end table - -@cindex stopped threads -@cindex threads, stopped -Whenever your program stops under @value{GDBN} for any reason, -@emph{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. - -@cindex thread breakpoints and system calls -@cindex system calls and thread breakpoints -@cindex premature return from system calls -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 @value{GDBN} 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: - -@smallexample - sleep (10); -@end smallexample - -The call to @code{sleep} will return early if a different thread stops -at a breakpoint or for some other reason. - -Instead, write this: - -@smallexample - int unslept = 10; - while (unslept > 0) - unslept = sleep (unslept); -@end smallexample - -A system call is allowed to return early, so the system is still -conforming to its specification. But @value{GDBN} does cause your -multi-threaded program to behave differently than it would without -@value{GDBN}. - -Also, @value{GDBN} 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. - -@cindex continuing threads -@cindex threads, continuing -Conversely, whenever you restart the program, @emph{all} threads start -executing. @emph{This is true even when single-stepping} with commands -like @code{step} or @code{next}. - -In particular, @value{GDBN} cannot single-step all threads in lockstep. -Since thread scheduling is up to your debugging target's operating -system (not controlled by @value{GDBN}), 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. - -@table @code -@item set scheduler-locking @var{mode} -Set the scheduler locking mode. If it is @code{off}, then there is no -locking and any thread may run at any time. If @code{on}, then only the -current thread may run when the inferior is resumed. The @code{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 @samp{next} over a -function call, and they are completely free to run when you use commands -like @samp{continue}, @samp{until}, or @samp{finish}. However, unless another -thread hits a breakpoint during its timeslice, they will never steal the -@value{GDBN} prompt away from the thread that you are debugging. - -@item show scheduler-locking -Display the current scheduler locking mode. -@end table - - -@node Stack -@chapter Examining the Stack - -When your program has stopped, the first thing you need to know is where it -stopped and how it got there. - -@cindex call stack -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 @dfn{stack frame}. -The stack frames are allocated in a region of memory called the @dfn{call -stack}. - -When your program stops, the @value{GDBN} commands for examining the -stack allow you to see all of this information. - -@cindex selected frame -One of the stack frames is @dfn{selected} by @value{GDBN} and many -@value{GDBN} commands refer implicitly to the selected frame. In -particular, whenever you ask @value{GDBN} for the value of a variable in -your program, the value is found in the selected frame. There are -special @value{GDBN} commands to select whichever frame you are -interested in. @xref{Selection, ,Selecting a frame}. - -When your program stops, @value{GDBN} automatically selects the -currently executing frame and describes it briefly, similar to the -@code{frame} command (@pxref{Frame Info, ,Information about a frame}). - -@menu -* Frames:: Stack frames -* Backtrace:: Backtraces -* Selection:: Selecting a frame -* Frame Info:: Information on a frame - -@end menu - -@node Frames -@section Stack frames - -@cindex frame, definition -@cindex stack frame -The call stack is divided up into contiguous pieces called @dfn{stack -frames}, or @dfn{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. - -@cindex initial frame -@cindex outermost frame -@cindex innermost frame -When your program is started, the stack has only one frame, that of the -function @code{main}. This is called the @dfn{initial} frame or the -@dfn{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 @dfn{innermost} frame. This is the most -recently created of all the stack frames that still exist. - -@cindex frame pointer -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 @dfn{frame pointer register} while execution is -going on in that frame. - -@cindex frame number -@value{GDBN} 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 @value{GDBN} to give you a way of designating stack -frames in @value{GDBN} commands. - -@c The -fomit-frame-pointer below perennially causes hbox overflow -@c underflow problems. -@cindex frameless execution -Some compilers provide a way to compile functions so that they operate -without stack frames. (For example, the @value{GCC} option -@smallexample -@samp{-fomit-frame-pointer} -@end smallexample -generates functions without a frame.) -This is occasionally done with heavily used library functions to save -the frame setup time. @value{GDBN} has limited facilities for dealing -with these function invocations. If the innermost function invocation -has no stack frame, @value{GDBN} 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, @value{GDBN} has -no provision for frameless functions elsewhere in the stack. - -@table @code -@kindex frame@r{, command} -@cindex current stack frame -@item frame @var{args} -The @code{frame} command allows you to move from one stack frame to another, -and to print the stack frame you select. @var{args} may be either the -address of the frame or the stack frame number. Without an argument, -@code{frame} prints the current stack frame. - -@kindex select-frame -@cindex selecting frame silently -@item select-frame -The @code{select-frame} command allows you to move from one stack frame -to another without printing the frame. This is the silent version of -@code{frame}. -@end table - -@node Backtrace -@section Backtraces - -@cindex backtraces -@cindex tracebacks -@cindex stack traces -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. - -@table @code -@kindex backtrace -@kindex bt @r{(@code{backtrace})} -@item backtrace -@itemx 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 @kbd{C-c}. - -@item backtrace @var{n} -@itemx bt @var{n} -Similar, but print only the innermost @var{n} frames. - -@item backtrace -@var{n} -@itemx bt -@var{n} -Similar, but print only the outermost @var{n} frames. -@end table - -@kindex where -@kindex info stack -@kindex info s @r{(@code{info stack})} -The names @code{where} and @code{info stack} (abbreviated @code{info s}) -are additional aliases for @code{backtrace}. - -Each line in the backtrace shows the frame number and the function name. -The program counter value is also shown---unless you use @code{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 -@samp{bt 3}, so it shows the innermost three frames. - -@smallexample -@group -#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...) -@end group -@end smallexample - -@noindent -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 @code{993} of @code{builtin.c}. - -@kindex set backtrace past-main -@kindex show backtrace past-main -@kindex set backtrace limit -@kindex show backtrace limit - -Most programs have a standard user entry point---a place where system -libraries and startup code transition into user code. For C this is -@code{main}. When @value{GDBN} 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: - -@table @code -@item set backtrace past-main -@itemx set backtrace past-main on -Backtraces will continue past the user entry point. - -@item set backtrace past-main off -Backtraces will stop when they encounter the user entry point. This is the -default. - -@item show backtrace past-main -Display the current user entry point backtrace policy. - -@item set backtrace limit @var{n} -@itemx set backtrace limit 0 -@cindex backtrace limit -Limit the backtrace to @var{n} levels. A value of zero means -unlimited. - -@item show backtrace limit -Display the current limit on backtrace levels. -@end table - -@node Selection -@section 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. - -@table @code -@kindex frame@r{, selecting} -@kindex f @r{(@code{frame})} -@item frame @var{n} -@itemx f @var{n} -Select frame number @var{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 -@code{main}. - -@item frame @var{addr} -@itemx f @var{addr} -Select the frame at address @var{addr}. This is useful mainly if the -chaining of stack frames has been damaged by a bug, making it -impossible for @value{GDBN} 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, @code{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. -@c note to future updaters: this is conditioned on a flag -@c SETUP_ARBITRARY_FRAME in the tm-*.h files. The above is up to date -@c as of 27 Jan 1994. - -@kindex up -@item up @var{n} -Move @var{n} frames up the stack. For positive numbers @var{n}, this -advances toward the outermost frame, to higher frame numbers, to frames -that have existed longer. @var{n} defaults to one. - -@kindex down -@kindex do @r{(@code{down})} -@item down @var{n} -Move @var{n} frames down the stack. For positive numbers @var{n}, this -advances toward the innermost frame, to lower frame numbers, to frames -that were created more recently. @var{n} defaults to one. You may -abbreviate @code{down} as @code{do}. -@end table - -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. - -@need 1000 -For example: - -@smallexample -@group -(@value{GDBP}) up -#1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc) - at env.c:10 -10 read_input_file (argv[i]); -@end group -@end smallexample - -After such a printout, the @code{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 @code{edit}. -@xref{List, ,Printing source lines}, -for details. - -@table @code -@kindex down-silently -@kindex up-silently -@item up-silently @var{n} -@itemx down-silently @var{n} -These two commands are variants of @code{up} and @code{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 @value{GDBN} command scripts, where the output might be unnecessary and -distracting. -@end table - -@node Frame Info -@section Information about a frame - -There are several other commands to print information about the selected -stack frame. - -@table @code -@item frame -@itemx 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 @code{f}. With an -argument, this command is used to select a stack frame. -@xref{Selection, ,Selecting a frame}. - -@kindex info frame -@kindex info f @r{(@code{info frame})} -@item info frame -@itemx info f -This command prints a verbose description of the selected stack frame, -including: - -@itemize @bullet -@item -the address of the frame -@item -the address of the next frame down (called by this frame) -@item -the address of the next frame up (caller of this frame) -@item -the language in which the source code corresponding to this frame is written -@item -the address of the frame's arguments -@item -the address of the frame's local variables -@item -the program counter saved in it (the address of execution in the caller frame) -@item -which registers were saved in the frame -@end itemize - -@noindent The verbose description is useful when -something has gone wrong that has made the stack format fail to fit -the usual conventions. - -@item info frame @var{addr} -@itemx info f @var{addr} -Print a verbose description of the frame at address @var{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 @code{frame} command. -@xref{Selection, ,Selecting a frame}. - -@kindex info args -@item info args -Print the arguments of the selected frame, each on a separate line. - -@item info locals -@kindex 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. - -@kindex info catch -@cindex catch exceptions, list active handlers -@cindex exception handlers, how to list -@item 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 @code{up}, -@code{down}, or @code{frame} commands); then type @code{info catch}. -@xref{Set Catchpoints, , Setting catchpoints}. - -@end table - - -@node Source -@chapter Examining Source Files - -@value{GDBN} can print parts of your program's source, since the debugging -information recorded in the program tells @value{GDBN} what source files were -used to build it. When your program stops, @value{GDBN} spontaneously prints -the line where it stopped. Likewise, when you select a stack frame -(@pxref{Selection, ,Selecting a frame}), @value{GDBN} prints the line where -execution in that frame has stopped. You can print other portions of -source files by explicit command. - -If you use @value{GDBN} through its @sc{gnu} Emacs interface, you may -prefer to use Emacs facilities to view source; see @ref{Emacs, ,Using -@value{GDBN} under @sc{gnu} 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 -@end menu - -@node List -@section Printing source lines - -@kindex list -@kindex l @r{(@code{list})} -To print lines from a source file, use the @code{list} command -(abbreviated @code{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 @code{list} command most commonly used: - -@table @code -@item list @var{linenum} -Print lines centered around line number @var{linenum} in the -current source file. - -@item list @var{function} -Print lines centered around the beginning of function -@var{function}. - -@item list -Print more lines. If the last lines printed were printed with a -@code{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 (@pxref{Stack, ,Examining the -Stack}), this prints lines centered around that line. - -@item list - -Print lines just before the lines last printed. -@end table - -By default, @value{GDBN} prints ten source lines with any of these forms of -the @code{list} command. You can change this using @code{set listsize}: - -@table @code -@kindex set listsize -@item set listsize @var{count} -Make the @code{list} command display @var{count} source lines (unless -the @code{list} argument explicitly specifies some other number). - -@kindex show listsize -@item show listsize -Display the number of lines that @code{list} prints. -@end table - -Repeating a @code{list} command with @key{RET} discards the argument, -so it is equivalent to typing just @code{list}. This is more useful -than listing the same lines again. An exception is made for an -argument of @samp{-}; that argument is preserved in repetition so that -each repetition moves up in the source file. - -@cindex linespec -In general, the @code{list} command expects you to supply zero, one or two -@dfn{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 @code{list}: - -@table @code -@item list @var{linespec} -Print lines centered around the line specified by @var{linespec}. - -@item list @var{first},@var{last} -Print lines from @var{first} to @var{last}. Both arguments are -linespecs. - -@item list ,@var{last} -Print lines ending with @var{last}. - -@item list @var{first}, -Print lines starting with @var{first}. - -@item list + -Print lines just after the lines last printed. - -@item list - -Print lines just before the lines last printed. - -@item list -As described in the preceding table. -@end table - -Here are the ways of specifying a single source line---all the -kinds of linespec. - -@table @code -@item @var{number} -Specifies line @var{number} of the current source file. -When a @code{list} command has two linespecs, this refers to -the same source file as the first linespec. - -@item +@var{offset} -Specifies the line @var{offset} lines after the last line printed. -When used as the second linespec in a @code{list} command that has -two, this specifies the line @var{offset} lines down from the -first linespec. - -@item -@var{offset} -Specifies the line @var{offset} lines before the last line printed. - -@item @var{filename}:@var{number} -Specifies line @var{number} in the source file @var{filename}. - -@item @var{function} -Specifies the line that begins the body of the function @var{function}. -For example: in C, this is the line with the open brace. - -@item @var{filename}:@var{function} -Specifies the line of the open-brace that begins the body of the -function @var{function} in the file @var{filename}. You only need the -file name with a function name to avoid ambiguity when there are -identically named functions in different source files. - -@item *@var{address} -Specifies the line containing the program address @var{address}. -@var{address} may be any expression. -@end table - -@node Edit -@section Editing source files -@cindex editing source files - -@kindex edit -@kindex e @r{(@code{edit})} -To edit the lines in a source file, use the @code{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 @code{edit} command most commonly used: - -@table @code -@item edit -Edit the current source file at the active line number in the program. - -@item edit @var{number} -Edit the current source file with @var{number} as the active line number. - -@item edit @var{function} -Edit the file containing @var{function} at the beginning of its definition. - -@item edit @var{filename}:@var{number} -Specifies line @var{number} in the source file @var{filename}. - -@item edit @var{filename}:@var{function} -Specifies the line that begins the body of the -function @var{function} in the file @var{filename}. You only need the -file name with a function name to avoid ambiguity when there are -identically named functions in different source files. - -@item edit *@var{address} -Specifies the line containing the program address @var{address}. -@var{address} may be any expression. -@end table - -@subsection Choosing your editor -You can customize @value{GDBN} to use any editor you want -@footnote{ -The only restriction is that your editor (say @code{ex}), recognizes the -following command-line syntax: -@smallexample -ex +@var{number} file -@end smallexample -The optional numeric value +@var{number} designates the active line in -the file.}. By default, it is @value{EDITOR}, but you can change this -by setting the environment variable @code{EDITOR} before using -@value{GDBN}. For example, to configure @value{GDBN} to use the -@code{vi} editor, you could use these commands with the @code{sh} shell: -@smallexample -EDITOR=/usr/bin/vi -export EDITOR -gdb ... -@end smallexample -or in the @code{csh} shell, -@smallexample -setenv EDITOR /usr/bin/vi -gdb ... -@end smallexample - -@node Search -@section Searching source files -@cindex searching -@kindex reverse-search - -There are two commands for searching through the current source file for a -regular expression. - -@table @code -@kindex search -@kindex forward-search -@item forward-search @var{regexp} -@itemx search @var{regexp} -The command @samp{forward-search @var{regexp}} checks each line, -starting with the one following the last line listed, for a match for -@var{regexp}. It lists the line that is found. You can use the -synonym @samp{search @var{regexp}} or abbreviate the command name as -@code{fo}. - -@item reverse-search @var{regexp} -The command @samp{reverse-search @var{regexp}} checks each line, starting -with the one before the last line listed and going backward, for a match -for @var{regexp}. It lists the line that is found. You can abbreviate -this command as @code{rev}. -@end table - -@node Source Path -@section Specifying source directories - -@cindex source path -@cindex directories for source files -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. @value{GDBN} has a list of directories to search for source files; -this is called the @dfn{source path}. Each time @value{GDBN} 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 @emph{not} used for this purpose. Neither is -the current working directory, unless it happens to be in the source -path. - -If @value{GDBN} cannot find a source file in the source path, and the -object program records a directory, @value{GDBN} tries that directory -too. If the source path is empty, and there is no record of the -compilation directory, @value{GDBN} looks in the current directory as a -last resort. - -Whenever you reset or rearrange the source path, @value{GDBN} clears out -any information it has cached about where source files are found and where -each line is in the file. - -@kindex directory -@kindex dir -When you start @value{GDBN}, its source path includes only @samp{cdir} -and @samp{cwd}, in that order. -To add other directories, use the @code{directory} command. - -@table @code -@item directory @var{dirname} @dots{} -@item dir @var{dirname} @dots{} -Add directory @var{dirname} to the front of the source path. Several -directory names may be given to this command, separated by @samp{:} -(@samp{;} on MS-DOS and MS-Windows, where @samp{:} 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 @value{GDBN} searches it sooner. - -@kindex cdir -@kindex cwd -@vindex $cdir@r{, convenience variable} -@vindex $cwdr@r{, convenience variable} -@cindex compilation directory -@cindex current directory -@cindex working directory -@cindex directory, current -@cindex directory, compilation -You can use the string @samp{$cdir} to refer to the compilation -directory (if one is recorded), and @samp{$cwd} to refer to the current -working directory. @samp{$cwd} is not the same as @samp{.}---the former -tracks the current working directory as it changes during your @value{GDBN} -session, while the latter is immediately expanded to the current -directory at the time you add an entry to the source path. - -@item directory -Reset the source path to empty again. This requires confirmation. - -@c RET-repeat for @code{directory} is explicitly disabled, but since -@c repeating it would be a no-op we do not say that. (thanks to RMS) - -@item show directories -@kindex show directories -Print the source path: show which directories it contains. -@end table - -If your source path is cluttered with directories that are no longer of -interest, @value{GDBN} may sometimes cause confusion by finding the wrong -versions of source. You can correct the situation as follows: - -@enumerate -@item -Use @code{directory} with no argument to reset the source path to empty. - -@item -Use @code{directory} with suitable arguments to reinstall the -directories you want in the source path. You can add all the -directories in one command. -@end enumerate - -@node Machine Code -@section Source and machine code - -You can use the command @code{info line} to map source lines to program -addresses (and vice versa), and the command @code{disassemble} to display -a range of addresses as machine instructions. When run under @sc{gnu} Emacs -mode, the @code{info line} command causes the arrow to point to the -line specified. Also, @code{info line} prints addresses in symbolic form as -well as hex. - -@table @code -@kindex info line -@item info line @var{linespec} -Print the starting and ending addresses of the compiled code for -source line @var{linespec}. You can specify source lines in any of -the ways understood by the @code{list} command (@pxref{List, ,Printing -source lines}). -@end table - -For example, we can use @code{info line} to discover the location of -the object code for the first line of function -@code{m4_changequote}: - -@c FIXME: I think this example should also show the addresses in -@c symbolic form, as they usually would be displayed. -@smallexample -(@value{GDBP}) info line m4_changequote -Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350. -@end smallexample - -@noindent -We can also inquire (using @code{*@var{addr}} as the form for -@var{linespec}) what source line covers a particular address: -@smallexample -(@value{GDBP}) info line *0x63ff -Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404. -@end smallexample - -@cindex @code{$_} and @code{info line} -@kindex x@r{(examine), and} info line -After @code{info line}, the default address for the @code{x} command -is changed to the starting address of the line, so that @samp{x/i} is -sufficient to begin examining the machine code (@pxref{Memory, -,Examining memory}). Also, this address is saved as the value of the -convenience variable @code{$_} (@pxref{Convenience Vars, ,Convenience -variables}). - -@table @code -@kindex disassemble -@cindex assembly instructions -@cindex instructions, assembly -@cindex machine instructions -@cindex listing machine instructions -@item 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; @value{GDBN} dumps the function -surrounding this value. Two arguments specify a range of addresses -(first inclusive, second exclusive) to dump. -@end table - -The following example shows the disassembly of a range of addresses of -HP PA-RISC 2.0 code: - -@smallexample -(@value{GDBP}) 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. -@end smallexample - -Some architectures have more than one commonly-used set of instruction -mnemonics or other syntax. - -@table @code -@kindex set disassembly-flavor -@cindex assembly instructions -@cindex instructions, assembly -@cindex machine instructions -@cindex listing machine instructions -@cindex Intel disassembly flavor -@cindex AT&T disassembly flavor -@item set disassembly-flavor @var{instruction-set} -Select the instruction set to use when disassembling the -program via the @code{disassemble} or @code{x/i} commands. - -Currently this command is only defined for the Intel x86 family. You -can set @var{instruction-set} to either @code{intel} or @code{att}. -The default is @code{att}, the AT&T flavor used by default by Unix -assemblers for x86-based targets. -@end table - - -@node Data -@chapter Examining Data - -@cindex printing data -@cindex examining data -@kindex print -@kindex inspect -@c "inspect" is not quite a synonym if you are using Epoch, which we do not -@c document because it is nonstandard... Under Epoch it displays in a -@c different window or something like that. -The usual way to examine data in your program is with the @code{print} -command (abbreviated @code{p}), or its synonym @code{inspect}. It -evaluates and prints the value of an expression of the language your -program is written in (@pxref{Languages, ,Using @value{GDBN} with -Different Languages}). - -@table @code -@item print @var{expr} -@itemx print /@var{f} @var{expr} -@var{expr} is an expression (in the source language). By default the -value of @var{expr} is printed in a format appropriate to its data type; -you can choose a different format by specifying @samp{/@var{f}}, where -@var{f} is a letter specifying the format; see @ref{Output Formats,,Output -formats}. - -@item print -@itemx print /@var{f} -If you omit @var{expr}, @value{GDBN} displays the last value again (from the -@dfn{value history}; @pxref{Value History, ,Value history}). This allows you to -conveniently inspect the same value in an alternative format. -@end table - -A more low-level way of examining data is with the @code{x} command. -It examines data in memory at a specified address and prints it in a -specified format. @xref{Memory, ,Examining memory}. - -If you are interested in information about types, or about how the -fields of a struct or a class are declared, use the @code{ptype @var{exp}} -command rather than @code{print}. @xref{Symbols, ,Examining the Symbol -Table}. - -@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 -@end menu - -@node Expressions -@section Expressions - -@cindex expressions -@code{print} and many other @value{GDBN} 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 -@value{GDBN}. 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 -@ref{Compilation}. - -@value{GDBN} supports array constants in expressions input by -the user. The syntax is @{@var{element}, @var{element}@dots{}@}. For example, -you can use the command @code{print @{1, 2, 3@}} to build up an array in -memory that is @code{malloc}ed in the target program. - -Because C is so widespread, most of the expressions shown in examples in -this manual are in C. @xref{Languages, , Using @value{GDBN} with Different -Languages}, for information on how to use expressions in other -languages. - -In this section, we discuss operators that you can use in @value{GDBN} -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. -@c FIXME: casts supported---Mod2 true? - -@value{GDBN} supports these operators, in addition to those common -to programming languages: - -@table @code -@item @@ -@samp{@@} is a binary operator for treating parts of memory as arrays. -@xref{Arrays, ,Artificial arrays}, for more information. - -@item :: -@samp{::} allows you to specify a variable in terms of the file or -function where it is defined. @xref{Variables, ,Program variables}. - -@cindex @{@var{type}@} -@cindex type casting memory -@cindex memory, viewing as typed object -@cindex casts, to view memory -@item @{@var{type}@} @var{addr} -Refers to an object of type @var{type} stored at address @var{addr} in -memory. @var{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 @var{addr}. -@end table - -@node Variables -@section 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 -(@pxref{Selection, ,Selecting a frame}); they must be either: - -@itemize @bullet -@item -global (or file-static) -@end itemize - -@noindent or - -@itemize @bullet -@item -visible according to the scope rules of the -programming language from the point of execution in that frame -@end itemize - -@noindent This means that in the function - -@smallexample -foo (a) - int a; -@{ - bar (a); - @{ - int b = test (); - bar (b); - @} -@} -@end smallexample - -@noindent -you can examine and use the variable @code{a} whenever your program is -executing within the function @code{foo}, but you can only use or -examine the variable @code{b} while your program is executing inside -the block where @code{b} is declared. - -@cindex variable name conflict -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: - -@cindex colon-colon, context for variables/functions -@iftex -@c info cannot cope with a :: index entry, but why deprive hard copy readers? -@cindex @code{::}, context for variables/functions -@end iftex -@smallexample -@var{file}::@var{variable} -@var{function}::@var{variable} -@end smallexample - -@noindent -Here @var{file} or @var{function} is the name of the context for the -static @var{variable}. In the case of file names, you can use quotes to -make sure @value{GDBN} parses the file name as a single word---for example, -to print a global value of @code{x} defined in @file{f2.c}: - -@smallexample -(@value{GDBP}) p 'f2.c'::x -@end smallexample - -@cindex C@t{++} scope resolution -This use of @samp{::} is very rarely in conflict with the very similar -use of the same notation in C@t{++}. @value{GDBN} also supports use of the C@t{++} -scope resolution operator in @value{GDBN} expressions. -@c FIXME: Um, so what happens in one of those rare cases where it's in -@c conflict?? --mew - -@cindex wrong values -@cindex variable values, wrong -@quotation -@emph{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. -@end quotation -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. - -@cindex ``No symbol "foo" in current context'' -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, @value{GDBN} -might not be able to display values for such local variables. If that -happens, @value{GDBN} will print a message like this: - -@smallexample -No symbol "foo" in current context. -@end smallexample - -To solve such problems, either recompile without optimizations, or use a -different debug info format, if the compiler supports several such -formats. For example, @value{NGCC}, the @sc{gnu} C/C@t{++} compiler -usually supports the @option{-gstabs+} option. @option{-gstabs+} -produces debug info in a format that is superior to formats such as -COFF. You may be able to use DWARF 2 (@option{-gdwarf-2}), which is also -an effective form for debug info. @xref{Debugging Options,,Options -for Debugging Your Program or @sc{gnu} CC, gcc.info, Using @sc{gnu} CC}. - - -@node Arrays -@section Artificial arrays - -@cindex artificial array -@kindex @@@r{, referencing memory as an array} -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 -@dfn{artificial array}, using the binary operator @samp{@@}. The left -operand of @samp{@@} 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 - -@smallexample -int *array = (int *) malloc (len * sizeof (int)); -@end smallexample - -@noindent -you can print the contents of @code{array} with - -@smallexample -p *array@@len -@end smallexample - -The left operand of @samp{@@} must reside in memory. Array values made -with @samp{@@} 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 -(@pxref{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: -@smallexample -(@value{GDBP}) p/x (short[2])0x12345678 -$1 = @{0x1234, 0x5678@} -@end smallexample - -As a convenience, if you leave the array length out (as in -@samp{(@var{type}[])@var{value}}) @value{GDBN} calculates the size to fill -the value (as @samp{sizeof(@var{value})/sizeof(@var{type})}: -@smallexample -(@value{GDBP}) p/x (short[])0x12345678 -$2 = @{0x1234, 0x5678@} -@end smallexample - -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 (@pxref{Convenience Vars, ,Convenience -variables}) as a counter in an expression that prints the first -interesting value, and then repeat that expression via @key{RET}. For -instance, suppose you have an array @code{dtab} of pointers to -structures, and you are interested in the values of a field @code{fv} -in each structure. Here is an example of what you might type: - -@smallexample -set $i = 0 -p dtab[$i++]->fv -@key{RET} -@key{RET} -@dots{} -@end smallexample - -@node Output Formats -@section Output formats - -@cindex formatted output -@cindex output formats -By default, @value{GDBN} 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 @dfn{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 -@code{print} command with a slash and a format letter. The format -letters supported are: - -@table @code -@item x -Regard the bits of the value as an integer, and print the integer in -hexadecimal. - -@item d -Print as integer in signed decimal. - -@item u -Print as integer in unsigned decimal. - -@item o -Print as integer in octal. - -@item t -Print as integer in binary. The letter @samp{t} stands for ``two''. -@footnote{@samp{b} cannot be used because these format letters are also -used with the @code{x} command, where @samp{b} stands for ``byte''; -see @ref{Memory,,Examining memory}.} - -@item a -@cindex unknown address, locating -@cindex locate address -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: - -@smallexample -(@value{GDBP}) p/a 0x54320 -$3 = 0x54320 <_initialize_vx+396> -@end smallexample - -@noindent -The command @code{info symbol 0x54320} yields similar results. -@xref{Symbols, info symbol}. - -@item c -Regard as an integer and print it as a character constant. - -@item f -Regard the bits of the value as a floating point number and print -using typical floating point syntax. -@end table - -For example, to print the program counter in hex (@pxref{Registers}), type - -@smallexample -p/x $pc -@end smallexample - -@noindent -Note that no space is required before the slash; this is because command -names in @value{GDBN} cannot contain a slash. - -To reprint the last value in the value history with a different format, -you can use the @code{print} command with just a format and no -expression. For example, @samp{p/x} reprints the last value in hex. - -@node Memory -@section Examining memory - -You can use the command @code{x} (for ``examine'') to examine memory in -any of several formats, independently of your program's data types. - -@cindex examining memory -@table @code -@kindex x @r{(examine memory)} -@item x/@var{nfu} @var{addr} -@itemx x @var{addr} -@itemx x -Use the @code{x} command to examine memory. -@end table - -@var{n}, @var{f}, and @var{u} are all optional parameters that specify how -much memory to display and how to format it; @var{addr} is an -expression giving the address where you want to start displaying memory. -If you use defaults for @var{nfu}, you need not type the slash @samp{/}. -Several commands set convenient defaults for @var{addr}. - -@table @r -@item @var{n}, the repeat count -The repeat count is a decimal integer; the default is 1. It specifies -how much memory (counting by units @var{u}) to display. -@c This really is **decimal**; unaffected by 'set radix' as of GDB -@c 4.1.2. - -@item @var{f}, the display format -The display format is one of the formats used by @code{print}, -@samp{s} (null-terminated string), or @samp{i} (machine instruction). -The default is @samp{x} (hexadecimal) initially. -The default changes each time you use either @code{x} or @code{print}. - -@item @var{u}, the unit size -The unit size is any of - -@table @code -@item b -Bytes. -@item h -Halfwords (two bytes). -@item w -Words (four bytes). This is the initial default. -@item g -Giant words (eight bytes). -@end table - -Each time you specify a unit size with @code{x}, that size becomes the -default unit the next time you use @code{x}. (For the @samp{s} and -@samp{i} formats, the unit size is ignored and is normally not written.) - -@item @var{addr}, starting display address -@var{addr} is the address where you want @value{GDBN} 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. -@xref{Expressions, ,Expressions}, for more information on expressions. The default for -@var{addr} is usually just after the last address examined---but several -other commands also set the default address: @code{info breakpoints} (to -the address of the last breakpoint listed), @code{info line} (to the -starting address of a line), and @code{print} (if you use it to display -a value from memory). -@end table - -For example, @samp{x/3uh 0x54320} is a request to display three halfwords -(@code{h}) of memory, formatted as unsigned decimal integers (@samp{u}), -starting at address @code{0x54320}. @samp{x/4xw $sp} prints the four -words (@samp{w}) of memory above the stack pointer (here, @samp{$sp}; -@pxref{Registers, ,Registers}) in hexadecimal (@samp{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 @samp{4xw} and @samp{4wx} mean exactly the same thing. -(However, the count @var{n} must come first; @samp{wx4} does not work.) - -Even though the unit size @var{u} is ignored for the formats @samp{s} -and @samp{i}, you might still want to use a count @var{n}; for example, -@samp{3i} specifies that you want to see three machine instructions, -including any operands. The command @code{disassemble} gives an -alternative way of inspecting machine instructions; see @ref{Machine -Code,,Source and machine code}. - -All the defaults for the arguments to @code{x} are designed to make it -easy to continue scanning memory with minimal specifications each time -you use @code{x}. For example, after you have inspected three machine -instructions with @samp{x/3i @var{addr}}, you can inspect the next seven -with just @samp{x/7}. If you use @key{RET} to repeat the @code{x} command, -the repeat count @var{n} is used again; the other arguments default as -for successive uses of @code{x}. - -@cindex @code{$_}, @code{$__}, and value history -The addresses and contents printed by the @code{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, @value{GDBN} makes these values available for -subsequent use in expressions as values of the convenience variables -@code{$_} and @code{$__}. After an @code{x} command, the last address -examined is available for use in expressions in the convenience variable -@code{$_}. The contents of that address, as examined, are available in -the convenience variable @code{$__}. - -If the @code{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. - -@node Auto Display -@section Automatic display -@cindex automatic display -@cindex display of expressions - -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 @dfn{automatic -display list} so that @value{GDBN} 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: - -@smallexample -2: foo = 38 -3: bar[5] = (struct hack *) 0x3804 -@end smallexample - -@noindent -This display shows item numbers, expressions and their current values. As with -displays you request manually using @code{x} or @code{print}, you can -specify the output format you prefer; in fact, @code{display} decides -whether to use @code{print} or @code{x} depending on how elaborate your -format specification is---it uses @code{x} if you specify a unit size, -or one of the two formats (@samp{i} and @samp{s}) that are only -supported by @code{x}; otherwise it uses @code{print}. - -@table @code -@kindex display -@item display @var{expr} -Add the expression @var{expr} to the list of expressions to display -each time your program stops. @xref{Expressions, ,Expressions}. - -@code{display} does not repeat if you press @key{RET} again after using it. - -@item display/@var{fmt} @var{expr} -For @var{fmt} specifying only a display format and not a size or -count, add the expression @var{expr} to the auto-display list but -arrange to display it each time in the specified format @var{fmt}. -@xref{Output Formats,,Output formats}. - -@item display/@var{fmt} @var{addr} -For @var{fmt} @samp{i} or @samp{s}, or including a unit-size or a -number of units, add the expression @var{addr} as a memory address to -be examined each time your program stops. Examining means in effect -doing @samp{x/@var{fmt} @var{addr}}. @xref{Memory, ,Examining memory}. -@end table - -For example, @samp{display/i $pc} can be helpful, to see the machine -instruction about to be executed each time execution stops (@samp{$pc} -is a common name for the program counter; @pxref{Registers, ,Registers}). - -@table @code -@kindex delete display -@kindex undisplay -@item undisplay @var{dnums}@dots{} -@itemx delete display @var{dnums}@dots{} -Remove item numbers @var{dnums} from the list of expressions to display. - -@code{undisplay} does not repeat if you press @key{RET} after using it. -(Otherwise you would just get the error @samp{No display number @dots{}}.) - -@kindex disable display -@item disable display @var{dnums}@dots{} -Disable the display of item numbers @var{dnums}. A disabled display -item is not printed automatically, but is not forgotten. It may be -enabled again later. - -@kindex enable display -@item enable display @var{dnums}@dots{} -Enable display of item numbers @var{dnums}. It becomes effective once -again in auto display of its expression, until you specify otherwise. - -@item display -Display the current values of the expressions on the list, just as is -done when your program stops. - -@kindex info display -@item 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. -@end table - -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 -@code{display last_char} while inside a function with an argument -@code{last_char}, @value{GDBN} displays this argument while your program -continues to stop inside that function. When it stops elsewhere---where -there is no variable @code{last_char}---the display is disabled -automatically. The next time your program stops where @code{last_char} -is meaningful, you can enable the display expression once again. - -@node Print Settings -@section Print settings - -@cindex format options -@cindex print settings -@value{GDBN} provides the following ways to control how arrays, structures, -and symbols are printed. - -@noindent -These settings are useful for debugging programs in any language: - -@table @code -@kindex set print address -@item set print address -@itemx set print address on -@value{GDBN} 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 @code{on}. For example, this is what a stack frame display looks like with -@code{set print address on}: - -@smallexample -@group -(@value{GDBP}) f -#0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>") - at input.c:530 -530 if (lquote != def_lquote) -@end group -@end smallexample - -@item set print address off -Do not print addresses when displaying their contents. For example, -this is the same stack frame displayed with @code{set print address off}: - -@smallexample -@group -(@value{GDBP}) set print addr off -(@value{GDBP}) f -#0 set_quotes (lq="<<", rq=">>") at input.c:530 -530 if (lquote != def_lquote) -@end group -@end smallexample - -You can use @samp{set print address off} to eliminate all machine -dependent displays from the @value{GDBN} interface. For example, with -@code{print address off}, you should get the same text for backtraces on -all machines---whether or not they involve pointer arguments. - -@kindex show print address -@item show print address -Show whether or not addresses are to be printed. -@end table - -When @value{GDBN} 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 -@code{info line}, for example @samp{info line *0x4537}. Alternately, -you can set @value{GDBN} to print the source file and line number when -it prints a symbolic address: - -@table @code -@kindex set print symbol-filename -@item set print symbol-filename on -Tell @value{GDBN} to print the source file name and line number of a -symbol in the symbolic form of an address. - -@item set print symbol-filename off -Do not print source file name and line number of a symbol. This is the -default. - -@kindex show print symbol-filename -@item show print symbol-filename -Show whether or not @value{GDBN} will print the source file name and -line number of a symbol in the symbolic form of an address. -@end table - -Another situation where it is helpful to show symbol filenames and line -numbers is when disassembling code; @value{GDBN} 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: - -@table @code -@kindex set print max-symbolic-offset -@item set print max-symbolic-offset @var{max-offset} -Tell @value{GDBN} to only display the symbolic form of an address if the -offset between the closest earlier symbol and the address is less than -@var{max-offset}. The default is 0, which tells @value{GDBN} -to always print the symbolic form of an address if any symbol precedes it. - -@kindex show print max-symbolic-offset -@item show print max-symbolic-offset -Ask how large the maximum offset is that @value{GDBN} prints in a -symbolic address. -@end table - -@cindex wild pointer, interpreting -@cindex pointer, finding referent -If you have a pointer and you are not sure where it points, try -@samp{set print symbol-filename on}. Then you can determine the name -and source file location of the variable where it points, using -@samp{p/a @var{pointer}}. This interprets the address in symbolic form. -For example, here @value{GDBN} shows that a variable @code{ptt} points -at another variable @code{t}, defined in @file{hi2.c}: - -@smallexample -(@value{GDBP}) set print symbol-filename on -(@value{GDBP}) p/a ptt -$4 = 0xe008 <t in hi2.c> -@end smallexample - -@quotation -@emph{Warning:} For pointers that point to a local variable, @samp{p/a} -does not show the symbol name and filename of the referent, even with -the appropriate @code{set print} options turned on. -@end quotation - -Other settings control how different kinds of objects are printed: - -@table @code -@kindex set print array -@item set print array -@itemx set print array on -Pretty print arrays. This format is more convenient to read, -but uses more space. The default is off. - -@item set print array off -Return to compressed format for arrays. - -@kindex show print array -@item show print array -Show whether compressed or pretty format is selected for displaying -arrays. - -@kindex set print elements -@item set print elements @var{number-of-elements} -Set a limit on how many elements of an array @value{GDBN} will print. -If @value{GDBN} is printing a large array, it stops printing after it has -printed the number of elements set by the @code{set print elements} command. -This limit also applies to the display of strings. -When @value{GDBN} starts, this limit is set to 200. -Setting @var{number-of-elements} to zero means that the printing is unlimited. - -@kindex show print elements -@item show print elements -Display the number of elements of a large array that @value{GDBN} will print. -If the number is 0, then the printing is unlimited. - -@kindex set print null-stop -@item set print null-stop -Cause @value{GDBN} to stop printing the characters of an array when the first -@sc{null} is encountered. This is useful when large arrays actually -contain only short strings. -The default is off. - -@kindex set print pretty -@item set print pretty on -Cause @value{GDBN} to print structures in an indented format with one member -per line, like this: - -@smallexample -@group -$1 = @{ - next = 0x0, - flags = @{ - sweet = 1, - sour = 1 - @}, - meat = 0x54 "Pork" -@} -@end group -@end smallexample - -@item set print pretty off -Cause @value{GDBN} to print structures in a compact format, like this: - -@smallexample -@group -$1 = @{next = 0x0, flags = @{sweet = 1, sour = 1@}, \ -meat = 0x54 "Pork"@} -@end group -@end smallexample - -@noindent -This is the default format. - -@kindex show print pretty -@item show print pretty -Show which format @value{GDBN} is using to print structures. - -@kindex set print sevenbit-strings -@item set print sevenbit-strings on -Print using only seven-bit characters; if this option is set, -@value{GDBN} displays any eight-bit characters (in strings or -character values) using the notation @code{\}@var{nnn}. This setting is -best if you are working in English (@sc{ascii}) and you use the -high-order bit of characters as a marker or ``meta'' bit. - -@item set print sevenbit-strings off -Print full eight-bit characters. This allows the use of more -international character sets, and is the default. - -@kindex show print sevenbit-strings -@item show print sevenbit-strings -Show whether or not @value{GDBN} is printing only seven-bit characters. - -@kindex set print union -@item set print union on -Tell @value{GDBN} to print unions which are contained in structures. This -is the default setting. - -@item set print union off -Tell @value{GDBN} not to print unions which are contained in structures. - -@kindex show print union -@item show print union -Ask @value{GDBN} whether or not it will print unions which are contained in -structures. - -For example, given the declarations - -@smallexample -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@}@}; -@end smallexample - -@noindent -with @code{set print union on} in effect @samp{p foo} would print - -@smallexample -$1 = @{it = Tree, form = @{tree = Acorn, bug = Cocoon@}@} -@end smallexample - -@noindent -and with @code{set print union off} in effect it would print - -@smallexample -$1 = @{it = Tree, form = @{...@}@} -@end smallexample -@end table - -@need 1000 -@noindent -These settings are of interest when debugging C@t{++} programs: - -@table @code -@cindex demangling -@kindex set print demangle -@item set print demangle -@itemx set print demangle on -Print C@t{++} 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. - -@kindex show print demangle -@item show print demangle -Show whether C@t{++} names are printed in mangled or demangled form. - -@kindex set print asm-demangle -@item set print asm-demangle -@itemx set print asm-demangle on -Print C@t{++} names in their source form rather than their mangled form, even -in assembler code printouts such as instruction disassemblies. -The default is off. - -@kindex show print asm-demangle -@item show print asm-demangle -Show whether C@t{++} names in assembly listings are printed in mangled -or demangled form. - -@kindex set demangle-style -@cindex C@t{++} symbol decoding style -@cindex symbol decoding style, C@t{++} -@item set demangle-style @var{style} -Choose among several encoding schemes used by different compilers to -represent C@t{++} names. The choices for @var{style} are currently: - -@table @code -@item auto -Allow @value{GDBN} to choose a decoding style by inspecting your program. - -@item gnu -Decode based on the @sc{gnu} C@t{++} compiler (@code{g++}) encoding algorithm. -This is the default. - -@item hp -Decode based on the HP ANSI C@t{++} (@code{aCC}) encoding algorithm. - -@item lucid -Decode based on the Lucid C@t{++} compiler (@code{lcc}) encoding algorithm. - -@item arm -Decode using the algorithm in the @cite{C@t{++} Annotated Reference Manual}. -@strong{Warning:} this setting alone is not sufficient to allow -debugging @code{cfront}-generated executables. @value{GDBN} would -require further enhancement to permit that. - -@end table -If you omit @var{style}, you will see a list of possible formats. - -@kindex show demangle-style -@item show demangle-style -Display the encoding style currently in use for decoding C@t{++} symbols. - -@kindex set print object -@item set print object -@itemx set print object on -When displaying a pointer to an object, identify the @emph{actual} -(derived) type of the object rather than the @emph{declared} type, using -the virtual function table. - -@item set print object off -Display only the declared type of objects, without reference to the -virtual function table. This is the default setting. - -@kindex show print object -@item show print object -Show whether actual, or declared, object types are displayed. - -@kindex set print static-members -@item set print static-members -@itemx set print static-members on -Print static members when displaying a C@t{++} object. The default is on. - -@item set print static-members off -Do not print static members when displaying a C@t{++} object. - -@kindex show print static-members -@item show print static-members -Show whether C@t{++} static members are printed, or not. - -@c These don't work with HP ANSI C++ yet. -@kindex set print vtbl -@item set print vtbl -@itemx set print vtbl on -Pretty print C@t{++} virtual function tables. The default is off. -(The @code{vtbl} commands do not work on programs compiled with the HP -ANSI C@t{++} compiler (@code{aCC}).) - -@item set print vtbl off -Do not pretty print C@t{++} virtual function tables. - -@kindex show print vtbl -@item show print vtbl -Show whether C@t{++} virtual function tables are pretty printed, or not. -@end table - -@node Value History -@section Value history - -@cindex value history -Values printed by the @code{print} command are saved in the @value{GDBN} -@dfn{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 @code{file} or @code{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. - -@cindex @code{$} -@cindex @code{$$} -@cindex history number -The values printed are given @dfn{history numbers} by which you can -refer to them. These are successive integers starting with one. -@code{print} shows you the history number assigned to a value by -printing @samp{$@var{num} = } before the value; here @var{num} is the -history number. - -To refer to any previous value, use @samp{$} followed by the value's -history number. The way @code{print} labels its output is designed to -remind you of this. Just @code{$} refers to the most recent value in -the history, and @code{$$} refers to the value before that. -@code{$$@var{n}} refers to the @var{n}th value from the end; @code{$$2} -is the value just prior to @code{$$}, @code{$$1} is equivalent to -@code{$$}, and @code{$$0} is equivalent to @code{$}. - -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 - -@smallexample -p *$ -@end smallexample - -If you have a chain of structures where the component @code{next} points -to the next one, you can print the contents of the next one with this: - -@smallexample -p *$.next -@end smallexample - -@noindent -You can print successive links in the chain by repeating this -command---which you can do by just typing @key{RET}. - -Note that the history records values, not expressions. If the value of -@code{x} is 4 and you type these commands: - -@smallexample -print x -set x=5 -@end smallexample - -@noindent -then the value recorded in the value history by the @code{print} command -remains 4 even though the value of @code{x} has changed. - -@table @code -@kindex show values -@item show values -Print the last ten values in the value history, with their item numbers. -This is like @samp{p@ $$9} repeated ten times, except that @code{show -values} does not change the history. - -@item show values @var{n} -Print ten history values centered on history item number @var{n}. - -@item show values + -Print ten history values just after the values last printed. If no more -values are available, @code{show values +} produces no display. -@end table - -Pressing @key{RET} to repeat @code{show values @var{n}} has exactly the -same effect as @samp{show values +}. - -@node Convenience Vars -@section Convenience variables - -@cindex convenience variables -@value{GDBN} provides @dfn{convenience variables} that you can use within -@value{GDBN} to hold on to a value and refer to it later. These variables -exist entirely within @value{GDBN}; 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 @samp{$}. Any name preceded by -@samp{$} can be used for a convenience variable, unless it is one of -the predefined machine-specific register names (@pxref{Registers, ,Registers}). -(Value history references, in contrast, are @emph{numbers} preceded -by @samp{$}. @xref{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: - -@smallexample -set $foo = *object_ptr -@end smallexample - -@noindent -would save in @code{$foo} the value contained in the object pointed to by -@code{object_ptr}. - -Using a convenience variable for the first time creates it, but its -value is @code{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. - -@table @code -@kindex show convenience -@item show convenience -Print a list of convenience variables used so far, and their values. -Abbreviated @code{show conv}. -@end table - -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: - -@smallexample -set $i = 0 -print bar[$i++]->contents -@end smallexample - -@noindent -Repeat that command by typing @key{RET}. - -Some convenience variables are created automatically by @value{GDBN} and given -values likely to be useful. - -@table @code -@vindex $_@r{, convenience variable} -@item $_ -The variable @code{$_} is automatically set by the @code{x} command to -the last address examined (@pxref{Memory, ,Examining memory}). Other -commands which provide a default address for @code{x} to examine also -set @code{$_} to that address; these commands include @code{info line} -and @code{info breakpoint}. The type of @code{$_} is @code{void *} -except when set by the @code{x} command, in which case it is a pointer -to the type of @code{$__}. - -@vindex $__@r{, convenience variable} -@item $__ -The variable @code{$__} is automatically set by the @code{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. - -@item $_exitcode -@vindex $_exitcode@r{, convenience variable} -The variable @code{$_exitcode} is automatically set to the exit code when -the program being debugged terminates. -@end table - -On HP-UX systems, if you refer to a function or variable name that -begins with a dollar sign, @value{GDBN} searches for a user or system -name first, before it searches for a convenience variable. - -@node Registers -@section Registers - -@cindex registers -You can refer to machine register contents, in expressions, as variables -with names starting with @samp{$}. The names of registers are different -for each machine; use @code{info registers} to see the names used on -your machine. - -@table @code -@kindex info registers -@item info registers -Print the names and values of all registers except floating-point -and vector registers (in the selected stack frame). - -@kindex info all-registers -@cindex floating point registers -@item info all-registers -Print the names and values of all registers, including floating-point -and vector registers (in the selected stack frame). - -@item info registers @var{regname} @dots{} -Print the @dfn{relativized} value of each specified register @var{regname}. -As discussed in detail below, register values are normally relative to -the selected stack frame. @var{regname} may be any register name valid on -the machine you are using, with or without the initial @samp{$}. -@end table - -@value{GDBN} 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 -@code{$pc} and @code{$sp} are used for the program counter register and -the stack pointer. @code{$fp} is used for a register that contains a -pointer to the current stack frame, and @code{$ps} is used for a -register that contains the processor status. For example, -you could print the program counter in hex with - -@smallexample -p/x $pc -@end smallexample - -@noindent -or print the instruction to be executed next with - -@smallexample -x/i $pc -@end smallexample - -@noindent -or add four to the stack pointer@footnote{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 @code{$sp} is not allowed when other -stack frames are selected. To pop entire frames off the stack, -regardless of machine architecture, use @code{return}; -see @ref{Returning, ,Returning from a function}.} with - -@smallexample -set $sp += 4 -@end smallexample - -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 @code{info registers} command -shows the canonical names. For example, on the SPARC, @code{info -registers} displays the processor status register as @code{$psr} but you -can also refer to it as @code{$ps}; and on x86-based machines @code{$ps} -is an alias for the @sc{eflags} register. - -@value{GDBN} 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 @emph{print} it as a floating point value with -@samp{print/f $@var{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, @value{GDBN} normally works with the virtual format only (the format -that makes sense for your program), but the @code{info registers} command -prints the data in both formats. - -Normally, register values are relative to the selected stack frame -(@pxref{Selection, ,Selecting a frame}). 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 @samp{frame 0}). - -However, @value{GDBN} must deduce where registers are saved, from the machine -code generated by your compiler. If some registers are not saved, or if -@value{GDBN} is unable to locate the saved registers, the selected stack -frame makes no difference. - -@node Floating Point Hardware -@section Floating point hardware -@cindex floating point - -Depending on the configuration, @value{GDBN} may be able to give -you more information about the status of the floating point hardware. - -@table @code -@kindex info float -@item info float -Display hardware-dependent information about the floating -point unit. The exact contents and layout vary depending on the -floating point chip. Currently, @samp{info float} is supported on -the ARM and x86 machines. -@end table - -@node Vector Unit -@section Vector Unit -@cindex vector unit - -Depending on the configuration, @value{GDBN} may be able to give you -more information about the status of the vector unit. - -@table @code -@kindex info vector -@item info vector -Display information about the vector unit. The exact contents and -layout vary depending on the hardware. -@end table - -@node Auxiliary Vector -@section Operating system auxiliary vector -@cindex auxiliary vector -@cindex vector, auxiliary - -Some operating systems supply an @dfn{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, -@value{GDBN} may be able to show you this information. - -@table @code -@kindex info auxv -@item info auxv -Display the auxiliary vector of the inferior, which can be either a -live process or a core dump file. @value{GDBN} 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. @value{GDBN} displays each value in the -most appropriate form for a recognized tag, and in hexadecimal for -an unrecognized tag. -@end table - -@node Memory Region Attributes -@section Memory region attributes -@cindex memory region attributes - -@dfn{Memory region attributes} allow you to describe special handling -required by regions of your target's memory. @value{GDBN} 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, @value{GDBN} uses the default attributes when -accessing memory in that region. Similarly, if no memory regions have -been defined, @value{GDBN} 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. - -@table @code -@kindex mem -@item mem @var{lower} @var{upper} @var{attributes}@dots{} -Define memory region bounded by @var{lower} and @var{upper} with -attributes @var{attributes}@dots{}. Note that @var{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.) - -@kindex delete mem -@item delete mem @var{nums}@dots{} -Remove memory regions @var{nums}@dots{}. - -@kindex disable mem -@item disable mem @var{nums}@dots{} -Disable memory regions @var{nums}@dots{}. -A disabled memory region is not forgotten. -It may be enabled again later. - -@kindex enable mem -@item enable mem @var{nums}@dots{} -Enable memory regions @var{nums}@dots{}. - -@kindex info mem -@item info mem -Print a table of all defined memory regions, with the following columns -for each region. - -@table @emph -@item Memory Region Number -@item Enabled or Disabled. -Enabled memory regions are marked with @samp{y}. -Disabled memory regions are marked with @samp{n}. - -@item Lo Address -The address defining the inclusive lower bound of the memory region. - -@item Hi Address -The address defining the exclusive upper bound of the memory region. - -@item Attributes -The list of attributes set for this memory region. -@end table -@end table - - -@subsection Attributes - -@subsubsection Memory Access Mode -The access mode attributes set whether @value{GDBN} may make read or -write accesses to a memory region. - -While these attributes prevent @value{GDBN} from performing invalid -memory accesses, they do nothing to prevent the target system, I/O DMA, -etc. from accessing memory. - -@table @code -@item ro -Memory is read only. -@item wo -Memory is write only. -@item rw -Memory is read/write. This is the default. -@end table - -@subsubsection Memory Access Size -The acccess size attributes tells @value{GDBN} 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, @value{GDBN} may use accesses of any size. - -@table @code -@item 8 -Use 8 bit memory accesses. -@item 16 -Use 16 bit memory accesses. -@item 32 -Use 32 bit memory accesses. -@item 64 -Use 64 bit memory accesses. -@end table - -@c @subsubsection Hardware/Software Breakpoints -@c The hardware/software breakpoint attributes set whether @value{GDBN} -@c will use hardware or software breakpoints for the internal breakpoints -@c used by the step, next, finish, until, etc. commands. -@c -@c @table @code -@c @item hwbreak -@c Always use hardware breakpoints -@c @item swbreak (default) -@c @end table - -@subsubsection Data Cache -The data cache attributes set whether @value{GDBN} will cache target -memory. While this generally improves performance by reducing debug -protocol overhead, it can lead to incorrect results because @value{GDBN} -does not know about volatile variables or memory mapped device -registers. - -@table @code -@item cache -Enable @value{GDBN} to cache target memory. -@item nocache -Disable @value{GDBN} from caching target memory. This is the default. -@end table - -@c @subsubsection Memory Write Verification -@c The memory write verification attributes set whether @value{GDBN} -@c will re-reads data after each write to verify the write was successful. -@c -@c @table @code -@c @item verify -@c @item noverify (default) -@c @end table - -@node Dump/Restore Files -@section Copy between memory and a file -@cindex dump/restore files -@cindex append data to a file -@cindex dump data to a file -@cindex restore data from a file - -You can use the commands @code{dump}, @code{append}, and -@code{restore} to copy data between target memory and a file. The -@code{dump} and @code{append} commands write data to a file, and the -@code{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, @value{GDBN} can only append to binary -files. - -@table @code - -@kindex dump -@item dump @r{[}@var{format}@r{]} memory @var{filename} @var{start_addr} @var{end_addr} -@itemx dump @r{[}@var{format}@r{]} value @var{filename} @var{expr} -Dump the contents of memory from @var{start_addr} to @var{end_addr}, -or the value of @var{expr}, to @var{filename} in the given format. - -The @var{format} parameter may be any one of: -@table @code -@item binary -Raw binary form. -@item ihex -Intel hex format. -@item srec -Motorola S-record format. -@item tekhex -Tektronix Hex format. -@end table - -@value{GDBN} uses the same definitions of these formats as the -@sc{gnu} binary utilities, like @samp{objdump} and @samp{objcopy}. If -@var{format} is omitted, @value{GDBN} dumps the data in raw binary -form. - -@kindex append -@item append @r{[}binary@r{]} memory @var{filename} @var{start_addr} @var{end_addr} -@itemx append @r{[}binary@r{]} value @var{filename} @var{expr} -Append the contents of memory from @var{start_addr} to @var{end_addr}, -or the value of @var{expr}, to @var{filename}, in raw binary form. -(@value{GDBN} can only append data to files in raw binary form.) - -@kindex restore -@item restore @var{filename} @r{[}binary@r{]} @var{bias} @var{start} @var{end} -Restore the contents of file @var{filename} into memory. The -@code{restore} command can automatically recognize any known @sc{bfd} -file format, except for raw binary. To restore a raw binary file you -must specify the optional keyword @code{binary} after the filename. - -If @var{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 @var{bias}. Other bfd files have -a built-in location; they will be restored at offset @var{bias} -from that location. - -If @var{start} and/or @var{end} are non-zero, then only data between -file offset @var{start} and file offset @var{end} will be restored. -These offsets are relative to the addresses in the file, before -the @var{bias} argument is applied. - -@end table - -@node Character Sets -@section Character Sets -@cindex character sets -@cindex charset -@cindex translating between character sets -@cindex host character set -@cindex target character set - -If the program you are debugging uses a different character set to -represent characters and strings than the one @value{GDBN} uses itself, -@value{GDBN} can automatically translate between the character sets for -you. The character set @value{GDBN} uses we call the @dfn{host -character set}; the one the inferior program uses we call the -@dfn{target character set}. - -For example, if you are running @value{GDBN} on a @sc{gnu}/Linux system, which -uses the ISO Latin 1 character set, but you are using @value{GDBN}'s -remote protocol (@pxref{Remote,Remote Debugging}) to debug a program -running on an IBM mainframe, which uses the @sc{ebcdic} character set, -then the host character set is Latin-1, and the target character set is -@sc{ebcdic}. If you give @value{GDBN} the command @code{set -target-charset EBCDIC-US}, then @value{GDBN} translates between -@sc{ebcdic} and Latin 1 as you print character or string values, or use -character and string literals in expressions. - -@value{GDBN} has no way to automatically recognize which character set -the inferior program uses; you must tell it, using the @code{set -target-charset} command, described below. - -Here are the commands for controlling @value{GDBN}'s character set -support: - -@table @code -@item set target-charset @var{charset} -@kindex set target-charset -Set the current target character set to @var{charset}. We list the -character set names @value{GDBN} recognizes below, but if you type -@code{set target-charset} followed by @key{TAB}@key{TAB}, @value{GDBN} will -list the target character sets it supports. -@end table - -@table @code -@item set host-charset @var{charset} -@kindex set host-charset -Set the current host character set to @var{charset}. - -By default, @value{GDBN} uses a host character set appropriate to the -system it is running on; you can override that default using the -@code{set host-charset} command. - -@value{GDBN} can only use certain character sets as its host character -set. We list the character set names @value{GDBN} recognizes below, and -indicate which can be host character sets, but if you type -@code{set target-charset} followed by @key{TAB}@key{TAB}, @value{GDBN} will -list the host character sets it supports. - -@item set charset @var{charset} -@kindex set charset -Set the current host and target character sets to @var{charset}. As -above, if you type @code{set charset} followed by @key{TAB}@key{TAB}, -@value{GDBN} will list the name of the character sets that can be used -for both host and target. - - -@item show charset -@kindex show charset -Show the names of the current host and target charsets. - -@itemx show host-charset -@kindex show host-charset -Show the name of the current host charset. - -@itemx show target-charset -@kindex show target-charset -Show the name of the current target charset. - -@end table - -@value{GDBN} currently includes support for the following character -sets: - -@table @code - -@item ASCII -@cindex ASCII character set -Seven-bit U.S. @sc{ascii}. @value{GDBN} can use this as its host -character set. - -@item ISO-8859-1 -@cindex ISO 8859-1 character set -@cindex ISO Latin 1 character set -The ISO Latin 1 character set. This extends @sc{ascii} with accented -characters needed for French, German, and Spanish. @value{GDBN} can use -this as its host character set. - -@item EBCDIC-US -@itemx IBM1047 -@cindex EBCDIC character set -@cindex IBM1047 character set -Variants of the @sc{ebcdic} character set, used on some of IBM's -mainframe operating systems. (@sc{gnu}/Linux on the S/390 uses U.S. @sc{ascii}.) -@value{GDBN} cannot use these as its host character set. - -@end table - -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 @value{GDBN}'s character set support in action. -Assume that the following source code has been placed in the file -@file{charset-test.c}: - -@smallexample -#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"); -@} -@end smallexample - -In this program, @code{ascii_hello} and @code{ibm1047_hello} are arrays -containing the string @samp{Hello, world!} followed by a newline, -encoded in the @sc{ascii} and @sc{ibm1047} character sets. - -We compile the program, and invoke the debugger on it: - -@smallexample -$ gcc -g charset-test.c -o charset-test -$ gdb -nw charset-test -GNU gdb 2001-12-19-cvs -Copyright 2001 Free Software Foundation, Inc. -@dots{} -(gdb) -@end smallexample - -We can use the @code{show charset} command to see what character sets -@value{GDBN} is currently using to interpret and display characters and -strings: - -@smallexample -(gdb) show charset -The current host and target character set is `ISO-8859-1'. -(gdb) -@end smallexample - -For the sake of printing this manual, let's use @sc{ascii} as our -initial character set: -@smallexample -(gdb) set charset ASCII -(gdb) show charset -The current host and target character set is `ASCII'. -(gdb) -@end smallexample - -Let's assume that @sc{ascii} is indeed the correct character set for our -host system --- in other words, let's assume that if @value{GDBN} prints -characters using the @sc{ascii} character set, our terminal will display -them properly. Since our current target character set is also -@sc{ascii}, the contents of @code{ascii_hello} print legibly: - -@smallexample -(gdb) print ascii_hello -$1 = 0x401698 "Hello, world!\n" -(gdb) print ascii_hello[0] -$2 = 72 'H' -(gdb) -@end smallexample - -@value{GDBN} uses the target character set for character and string -literals you use in expressions: - -@smallexample -(gdb) print '+' -$3 = 43 '+' -(gdb) -@end smallexample - -The @sc{ascii} character set uses the number 43 to encode the @samp{+} -character. - -@value{GDBN} relies on the user to tell it which character set the -target program uses. If we print @code{ibm1047_hello} while our target -character set is still @sc{ascii}, we get jibberish: - -@smallexample -(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) -@end smallexample - -If we invoke the @code{set target-charset} followed by @key{TAB}@key{TAB}, -@value{GDBN} tells us the character sets it supports: - -@smallexample -(gdb) set target-charset -ASCII EBCDIC-US IBM1047 ISO-8859-1 -(gdb) set target-charset -@end smallexample - -We can select @sc{ibm1047} as our target character set, and examine the -program's strings again. Now the @sc{ascii} string is wrong, but -@value{GDBN} translates the contents of @code{ibm1047_hello} from the -target character set, @sc{ibm1047}, to the host character set, -@sc{ascii}, and they display correctly: - -@smallexample -(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) -@end smallexample - -As above, @value{GDBN} uses the target character set for character and -string literals you use in expressions: - -@smallexample -(gdb) print '+' -$10 = 78 '+' -(gdb) -@end smallexample - -The @sc{ibm1047} character set uses the number 78 to encode the @samp{+} -character. - - -@node Macros -@chapter C Preprocessor Macros - -Some languages, such as C and C@t{++}, provide a way to define and invoke -``preprocessor macros'' which expand into strings of tokens. -@value{GDBN} 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 @value{GDBN} -with information about preprocessor macros. Most compilers do not -include macros in their debugging information, even when you compile -with the @option{-g} flag. @xref{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, @value{GDBN} -uses the macros in scope at that frame's source code line. Otherwise, -@value{GDBN} uses the macros in scope at the current listing location; -see @ref{List}. - -At the moment, @value{GDBN} does not support the @code{##} -token-splicing operator, the @code{#} stringification operator, or -variable-arity macros. - -Whenever @value{GDBN} evaluates an expression, it always expands any -macro invocations present in the expression. @value{GDBN} also provides -the following commands for working with macros explicitly. - -@table @code - -@kindex macro expand -@cindex macro expansion, showing the results of preprocessor -@cindex preprocessor macro expansion, showing the results of -@cindex expanding preprocessor macros -@item macro expand @var{expression} -@itemx macro exp @var{expression} -Show the results of expanding all preprocessor macro invocations in -@var{expression}. Since @value{GDBN} simply expands macros, but does -not parse the result, @var{expression} need not be a valid expression; -it can be any string of tokens. - -@kindex macro expand-once -@item macro expand-once @var{expression} -@itemx macro exp1 @var{expression} -@i{(This command is not yet implemented.)} Show the results of -expanding those preprocessor macro invocations that appear explicitly in -@var{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 @value{GDBN} simply expands macros, but does not -parse the result, @var{expression} need not be a valid expression; it -can be any string of tokens. - -@kindex info macro -@cindex macro definition, showing -@cindex definition, showing a macro's -@item info macro @var{macro} -Show the definition of the macro named @var{macro}, and describe the -source location where that definition was established. - -@kindex macro define -@cindex user-defined macros -@cindex defining macros interactively -@cindex macros, user-defined -@item macro define @var{macro} @var{replacement-list} -@itemx macro define @var{macro}(@var{arglist}) @var{replacement-list} -@i{(This command is not yet implemented.)} Introduce a definition for a -preprocessor macro named @var{macro}, invocations of which are replaced -by the tokens given in @var{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 @var{arglist}. - -A definition introduced by this command is in scope in every expression -evaluated in @value{GDBN}, until it is removed with the @command{macro -undef} command, described below. The definition overrides all -definitions for @var{macro} present in the program being debugged, as -well as any previous user-supplied definition. - -@kindex macro undef -@item macro undef @var{macro} -@i{(This command is not yet implemented.)} Remove any user-supplied -definition for the macro named @var{macro}. This command only affects -definitions provided with the @command{macro define} command, described -above; it cannot remove definitions present in the program being -debugged. - -@end table - -@cindex macros, example of debugging with -Here is a transcript showing the above commands in action. First, we -show our source files: - -@smallexample -$ 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 < -$ -@end smallexample - -Now, we compile the program using the @sc{gnu} C compiler, @value{NGCC}. -We pass the @option{-gdwarf-2} and @option{-g3} flags to ensure the -compiler includes information about preprocessor macros in the debugging -information. - -@smallexample -$ gcc -gdwarf-2 -g3 sample.c -o sample -$ -@end smallexample - -Now, we start @value{GDBN} on our sample program: - -@smallexample -$ gdb -nw sample -GNU gdb 2002-05-06-cvs -Copyright 2002 Free Software Foundation, Inc. -GDB is free software, @dots{} -(gdb) -@end smallexample - -We can expand macros and examine their definitions, even when the -program is not running. @value{GDBN} uses the current listing position -to decide which macro definitions are in scope: - -@smallexample -(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) -@end smallexample - -In the example above, note that @command{macro expand-once} expands only -the macro invocation explicit in the original text --- the invocation of -@code{ADD} --- but does not expand the invocation of the macro @code{M}, -which was introduced by @code{ADD}. - -Once the program is running, GDB uses the macro definitions in force at -the source line of the current stack frame: - -@smallexample -(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) -@end smallexample - -At line 10, the definition of the macro @code{N} at line 9 is in force: - -@smallexample -(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) -@end smallexample - -As we step over directives that remove @code{N}'s definition, and then -give it a new definition, @value{GDBN} finds the definition (or lack -thereof) in force at each point: - -@smallexample -(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) -@end smallexample - - -@node Tracepoints -@chapter Tracepoints -@c This chapter is based on the documentation written by Michael -@c Snyder, David Taylor, Jim Blandy, and Elena Zannoni. - -@cindex 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 @value{GDBN}'s @code{trace} and @code{collect} commands, you can -specify locations in the program, called @dfn{tracepoints}, and -arbitrary expressions to evaluate when those tracepoints are reached. -Later, using the @code{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 @value{GDBN} should record; while visiting -a particular tracepoint, you may inspect those objects as if they were -in memory at that moment. However, because @value{GDBN} 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. @xref{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 @value{GDBN} support -tracepoints as of this writing. - -This chapter describes the tracepoint commands and features. - -@menu -* Set Tracepoints:: -* Analyze Collected Data:: -* Tracepoint Variables:: -@end menu - -@node Set Tracepoints -@section Commands to Set Tracepoints - -Before running such a @dfn{trace experiment}, an arbitrary number of -tracepoints can be set. Like a breakpoint (@pxref{Set Breaks}), a -tracepoint has a number assigned to it by @value{GDBN}. 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 @value{GDBN} -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:: -@end menu - -@node Create and Delete Tracepoints -@subsection Create and Delete Tracepoints - -@table @code -@cindex set tracepoint -@kindex trace -@item trace -The @code{trace} command is very similar to the @code{break} command. -Its argument can be a source line, a function name, or an address in -the target program. @xref{Set Breaks}. The @code{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 @code{tstart} command; thus, you -cannot change the tracepoint attributes once a trace experiment is -running. - -Here are some examples of using the @code{trace} command: - -@smallexample -(@value{GDBP}) @b{trace foo.c:121} // a source file and line number - -(@value{GDBP}) @b{trace +2} // 2 lines forward - -(@value{GDBP}) @b{trace my_function} // first source line of function - -(@value{GDBP}) @b{trace *my_function} // EXACT start address of function - -(@value{GDBP}) @b{trace *0x2117c4} // an address -@end smallexample - -@noindent -You can abbreviate @code{trace} as @code{tr}. - -@vindex $tpnum -@cindex last tracepoint number -@cindex recent tracepoint number -@cindex tracepoint number -The convenience variable @code{$tpnum} records the tracepoint number -of the most recently set tracepoint. - -@kindex delete tracepoint -@cindex tracepoint deletion -@item delete tracepoint @r{[}@var{num}@r{]} -Permanently delete one or more tracepoints. With no argument, the -default is to delete all tracepoints. - -Examples: - -@smallexample -(@value{GDBP}) @b{delete trace 1 2 3} // remove three tracepoints - -(@value{GDBP}) @b{delete trace} // remove all tracepoints -@end smallexample - -@noindent -You can abbreviate this command as @code{del tr}. -@end table - -@node Enable and Disable Tracepoints -@subsection Enable and Disable Tracepoints - -@table @code -@kindex disable tracepoint -@item disable tracepoint @r{[}@var{num}@r{]} -Disable tracepoint @var{num}, or all tracepoints if no argument -@var{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 @code{enable tracepoint} command. - -@kindex enable tracepoint -@item enable tracepoint @r{[}@var{num}@r{]} -Enable tracepoint @var{num}, or all tracepoints. The enabled -tracepoints will become effective the next time a trace experiment is -run. -@end table - -@node Tracepoint Passcounts -@subsection Tracepoint Passcounts - -@table @code -@kindex passcount -@cindex tracepoint pass count -@item passcount @r{[}@var{n} @r{[}@var{num}@r{]]} -Set the @dfn{passcount} of a tracepoint. The passcount is a way to -automatically stop a trace experiment. If a tracepoint's passcount is -@var{n}, then the trace experiment will be automatically stopped on -the @var{n}'th time that tracepoint is hit. If the tracepoint number -@var{num} is not specified, the @code{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: - -@smallexample -(@value{GDBP}) @b{passcount 5 2} // Stop on the 5th execution of -@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// tracepoint 2} - -(@value{GDBP}) @b{passcount 12} // Stop on the 12th execution of the -@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// most recently defined tracepoint.} -(@value{GDBP}) @b{trace foo} -(@value{GDBP}) @b{pass 3} -(@value{GDBP}) @b{trace bar} -(@value{GDBP}) @b{pass 2} -(@value{GDBP}) @b{trace baz} -(@value{GDBP}) @b{pass 1} // Stop tracing when foo has been -@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// executed 3 times OR when bar has} -@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// been executed 2 times} -@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// OR when baz has been executed 1 time.} -@end smallexample -@end table - -@node Tracepoint Actions -@subsection Tracepoint Action Lists - -@table @code -@kindex actions -@cindex tracepoint actions -@item actions @r{[}@var{num}@r{]} -This command will prompt for a list of actions to be taken when the -tracepoint is hit. If the tracepoint number @var{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 -@code{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 @code{end}. So -far, the only defined actions are @code{collect} and -@code{while-stepping}. - -@cindex remove actions from a tracepoint -To remove all actions from a tracepoint, type @samp{actions @var{num}} -and follow it immediately with @samp{end}. - -@smallexample -(@value{GDBP}) @b{collect @var{data}} // collect some data - -(@value{GDBP}) @b{while-stepping 5} // single-step 5 times, collect data - -(@value{GDBP}) @b{end} // signals the end of actions. -@end smallexample - -In the following example, the action list begins with @code{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 @code{while-stepping} command is used, -followed by the list of things to be collected while stepping. The -@code{while-stepping} command is terminated by its own separate -@code{end} command. Lastly, the action list is terminated by an -@code{end} command. - -@smallexample -(@value{GDBP}) @b{trace foo} -(@value{GDBP}) @b{actions} -Enter actions for tracepoint 1, one per line: -> collect bar,baz -> collect $regs -> while-stepping 12 - > collect $fp, $sp - > end -end -@end smallexample - -@kindex collect @r{(tracepoints)} -@item collect @var{expr1}, @var{expr2}, @dots{} -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: - -@table @code -@item $regs -collect all registers - -@item $args -collect all function arguments - -@item $locals -collect all local variables. -@end table - -You can give several consecutive @code{collect} commands, each one -with a single argument, or one @code{collect} command with several -arguments separated by commas: the effect is the same. - -The command @code{info scope} (@pxref{Symbols, info scope}) is -particularly useful for figuring out what data to collect. - -@kindex while-stepping @r{(tracepoints)} -@item while-stepping @var{n} -Perform @var{n} single-step traces after the tracepoint, collecting -new data at each step. The @code{while-stepping} command is -followed by the list of what to collect while stepping (followed by -its own @code{end} command): - -@smallexample -> while-stepping 12 - > collect $regs, myglobal - > end -> -@end smallexample - -@noindent -You may abbreviate @code{while-stepping} as @code{ws} or -@code{stepping}. -@end table - -@node Listing Tracepoints -@subsection Listing Tracepoints - -@table @code -@kindex info tracepoints -@cindex information about tracepoints -@item info tracepoints @r{[}@var{num}@r{]} -Display information about the tracepoint @var{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: - -@itemize @bullet -@item -its number -@item -whether it is enabled or disabled -@item -its address -@item -its passcount as given by the @code{passcount @var{n}} command -@item -its step count as given by the @code{while-stepping @var{n}} command -@item -where in the source files is the tracepoint set -@item -its action list as given by the @code{actions} command -@end itemize - -@smallexample -(@value{GDBP}) @b{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 -(@value{GDBP}) -@end smallexample - -@noindent -This command can be abbreviated @code{info tp}. -@end table - -@node Starting and Stopping Trace Experiment -@subsection Starting and Stopping Trace Experiment - -@table @code -@kindex tstart -@cindex start a new trace experiment -@cindex collected data discarded -@item 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. - -@kindex tstop -@cindex stop a running trace experiment -@item tstop -This command takes no arguments. It ends the trace experiment, and -stops collecting data. - -@strong{Note:} a trace experiment and data collection may stop -automatically if any tracepoint's passcount is reached -(@pxref{Tracepoint Passcounts}), or if the trace buffer becomes full. - -@kindex tstatus -@cindex status of trace data collection -@cindex trace experiment, status of -@item tstatus -This command displays the status of the current trace data -collection. -@end table - -Here is an example of the commands we described so far: - -@smallexample -(@value{GDBP}) @b{trace gdb_c_test} -(@value{GDBP}) @b{actions} -Enter actions for tracepoint #1, one per line. -> collect $regs,$locals,$args -> while-stepping 11 - > collect $regs - > end -> end -(@value{GDBP}) @b{tstart} - [time passes @dots{}] -(@value{GDBP}) @b{tstop} -@end smallexample - - -@node Analyze Collected Data -@section Using the collected data - -After the tracepoint experiment ends, you use @value{GDBN} commands -for examining the trace data. The basic idea is that each tracepoint -collects a trace @dfn{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 @dfn{focus} on a -specific trace snapshot. When the remote stub is focused on a trace -snapshot, it will respond to all @value{GDBN} requests for memory and -registers by reading from the buffer which belongs to that snapshot, -rather than from @emph{real} memory or registers of the program being -debugged. This means that @strong{all} @value{GDBN} commands -(@code{print}, @code{info registers}, @code{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 -@end menu - -@node tfind -@subsection @code{tfind @var{n}} - -@kindex tfind -@cindex select trace snapshot -@cindex find trace snapshot -The basic command for selecting a trace snapshot from the buffer is -@code{tfind @var{n}}, which finds trace snapshot number @var{n}, -counting from zero. If no argument @var{n} is given, the next -snapshot is selected. - -Here are the various forms of using the @code{tfind} command. - -@table @code -@item tfind start -Find the first snapshot in the buffer. This is a synonym for -@code{tfind 0} (since 0 is the number of the first snapshot). - -@item tfind none -Stop debugging trace snapshots, resume @emph{live} debugging. - -@item tfind end -Same as @samp{tfind none}. - -@item tfind -No argument means find the next trace snapshot. - -@item tfind - -Find the previous trace snapshot before the current one. This permits -retracing earlier steps. - -@item tfind tracepoint @var{num} -Find the next snapshot associated with tracepoint @var{num}. Search -proceeds forward from the last examined trace snapshot. If no -argument @var{num} is given, it means find the next snapshot collected -for the same tracepoint as the current snapshot. - -@item tfind pc @var{addr} -Find the next snapshot associated with the value @var{addr} of the -program counter. Search proceeds forward from the last examined trace -snapshot. If no argument @var{addr} is given, it means find the next -snapshot with the same value of PC as the current snapshot. - -@item tfind outside @var{addr1}, @var{addr2} -Find the next snapshot whose PC is outside the given range of -addresses. - -@item tfind range @var{addr1}, @var{addr2} -Find the next snapshot whose PC is between @var{addr1} and -@var{addr2}. @c FIXME: Is the range inclusive or exclusive? - -@item tfind line @r{[}@var{file}:@r{]}@var{n} -Find the next snapshot associated with the source line @var{n}. If -the optional argument @var{file} is given, refer to line @var{n} in -that source file. Search proceeds forward from the last examined -trace snapshot. If no argument @var{n} is given, it means find the -next line other than the one currently being examined; thus saying -@code{tfind line} repeatedly can appear to have the same effect as -stepping from line to line in a @emph{live} debugging session. -@end table - -The default arguments for the @code{tfind} commands are specifically -designed to make it easy to scan through the trace buffer. For -instance, @code{tfind} with no argument selects the next trace -snapshot, and @code{tfind -} with no argument selects the previous -trace snapshot. So, by giving one @code{tfind} command, and then -simply hitting @key{RET} repeatedly you can examine all the trace -snapshots in order. Or, by saying @code{tfind -} and then hitting -@key{RET} repeatedly you can examine the snapshots in reverse order. -The @code{tfind line} command with no argument selects the snapshot -for the next source line executed. The @code{tfind pc} command with -no argument selects the next snapshot with the same program counter -(PC) as the current frame. The @code{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 @value{GDBN} 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: - -@smallexample -(@value{GDBP}) @b{tfind start} -(@value{GDBP}) @b{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 -@end smallexample - -Or, if we want to examine the variable @code{X} at each source line in -the buffer: - -@smallexample -(@value{GDBP}) @b{tfind start} -(@value{GDBP}) @b{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 -@end smallexample - -@node tdump -@subsection @code{tdump} -@kindex tdump -@cindex dump all data collected at tracepoint -@cindex tracepoint data, display - -This command takes no arguments. It prints all the data collected at -the current trace snapshot. - -@smallexample -(@value{GDBP}) @b{trace 444} -(@value{GDBP}) @b{actions} -Enter actions for tracepoint #2, one per line: -> collect $regs, $locals, $args, gdb_long_test -> end - -(@value{GDBP}) @b{tstart} - -(@value{GDBP}) @b{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", ) - -(@value{GDBP}) @b{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' - -(@value{GDBP}) -@end smallexample - -@node save-tracepoints -@subsection @code{save-tracepoints @var{filename}} -@kindex save-tracepoints -@cindex save tracepoints for future sessions - -This command saves all current tracepoint definitions together with -their actions and passcounts, into a file @file{@var{filename}} -suitable for use in a later debugging session. To read the saved -tracepoint definitions, use the @code{source} command (@pxref{Command -Files}). - -@node Tracepoint Variables -@section Convenience Variables for Tracepoints -@cindex tracepoint variables -@cindex convenience variables for tracepoints - -@table @code -@vindex $trace_frame -@item (int) $trace_frame -The current trace snapshot (a.k.a.@: @dfn{frame}) number, or -1 if no -snapshot is selected. - -@vindex $tracepoint -@item (int) $tracepoint -The tracepoint for the current trace snapshot. - -@vindex $trace_line -@item (int) $trace_line -The line number for the current trace snapshot. - -@vindex $trace_file -@item (char []) $trace_file -The source file for the current trace snapshot. - -@vindex $trace_func -@item (char []) $trace_func -The name of the function containing @code{$tracepoint}. -@end table - -Note: @code{$trace_file} is not suitable for use in @code{printf}, -use @code{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. - -@smallexample -(@value{GDBP}) @b{tfind start} - -(@value{GDBP}) @b{while $trace_frame != -1} -> output $trace_file -> printf ", line %d (tracepoint #%d)\n", $trace_line, $tracepoint -> tfind -> end -@end smallexample - -@node Overlays -@chapter Debugging Programs That Use Overlays -@cindex overlays - -If your program is too large to fit completely in your target system's -memory, you can sometimes use @dfn{overlays} to work around this -problem. @value{GDBN} provides some support for debugging programs that -use overlays. - -@menu -* How Overlays Work:: A general explanation of overlays. -* Overlay Commands:: Managing overlays in @value{GDBN}. -* Automatic Overlay Debugging:: @value{GDBN} can find out which overlays are - mapped by asking the inferior. -* Overlay Sample Program:: A sample program using overlays. -@end menu - -@node How Overlays Work -@section How Overlays Work -@cindex mapped overlays -@cindex unmapped overlays -@cindex load address, overlay's -@cindex mapped address -@cindex overlay area - -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 -@dfn{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. - -@c NB: In the below the mapped area's size is greater or equal to the -@c size of all overlays. This is intentional to remind the developer -@c that overlays don't necessarily need to be the same size. - -@smallexample -@group - 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 | - | | | | - +-----------+ | | - +-----------+ - | | - +-----------+ - - @anchor{A code overlay}A code overlay -@end group -@end smallexample - -The diagram (@pxref{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 -@dfn{mapped} overlay; its @dfn{mapped address} is its address in the -instruction memory. An overlay not present (or only partially present) -in instruction memory is called @dfn{unmapped}; its @dfn{load address} -is its address in the larger memory. The mapped address is also called -the @dfn{virtual memory address}, or @dfn{VMA}; the load address is also -called the @dfn{load memory address}, or @dfn{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: - -@itemize @bullet - -@item -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. - -@item -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. - -@item -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 @ref{Overlay Description,,, -ld.info, Using ld: the GNU linker}. - -@item -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. - -@end itemize - -The overlay system described above is rather simple, and could be -improved in many ways: - -@itemize @bullet - -@item -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. - -@item -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. - -@item -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. - -@end itemize - - -@node Overlay Commands -@section Overlay Commands - -To use @value{GDBN}'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 -@value{GDBN} to determine the appropriate address of a function or -variable, depending on whether the overlay is mapped or not. - -@value{GDBN}'s overlay commands all start with the word @code{overlay}; -you can abbreviate this as @code{ov} or @code{ovly}. The commands are: - -@table @code -@item overlay off -@kindex overlay off -Disable @value{GDBN}'s overlay support. When overlay support is -disabled, @value{GDBN} assumes that all functions and variables are -always present at their mapped addresses. By default, @value{GDBN}'s -overlay support is disabled. - -@item overlay manual -@kindex overlay manual -@cindex manual overlay debugging -Enable @dfn{manual} overlay debugging. In this mode, @value{GDBN} -relies on you to tell it which overlays are mapped, and which are not, -using the @code{overlay map-overlay} and @code{overlay unmap-overlay} -commands described below. - -@item overlay map-overlay @var{overlay} -@itemx overlay map @var{overlay} -@kindex overlay map-overlay -@cindex map an overlay -Tell @value{GDBN} that @var{overlay} is now mapped; @var{overlay} must -be the name of the object file section containing the overlay. When an -overlay is mapped, @value{GDBN} assumes it can find the overlay's -functions and variables at their mapped addresses. @value{GDBN} assumes -that any other overlays whose mapped ranges overlap that of -@var{overlay} are now unmapped. - -@item overlay unmap-overlay @var{overlay} -@itemx overlay unmap @var{overlay} -@kindex overlay unmap-overlay -@cindex unmap an overlay -Tell @value{GDBN} that @var{overlay} is no longer mapped; @var{overlay} -must be the name of the object file section containing the overlay. -When an overlay is unmapped, @value{GDBN} assumes it can find the -overlay's functions and variables at their load addresses. - -@item overlay auto -@kindex overlay auto -Enable @dfn{automatic} overlay debugging. In this mode, @value{GDBN} -consults a data structure the overlay manager maintains in the inferior -to see which overlays are mapped. For details, see @ref{Automatic -Overlay Debugging}. - -@item overlay load-target -@itemx overlay load -@kindex overlay load-target -@cindex reloading the overlay table -Re-read the overlay table from the inferior. Normally, @value{GDBN} -re-reads the table @value{GDBN} automatically each time the inferior -stops, so this command should only be necessary if you have changed the -overlay mapping yourself using @value{GDBN}. This command is only -useful when using automatic overlay debugging. - -@item overlay list-overlays -@itemx overlay list -@cindex listing mapped overlays -Display a list of the overlays currently mapped, along with their mapped -addresses, load addresses, and sizes. - -@end table - -Normally, when @value{GDBN} prints a code address, it includes the name -of the function the address falls in: - -@smallexample -(gdb) print main -$3 = @{int ()@} 0x11a0 <main> -@end smallexample -@noindent -When overlay debugging is enabled, @value{GDBN} recognizes code in -unmapped overlays, and prints the names of unmapped functions with -asterisks around them. For example, if @code{foo} is a function in an -unmapped overlay, @value{GDBN} prints it this way: - -@smallexample -(gdb) overlay list -No sections are mapped. -(gdb) print foo -$5 = @{int (int)@} 0x100000 <*foo*> -@end smallexample -@noindent -When @code{foo}'s overlay is mapped, @value{GDBN} prints the function's -name normally: - -@smallexample -(gdb) overlay list -Section .ov.foo.text, loaded at 0x100000 - 0x100034, - mapped at 0x1016 - 0x104a -(gdb) print foo -$6 = @{int (int)@} 0x1016 <foo> -@end smallexample - -When overlay debugging is enabled, @value{GDBN} can find the correct -address for functions and variables in an overlay, whether or not the -overlay is mapped. This allows most @value{GDBN} commands, like -@code{break} and @code{disassemble}, to work normally, even on unmapped -code. However, @value{GDBN}'s breakpoint support has some limitations: - -@itemize @bullet -@item -@cindex breakpoints in overlays -@cindex overlays, setting breakpoints in -You can set breakpoints in functions in unmapped overlays, as long as -@value{GDBN} can write to the overlay at its load address. -@item -@value{GDBN} 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 @value{GDBN} which overlays are now mapped, if -you are using manual overlay management), @value{GDBN} will re-set its -breakpoints properly. -@end itemize - - -@node Automatic Overlay Debugging -@section Automatic Overlay Debugging -@cindex automatic overlay debugging - -@value{GDBN} 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 -@code{overlay auto} command (@pxref{Overlay Commands}), @value{GDBN} -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 -@value{GDBN}'s automatic overlay debugging: - -@table @asis - -@item @code{_ovly_table}: -This variable must be an array of the following structures: - -@smallexample -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; -@} -@end smallexample - -@item @code{_novlys}: -This variable must be a four-byte signed integer, holding the total -number of elements in @code{_ovly_table}. - -@end table - -To decide whether a particular overlay is mapped or not, @value{GDBN} -looks for an entry in @w{@code{_ovly_table}} whose @code{vma} and -@code{lma} members equal the VMA and LMA of the overlay's section in the -executable file. When @value{GDBN} finds a matching entry, it consults -the entry's @code{mapped} member to determine whether the overlay is -currently mapped. - -In addition, your overlay manager may define a function called -@code{_ovly_debug_event}. If this function is defined, @value{GDBN} -will silently set a breakpoint there. If the overlay manager then -calls this function whenever it has changed the overlay table, this -will enable @value{GDBN} 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. - -@node Overlay Sample Program -@section Overlay Sample Program -@cindex overlay example 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 (@pxref{Overlay -Description,,, ld.info, Using ld: the GNU linker}). 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 @value{GDBN}'s overlay support. - -However, the @value{GDBN} 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 -@file{gdb/testsuite/gdb.base}: - -@table @file -@item overlays.c -The main program file. -@item ovlymgr.c -A simple overlay manager, used by @file{overlays.c}. -@item foo.c -@itemx bar.c -@itemx baz.c -@itemx grbx.c -Overlay modules, loaded and used by @file{overlays.c}. -@item d10v.ld -@itemx m32r.ld -Linker scripts for linking the test program on the @code{d10v-elf} -and @code{m32r-elf} targets. -@end table - -You can build the test program using the @code{d10v-elf} GCC -cross-compiler like this: - -@smallexample -$ 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 -@end smallexample - -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 @code{d10v-elf-gcc} and @code{d10v.ld}. - - -@node Languages -@chapter Using @value{GDBN} with Different Languages -@cindex languages - -Although programming languages generally have common aspects, they are -rarely expressed in the same manner. For instance, in ANSI C, -dereferencing a pointer @code{p} is accomplished by @code{*p}, but in -Modula-2, it is accomplished by @code{p^}. Values can also be -represented (and displayed) differently. Hex numbers in C appear as -@samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}. - -@cindex working language -Language-specific information is built into @value{GDBN} for some languages, -allowing you to express operations like the above in your program's -native language, and allowing @value{GDBN} 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 @dfn{working -language}. - -@menu -* Setting:: Switching between source languages -* Show:: Displaying the language -* Checks:: Type and range checks -* Support:: Supported languages -* Unsupported languages:: Unsupported languages -@end menu - -@node Setting -@section Switching between source languages - -There are two ways to control the working language---either have @value{GDBN} -set it automatically, or select it manually yourself. You can use the -@code{set language} command for either purpose. On startup, @value{GDBN} -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 -@value{GDBN} 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 @value{GDBN} infers the -language from the name of the file. The language of a source file -controls whether C@t{++} names are demangled---this way @code{backtrace} can -show each frame appropriately for its own language. There is no way to -set the language of a source file from within @value{GDBN}, but you can -set the language associated with a filename extension. @xref{Show, , -Displaying the language}. - -This is most commonly a problem when you use a program, such -as @code{cfront} or @code{f2c}, that generates C but is written in -another language. In that case, make the -program use @code{#line} directives in its C output; that way -@value{GDBN} 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 @value{GDBN} infer the source language -@end menu - -@node Filenames -@subsection List of filename extensions and languages - -If a source file name ends in one of the following extensions, then -@value{GDBN} infers that its language is the one indicated. - -@table @file - -@item .c -C source file - -@item .C -@itemx .cc -@itemx .cp -@itemx .cpp -@itemx .cxx -@itemx .c++ -C@t{++} source file - -@item .m -Objective-C source file - -@item .f -@itemx .F -Fortran source file - -@item .mod -Modula-2 source file - -@item .s -@itemx .S -Assembler source file. This actually behaves almost like C, but -@value{GDBN} does not skip over function prologues when stepping. -@end table - -In addition, you may set the language associated with a filename -extension. @xref{Show, , Displaying the language}. - -@node Manually -@subsection Setting the working language - -If you allow @value{GDBN} to set the language automatically, -expressions are interpreted the same way in your debugging session and -your program. - -@kindex set language -If you wish, you may set the language manually. To do this, issue the -command @samp{set language @var{lang}}, where @var{lang} is the name of -a language, such as -@code{c} or @code{modula-2}. -For a list of the supported languages, type @samp{set language}. - -Setting the language manually prevents @value{GDBN} 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 @value{GDBN} was parsing Modula-2, a -command such as: - -@smallexample -print a = b + c -@end smallexample - -@noindent -might not have the effect you intended. In C, this means to add -@code{b} and @code{c} and place the result in @code{a}. The result -printed would be the value of @code{a}. In Modula-2, this means to compare -@code{a} to the result of @code{b+c}, yielding a @code{BOOLEAN} value. - -@node Automatically -@subsection Having @value{GDBN} infer the source language - -To have @value{GDBN} set the working language automatically, use -@samp{set language local} or @samp{set language auto}. @value{GDBN} -then infers the working language. That is, when your program stops in a -frame (usually by encountering a breakpoint), @value{GDBN} 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 @value{GDBN} 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 @samp{set language auto} in this -case frees you from having to set the working language manually. - -@node Show -@section 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. - -@kindex show language -@kindex info frame@r{, show the source language} -@kindex info source@r{, show the source language} -@table @code -@item show language -Display the current working language. This is the -language you can use with commands such as @code{print} to -build and compute expressions that may involve variables in your program. - -@item info frame -Display the source language for this frame. This language becomes the -working language if you use an identifier from this frame. -@xref{Frame Info, ,Information about a frame}, to identify the other -information listed here. - -@item info source -Display the source language of this source file. -@xref{Symbols, ,Examining the Symbol Table}, to identify the other -information listed here. -@end table - -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: - -@kindex set extension-language -@kindex info extensions -@table @code -@item set extension-language @var{.ext} @var{language} -Set source files with extension @var{.ext} to be assumed to be in -the source language @var{language}. - -@item info extensions -List all the filename extensions and the associated languages. -@end table - -@node Checks -@section Type and range checking - -@quotation -@emph{Warning:} In this release, the @value{GDBN} commands for type and range -checking are included, but they do not yet have any effect. This -section documents the intended facilities. -@end quotation -@c FIXME remove warning when type/range code added - -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. - -@value{GDBN} can check for conditions like the above if you wish. -Although @value{GDBN} does not check the statements in your program, it -can check expressions entered directly into @value{GDBN} for evaluation via -the @code{print} command, for example. As with the working language, -@value{GDBN} can also decide whether or not to check automatically based on -your program's source language. @xref{Support, ,Supported languages}, -for the default settings of supported languages. - -@menu -* Type Checking:: An overview of type checking -* Range Checking:: An overview of range checking -@end menu - -@cindex type checking -@cindex checks, type -@node Type Checking -@subsection 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, - -@smallexample -1 + 2 @result{} 3 -@exdent but -@error{} 1 + 2.3 -@end smallexample - -The second example fails because the @code{CARDINAL} 1 is not -type-compatible with the @code{REAL} 2.3. - -For the expressions you use in @value{GDBN} commands, you can tell the -@value{GDBN} 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, @value{GDBN} 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 @value{GDBN} from evaluating an expression. -For instance, @value{GDBN} does not know how to add an @code{int} and -a @code{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. @xref{Support, ,Supported languages}, for further -details on specific languages. - -@value{GDBN} provides some additional commands for controlling the type checker: - -@kindex set check@r{, type} -@kindex set check type -@kindex show check type -@table @code -@item set check type auto -Set type checking on or off based on the current working language. -@xref{Support, ,Supported languages}, for the default settings for -each language. - -@item set check type on -@itemx 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, @value{GDBN} prints a -message and aborts evaluation of the expression. - -@item 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, @value{GDBN} cannot add -numbers and structures. - -@item show type -Show the current setting of the type checker, and whether or not @value{GDBN} -is setting it automatically. -@end table - -@cindex range checking -@cindex checks, range -@node Range Checking -@subsection 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 @value{GDBN} commands, you can tell -@value{GDBN} 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 @var{m} is -the largest integer value, and @var{s} is the smallest, then - -@smallexample -@var{m} + 1 @result{} @var{s} -@end smallexample - -This, too, is specific to individual languages, and in some cases -specific to individual compilers or machines. @xref{Support, , -Supported languages}, for further details on specific languages. - -@value{GDBN} provides some additional commands for controlling the range checker: - -@kindex set check@r{, range} -@kindex set check range -@kindex show check range -@table @code -@item set check range auto -Set range checking on or off based on the current working language. -@xref{Support, ,Supported languages}, for the default settings for -each language. - -@item set check range on -@itemx 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. - -@item set check range warn -Output messages when the @value{GDBN} 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). - -@item show range -Show the current setting of the range checker, and whether or not it is -being set automatically by @value{GDBN}. -@end table - -@node Support -@section Supported languages - -@value{GDBN} supports C, C@t{++}, Objective-C, Fortran, Java, assembly, and Modula-2. -@c This is false ... -Some @value{GDBN} features may be used in expressions regardless of the -language you use: the @value{GDBN} @code{@@} and @code{::} operators, -and the @samp{@{type@}addr} construct (@pxref{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 @value{GDBN}. These sections are not meant to be language -tutorials or references, but serve only as a reference guide to what the -@value{GDBN} 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@t{++} -* Objective-C:: Objective-C -* Modula-2:: Modula-2 -@end menu - -@node C -@subsection C and C@t{++} - -@cindex C and C@t{++} -@cindex expressions in C or C@t{++} - -Since C and C@t{++} are so closely related, many features of @value{GDBN} apply -to both languages. Whenever this is the case, we discuss those languages -together. - -@cindex C@t{++} -@cindex @code{g++}, @sc{gnu} C@t{++} compiler -@cindex @sc{gnu} C@t{++} -The C@t{++} debugging facilities are jointly implemented by the C@t{++} -compiler and @value{GDBN}. Therefore, to debug your C@t{++} code -effectively, you must compile your C@t{++} programs with a supported -C@t{++} compiler, such as @sc{gnu} @code{g++}, or the HP ANSI C@t{++} -compiler (@code{aCC}). - -For best results when using @sc{gnu} C@t{++}, 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 @code{g++} -command-line options @option{-gdwarf-2} and @option{-gstabs+}. -@xref{Debugging Options,,Options for Debugging Your Program or @sc{gnu} -CC, gcc.info, Using @sc{gnu} CC}. - -@menu -* C Operators:: C and C@t{++} operators -* C Constants:: C and C@t{++} constants -* C plus plus expressions:: C@t{++} expressions -* C Defaults:: Default settings for C and C@t{++} -* C Checks:: C and C@t{++} type and range checks -* Debugging C:: @value{GDBN} and C -* Debugging C plus plus:: @value{GDBN} features for C@t{++} -@end menu - -@node C Operators -@subsubsection C and C@t{++} operators - -@cindex C and C@t{++} operators - -Operators must be defined on values of specific types. For instance, -@code{+} is defined on numbers, but not on structures. Operators are -often defined on groups of types. - -For the purposes of C and C@t{++}, the following definitions hold: - -@itemize @bullet - -@item -@emph{Integral types} include @code{int} with any of its storage-class -specifiers; @code{char}; @code{enum}; and, for C@t{++}, @code{bool}. - -@item -@emph{Floating-point types} include @code{float}, @code{double}, and -@code{long double} (if supported by the target platform). - -@item -@emph{Pointer types} include all types defined as @code{(@var{type} *)}. - -@item -@emph{Scalar types} include all of the above. - -@end itemize - -@noindent -The following operators are supported. They are listed here -in order of increasing precedence: - -@table @code -@item , -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. - -@item = -Assignment. The value of an assignment expression is the value -assigned. Defined on scalar types. - -@item @var{op}= -Used in an expression of the form @w{@code{@var{a} @var{op}= @var{b}}}, -and translated to @w{@code{@var{a} = @var{a op b}}}. -@w{@code{@var{op}=}} and @code{=} have the same precedence. -@var{op} is any one of the operators @code{|}, @code{^}, @code{&}, -@code{<<}, @code{>>}, @code{+}, @code{-}, @code{*}, @code{/}, @code{%}. - -@item ?: -The ternary operator. @code{@var{a} ? @var{b} : @var{c}} can be thought -of as: if @var{a} then @var{b} else @var{c}. @var{a} should be of an -integral type. - -@item || -Logical @sc{or}. Defined on integral types. - -@item && -Logical @sc{and}. Defined on integral types. - -@item | -Bitwise @sc{or}. Defined on integral types. - -@item ^ -Bitwise exclusive-@sc{or}. Defined on integral types. - -@item & -Bitwise @sc{and}. Defined on integral types. - -@item ==@r{, }!= -Equality and inequality. Defined on scalar types. The value of these -expressions is 0 for false and non-zero for true. - -@item <@r{, }>@r{, }<=@r{, }>= -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. - -@item <<@r{, }>> -left shift, and right shift. Defined on integral types. - -@item @@ -The @value{GDBN} ``artificial array'' operator (@pxref{Expressions, ,Expressions}). - -@item +@r{, }- -Addition and subtraction. Defined on integral types, floating-point types and -pointer types. - -@item *@r{, }/@r{, }% -Multiplication, division, and modulus. Multiplication and division are -defined on integral and floating-point types. Modulus is defined on -integral types. - -@item ++@r{, }-- -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. - -@item * -Pointer dereferencing. Defined on pointer types. Same precedence as -@code{++}. - -@item & -Address operator. Defined on variables. Same precedence as @code{++}. - -For debugging C@t{++}, @value{GDBN} implements a use of @samp{&} beyond what is -allowed in the C@t{++} language itself: you can use @samp{&(&@var{ref})} -(or, if you prefer, simply @samp{&&@var{ref}}) to examine the address -where a C@t{++} reference variable (declared with @samp{&@var{ref}}) is -stored. - -@item - -Negative. Defined on integral and floating-point types. Same -precedence as @code{++}. - -@item ! -Logical negation. Defined on integral types. Same precedence as -@code{++}. - -@item ~ -Bitwise complement operator. Defined on integral types. Same precedence as -@code{++}. - - -@item .@r{, }-> -Structure member, and pointer-to-structure member. For convenience, -@value{GDBN} regards the two as equivalent, choosing whether to dereference a -pointer based on the stored type information. -Defined on @code{struct} and @code{union} data. - -@item .*@r{, }->* -Dereferences of pointers to members. - -@item [] -Array indexing. @code{@var{a}[@var{i}]} is defined as -@code{*(@var{a}+@var{i})}. Same precedence as @code{->}. - -@item () -Function parameter list. Same precedence as @code{->}. - -@item :: -C@t{++} scope resolution operator. Defined on @code{struct}, @code{union}, -and @code{class} types. - -@item :: -Doubled colons also represent the @value{GDBN} scope operator -(@pxref{Expressions, ,Expressions}). Same precedence as @code{::}, -above. -@end table - -If an operator is redefined in the user code, @value{GDBN} usually -attempts to invoke the redefined version instead of using the operator's -predefined meaning. - -@menu -* C Constants:: -@end menu - -@node C Constants -@subsubsection C and C@t{++} constants - -@cindex C and C@t{++} constants - -@value{GDBN} allows you to express the constants of C and C@t{++} in the -following ways: - -@itemize @bullet -@item -Integer constants are a sequence of digits. Octal constants are -specified by a leading @samp{0} (i.e.@: zero), and hexadecimal constants -by a leading @samp{0x} or @samp{0X}. Constants may also end with a letter -@samp{l}, specifying that the constant should be treated as a -@code{long} value. - -@item -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: -@samp{@w{e@r{[[}+@r{]|}-@r{]}@var{nnn}}}, where @var{nnn} is another -sequence of digits. The @samp{+} is optional for positive exponents. -A floating-point constant may also end with a letter @samp{f} or -@samp{F}, specifying that the constant should be treated as being of -the @code{float} (as opposed to the default @code{double}) type; or with -a letter @samp{l} or @samp{L}, which specifies a @code{long double} -constant. - -@item -Enumerated constants consist of enumerated identifiers, or their -integral equivalents. - -@item -Character constants are a single character surrounded by single quotes -(@code{'}), or a number---the ordinal value of the corresponding character -(usually its @sc{ascii} value). Within quotes, the single character may -be represented by a letter or by @dfn{escape sequences}, which are of -the form @samp{\@var{nnn}}, where @var{nnn} is the octal representation -of the character's ordinal value; or of the form @samp{\@var{x}}, where -@samp{@var{x}} is a predefined special character---for example, -@samp{\n} for newline. - -@item -String constants are a sequence of character constants surrounded by -double quotes (@code{"}). Any valid character constant (as described -above) may appear. Double quotes within the string must be preceded by -a backslash, so for instance @samp{"a\"b'c"} is a string of five -characters. - -@item -Pointer constants are an integral value. You can also write pointers -to constants using the C operator @samp{&}. - -@item -Array constants are comma-separated lists surrounded by braces @samp{@{} -and @samp{@}}; for example, @samp{@{1,2,3@}} is a three-element array of -integers, @samp{@{@{1,2@}, @{3,4@}, @{5,6@}@}} is a three-by-two array, -and @samp{@{&"hi", &"there", &"fred"@}} is a three-element array of pointers. -@end itemize - -@menu -* C plus plus expressions:: -* C Defaults:: -* C Checks:: - -* Debugging C:: -@end menu - -@node C plus plus expressions -@subsubsection C@t{++} expressions - -@cindex expressions in C@t{++} -@value{GDBN} expression handling can interpret most C@t{++} expressions. - -@cindex debugging C@t{++} programs -@cindex C@t{++} compilers -@cindex debug formats and C@t{++} -@cindex @value{NGCC} and C@t{++} -@quotation -@emph{Warning:} @value{GDBN} can only debug C@t{++} code if you use the -proper compiler and the proper debug format. Currently, @value{GDBN} -works best when debugging C@t{++} code that is compiled with -@value{NGCC} 2.95.3 or with @value{NGCC} 3.1 or newer, using the options -@option{-gdwarf-2} or @option{-gstabs+}. DWARF 2 is preferred over -stabs+. Most configurations of @value{NGCC} 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 @value{GDBN} to debug -C@t{++} code. -@end quotation - -@enumerate - -@cindex member functions -@item -Member function calls are allowed; you can use expressions like - -@smallexample -count = aml->GetOriginal(x, y) -@end smallexample - -@vindex this@r{, inside C@t{++} member functions} -@cindex namespace in C@t{++} -@item -While a member function is active (in the selected stack frame), your -expressions have the same namespace available as the member function; -that is, @value{GDBN} allows implicit references to the class instance -pointer @code{this} following the same rules as C@t{++}. - -@cindex call overloaded functions -@cindex overloaded functions, calling -@cindex type conversions in C@t{++} -@item -You can call overloaded functions; @value{GDBN} resolves the function -call to the right definition, with some restrictions. @value{GDBN} 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 -@code{set overload-resolution off}. @xref{Debugging C plus plus, -,@value{GDBN} features for C@t{++}}. - -You must specify @code{set overload-resolution off} in order to use an -explicit function signature to call an overloaded function, as in -@smallexample -p 'foo(char,int)'('x', 13) -@end smallexample - -The @value{GDBN} command-completion facility can simplify this; -see @ref{Completion, ,Command completion}. - -@cindex reference declarations -@item -@value{GDBN} understands variables declared as C@t{++} references; you can use -them in expressions just as you do in C@t{++} source---they are automatically -dereferenced. - -In the parameter list shown when @value{GDBN} 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 @emph{address} of a reference variable is always shown, unless -you have specified @samp{set print address off}. - -@item -@value{GDBN} supports the C@t{++} name resolution operator @code{::}---your -expressions can use it just as expressions in your program do. Since -one scope may be defined in another, you can use @code{::} repeatedly if -necessary, for example in an expression like -@samp{@var{scope1}::@var{scope2}::@var{name}}. @value{GDBN} also allows -resolving name scope by reference to source files, in both C and C@t{++} -debugging (@pxref{Variables, ,Program variables}). -@end enumerate - -In addition, when used with HP's C@t{++} compiler, @value{GDBN} supports -calling virtual functions correctly, printing out virtual bases of -objects, calling functions in a base subobject, casting objects, and -invoking user-defined operators. - -@node C Defaults -@subsubsection C and C@t{++} defaults - -@cindex C and C@t{++} defaults - -If you allow @value{GDBN} to set type and range checking automatically, they -both default to @code{off} whenever the working language changes to -C or C@t{++}. This happens regardless of whether you or @value{GDBN} -selects the working language. - -If you allow @value{GDBN} to set the language automatically, it -recognizes source files whose names end with @file{.c}, @file{.C}, or -@file{.cc}, etc, and when @value{GDBN} enters code compiled from one of -these files, it sets the working language to C or C@t{++}. -@xref{Automatically, ,Having @value{GDBN} infer the source language}, -for further details. - -@c Type checking is (a) primarily motivated by Modula-2, and (b) -@c unimplemented. If (b) changes, it might make sense to let this node -@c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93. - -@node C Checks -@subsubsection C and C@t{++} type and range checks - -@cindex C and C@t{++} checks - -By default, when @value{GDBN} parses C or C@t{++} expressions, type checking -is not used. However, if you turn type checking on, @value{GDBN} -considers two variables type equivalent if: - -@itemize @bullet -@item -The two variables are structured and have the same structure, union, or -enumerated tag. - -@item -The two variables have the same type name, or types that have been -declared equivalent through @code{typedef}. - -@ignore -@c leaving this out because neither J Gilmore nor R Pesch understand it. -@c FIXME--beers? -@item -The two @code{struct}, @code{union}, or @code{enum} variables are -declared in the same declaration. (Note: this may not be true for all C -compilers.) -@end ignore -@end itemize - -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. - -@node Debugging C -@subsubsection @value{GDBN} and C - -The @code{set print union} and @code{show print union} commands apply to -the @code{union} type. When set to @samp{on}, any @code{union} that is -inside a @code{struct} or @code{class} is also printed. Otherwise, it -appears as @samp{@{...@}}. - -The @code{@@} operator aids in the debugging of dynamic arrays, formed -with pointers and a memory allocation function. @xref{Expressions, -,Expressions}. - -@menu -* Debugging C plus plus:: -@end menu - -@node Debugging C plus plus -@subsubsection @value{GDBN} features for C@t{++} - -@cindex commands for C@t{++} - -Some @value{GDBN} commands are particularly useful with C@t{++}, and some are -designed specifically for use with C@t{++}. Here is a summary: - -@table @code -@cindex break in overloaded functions -@item @r{breakpoint menus} -When you want a breakpoint in a function whose name is overloaded, -@value{GDBN} breakpoint menus help you specify which function definition -you want. @xref{Breakpoint Menus,,Breakpoint menus}. - -@cindex overloading in C@t{++} -@item rbreak @var{regex} -Setting breakpoints using regular expressions is helpful for setting -breakpoints on overloaded functions that are not members of any special -classes. -@xref{Set Breaks, ,Setting breakpoints}. - -@cindex C@t{++} exception handling -@item catch throw -@itemx catch catch -Debug C@t{++} exception handling using these commands. @xref{Set -Catchpoints, , Setting catchpoints}. - -@cindex inheritance -@item ptype @var{typename} -Print inheritance relationships as well as other information for type -@var{typename}. -@xref{Symbols, ,Examining the Symbol Table}. - -@cindex C@t{++} symbol display -@item set print demangle -@itemx show print demangle -@itemx set print asm-demangle -@itemx show print asm-demangle -Control whether C@t{++} symbols display in their source form, both when -displaying code as C@t{++} source and when displaying disassemblies. -@xref{Print Settings, ,Print settings}. - -@item set print object -@itemx show print object -Choose whether to print derived (actual) or declared types of objects. -@xref{Print Settings, ,Print settings}. - -@item set print vtbl -@itemx show print vtbl -Control the format for printing virtual function tables. -@xref{Print Settings, ,Print settings}. -(The @code{vtbl} commands do not work on programs compiled with the HP -ANSI C@t{++} compiler (@code{aCC}).) - -@kindex set overload-resolution -@cindex overloaded functions, overload resolution -@item set overload-resolution on -Enable overload resolution for C@t{++} expression evaluation. The default -is on. For overloaded functions, @value{GDBN} evaluates the arguments -and searches for a function whose signature matches the argument types, -using the standard C@t{++} conversion rules (see @ref{C plus plus expressions, ,C@t{++} -expressions}, for details). If it cannot find a match, it emits a -message. - -@item set overload-resolution off -Disable overload resolution for C@t{++} expression evaluation. For -overloaded functions that are not class member functions, @value{GDBN} -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, @value{GDBN} -searches for a function whose signature @emph{exactly} matches the -argument types. - -@item @r{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@t{++}: type -@code{@var{symbol}(@var{types})} rather than just @var{symbol}. You can -also use the @value{GDBN} command-line word completion facilities to list the -available choices, or to finish the type list for you. -@xref{Completion,, Command completion}, for details on how to do this. -@end table - -@node Objective-C -@subsection Objective-C - -@cindex 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:: -@end menu - -@node Method Names in Commands, The Print Command with Objective-C, Objective-C, Objective-C -@subsubsection Method Names in Commands - -The following commands have been extended to accept Objective-C method -names as line specifications: - -@kindex clear@r{, and Objective-C} -@kindex break@r{, and Objective-C} -@kindex info line@r{, and Objective-C} -@kindex jump@r{, and Objective-C} -@kindex list@r{, and Objective-C} -@itemize -@item @code{clear} -@item @code{break} -@item @code{info line} -@item @code{jump} -@item @code{list} -@end itemize - -A fully qualified Objective-C method name is specified as - -@smallexample --[@var{Class} @var{methodName}] -@end smallexample - -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 @var{Class} and method name @var{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 @code{create} -instance method of class @code{Fruit} in the program currently being -debugged, enter: - -@smallexample -break -[Fruit create] -@end smallexample - -To list ten program lines around the @code{initialize} class method, -enter: - -@smallexample -list +[NSText initialize] -@end smallexample - -In the current version of @value{GDBN}, the plus or minus sign is -required. In future versions of @value{GDBN}, 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: - -@smallexample -break create -@end smallexample - -You must specify the complete method name, including any colons. If -your program's source files contain more than one @code{create} method, -you'll be presented with a numbered list of classes that implement that -method. Indicate your choice by number, or type @samp{0} to exit if -none apply. - -As another example, to clear a breakpoint established at the -@code{makeKeyAndOrderFront:} method of the @code{NSWindow} class, enter: - -@smallexample -clear -[NSWindow makeKeyAndOrderFront:] -@end smallexample - -@node The Print Command with Objective-C -@subsubsection The Print Command With Objective-C -@kindex print-object -@kindex po @r{(@code{print-object})} - -The print command has also been extended to accept methods. For example: - -@smallexample -print -[@var{object} hash] -@end smallexample - -@cindex print an Objective-C object description -@cindex @code{_NSPrintForDebugger}, and printing Objective-C objects -@noindent -will tell @value{GDBN} to send the @code{hash} message to @var{object} -and print the result. Also, an additional command has been added, -@code{print-object} or @code{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, @code{_NSPrintForDebugger}, defined. - -@node Modula-2, , Objective-C, Support -@subsection Modula-2 - -@cindex Modula-2, @value{GDBN} support - -The extensions made to @value{GDBN} to support Modula-2 only support -output from the @sc{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 @value{GDBN} reads in the executable's symbol -table. - -@cindex expressions in Modula-2 -@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 @code{::} and @code{.} -* GDB/M2:: @value{GDBN} and Modula-2 -@end menu - -@node M2 Operators -@subsubsection Operators -@cindex Modula-2 operators - -Operators must be defined on values of specific types. For instance, -@code{+} 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: - -@itemize @bullet - -@item -@emph{Integral types} consist of @code{INTEGER}, @code{CARDINAL}, and -their subranges. - -@item -@emph{Character types} consist of @code{CHAR} and its subranges. - -@item -@emph{Floating-point types} consist of @code{REAL}. - -@item -@emph{Pointer types} consist of anything declared as @code{POINTER TO -@var{type}}. - -@item -@emph{Scalar types} consist of all of the above. - -@item -@emph{Set types} consist of @code{SET} and @code{BITSET} types. - -@item -@emph{Boolean types} consist of @code{BOOLEAN}. -@end itemize - -@noindent -The following operators are supported, and appear in order of -increasing precedence: - -@table @code -@item , -Function argument or array index separator. - -@item := -Assignment. The value of @var{var} @code{:=} @var{value} is -@var{value}. - -@item <@r{, }> -Less than, greater than on integral, floating-point, or enumerated -types. - -@item <=@r{, }>= -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 @code{<}. - -@item =@r{, }<>@r{, }# -Equality and two ways of expressing inequality, valid on scalar types. -Same precedence as @code{<}. In @value{GDBN} scripts, only @code{<>} is -available for inequality, since @code{#} conflicts with the script -comment character. - -@item IN -Set membership. Defined on set types and the types of their members. -Same precedence as @code{<}. - -@item OR -Boolean disjunction. Defined on boolean types. - -@item AND@r{, }& -Boolean conjunction. Defined on boolean types. - -@item @@ -The @value{GDBN} ``artificial array'' operator (@pxref{Expressions, ,Expressions}). - -@item +@r{, }- -Addition and subtraction on integral and floating-point types, or union -and difference on set types. - -@item * -Multiplication on integral and floating-point types, or set intersection -on set types. - -@item / -Division on floating-point types, or symmetric set difference on set -types. Same precedence as @code{*}. - -@item DIV@r{, }MOD -Integer division and remainder. Defined on integral types. Same -precedence as @code{*}. - -@item - -Negative. Defined on @code{INTEGER} and @code{REAL} data. - -@item ^ -Pointer dereferencing. Defined on pointer types. - -@item NOT -Boolean negation. Defined on boolean types. Same precedence as -@code{^}. - -@item . -@code{RECORD} field selector. Defined on @code{RECORD} data. Same -precedence as @code{^}. - -@item [] -Array indexing. Defined on @code{ARRAY} data. Same precedence as @code{^}. - -@item () -Procedure argument list. Defined on @code{PROCEDURE} objects. Same precedence -as @code{^}. - -@item ::@r{, }. -@value{GDBN} and Modula-2 scope operators. -@end table - -@quotation -@emph{Warning:} Sets and their operations are not yet supported, so @value{GDBN} -treats the use of the operator @code{IN}, or the use of operators -@code{+}, @code{-}, @code{*}, @code{/}, @code{=}, , @code{<>}, @code{#}, -@code{<=}, and @code{>=} on sets as an error. -@end quotation - - -@node Built-In Func/Proc -@subsubsection Built-in functions and procedures -@cindex Modula-2 built-ins - -Modula-2 also makes available several built-in procedures and functions. -In describing these, the following metavariables are used: - -@table @var - -@item a -represents an @code{ARRAY} variable. - -@item c -represents a @code{CHAR} constant or variable. - -@item i -represents a variable or constant of integral type. - -@item m -represents an identifier that belongs to a set. Generally used in the -same function with the metavariable @var{s}. The type of @var{s} should -be @code{SET OF @var{mtype}} (where @var{mtype} is the type of @var{m}). - -@item n -represents a variable or constant of integral or floating-point type. - -@item r -represents a variable or constant of floating-point type. - -@item t -represents a type. - -@item v -represents a variable. - -@item x -represents a variable or constant of one of many types. See the -explanation of the function for details. -@end table - -All Modula-2 built-in procedures also return a result, described below. - -@table @code -@item ABS(@var{n}) -Returns the absolute value of @var{n}. - -@item CAP(@var{c}) -If @var{c} is a lower case letter, it returns its upper case -equivalent, otherwise it returns its argument. - -@item CHR(@var{i}) -Returns the character whose ordinal value is @var{i}. - -@item DEC(@var{v}) -Decrements the value in the variable @var{v} by one. Returns the new value. - -@item DEC(@var{v},@var{i}) -Decrements the value in the variable @var{v} by @var{i}. Returns the -new value. - -@item EXCL(@var{m},@var{s}) -Removes the element @var{m} from the set @var{s}. Returns the new -set. - -@item FLOAT(@var{i}) -Returns the floating point equivalent of the integer @var{i}. - -@item HIGH(@var{a}) -Returns the index of the last member of @var{a}. - -@item INC(@var{v}) -Increments the value in the variable @var{v} by one. Returns the new value. - -@item INC(@var{v},@var{i}) -Increments the value in the variable @var{v} by @var{i}. Returns the -new value. - -@item INCL(@var{m},@var{s}) -Adds the element @var{m} to the set @var{s} if it is not already -there. Returns the new set. - -@item MAX(@var{t}) -Returns the maximum value of the type @var{t}. - -@item MIN(@var{t}) -Returns the minimum value of the type @var{t}. - -@item ODD(@var{i}) -Returns boolean TRUE if @var{i} is an odd number. - -@item ORD(@var{x}) -Returns the ordinal value of its argument. For example, the ordinal -value of a character is its @sc{ascii} value (on machines supporting the -@sc{ascii} character set). @var{x} must be of an ordered type, which include -integral, character and enumerated types. - -@item SIZE(@var{x}) -Returns the size of its argument. @var{x} can be a variable or a type. - -@item TRUNC(@var{r}) -Returns the integral part of @var{r}. - -@item VAL(@var{t},@var{i}) -Returns the member of the type @var{t} whose ordinal value is @var{i}. -@end table - -@quotation -@emph{Warning:} Sets and their operations are not yet supported, so -@value{GDBN} treats the use of procedures @code{INCL} and @code{EXCL} as -an error. -@end quotation - -@cindex Modula-2 constants -@node M2 Constants -@subsubsection Constants - -@value{GDBN} allows you to express the constants of Modula-2 in the following -ways: - -@itemize @bullet - -@item -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 @samp{H}, and octal integers by a trailing @samp{B}. - -@item -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 @samp{E@r{[}+@r{|}-@r{]}@var{nnn}}, where -@samp{@r{[}+@r{|}-@r{]}@var{nnn}} is the desired exponent. All of the -digits of the floating point constant must be valid decimal (base 10) -digits. - -@item -Character constants consist of a single character enclosed by a pair of -like quotes, either single (@code{'}) or double (@code{"}). They may -also be expressed by their ordinal value (their @sc{ascii} value, usually) -followed by a @samp{C}. - -@item -String constants consist of a sequence of characters enclosed by a -pair of like quotes, either single (@code{'}) or double (@code{"}). -Escape sequences in the style of C are also allowed. @xref{C -Constants, ,C and C@t{++} constants}, for a brief explanation of escape -sequences. - -@item -Enumerated constants consist of an enumerated identifier. - -@item -Boolean constants consist of the identifiers @code{TRUE} and -@code{FALSE}. - -@item -Pointer constants consist of integral values only. - -@item -Set constants are not yet supported. -@end itemize - -@node M2 Defaults -@subsubsection Modula-2 defaults -@cindex Modula-2 defaults - -If type and range checking are set automatically by @value{GDBN}, they -both default to @code{on} whenever the working language changes to -Modula-2. This happens regardless of whether you or @value{GDBN} -selected the working language. - -If you allow @value{GDBN} to set the language automatically, then entering -code compiled from a file whose name ends with @file{.mod} sets the -working language to Modula-2. @xref{Automatically, ,Having @value{GDBN} set -the language automatically}, for further details. - -@node Deviations -@subsubsection Deviations from standard Modula-2 -@cindex Modula-2, deviations from - -A few changes have been made to make Modula-2 programs easier to debug. -This is done primarily via loosening its type strictness: - -@itemize @bullet -@item -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.) - -@item -C escape sequences can be used in strings and characters to represent -non-printable characters. @value{GDBN} prints out strings with these -escape sequences embedded. Single non-printable characters are -printed using the @samp{CHR(@var{nnn})} format. - -@item -The assignment operator (@code{:=}) returns the value of its right-hand -argument. - -@item -All built-in procedures both modify @emph{and} return their argument. -@end itemize - -@node M2 Checks -@subsubsection Modula-2 type and range checks -@cindex Modula-2 checks - -@quotation -@emph{Warning:} in this release, @value{GDBN} does not yet perform type or -range checking. -@end quotation -@c FIXME remove warning when type/range checks added - -@value{GDBN} considers two Modula-2 variables type equivalent if: - -@itemize @bullet -@item -They are of types that have been declared equivalent via a @code{TYPE -@var{t1} = @var{t2}} statement - -@item -They have been declared on the same line. (Note: This is true of the -@sc{gnu} Modula-2 compiler, but it may not be true of other compilers.) -@end itemize - -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. - -@node M2 Scope -@subsubsection The scope operators @code{::} and @code{.} -@cindex scope -@cindex @code{.}, Modula-2 scope operator -@cindex colon, doubled as scope operator -@ifinfo -@vindex colon-colon@r{, in Modula-2} -@c Info cannot handle :: but TeX can. -@end ifinfo -@iftex -@vindex ::@r{, in Modula-2} -@end iftex - -There are a few subtle differences between the Modula-2 scope operator -(@code{.}) and the @value{GDBN} scope operator (@code{::}). The two have -similar syntax: - -@smallexample - -@var{module} . @var{id} -@var{scope} :: @var{id} -@end smallexample - -@noindent -where @var{scope} is the name of a module or a procedure, -@var{module} the name of a module, and @var{id} is any declared -identifier within your program, except another module. - -Using the @code{::} operator makes @value{GDBN} search the scope -specified by @var{scope} for the identifier @var{id}. If it is not -found in the specified scope, then @value{GDBN} searches all scopes -enclosing the one specified by @var{scope}. - -Using the @code{.} operator makes @value{GDBN} search the current scope for -the identifier specified by @var{id} that was imported from the -definition module specified by @var{module}. With this operator, it is -an error if the identifier @var{id} was not imported from definition -module @var{module}, or if @var{id} is not an identifier in -@var{module}. - -@node GDB/M2 -@subsubsection @value{GDBN} and Modula-2 - -Some @value{GDBN} commands have little use when debugging Modula-2 programs. -Five subcommands of @code{set print} and @code{show print} apply -specifically to C and C@t{++}: @samp{vtbl}, @samp{demangle}, -@samp{asm-demangle}, @samp{object}, and @samp{union}. The first four -apply to C@t{++}, and the last to the C @code{union} type, which has no direct -analogue in Modula-2. - -The @code{@@} operator (@pxref{Expressions, ,Expressions}), while available -with any language, is not useful with Modula-2. Its -intent is to aid the debugging of @dfn{dynamic arrays}, which cannot be -created in Modula-2 as they can in C or C@t{++}. However, because an -address can be specified by an integral constant, the construct -@samp{@{@var{type}@}@var{adrexp}} is still useful. - -@cindex @code{#} in Modula-2 -In @value{GDBN} scripts, the Modula-2 inequality operator @code{#} is -interpreted as the beginning of a comment. Use @code{<>} instead. - -@node Unsupported languages -@section Unsupported languages - -@cindex unsupported languages -@cindex minimal language -In addition to the other fully-supported programming languages, -@value{GDBN} also provides a pseudo-language, called @code{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 @value{GDBN}. - -If the language is set to @code{auto}, @value{GDBN} will automatically -select this language if the current frame corresponds to an unsupported -language. - -@node Symbols -@chapter 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. @value{GDBN} finds it in your -program's symbol table, in the file indicated when you started @value{GDBN} -(@pxref{File Options, ,Choosing files}), or by one of the -file-management commands (@pxref{Files, ,Commands to specify files}). - -@cindex symbol names -@cindex names of symbols -@cindex quoting names -Occasionally, you may need to refer to symbols that contain unusual -characters, which @value{GDBN} ordinarily treats as word delimiters. The -most frequent case is in referring to static variables in other -source files (@pxref{Variables,,Program variables}). File names -are recorded in object files as debugging symbols, but @value{GDBN} would -ordinarily parse a typical file name, like @file{foo.c}, as the three words -@samp{foo} @samp{.} @samp{c}. To allow @value{GDBN} to recognize -@samp{foo.c} as a single symbol, enclose it in single quotes; for example, - -@smallexample -p 'foo.c'::x -@end smallexample - -@noindent -looks up the value of @code{x} in the scope of the file @file{foo.c}. - -@table @code -@kindex info address -@cindex address of a symbol -@item info address @var{symbol} -Describe where the data for @var{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 @samp{print &@var{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. - -@kindex info symbol -@cindex symbol from address -@item info symbol @var{addr} -Print the name of a symbol which is stored at the address @var{addr}. -If no symbol is stored exactly at @var{addr}, @value{GDBN} prints the -nearest symbol and an offset from it: - -@smallexample -(@value{GDBP}) info symbol 0x54320 -_initialize_vx + 396 in section .text -@end smallexample - -@noindent -This is the opposite of the @code{info address} command. You can use -it to find out the name of a variable or a function given its address. - -@kindex whatis -@item whatis @var{expr} -Print the data type of expression @var{expr}. @var{expr} is not -actually evaluated, and any side-effecting operations (such as -assignments or function calls) inside it do not take place. -@xref{Expressions, ,Expressions}. - -@item whatis -Print the data type of @code{$}, the last value in the value history. - -@kindex ptype -@item ptype @var{typename} -Print a description of data type @var{typename}. @var{typename} may be -the name of a type, or for C code it may have the form @samp{class -@var{class-name}}, @samp{struct @var{struct-tag}}, @samp{union -@var{union-tag}} or @samp{enum @var{enum-tag}}. - -@item ptype @var{expr} -@itemx ptype -Print a description of the type of expression @var{expr}. @code{ptype} -differs from @code{whatis} by printing a detailed description, instead -of just the name of the type. - -For example, for this variable declaration: - -@smallexample -struct complex @{double real; double imag;@} v; -@end smallexample - -@noindent -the two commands give this output: - -@smallexample -@group -(@value{GDBP}) whatis v -type = struct complex -(@value{GDBP}) ptype v -type = struct complex @{ - double real; - double imag; -@} -@end group -@end smallexample - -@noindent -As with @code{whatis}, using @code{ptype} without an argument refers to -the type of @code{$}, the last value in the value history. - -@kindex info types -@item info types @var{regexp} -@itemx info types -Print a brief description of all types whose names match @var{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, -@samp{i type value} gives information on all types in your program whose -names include the string @code{value}, but @samp{i type ^value$} gives -information only on types whose complete name is @code{value}. - -This command differs from @code{ptype} in two ways: first, like -@code{whatis}, it does not print a detailed description; second, it -lists all source files where a type is defined. - -@kindex info scope -@cindex local variables -@item info scope @var{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 @samp{*}, and prints all the variables local to the -scope defined by that location. For example: - -@smallexample -(@value{GDBP}) @b{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. -@end smallexample - -@noindent -This command is especially useful for determining what data to collect -during a @dfn{trace experiment}, see @ref{Tracepoint Actions, -collect}. - -@kindex info source -@item info source -Show information about the current source file---that is, the source file for -the function containing the current point of execution: -@itemize @bullet -@item -the name of the source file, and the directory containing it, -@item -the directory it was compiled in, -@item -its length, in lines, -@item -which programming language it is written in, -@item -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 -@item -whether the debugging information includes information about -preprocessor macros. -@end itemize - - -@kindex info sources -@item 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. - -@kindex info functions -@item info functions -Print the names and data types of all defined functions. - -@item info functions @var{regexp} -Print the names and data types of all defined functions -whose names contain a match for regular expression @var{regexp}. -Thus, @samp{info fun step} finds all functions whose names -include @code{step}; @samp{info fun ^step} finds those whose names -start with @code{step}. If a function name contains characters -that conflict with the regular expression language (eg. -@samp{operator*()}), they may be quoted with a backslash. - -@kindex info variables -@item info variables -Print the names and data types of all variables that are declared -outside of functions (i.e.@: excluding local variables). - -@item info variables @var{regexp} -Print the names and data types of all variables (except for local -variables) whose names contain a match for regular expression -@var{regexp}. - -@kindex info classes -@item info classes -@itemx info classes @var{regexp} -Display all Objective-C classes in your program, or -(with the @var{regexp} argument) all those matching a particular regular -expression. - -@kindex info selectors -@item info selectors -@itemx info selectors @var{regexp} -Display all Objective-C selectors in your program, or -(with the @var{regexp} argument) all those matching a particular regular -expression. - -@ignore -This was never implemented. -@kindex info methods -@item info methods -@itemx info methods @var{regexp} -The @code{info methods} command permits the user to examine all defined -methods within C@t{++} program, or (with the @var{regexp} argument) a -specific set of methods found in the various C@t{++} classes. Many -C@t{++} classes provide a large number of methods. Thus, the output -from the @code{ptype} command can be overwhelming and hard to use. The -@code{info-methods} command filters the methods, printing only those -which match the regular-expression @var{regexp}. -@end ignore - -@cindex reloading symbols -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 -@value{GDBN} to reload the symbols for automatically relinked modules: - -@table @code -@kindex set symbol-reloading -@item set symbol-reloading on -Replace symbol definitions for the corresponding source file when an -object file with a particular name is seen again. - -@item 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 @code{symbol-reloading} off, since otherwise @value{GDBN} -may discard symbols when linking large programs, that may contain -several modules (from different directories or libraries) with the same -name. - -@kindex show symbol-reloading -@item show symbol-reloading -Show the current @code{on} or @code{off} setting. -@end table - -@kindex set opaque-type-resolution -@item set opaque-type-resolution on -Tell @value{GDBN} to resolve opaque types. An opaque type is a type -declared as a pointer to a @code{struct}, @code{class}, or -@code{union}---for example, @code{struct MyType *}---that is used in one -source file although the full declaration of @code{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. - -@item set opaque-type-resolution off -Tell @value{GDBN} not to resolve opaque types. In this case, the type -is printed as follows: -@smallexample -@{<no data fields>@} -@end smallexample - -@kindex show opaque-type-resolution -@item show opaque-type-resolution -Show whether opaque types are resolved or not. - -@kindex maint print symbols -@cindex symbol dump -@kindex maint print psymbols -@cindex partial symbol dump -@item maint print symbols @var{filename} -@itemx maint print psymbols @var{filename} -@itemx maint print msymbols @var{filename} -Write a dump of debugging symbol data into the file @var{filename}. -These commands are used to debug the @value{GDBN} symbol-reading code. Only -symbols with debugging data are included. If you use @samp{maint print -symbols}, @value{GDBN} includes all the symbols for which it has already -collected full details: that is, @var{filename} reflects symbols for -only those files whose symbols @value{GDBN} has read. You can use the -command @code{info sources} to find out which files these are. If you -use @samp{maint print psymbols} instead, the dump shows information about -symbols that @value{GDBN} only knows partially---that is, symbols defined in -files that @value{GDBN} has skimmed, but not yet read completely. Finally, -@samp{maint print msymbols} dumps just the minimal symbol information -required for each object file from which @value{GDBN} has read some symbols. -@xref{Files, ,Commands to specify files}, for a discussion of how -@value{GDBN} reads symbols (in the description of @code{symbol-file}). - -@kindex maint info symtabs -@kindex maint info psymtabs -@cindex listing @value{GDBN}'s internal symbol tables -@cindex symbol tables, listing @value{GDBN}'s internal -@cindex full symbol tables, listing @value{GDBN}'s internal -@cindex partial symbol tables, listing @value{GDBN}'s internal -@item maint info symtabs @r{[} @var{regexp} @r{]} -@itemx maint info psymtabs @r{[} @var{regexp} @r{]} - -List the @code{struct symtab} or @code{struct partial_symtab} -structures whose names match @var{regexp}. If @var{regexp} is not -given, list them all. The output includes expressions which you can -copy into a @value{GDBN} debugging this one to examine a particular -structure in more detail. For example: - -@smallexample -(@value{GDBP}) 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) - @} -@} -(@value{GDBP}) maint info symtabs -(@value{GDBP}) -@end smallexample -@noindent -We see that there is one partial symbol table whose filename contains -the string @samp{dwarf2read}, belonging to the @samp{gdb} executable; -and we see that @value{GDBN} has not read in any symtabs yet at all. -If we set a breakpoint on a function, that will cause @value{GDBN} to -read the symtab for the compilation unit containing that function: - -@smallexample -(@value{GDBP}) break dwarf2_psymtab_to_symtab -Breakpoint 1 at 0x814e5da: file /home/gnu/src/gdb/dwarf2read.c, -line 1574. -(@value{GDBP}) 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 - @} -@} -(@value{GDBP}) -@end smallexample -@end table - - -@node Altering -@chapter 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 @value{GDBN} 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 -@end menu - -@node Assignment -@section Assignment to variables - -@cindex assignment -@cindex setting variables -To alter the value of a variable, evaluate an assignment expression. -@xref{Expressions, ,Expressions}. For example, - -@smallexample -print x=4 -@end smallexample - -@noindent -stores the value 4 into the variable @code{x}, and then prints the -value of the assignment expression (which is 4). -@xref{Languages, ,Using @value{GDBN} with Different Languages}, for more -information on operators in supported languages. - -@kindex set variable -@cindex variables, setting -If you are not interested in seeing the value of the assignment, use the -@code{set} command instead of the @code{print} command. @code{set} is -really the same as @code{print} except that the expression's value is -not printed and is not put in the value history (@pxref{Value History, -,Value history}). The expression is evaluated only for its effects. - -If the beginning of the argument string of the @code{set} command -appears identical to a @code{set} subcommand, use the @code{set -variable} command instead of just @code{set}. This command is identical -to @code{set} except for its lack of subcommands. For example, if your -program has a variable @code{width}, you get an error if you try to set -a new value with just @samp{set width=13}, because @value{GDBN} has the -command @code{set width}: - -@smallexample -(@value{GDBP}) whatis width -type = double -(@value{GDBP}) p width -$4 = 13 -(@value{GDBP}) set width=47 -Invalid syntax in expression. -@end smallexample - -@noindent -The invalid expression, of course, is @samp{=47}. In -order to actually set the program's variable @code{width}, use - -@smallexample -(@value{GDBP}) set var width=47 -@end smallexample - -Because the @code{set} command has many subcommands that can conflict -with the names of program variables, it is a good idea to use the -@code{set variable} command instead of just @code{set}. For example, if -your program has a variable @code{g}, you run into problems if you try -to set a new value with just @samp{set g=4}, because @value{GDBN} has -the command @code{set gnutarget}, abbreviated @code{set g}: - -@smallexample -@group -(@value{GDBP}) whatis g -type = double -(@value{GDBP}) p g -$1 = 1 -(@value{GDBP}) set g=4 -(@value{GDBP}) p g -$2 = 1 -(@value{GDBP}) 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. -(@value{GDBP}) show g -The current BFD target is "=4". -@end group -@end smallexample - -@noindent -The program variable @code{g} did not change, and you silently set the -@code{gnutarget} to an invalid value. In order to set the variable -@code{g}, use - -@smallexample -(@value{GDBP}) set var g=4 -@end smallexample - -@value{GDBN} 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. -@comment FIXME: how do structs align/pad in these conversions? -@comment /doc@cygnus.com 18dec1990 - -To store values into arbitrary places in memory, use the @samp{@{@dots{}@}} -construct to generate a value of specified type at a specified address -(@pxref{Expressions, ,Expressions}). For example, @code{@{int@}0x83040} refers -to memory location @code{0x83040} as an integer (which implies a certain size -and representation in memory), and - -@smallexample -set @{int@}0x83040 = 4 -@end smallexample - -@noindent -stores the value 4 into that memory location. - -@node Jumping -@section Continuing at a different address - -Ordinarily, when you continue your program, you do so at the place where -it stopped, with the @code{continue} command. You can instead continue at -an address of your own choosing, with the following commands: - -@table @code -@kindex jump -@item jump @var{linespec} -Resume execution at line @var{linespec}. Execution stops again -immediately if there is a breakpoint there. @xref{List, ,Printing -source lines}, for a description of the different forms of -@var{linespec}. It is common practice to use the @code{tbreak} command -in conjunction with @code{jump}. @xref{Set Breaks, ,Setting -breakpoints}. - -The @code{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 @var{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 @code{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. - -@item jump *@var{address} -Resume execution at the instruction at address @var{address}. -@end table - -@c Doesn't work on HP-UX; have to set $pcoqh and $pcoqt. -On many systems, you can get much the same effect as the @code{jump} -command by storing a new value into the register @code{$pc}. The -difference is that this does not start your program running; it only -changes the address of where it @emph{will} run when you continue. For -example, - -@smallexample -set $pc = 0x485 -@end smallexample - -@noindent -makes the next @code{continue} command or stepping command execute at -address @code{0x485}, rather than at the address where your program stopped. -@xref{Continuing and Stepping, ,Continuing and stepping}. - -The most common occasion to use the @code{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. - -@c @group -@node Signaling -@section Giving your program a signal - -@table @code -@kindex signal -@item signal @var{signal} -Resume execution where your program stopped, but immediately give it the -signal @var{signal}. @var{signal} can be the name or the number of a -signal. For example, on many systems @code{signal 2} and @code{signal -SIGINT} are both ways of sending an interrupt signal. - -Alternatively, if @var{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 -@code{continue} command; @samp{signal 0} causes it to resume without a -signal. - -@code{signal} does not repeat when you press @key{RET} a second time -after executing the command. -@end table -@c @end group - -Invoking the @code{signal} command is not the same as invoking the -@code{kill} utility from the shell. Sending a signal with @code{kill} -causes @value{GDBN} to decide what to do with the signal depending on -the signal handling tables (@pxref{Signals}). The @code{signal} command -passes the signal directly to your program. - - -@node Returning -@section Returning from a function - -@table @code -@cindex returning from a function -@kindex return -@item return -@itemx return @var{expression} -You can cancel execution of a function call with the @code{return} -command. If you give an -@var{expression} argument, its value is used as the function's return -value. -@end table - -When you use @code{return}, @value{GDBN} 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 @code{return}. - -This pops the selected stack frame (@pxref{Selection, ,Selecting a -frame}), 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 @code{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 @code{finish} command (@pxref{Continuing -and Stepping, ,Continuing and stepping}) resumes execution until the -selected stack frame returns naturally. - -@node Calling -@section Calling program functions - -@cindex calling functions -@kindex call -@table @code -@item call @var{expr} -Evaluate the expression @var{expr} without displaying @code{void} -returned values. -@end table - -You can use this variant of the @code{print} command if you want to -execute a function from your program, but without cluttering the output -with @code{void} returned values. If the result is not void, it -is printed and saved in the value history. - -@node Patching -@section Patching programs - -@cindex patching binaries -@cindex writing into executables -@cindex writing into corefiles - -By default, @value{GDBN} 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 @code{set write} command. For example, you might -want to turn on internal debugging flags, or even to make emergency -repairs. - -@table @code -@kindex set write -@item set write on -@itemx set write off -If you specify @samp{set write on}, @value{GDBN} opens executable and -core files for both reading and writing; if you specify @samp{set write -off} (the default), @value{GDBN} opens them read-only. - -If you have already loaded a file, you must load it again (using the -@code{exec-file} or @code{core-file} command) after changing @code{set -write}, for your new setting to take effect. - -@item show write -@kindex show write -Display whether executable files and core files are opened for writing -as well as reading. -@end table - -@node GDB Files -@chapter @value{GDBN} Files - -@value{GDBN} 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 -@value{GDBN} 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 -@end menu - -@node Files -@section Commands to specify files - -@cindex symbol table -@cindex core dump file - -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 -@value{GDBN}'s start-up commands (@pxref{Invocation, , Getting In and -Out of @value{GDBN}}). - -Occasionally it is necessary to change to a different file during a -@value{GDBN} session. Or you may run @value{GDBN} and forget to specify -a file you want to use. In these situations the @value{GDBN} commands -to specify new files are useful. - -@table @code -@cindex executable file -@kindex file -@item file @var{filename} -Use @var{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 @code{run} command. If you do not specify a -directory and the file is not found in the @value{GDBN} working directory, -@value{GDBN} uses the environment variable @code{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 @value{GDBN} -and your program, using the @code{path} command. - -On systems with memory-mapped files, an auxiliary file named -@file{@var{filename}.syms} may hold symbol table information for -@var{filename}. If so, @value{GDBN} maps in the symbol table from -@file{@var{filename}.syms}, starting up more quickly. See the -descriptions of the file options @samp{-mapped} and @samp{-readnow} -(available on the command line, and with the commands @code{file}, -@code{symbol-file}, or @code{add-symbol-file}, described below), -for more information. - -@item file -@code{file} with no argument makes @value{GDBN} discard any information it -has on both executable file and the symbol table. - -@kindex exec-file -@item exec-file @r{[} @var{filename} @r{]} -Specify that the program to be run (but not the symbol table) is found -in @var{filename}. @value{GDBN} searches the environment variable @code{PATH} -if necessary to locate your program. Omitting @var{filename} means to -discard information on the executable file. - -@kindex symbol-file -@item symbol-file @r{[} @var{filename} @r{]} -Read symbol table information from file @var{filename}. @code{PATH} is -searched when necessary. Use the @code{file} command to get both symbol -table and program to run from the same file. - -@code{symbol-file} with no argument clears out @value{GDBN} information on your -program's symbol table. - -The @code{symbol-file} command causes @value{GDBN} 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 @value{GDBN}. - -@code{symbol-file} does not repeat if you press @key{RET} again after -executing it once. - -When @value{GDBN} 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 @sc{gnu} compiler, or -other compilers that adhere to the local conventions. -Best results are usually obtained from @sc{gnu} compilers; for example, -using @code{@value{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 @code{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 @value{GDBN} -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 @code{set verbose} command can turn these -pauses into messages if desired. @xref{Messages/Warnings, ,Optional -warnings and messages}.) - -We have not implemented the two-stage strategy for COFF yet. When the -symbol table is stored in COFF format, @code{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. - -@kindex readnow -@cindex reading symbols immediately -@cindex symbols, reading immediately -@kindex mapped -@cindex memory-mapped symbol file -@cindex saving symbol table -@item symbol-file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]} -@itemx file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]} -You can override the @value{GDBN} two-stage strategy for reading symbol -tables by using the @samp{-readnow} option with any of the commands that -load symbol table information, if you want to be sure @value{GDBN} has the -entire symbol table available. - -If memory-mapped files are available on your system through the -@code{mmap} system call, you can use another option, @samp{-mapped}, to -cause @value{GDBN} to write the symbols for your program into a reusable -file. Future @value{GDBN} 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 @samp{-mapped} option has the same effect as -starting @value{GDBN} with the @samp{-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 @var{myprog} is called -@samp{@var{myprog}.syms}. Once this file exists (so long as it is newer -than the corresponding executable), @value{GDBN} always attempts to use -it when you debug @var{myprog}; no special options or commands are -needed. - -The @file{.syms} file is specific to the host machine where you run -@value{GDBN}. It holds an exact image of the internal @value{GDBN} -symbol table. It cannot be shared across multiple host platforms. - -@c FIXME: for now no mention of directories, since this seems to be in -@c flux. 13mar1992 status is that in theory GDB would look either in -@c current dir or in same dir as myprog; but issues like competing -@c GDB's, or clutter in system dirs, mean that in practice right now -@c only current dir is used. FFish says maybe a special GDB hierarchy -@c (eg rooted in val of env var GDBSYMS) could exist for mappable symbol -@c files. - -@kindex core -@kindex core-file -@item core-file @r{[} @var{filename} @r{]} -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; @value{GDBN} can access the -executable file itself for other parts. - -@code{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 @value{GDBN}. 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 @code{kill} command -(@pxref{Kill Process, ,Killing the child process}). - -@kindex add-symbol-file -@cindex dynamic linking -@item add-symbol-file @var{filename} @var{address} -@itemx add-symbol-file @var{filename} @var{address} @r{[} -readnow @r{]} @r{[} -mapped @r{]} -@itemx add-symbol-file @var{filename} @r{-s}@var{section} @var{address} @dots{} -The @code{add-symbol-file} command reads additional symbol table -information from the file @var{filename}. You would use this command -when @var{filename} has been dynamically loaded (by some other means) -into the program that is running. @var{address} should be the memory -address at which the file has been loaded; @value{GDBN} cannot figure -this out for itself. You can additionally specify an arbitrary number -of @samp{@r{-s}@var{section} @var{address}} pairs, to give an explicit -section name and base address for that section. You can specify any -@var{address} as an expression. - -The symbol table of the file @var{filename} is added to the symbol table -originally read with the @code{symbol-file} command. You can use the -@code{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 @code{symbol-file} command without any arguments. - -@cindex relocatable object files, reading symbols from -@cindex object files, relocatable, reading symbols from -@cindex reading symbols from relocatable object files -@cindex symbols, reading from relocatable object files -@cindex @file{.o} files, reading symbols from -Although @var{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 @file{.o} files, as long as: - -@itemize @bullet -@item -the file's symbolic information refers only to linker symbols defined in -that file, not to symbols defined by other object files, -@item -every section the file's symbolic information refers to has actually -been loaded into the inferior, as it appears in the file, and -@item -you can determine the address at which every section was loaded, and -provide these to the @code{add-symbol-file} command. -@end itemize - -@noindent -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 (@code{.linkonce} section factoring and C@t{++} constructor table -assembly, for example) that make the requirements difficult to meet. In -general, one cannot assume that using @code{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. - -@code{add-symbol-file} does not repeat if you press @key{RET} after using it. - -You can use the @samp{-mapped} and @samp{-readnow} options just as with -the @code{symbol-file} command, to change how @value{GDBN} manages the symbol -table information for @var{filename}. - -@kindex add-shared-symbol-file -@item add-shared-symbol-file -The @code{add-shared-symbol-file} command can be used only under Harris' CXUX -operating system for the Motorola 88k. @value{GDBN} automatically looks for -shared libraries, however if @value{GDBN} does not find yours, you can run -@code{add-shared-symbol-file}. It takes no arguments. - -@kindex section -@item section -The @code{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 @code{info files} command, described below, lists all -the sections and their addresses. - -@kindex info files -@kindex info target -@item info files -@itemx info target -@code{info files} and @code{info target} are synonymous; both print the -current target (@pxref{Targets, ,Specifying a Debugging Target}), -including the names of the executable and core dump files currently in -use by @value{GDBN}, and the files from which symbols were loaded. The -command @code{help target} lists all possible targets rather than -current ones. - -@kindex maint info sections -@item maint info sections -Another command that can give you extra information about program sections -is @code{maint info sections}. In addition to the section information -displayed by @code{info files}, this command displays the flags and file -offset of each section in the executable and core dump files. In addition, -@code{maint info sections} provides the following command options (which -may be arbitrarily combined): - -@table @code -@item ALLOBJ -Display sections for all loaded object files, including shared libraries. -@item @var{sections} -Display info only for named @var{sections}. -@item @var{section-flags} -Display info only for sections for which @var{section-flags} are true. -The section flags that @value{GDBN} currently knows about are: -@table @code -@item ALLOC -Section will have space allocated in the process when loaded. -Set for all sections except those containing debug information. -@item LOAD -Section will be loaded from the file into the child process memory. -Set for pre-initialized code and data, clear for @code{.bss} sections. -@item RELOC -Section needs to be relocated before loading. -@item READONLY -Section cannot be modified by the child process. -@item CODE -Section contains executable code only. -@item DATA -Section contains data only (no executable code). -@item ROM -Section will reside in ROM. -@item CONSTRUCTOR -Section contains data for constructor/destructor lists. -@item HAS_CONTENTS -Section is not empty. -@item NEVER_LOAD -An instruction to the linker to not output the section. -@item COFF_SHARED_LIBRARY -A notification to the linker that the section contains -COFF shared library information. -@item IS_COMMON -Section contains common symbols. -@end table -@end table -@kindex set trust-readonly-sections -@item set trust-readonly-sections on -Tell @value{GDBN} that readonly sections in your object file -really are read-only (i.e.@: that their contents will not change). -In that case, @value{GDBN} 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. - -@item set trust-readonly-sections off -Tell @value{GDBN} 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. -@end table - -All file-specifying commands allow both absolute and relative file names -as arguments. @value{GDBN} always converts the file name to an absolute file -name and remembers it that way. - -@cindex shared libraries -@value{GDBN} supports HP-UX, SunOS, SVr4, Irix 5, and IBM RS/6000 shared -libraries. - -@value{GDBN} automatically loads symbol definitions from shared libraries -when you use the @code{run} command, or when you examine a core file. -(Before you issue the @code{run} command, @value{GDBN} 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, @value{GDBN} -automatically loads the symbols at the time of the @code{shl_load} call. - -@c FIXME: some @value{GDBN} release may permit some refs to undef -@c FIXME...symbols---eg in a break cmd---assuming they are from a shared -@c FIXME...lib; check this from time to time when updating manual - -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: - -@table @code -@kindex set auto-solib-add -@item set auto-solib-add @var{mode} -If @var{mode} is @code{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 @value{GDBN} that a new library has been loaded. If @var{mode} -is @code{off}, symbols must be loaded manually, using the -@code{sharedlibrary} command. The default value is @code{on}. - -@kindex show auto-solib-add -@item show auto-solib-add -Display the current autoloading mode. -@end table - -To explicitly load shared library symbols, use the @code{sharedlibrary} -command: - -@table @code -@kindex info sharedlibrary -@kindex info share -@item info share -@itemx info sharedlibrary -Print the names of the shared libraries which are currently loaded. - -@kindex sharedlibrary -@kindex share -@item sharedlibrary @var{regex} -@itemx share @var{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 @code{run}. If -@var{regex} is omitted all shared libraries required by your program are -loaded. -@end table - -On some systems, such as HP-UX systems, @value{GDBN} 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 @code{sharedlibrary -@var{filename}}. The base address of the shared library is determined -automatically by @value{GDBN} and need not be specified. - -To display or set the threshold, use the commands: - -@table @code -@kindex set auto-solib-limit -@item set auto-solib-limit @var{threshold} -Set the autoloading size threshold, in an integral number of megabytes. -If @var{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 -@code{sharedlibrary} command. The default threshold is 100 (i.e.@: 100 -Mb). - -@kindex show auto-solib-limit -@item show auto-solib-limit -Display the current autoloading size threshold, in megabytes. -@end table - -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 @value{GDBN} where the target libraries are, so that it can -load the correct copies---otherwise, it may try to load the host's libraries. -@value{GDBN} has two variables to specify the search directories for target -libraries. - -@table @code -@kindex set solib-absolute-prefix -@item set solib-absolute-prefix @var{path} -If this variable is set, @var{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 -@samp{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 -@file{/usr/lib} hierarchy under @var{path}. - -You can set the default value of @samp{solib-absolute-prefix} by using the -configure-time @samp{--with-sysroot} option. - -@kindex show solib-absolute-prefix -@item show solib-absolute-prefix -Display the current shared library prefix. - -@kindex set solib-search-path -@item set solib-search-path @var{path} -If this variable is set, @var{path} is a colon-separated list of directories -to search for shared libraries. @samp{solib-search-path} is used after -@samp{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 -@samp{solib-search-path} instead of @samp{solib-absolute-prefix}, be sure to -set @samp{solib-absolute-prefix} to a nonexistant directory to prevent -@value{GDBN} from finding your host's libraries. - -@kindex show solib-search-path -@item show solib-search-path -Display the current shared library search path. -@end table - - -@node Separate Debug Files -@section Debugging Information in Separate Files -@cindex separate debugging information files -@cindex debugging information in separate files -@cindex @file{.debug} subdirectories -@cindex debugging information directory, global -@cindex global debugging information directory - -@value{GDBN} allows you to put a program's debugging information in a -file separate from the executable itself, in a way that allows -@value{GDBN} 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 @dfn{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 @var{execdir}, and the executable has a -debug link that specifies the name @var{debugfile}, then @value{GDBN} -will automatically search for the debugging information file in three -places: - -@itemize @bullet -@item -the directory containing the executable file (that is, it will look -for a file named @file{@var{execdir}/@var{debugfile}}, -@item -a subdirectory of that directory named @file{.debug} (that is, the -file @file{@var{execdir}/.debug/@var{debugfile}}, and -@item -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 -@file{@var{globaldebugdir}/@var{execdir}/@var{debugfile}}, where -@var{globaldebugdir} is the global debug file directory, and -@var{execdir} has been turned into a relative path). -@end itemize -@noindent -@value{GDBN} 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 @value{GDBN} to debug @file{/usr/bin/ls}, -which has a link containing the name @file{ls.debug}, and the global -debug directory is @file{/usr/lib/debug}, then @value{GDBN} will look -for debug information in @file{/usr/bin/ls.debug}, -@file{/usr/bin/.debug/ls.debug}, and -@file{/usr/lib/debug/usr/bin/ls.debug}. - -You can set the global debugging info directory's name, and view the -name @value{GDBN} is currently using. - -@table @code - -@kindex set debug-file-directory -@item set debug-file-directory @var{directory} -Set the directory which @value{GDBN} searches for separate debugging -information files to @var{directory}. - -@kindex show debug-file-directory -@item show debug-file-directory -Show the directory @value{GDBN} searches for separate debugging -information files. - -@end table - -@cindex @code{.gnu_debuglink} sections -@cindex debug links -A debug link is a special section of the executable file named -@code{.gnu_debuglink}. The section must contain: - -@itemize -@item -A filename, with any leading directory components removed, followed by -a zero byte, -@item -zero to three bytes of padding, as needed to reach the next four-byte -boundary within the section, and -@item -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 @var{crc} argument. -@end itemize - -Any executable file format can carry a debug link, as long as it can -contain a section named @code{.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 @code{.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 @file{elfutils} package, starting with version 0.53, -contains a version of the @code{strip} command such that the command -@kbd{strip foo -f foo.debug} removes the debugging information from -the executable file @file{foo}, places it in the file -@file{foo.debug}, and leaves behind a debug link in @file{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 @code{.gnu_debuglink} sections is to give the -complete code for a function that computes it: - -@kindex @code{gnu_debuglink_crc32} -@smallexample -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; -@} -@end smallexample - - -@node Symbol Errors -@section Errors reading symbol files - -While reading a symbol file, @value{GDBN} occasionally encounters problems, -such as symbol types it does not recognize, or known bugs in compiler -output. By default, @value{GDBN} 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 @value{GDBN} to print -only one message about each such type of problem, no matter how many -times the problem occurs; or you can ask @value{GDBN} to print more messages, -to see how many times the problems occur, with the @code{set -complaints} command (@pxref{Messages/Warnings, ,Optional warnings and -messages}). - -The messages currently printed, and their meanings, include: - -@table @code -@item inner block not inside outer block in @var{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. - -@value{GDBN} circumvents the problem by treating the inner block as if it had -the same scope as the outer block. In the error message, @var{symbol} -may be shown as ``@code{(don't know)}'' if the outer block is not a -function. - -@item block at @var{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. - -@value{GDBN} 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 -@code{set verbose on}. @xref{Messages/Warnings, ,Optional warnings and -messages}.) - -@item 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. - -@value{GDBN} circumvents the problem by treating the symbol scope block as -starting on the previous source line. - -@item bad string table offset in symbol @var{n} - -@cindex foo -Symbol number @var{n} contains a pointer into the string table which is -larger than the size of the string table. - -@value{GDBN} circumvents the problem by considering the symbol to have the -name @code{foo}, which may cause other problems if many symbols end up -with this name. - -@item unknown symbol type @code{0x@var{nn}} - -The symbol information contains new data types that @value{GDBN} does -not yet know how to read. @code{0x@var{nn}} is the symbol type of the -uncomprehended information, in hexadecimal. - -@value{GDBN} 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 @code{@value{GDBP}} with itself, breakpoint -on @code{complain}, then go up to the function @code{read_dbx_symtab} -and examine @code{*bufp} to see the symbol. - -@item stub type has NULL name - -@value{GDBN} could not find the full definition for a struct or class. - -@item const/volatile indicator missing (ok if using g++ v1.x), got@dots{} -The symbol information for a C@t{++} member function is missing some -information that recent versions of the compiler should have output for -it. - -@item info mismatch between compiler and debugger - -@value{GDBN} could not parse a type specification output by the compiler. - -@end table - -@node Targets -@chapter Specifying a Debugging Target - -@cindex debugging target -@kindex target - -A @dfn{target} is the execution environment occupied by your program. - -Often, @value{GDBN} 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 @code{file} or @code{core} commands. When you need more -flexibility---for example, running @value{GDBN} 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 @code{target} -command to specify one of the target types configured for @value{GDBN} -(@pxref{Target Commands, ,Commands for managing targets}). - -@menu -* Active Targets:: Active targets -* Target Commands:: Commands for managing targets -* Byte Order:: Choosing target byte order -* Remote:: Remote debugging -* KOD:: Kernel Object Display - -@end menu - -@node Active Targets -@section Active targets - -@cindex stacking targets -@cindex active targets -@cindex multiple targets - -There are three classes of targets: processes, core files, and -executable files. @value{GDBN} 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 @samp{gdb a.out}, then the executable file -@code{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 -@value{GDBN} 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 @code{run}, your executable file becomes an active process -target as well. When a process target is active, all @value{GDBN} -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 @code{core-file} and @code{exec-file} commands to select a new -core file or executable target (@pxref{Files, ,Commands to specify -files}). To specify as a target a process that is already running, use -the @code{attach} command (@pxref{Attach, ,Debugging an already-running -process}). - -@node Target Commands -@section Commands for managing targets - -@table @code -@item target @var{type} @var{parameters} -Connects the @value{GDBN} host environment to a target machine or -process. A target is typically a protocol for talking to debugging -facilities. You use the argument @var{type} to specify the type or -protocol of the target machine. - -Further @var{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 @code{target} command does not repeat if you press @key{RET} again -after executing the command. - -@kindex help target -@item help target -Displays the names of all targets available. To display targets -currently selected, use either @code{info target} or @code{info files} -(@pxref{Files, ,Commands to specify files}). - -@item help target @var{name} -Describe a particular target, including any parameters necessary to -select it. - -@kindex set gnutarget -@item set gnutarget @var{args} -@value{GDBN} uses its own library BFD to read your files. @value{GDBN} -knows whether it is reading an @dfn{executable}, -a @dfn{core}, or a @dfn{.o} file; however, you can specify the file format -with the @code{set gnutarget} command. Unlike most @code{target} commands, -with @code{gnutarget} the @code{target} refers to a program, not a machine. - -@quotation -@emph{Warning:} To specify a file format with @code{set gnutarget}, -you must know the actual BFD name. -@end quotation - -@noindent -@xref{Files, , Commands to specify files}. - -@kindex show gnutarget -@item show gnutarget -Use the @code{show gnutarget} command to display what file format -@code{gnutarget} is set to read. If you have not set @code{gnutarget}, -@value{GDBN} will determine the file format for each file automatically, -and @code{show gnutarget} displays @samp{The current BDF target is "auto"}. -@end table - -Here are some common targets (available, or not, depending on the GDB -configuration): - -@table @code -@kindex target exec -@item target exec @var{program} -An executable file. @samp{target exec @var{program}} is the same as -@samp{exec-file @var{program}}. - -@kindex target core -@item target core @var{filename} -A core dump file. @samp{target core @var{filename}} is the same as -@samp{core-file @var{filename}}. - -@kindex target remote -@item target remote @var{dev} -Remote serial target in GDB-specific protocol. The argument @var{dev} -specifies what serial device to use for the connection (e.g. -@file{/dev/ttya}). @xref{Remote, ,Remote debugging}. @code{target remote} -supports the @code{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. - -@kindex target sim -@item target sim -Builtin CPU simulator. @value{GDBN} includes simulators for most architectures. -In general, -@smallexample - target sim - load - run -@end smallexample -@noindent -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 @ref{Embedded Processors, ,Embedded -Processors}. - -@end table - -Some configurations may include these targets as well: - -@table @code - -@kindex target nrom -@item target nrom @var{dev} -NetROM ROM emulator. This target only supports downloading. - -@end table - -Different targets are available on different configurations of @value{GDBN}; -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. - -@table @code - -@kindex load @var{filename} -@item load @var{filename} -Depending on what remote debugging facilities are configured into -@value{GDBN}, the @code{load} command may be available. Where it exists, it -is meant to make @var{filename} (an executable) available for debugging -on the remote system---by downloading, or dynamic linking, for example. -@code{load} also records the @var{filename} symbol table in @value{GDBN}, like -the @code{add-symbol-file} command. - -If your @value{GDBN} does not have a @code{load} command, attempting to -execute it gets the error message ``@code{You can't do that when your -target is @dots{}}'' - -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. -@c FIXME! This would be a good place for an xref to the GNU linker doc. - -@code{load} does not repeat if you press @key{RET} again after using it. -@end table - -@node Byte Order -@section Choosing target byte order - -@cindex choosing target byte order -@cindex 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 -@value{GDBN}'s idea of processor endian-ness manually. - -@table @code -@kindex set endian big -@item set endian big -Instruct @value{GDBN} to assume the target is big-endian. - -@kindex set endian little -@item set endian little -Instruct @value{GDBN} to assume the target is little-endian. - -@kindex set endian auto -@item set endian auto -Instruct @value{GDBN} to use the byte order associated with the -executable. - -@item show endian -Display @value{GDBN}'s current idea of the target byte order. - -@end table - -Note that these commands merely adjust interpretation of symbolic -data on the host, and that they have absolutely no effect on the -target system. - -@node Remote -@section Remote debugging -@cindex remote debugging - -If you are trying to debug a program running on a machine that cannot run -@value{GDBN} 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 @value{GDBN} have special serial or TCP/IP interfaces -to make this work with particular debugging targets. In addition, -@value{GDBN} comes with a generic serial protocol (specific to @value{GDBN}, -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 @value{GDBN}. - -Other remote targets may be available in your -configuration of @value{GDBN}; use @code{help target} to list them. - -@node KOD -@section Kernel Object Display -@cindex kernel object display -@cindex KOD - -Some targets support kernel object display. Using this facility, -@value{GDBN} 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. - -@kindex set os -Use the @code{set os} command to set the operating system. This tells -@value{GDBN} which kernel object display module to initialize: - -@smallexample -(@value{GDBP}) set os cisco -@end smallexample - -@kindex show os -The associated command @code{show os} displays the operating system -set with the @code{set os} command; if no operating system has been -set, @code{show os} will display an empty string @samp{""}. - -If @code{set os} succeeds, @value{GDBN} will display some information -about the operating system, and will create a new @code{info} command -which can be used to query the target. The @code{info} command is named -after the operating system: - -@kindex info cisco -@smallexample -(@value{GDBP}) info cisco -List of Cisco Kernel Objects -Object Description -any Any and all objects -@end smallexample - -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 @kbd{set os -@var{name}}, where @var{name} is the name of the operating system you -want to try. - - -@node Remote Debugging -@chapter 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 -@end menu - -@node Connecting -@section Connecting to a remote target - -On the @value{GDBN} host machine, you will need an unstripped copy of -your program, since @value{GDBN} needs symobl and debugging information. -Start up @value{GDBN} as usual, using the name of the local copy of your -program as the first argument. - -@cindex serial line, @code{target remote} -If you're using a serial line, you may want to give @value{GDBN} the -@w{@samp{--baud}} option, or use the @code{set remotebaud} command -before the @code{target} command. - -After that, use @code{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 @file{/dev/ttyb}: - -@smallexample -target remote /dev/ttyb -@end smallexample - -@cindex TCP port, @code{target remote} -To use a TCP connection, use an argument of the form -@code{@var{host}:@var{port}} or @code{tcp:@var{host}:@var{port}}. -For example, to connect to port 2828 on a -terminal server named @code{manyfarms}: - -@smallexample -target remote manyfarms:2828 -@end smallexample - -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: - -@smallexample -target remote :1234 -@end smallexample -@noindent - -Note that the colon is still required here. - -@cindex UDP port, @code{target remote} -To use a UDP connection, use an argument of the form -@code{udp:@var{host}:@var{port}}. For example, to connect to UDP port 2828 -on a terminal server named @code{manyfarms}: - -@smallexample -target remote udp:manyfarms:2828 -@end smallexample - -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. - -@cindex interrupting remote programs -@cindex remote programs, interrupting -Whenever @value{GDBN} is waiting for the remote program, if you type the -interrupt character (often @key{C-C}), @value{GDBN} 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, @value{GDBN} displays this prompt: - -@smallexample -Interrupted while waiting for the program. -Give up (and stop debugging it)? (y or n) -@end smallexample - -If you type @kbd{y}, @value{GDBN} abandons the remote debugging session. -(If you decide you want to try again later, you can use @samp{target -remote} again to connect once more.) If you type @kbd{n}, @value{GDBN} -goes back to waiting. - -@table @code -@kindex detach (remote) -@item detach -When you have finished debugging the remote program, you can use the -@code{detach} command to release it from @value{GDBN} control. -Detaching from the target normally resumes its execution, but the results -will depend on your particular remote stub. After the @code{detach} -command, @value{GDBN} is free to connect to another target. - -@kindex disconnect -@item disconnect -The @code{disconnect} command behaves like @code{detach}, except that -the target is generally not resumed. It will wait for @value{GDBN} -(this instance or another one) to connect and continue debugging. After -the @code{disconnect} command, @value{GDBN} is again free to connect to -another target. -@end table - -@node Server -@section Using the @code{gdbserver} program - -@kindex gdbserver -@cindex remote connection without stubs -@code{gdbserver} is a control program for Unix-like systems, which -allows you to connect your program with a remote @value{GDBN} via -@code{target remote}---but without linking in the usual debugging stub. - -@code{gdbserver} is not a complete replacement for the debugging stubs, -because it requires essentially the same operating-system facilities -that @value{GDBN} itself does. In fact, a system that can run -@code{gdbserver} to connect to a remote @value{GDBN} could also run -@value{GDBN} locally! @code{gdbserver} is sometimes useful nevertheless, -because it is a much smaller program than @value{GDBN} itself. It is -also easier to port than all of @value{GDBN}, so you may be able to get -started more quickly on a new system by using @code{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 @code{gdbserver} to make a similar -choice for debugging. - -@value{GDBN} and @code{gdbserver} communicate via either a serial line -or a TCP connection, using the standard @value{GDBN} remote serial -protocol. - -@table @emph -@item On the target machine, -you need to have a copy of the program you want to debug. -@code{gdbserver} does not need your program's symbol table, so you can -strip the program if necessary to save space. @value{GDBN} on the host -system does all the symbol handling. - -To use the server, you must tell it how to communicate with @value{GDBN}; -the name of your program; and the arguments for your program. The usual -syntax is: - -@smallexample -target> gdbserver @var{comm} @var{program} [ @var{args} @dots{} ] -@end smallexample - -@var{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 -@samp{foo.txt} and communicate with @value{GDBN} over the serial port -@file{/dev/com1}: - -@smallexample -target> gdbserver /dev/com1 emacs foo.txt -@end smallexample - -@code{gdbserver} waits passively for the host @value{GDBN} to communicate -with it. - -To use a TCP connection instead of a serial line: - -@smallexample -target> gdbserver host:2345 emacs foo.txt -@end smallexample - -The only difference from the previous example is the first argument, -specifying that you are communicating with the host @value{GDBN} via -TCP. The @samp{host:2345} argument means that @code{gdbserver} is to -expect a TCP connection from machine @samp{host} to local TCP port 2345. -(Currently, the @samp{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, @code{23} is -reserved for @code{telnet}).@footnote{If you choose a port number that -conflicts with another service, @code{gdbserver} prints an error message -and exits.} You must use the same port number with the host @value{GDBN} -@code{target remote} command. - -On some targets, @code{gdbserver} can also attach to running programs. -This is accomplished via the @code{--attach} argument. The syntax is: - -@smallexample -target> gdbserver @var{comm} --attach @var{pid} -@end smallexample - -@var{pid} is the process ID of a currently running process. It isn't necessary -to point @code{gdbserver} at a binary for the running process. - -@pindex pidof -@cindex attach to a program by name -You can debug processes by name instead of process ID if your target has the -@code{pidof} utility: - -@smallexample -target> gdbserver @var{comm} --attach `pidof @var{PROGRAM}` -@end smallexample - -In case more than one copy of @var{PROGRAM} is running, or @var{PROGRAM} -has multiple threads, most versions of @code{pidof} support the -@code{-s} option to only return the first process ID. - -@item On the host machine, -connect to your target (@pxref{Connecting,,Connecting to a remote target}). -For TCP connections, you must start up @code{gdbserver} prior to using -the @code{target remote} command. Otherwise you may get an error whose -text depends on the host system, but which usually looks something like -@samp{Connection refused}. You don't need to use the @code{load} -command in @value{GDBN} when using gdbserver, since the program is -already on the target. - -@end table - -@node NetWare -@section Using the @code{gdbserve.nlm} program - -@kindex gdbserve.nlm -@code{gdbserve.nlm} is a control program for NetWare systems, which -allows you to connect your program with a remote @value{GDBN} via -@code{target remote}. - -@value{GDBN} and @code{gdbserve.nlm} communicate via a serial line, -using the standard @value{GDBN} remote serial protocol. - -@table @emph -@item On the target machine, -you need to have a copy of the program you want to debug. -@code{gdbserve.nlm} does not need your program's symbol table, so you -can strip the program if necessary to save space. @value{GDBN} on the -host system does all the symbol handling. - -To use the server, you must tell it how to communicate with -@value{GDBN}; the name of your program; and the arguments for your -program. The syntax is: - -@smallexample -load gdbserve [ BOARD=@var{board} ] [ PORT=@var{port} ] - [ BAUD=@var{baud} ] @var{program} [ @var{args} @dots{} ] -@end smallexample - -@var{board} and @var{port} specify the serial line; @var{baud} specifies -the baud rate used by the connection. @var{port} and @var{node} default -to 0, @var{baud} defaults to 9600@dmn{bps}. - -For example, to debug Emacs with the argument @samp{foo.txt}and -communicate with @value{GDBN} over serial port number 2 or board 1 -using a 19200@dmn{bps} connection: - -@smallexample -load gdbserve BOARD=1 PORT=2 BAUD=19200 emacs foo.txt -@end smallexample - -@item -On the @value{GDBN} host machine, connect to your target (@pxref{Connecting,, -Connecting to a remote target}). - -@end table - -@node Remote configuration -@section Remote configuration - -The following configuration options are available when debugging remote -programs: - -@table @code -@kindex set remote hardware-watchpoint-limit -@kindex set remote hardware-breakpoint-limit -@anchor{set remote hardware-watchpoint-limit} -@anchor{set remote hardware-breakpoint-limit} -@item set remote hardware-watchpoint-limit @var{limit} -@itemx set remote hardware-breakpoint-limit @var{limit} -Restrict @value{GDBN} to using @var{limit} remote hardware breakpoint or -watchpoints. A limit of -1, the default, is treated as unlimited. -@end table - -@node remote stub -@section Implementing a remote stub - -@cindex debugging stub, example -@cindex remote stub, example -@cindex stub example, remote debugging -The stub files provided with @value{GDBN} implement the target side of the -communication protocol, and the @value{GDBN} side is implemented in the -@value{GDBN} source file @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. @file{sparc-stub.c} is the best -organized, and therefore the easiest to read.) - -@cindex remote serial debugging, overview -To debug a program running on another machine (the debugging -@dfn{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: - -@enumerate -@item -A startup routine to set up the C runtime environment; these usually -have a name like @file{crt0}. The startup routine may be supplied by -your hardware supplier, or you may have to write your own. - -@item -A C subroutine library to support your program's -subroutine calls, notably managing input and output. - -@item -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. -@end enumerate - -The next step is to arrange for your program to use a serial port to -communicate with the machine where @value{GDBN} is running (the @dfn{host} -machine). In general terms, the scheme looks like this: - -@table @emph -@item On the host, -@value{GDBN} already understands how to use this protocol; when everything -else is set up, you can simply use the @samp{target remote} command -(@pxref{Targets,,Specifying a Debugging Target}). - -@item On the target, -you must link with your program a few special-purpose subroutines that -implement the @value{GDBN} remote serial protocol. The file containing these -subroutines is called a @dfn{debugging stub}. - -On certain remote targets, you can use an auxiliary program -@code{gdbserver} instead of linking a stub into your program. -@xref{Server,,Using the @code{gdbserver} program}, for details. -@end table - -The debugging stub is specific to the architecture of the remote -machine; for example, use @file{sparc-stub.c} to debug programs on -@sc{sparc} boards. - -@cindex remote serial stub list -These working remote stubs are distributed with @value{GDBN}: - -@table @code - -@item i386-stub.c -@cindex @file{i386-stub.c} -@cindex Intel -@cindex i386 -For Intel 386 and compatible architectures. - -@item m68k-stub.c -@cindex @file{m68k-stub.c} -@cindex Motorola 680x0 -@cindex m680x0 -For Motorola 680x0 architectures. - -@item sh-stub.c -@cindex @file{sh-stub.c} -@cindex Renesas -@cindex SH -For Renesas SH architectures. - -@item sparc-stub.c -@cindex @file{sparc-stub.c} -@cindex Sparc -For @sc{sparc} architectures. - -@item sparcl-stub.c -@cindex @file{sparcl-stub.c} -@cindex Fujitsu -@cindex SparcLite -For Fujitsu @sc{sparclite} architectures. - -@end table - -The @file{README} file in the @value{GDBN} 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 -@end menu - -@node Stub Contents -@subsection What the stub can do for you - -@cindex remote serial stub -The debugging stub for your architecture supplies these three -subroutines: - -@table @code -@item set_debug_traps -@kindex set_debug_traps -@cindex remote serial stub, initialization -This routine arranges for @code{handle_exception} to run when your -program stops. You must call this subroutine explicitly near the -beginning of your program. - -@item handle_exception -@kindex handle_exception -@cindex remote serial stub, main routine -This is the central workhorse, but your program never calls it -explicitly---the setup code arranges for @code{handle_exception} to -run when a trap is triggered. - -@code{handle_exception} takes control when your program stops during -execution (for example, on a breakpoint), and mediates communications -with @value{GDBN} on the host machine. This is where the communications -protocol is implemented; @code{handle_exception} acts as the @value{GDBN} -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 @value{GDBN} needs, until you -execute a @value{GDBN} command that makes your program resume; at that point, -@code{handle_exception} returns control to your own code on the target -machine. - -@item breakpoint -@cindex @code{breakpoint} subroutine, remote -Use this auxiliary subroutine to make your program contain a -breakpoint. Depending on the particular situation, this may be the only -way for @value{GDBN} 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 -@code{handle_exception}---in effect, to @value{GDBN}. 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 @code{breakpoint} from -your own program---simply running @samp{target remote} from the host -@value{GDBN} session gets control. - -Call @code{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. -@end table - -@node Bootstrapping -@subsection What you must do for the stub - -@cindex remote stub, support routines -The debugging stubs that come with @value{GDBN} 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. - -@table @code -@item int getDebugChar() -@kindex getDebugChar -Write this subroutine to read a single character from the serial port. -It may be identical to @code{getchar} for your target system; a -different name is used to allow you to distinguish the two if you wish. - -@item void putDebugChar(int) -@kindex putDebugChar -Write this subroutine to write a single character to the serial port. -It may be identical to @code{putchar} for your target system; a -different name is used to allow you to distinguish the two if you wish. -@end table - -@cindex control C, and remote debugging -@cindex interrupting remote targets -If you want @value{GDBN} 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 @code{^C} (@samp{\003}, the control-C -character). That is the character which @value{GDBN} uses to tell the -remote system to stop. - -Getting the debugging target to return the proper status to @value{GDBN} -probably requires changes to the standard stub; one quick and dirty way -is to just execute a breakpoint instruction (the ``dirty'' part is that -@value{GDBN} reports a @code{SIGTRAP} instead of a @code{SIGINT}). - -Other routines you need to supply are: - -@table @code -@item void exceptionHandler (int @var{exception_number}, void *@var{exception_address}) -@kindex exceptionHandler -Write this function to install @var{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 @sc{rom}, -containing entries which point to a table in @sc{ram}). -@var{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 -@var{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 @var{exception_address}, it -should be a simple jump, not a jump to subroutine. - -For the 386, @var{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 -@sc{sparc} and 68k stubs are able to mask interrupts themselves without -help from @code{exceptionHandler}. - -@item void flush_i_cache() -@kindex flush_i_cache -On @sc{sparc} and @sc{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, @value{GDBN} requires this -function to make certain that the state of your program is stable. -@end table - -@noindent -You must also make sure this library routine is available: - -@table @code -@item void *memset(void *, int, int) -@kindex memset -This is the standard library function @code{memset} that sets an area of -memory to a known value. If you have one of the free versions of -@code{libc.a}, @code{memset} can be found there; otherwise, you must -either obtain it from your hardware manufacturer, or write your own. -@end table - -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 @code{@value{GCC}} generates as inline code. - - -@node Debug Session -@subsection Putting it all together - -@cindex remote serial debugging summary -In summary, when your program is ready to debug, you must follow these -steps. - -@enumerate -@item -Make sure you have defined the supporting low-level routines -(@pxref{Bootstrapping,,What you must do for the stub}): -@display -@code{getDebugChar}, @code{putDebugChar}, -@code{flush_i_cache}, @code{memset}, @code{exceptionHandler}. -@end display - -@item -Insert these lines near the top of your program: - -@smallexample -set_debug_traps(); -breakpoint(); -@end smallexample - -@item -For the 680x0 stub only, you need to provide a variable called -@code{exceptionHook}. Normally you just use: - -@smallexample -void (*exceptionHook)() = 0; -@end smallexample - -@noindent -but if before calling @code{set_debug_traps}, you set it to point to a -function in your program, that function is called when -@code{@value{GDBN}} continues after stopping on a trap (for example, bus -error). The function indicated by @code{exceptionHook} is called with -one parameter: an @code{int} which is the exception number. - -@item -Compile and link together: your program, the @value{GDBN} debugging stub for -your target architecture, and the supporting subroutines. - -@item -Make sure you have a serial connection between your target machine and -the @value{GDBN} host, and identify the serial port on the host. - -@item -@c The "remote" target now provides a `load' command, so we should -@c document that. FIXME. -Download your program to your target machine (or get it there by -whatever means the manufacturer provides), and start it. - -@item -Start @value{GDBN} on the host, and connect to the target -(@pxref{Connecting,,Connecting to a remote target}). - -@end enumerate - -@node Configurations -@chapter Configuration-Specific Information - -While nearly all @value{GDBN} 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:: -@end menu - -@node Native -@section 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 -@end menu - -@node HP-UX -@subsection HP-UX - -On HP-UX systems, if you refer to a function or variable name that -begins with a dollar sign, @value{GDBN} searches for a user or system -name first, before it searches for a convenience variable. - -@node SVR4 Process Information -@subsection SVR4 process information - -@kindex /proc -@cindex process image - -Many versions of SVR4 provide a facility called @samp{/proc} that can be -used to examine the image of a running process using file-system -subroutines. If @value{GDBN} is configured for an operating system with -this facility, the command @code{info proc} is available to report on -several kinds of information about the process running your program. -@code{info proc} works only on SVR4 systems that include the -@code{procfs} code. This includes OSF/1 (Digital Unix), Solaris, Irix, -and Unixware, but not HP-UX or @sc{gnu}/Linux, for example. - -@table @code -@kindex info proc -@item info proc -Summarize available information about the process. - -@kindex info proc mappings -@item 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. -@ignore -@comment These sub-options of 'info proc' were not included when -@comment procfs.c was re-written. Keep their descriptions around -@comment against the day when someone finds the time to put them back in. -@kindex info proc times -@item info proc times -Starting time, user CPU time, and system CPU time for your program and -its children. - -@kindex info proc id -@item info proc id -Report on the process IDs related to your program: its own process ID, -the ID of its parent, the process group ID, and the session ID. - -@kindex info proc status -@item info proc status -General information on the state of the process. If the process is -stopped, this report includes the reason for stopping, and any signal -received. - -@item info proc all -Show all the above information about the process. -@end ignore -@end table - -@node DJGPP Native -@subsection Features for Debugging @sc{djgpp} Programs -@cindex @sc{djgpp} debugging -@cindex native @sc{djgpp} debugging -@cindex MS-DOS-specific commands - -@sc{djgpp} is the port of @sc{gnu} development tools to MS-DOS and -MS-Windows. @sc{djgpp} programs are 32-bit protected-mode programs -that use the @dfn{DPMI} (DOS Protected-Mode Interface) API to run on -top of real-mode DOS systems and their emulations. - -@value{GDBN} supports native debugging of @sc{djgpp} programs, and -defines a few commands specific to the @sc{djgpp} port. This -subsection describes those commands. - -@table @code -@kindex info dos -@item info dos -This is a prefix of @sc{djgpp}-specific commands which print -information about the target system and important OS structures. - -@kindex sysinfo -@cindex MS-DOS system info -@cindex free memory information (MS-DOS) -@item 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. - -@cindex GDT -@cindex LDT -@cindex IDT -@cindex segment descriptor tables -@cindex descriptor tables display -@item info dos gdt -@itemx info dos ldt -@itemx 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 @sc{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. - -@cindex garbled pointers -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: - -@smallexample -@exdent @code{(@value{GDBP}) info dos ldt $ds} -@exdent @code{0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)} -@end smallexample - -@noindent -This comes in handy when you want to see whether a pointer is outside -the data segment's limit (i.e.@: @dfn{garbled}). - -@cindex page tables display (MS-DOS) -@item info dos pde -@itemx 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, @kbd{info dos pde} displays the entire Page -Directory, and @kbd{info dos pte} displays all the entries in all of -the Page Tables. An argument, an integer expression, given to the -@kbd{info dos pde} command means display only that entry from the Page -Directory table. An argument given to the @kbd{info dos pte} command -means display entries from a single Page Table, the one pointed to by -the specified entry in the Page Directory. - -@cindex direct memory access (DMA) on MS-DOS -These commands are useful when your program uses @dfn{DMA} (Direct -Memory Access), which needs physical addresses to program the DMA -controller. - -These commands are supported only with some DPMI servers. - -@cindex physical address from linear address -@item info dos address-pte @var{addr} -This command displays the Page Table entry for a specified linear -address. The argument linear address @var{addr} should already have the -appropriate segment's base address added to it, because this command -accepts addresses which may belong to @emph{any} segment. For -example, here's how to display the Page Table entry for the page where -the variable @code{i} is stored: - -@smallexample -@exdent @code{(@value{GDBP}) info dos address-pte __djgpp_base_address + (char *)&i} -@exdent @code{Page Table entry for address 0x11a00d30:} -@exdent @code{Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30} -@end smallexample - -@noindent -This says that @code{i} is stored at offset @code{0xd30} from the page -whose physical base address is @code{0x02698000}, and prints all the -attributes of that page. - -Note that you must cast the addresses of variables to a @code{char *}, -since otherwise the value of @code{__djgpp_base_address}, the base -address of all variables and functions in a @sc{djgpp} program, will -be added using the rules of C pointer arithmetics: if @code{i} is -declared an @code{int}, @value{GDBN} will add 4 times the value of -@code{__djgpp_base_address} to the address of @code{i}. - -Here's another example, it displays the Page Table entry for the -transfer buffer: - -@smallexample -@exdent @code{(@value{GDBP}) info dos address-pte *((unsigned *)&_go32_info_block + 3)} -@exdent @code{Page Table entry for address 0x29110:} -@exdent @code{Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110} -@end smallexample - -@noindent -(The @code{+ 3} offset is because the transfer buffer's address is the -3rd member of the @code{_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. -@end table - -@node Cygwin Native -@subsection Features for Debugging MS Windows PE executables -@cindex MS Windows debugging -@cindex native Cygwin debugging -@cindex Cygwin-specific commands - -@value{GDBN} 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 @pxref{Non-debug DLL symbols} describes working with DLLs -that have no debugging symbols. - - -@table @code -@kindex info w32 -@item info w32 -This is a prefix of MS Windows specific commands which print -information about the target system and important OS structures. - -@item info w32 selector -This command displays information returned by -the Win32 API @code{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. - -@kindex info dll -@item info dll -This is a Cygwin specific alias of info shared. - -@kindex dll-symbols -@item dll-symbols -This command loads symbols from a dll similarly to -add-sym command but without the need to specify a base address. - -@kindex set new-console -@item set new-console @var{mode} -If @var{mode} is @code{on} the debuggee will -be started in a new console on next start. -If @var{mode} is @code{off}i, the debuggee will -be started in the same console as the debugger. - -@kindex show new-console -@item show new-console -Displays whether a new console is used -when the debuggee is started. - -@kindex set new-group -@item set new-group @var{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. - -@kindex show new-group -@item show new-group -Displays current value of new-group boolean. - -@kindex set debugevents -@item set debugevents -This boolean value adds debug output concerning events seen by the debugger. - -@kindex set debugexec -@item set debugexec -This boolean value adds debug output concerning execute events -seen by the debugger. - -@kindex set debugexceptions -@item set debugexceptions -This boolean value adds debug ouptut concerning exception events -seen by the debugger. - -@kindex set debugmemory -@item set debugmemory -This boolean value adds debug ouptut concerning memory events -seen by the debugger. - -@kindex set shell -@item set shell -This boolean values specifies whether the debuggee is called -via a shell or directly (default value is on). - -@kindex show shell -@item show shell -Displays if the debuggee will be started with a shell. - -@end table - -@menu -* Non-debug DLL symbols:: Support for DLLs without debugging symbols -@end menu - -@node Non-debug DLL symbols -@subsubsection Support for DLLs without debugging symbols -@cindex DLLs with no debugging symbols -@cindex Minimal symbols and DLLs - -Very often on windows, some of the DLLs that your program relies on do -not include symbolic debugging information (for example, -@file{kernel32.dll}). When @value{GDBN} 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 @value{GDBN} 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 -@value{GDBN} to load a particular DLL before starting the executable --- -see the shared library information in @pxref{Files} or the -@code{dll-symbols} command in @pxref{Cygwin Native}. Currently, -explicitly loading symbols from a DLL with no debugging information will -cause the symbol names to be duplicated in @value{GDBN}'s lookup table, -which may adversely affect symbol lookup performance. - -@subsubsection 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 @code{KERNEL32!CreateFileA}. The plain name is -also entered into the symbol table, so @code{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 @value{GDBN} are @emph{case-sensitive} this may cause -some confusion. If in doubt, try the @code{info functions} and -@code{info variables} commands or even @code{maint print msymbols} (see -@pxref{Symbols}). Here's an example: - -@smallexample -(gdb) info function CreateFileA -All functions matching regular expression "CreateFileA": - -Non-debugging symbols: -0x77e885f4 CreateFileA -0x77e885f4 KERNEL32!CreateFileA -@end smallexample - -@smallexample -(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...] -@end smallexample - -@subsubsection Working with minimal symbols - -Symbols extracted from a DLL's export table do not contain very much -type information. All that @value{GDBN} 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: - -@smallexample -(gdb) print 'cygwin1!__argv' -$1 = 268572168 -@end smallexample - -@smallexample -(gdb) x 'cygwin1!__argv' -0x10021610: "\230y\"" -@end smallexample - -And two possible solutions: - -@smallexample -(gdb) print ((char **)'cygwin1!__argv')[0] -$2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram" -@end smallexample - -@smallexample -(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" -@end smallexample - -Setting a break point within a DLL is possible even before the program -starts execution. However, under these circumstances, @value{GDBN} 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: - -@smallexample -(gdb) break *&'python22!PyOS_Readline' -Breakpoint 1 at 0x1e04eff0 -@end smallexample - -The author of these extensions is not entirely convinced that setting a -break point within a shared DLL like @file{kernel32.dll} is completely -safe. - -@node Embedded OS -@section Embedded Operating Systems - -This section describes configurations involving the debugging of -embedded operating systems that are available for several different -architectures. - -@menu -* VxWorks:: Using @value{GDBN} with VxWorks -@end menu - -@value{GDBN} includes the ability to debug programs running on -various real-time operating systems. - -@node VxWorks -@subsection Using @value{GDBN} with VxWorks - -@cindex VxWorks - -@table @code - -@kindex target vxworks -@item target vxworks @var{machinename} -A VxWorks system, attached via TCP/IP. The argument @var{machinename} -is the target system's machine name or IP address. - -@end table - -On VxWorks, @code{load} links @var{filename} dynamically on the -current target system as well as adding its symbols in @value{GDBN}. - -@value{GDBN} 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. @value{GDBN} uses code that runs on -both the Unix host and on the VxWorks target. The program -@code{@value{GDBP}} is installed and executed on the Unix host. (It may be -installed with the name @code{vxgdb}, to distinguish it from a -@value{GDBN} for debugging programs on the host itself.) - -@table @code -@item VxWorks-timeout @var{args} -@kindex vxworks-timeout -All VxWorks-based targets now support the option @code{vxworks-timeout}. -This option is set by the user, and @var{args} represents the number of -seconds @value{GDBN} 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. -@end table - -The following information on connecting to VxWorks was current when -this manual was produced; newer releases of VxWorks may use revised -procedures. - -@kindex INCLUDE_RDB -To use @value{GDBN} with VxWorks, you must rebuild your VxWorks kernel -to include the remote debugging interface routines in the VxWorks -library @file{rdb.a}. To do this, define @code{INCLUDE_RDB} in the -VxWorks configuration file @file{configAll.h} and rebuild your VxWorks -kernel. The resulting kernel contains @file{rdb.a}, and spawns the -source debugging task @code{tRdbTask} when VxWorks is booted. For more -information on configuring and remaking VxWorks, see the manufacturer's -manual. -@c VxWorks, see the @cite{VxWorks Programmer's Guide}. - -Once you have included @file{rdb.a} in your VxWorks system image and set -your Unix execution search path to find @value{GDBN}, you are ready to -run @value{GDBN}. From your Unix host, run @code{@value{GDBP}} (or -@code{vxgdb}, depending on your installation). - -@value{GDBN} comes up showing the prompt: - -@smallexample -(vxgdb) -@end smallexample - -@menu -* VxWorks Connection:: Connecting to VxWorks -* VxWorks Download:: VxWorks download -* VxWorks Attach:: Running tasks -@end menu - -@node VxWorks Connection -@subsubsection Connecting to VxWorks - -The @value{GDBN} command @code{target} lets you connect to a VxWorks target on the -network. To connect to a target whose host name is ``@code{tt}'', type: - -@smallexample -(vxgdb) target vxworks tt -@end smallexample - -@need 750 -@value{GDBN} displays messages like these: - -@smallexample -Attaching remote machine across net... -Connected to tt. -@end smallexample - -@need 1000 -@value{GDBN} then attempts to read the symbol tables of any object modules -loaded into the VxWorks target since it was last booted. @value{GDBN} locates -these files by searching the directories listed in the command search -path (@pxref{Environment, ,Your program's environment}); if it fails -to find an object file, it displays a message such as: - -@smallexample -prog.o: No such file or directory. -@end smallexample - -When this happens, add the appropriate directory to the search path with -the @value{GDBN} command @code{path}, and execute the @code{target} -command again. - -@node VxWorks Download -@subsubsection VxWorks download - -@cindex download to VxWorks -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 @value{GDBN} -@code{load} command to download a file from Unix to VxWorks -incrementally. The object file given as an argument to the @code{load} -command is actually opened twice: first by the VxWorks target in order -to download the code, then by @value{GDBN} 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 -@file{prog.o} may reside in @file{@var{vxpath}/vw/demo/rdb} in VxWorks -and in @file{@var{hostpath}/vw/demo/rdb} on the host. To load this -program, type this on VxWorks: - -@smallexample --> cd "@var{vxpath}/vw/demo/rdb" -@end smallexample - -@noindent -Then, in @value{GDBN}, type: - -@smallexample -(vxgdb) cd @var{hostpath}/vw/demo/rdb -(vxgdb) load prog.o -@end smallexample - -@value{GDBN} displays a response similar to this: - -@smallexample -Reading symbol data from wherever/vw/demo/rdb/prog.o... done. -@end smallexample - -You can also use the @code{load} command to reload an object module -after editing and recompiling the corresponding source file. Note that -this makes @value{GDBN} 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.) - -@node VxWorks Attach -@subsubsection Running tasks - -@cindex running VxWorks tasks -You can also attach to an existing task using the @code{attach} command as -follows: - -@smallexample -(vxgdb) attach @var{task} -@end smallexample - -@noindent -where @var{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. - -@node Embedded Processors -@section 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 -@end menu - -@node ARM -@subsection ARM - -@table @code - -@kindex target rdi -@item target rdi @var{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. - -@kindex target rdp -@item target rdp @var{dev} -ARM Demon monitor. - -@end table - -@node H8/300 -@subsection Renesas H8/300 - -@table @code - -@kindex target hms@r{, with H8/300} -@item target hms @var{dev} -A Renesas SH, H8/300, or H8/500 board, attached via serial line to your host. -Use special commands @code{device} and @code{speed} to control the serial -line and the communications speed used. - -@kindex target e7000@r{, with H8/300} -@item target e7000 @var{dev} -E7000 emulator for Renesas H8 and SH. - -@kindex target sh3@r{, with H8/300} -@kindex target sh3e@r{, with H8/300} -@item target sh3 @var{dev} -@itemx target sh3e @var{dev} -Renesas SH-3 and SH-3E target systems. - -@end table - -@cindex download to H8/300 or H8/500 -@cindex H8/300 or H8/500 download -@cindex download to Renesas SH -@cindex Renesas SH download -When you select remote debugging to a Renesas SH, H8/300, or H8/500 -board, the @code{load} command downloads your program to the Renesas -board and also opens it as the current executable target for -@value{GDBN} on your host (like the @code{file} command). - -@value{GDBN} needs to know these things to talk to your -Renesas SH, H8/300, or H8/500: - -@enumerate -@item -that you want to use @samp{target hms}, the remote debugging interface -for Renesas microprocessors, or @samp{target e7000}, the in-circuit -emulator for the Renesas SH and the Renesas 300H. (@samp{target hms} is -the default when @value{GDBN} is configured specifically for the Renesas SH, -H8/300, or H8/500.) - -@item -what serial device connects your host to your Renesas board (the first -serial device available on your host is the default). - -@item -what speed to use over the serial device. -@end enumerate - -@menu -* Renesas Boards:: Connecting to Renesas boards. -* Renesas ICE:: Using the E7000 In-Circuit Emulator. -* Renesas Special:: Special @value{GDBN} commands for Renesas micros. -@end menu - -@node Renesas Boards -@subsubsection Connecting to Renesas boards - -@c only for Unix hosts -@kindex device -@cindex serial device, Renesas micros -Use the special @code{@value{GDBN}} command @samp{device @var{port}} if you -need to explicitly set the serial device. The default @var{port} is the -first available port on your host. This is only necessary on Unix -hosts, where it is typically something like @file{/dev/ttya}. - -@kindex speed -@cindex serial line speed, Renesas micros -@code{@value{GDBN}} has another special command to set the communications -speed: @samp{speed @var{bps}}. This command also is only used from Unix -hosts; on DOS hosts, set the line speed as usual from outside @value{GDBN} with -the DOS @code{mode} command (for instance, -@w{@kbd{mode com2:9600,n,8,1,p}} for a 9600@dmn{bps} connection). - -The @samp{device} and @samp{speed} commands are available only when you -use a Unix host to debug your Renesas microprocessor programs. If you -use a DOS host, -@value{GDBN} depends on an auxiliary terminate-and-stay-resident program -called @code{asynctsr} to communicate with the development board -through a PC serial port. You must also use the DOS @code{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 @value{GDBN} control on an H8/300. The example uses a -sample H8/300 program called @file{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 @code{COM2}; if you use a different serial -port, substitute its name in the argument of the @code{mode} command. -When you call @code{asynctsr}, the auxiliary comms program used by the -debugger, you give it just the numeric part of the serial port's name; -for example, @samp{asyncstr 2} below runs @code{asyncstr} on -@code{COM2}. - -@smallexample -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 - -@end smallexample - -@quotation -@emph{Warning:} We have noticed a bug in PC-NFS that conflicts with -@code{asynctsr}. If you also run PC-NFS on your DOS host, you may need to -disable it, or even boot without it, to use @code{asynctsr} to control -your development board. -@end quotation - -@kindex target hms@r{, and serial protocol} -Now that serial communications are set up, and the development board is -connected, you can start up @value{GDBN}. Call @code{@value{GDBP}} with -the name of your program as the argument. @code{@value{GDBN}} prompts -you, as usual, with the prompt @samp{(@value{GDBP})}. Use two special -commands to begin your debugging session: @samp{target hms} to specify -cross-debugging to the Renesas board, and the @code{load} command to -download your program to the board. @code{load} displays the names of -the program's sections, and a @samp{*} for each 2K of data downloaded. -(If you want to refresh @value{GDBN} data on symbols or on the -executable file without downloading, use the @value{GDBN} commands -@code{file} or @code{symbol-file}. These commands, and @code{load} -itself, are described in @ref{Files,,Commands to specify files}.) - -@smallexample -(eg-C:\H8300\TEST) @value{GDBP} t.x -@value{GDBN} 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 @value{GDBN}; type "show warranty" -for details. -@value{GDBN} @value{GDBVN}, Copyright 1992 Free Software Foundation, Inc... -(@value{GDBP}) target hms -Connected to remote H8/300 HMS system. -(@value{GDBP}) load t.x -.text : 0x8000 .. 0xabde *********** -.data : 0xabde .. 0xad30 * -.stack : 0xf000 .. 0xf014 * -@end smallexample - -At this point, you're ready to run or debug your program. From here on, -you can use all the usual @value{GDBN} commands. The @code{break} command -sets breakpoints; the @code{run} command starts your program; -@code{print} or @code{x} display data; the @code{continue} command -resumes execution after stopping at a breakpoint. You can use the -@code{help} command at any time to find out more about @value{GDBN} commands. - -Remember, however, that @emph{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 @sc{reset} switch! - -Use the @sc{reset} button on the development board -@itemize @bullet -@item -to interrupt your program (don't use @kbd{ctl-C} on the DOS host---it has -no way to pass an interrupt signal to the development board); and - -@item -to return to the @value{GDBN} command prompt after your program finishes -normally. The communications protocol provides no other way for @value{GDBN} -to detect program completion. -@end itemize - -In either case, @value{GDBN} sees the effect of a @sc{reset} on the -development board as a ``normal exit'' of your program. - -@node Renesas ICE -@subsubsection Using the E7000 in-circuit emulator - -@kindex target e7000@r{, with Renesas ICE} -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 @samp{target -e7000} command to connect @value{GDBN} to your E7000: - -@table @code -@item target e7000 @var{port} @var{speed} -Use this form if your E7000 is connected to a serial port. The -@var{port} argument identifies what serial port to use (for example, -@samp{com2}). The third argument is the line speed in bits per second -(for example, @samp{9600}). - -@item target e7000 @var{hostname} -If your E7000 is installed as a host on a TCP/IP network, you can just -specify its hostname; @value{GDBN} uses @code{telnet} to connect. -@end table - -@node Renesas Special -@subsubsection Special @value{GDBN} commands for Renesas micros - -Some @value{GDBN} commands are available only for the H8/300: - -@table @code - -@kindex set machine -@kindex show machine -@item set machine h8300 -@itemx set machine h8300h -Condition @value{GDBN} for one of the two variants of the H8/300 -architecture with @samp{set machine}. You can use @samp{show machine} -to check which variant is currently in effect. - -@end table - -@node H8/500 -@subsection H8/500 - -@table @code - -@kindex set memory @var{mod} -@cindex memory models, H8/500 -@item set memory @var{mod} -@itemx show memory -Specify which H8/500 memory model (@var{mod}) you are using with -@samp{set memory}; check which memory model is in effect with @samp{show -memory}. The accepted values for @var{mod} are @code{small}, -@code{big}, @code{medium}, and @code{compact}. - -@end table - -@node M32R/D -@subsection Renesas M32R/D - -@table @code - -@kindex target m32r -@item target m32r @var{dev} -Renesas M32R/D ROM monitor. - -@kindex target m32rsdi -@item target m32rsdi @var{dev} -Renesas M32R SDI server, connected via parallel port to the board. - -@end table - -@node M68K -@subsection M68k - -The Motorola m68k configuration includes ColdFire support, and -target command for the following ROM monitors. - -@table @code - -@kindex target abug -@item target abug @var{dev} -ABug ROM monitor for M68K. - -@kindex target cpu32bug -@item target cpu32bug @var{dev} -CPU32BUG monitor, running on a CPU32 (M68K) board. - -@kindex target dbug -@item target dbug @var{dev} -dBUG ROM monitor for Motorola ColdFire. - -@kindex target est -@item target est @var{dev} -EST-300 ICE monitor, running on a CPU32 (M68K) board. - -@kindex target rom68k -@item target rom68k @var{dev} -ROM 68K monitor, running on an M68K IDP board. - -@end table - -@table @code - -@kindex target rombug -@item target rombug @var{dev} -ROMBUG ROM monitor for OS/9000. - -@end table - -@node MIPS Embedded -@subsection MIPS Embedded - -@cindex MIPS boards -@value{GDBN} can use the MIPS remote debugging protocol to talk to a -MIPS board attached to a serial line. This is available when -you configure @value{GDBN} with @samp{--target=mips-idt-ecoff}. - -@need 1000 -Use these @value{GDBN} commands to specify the connection to your target board: - -@table @code -@item target mips @var{port} -@kindex target mips @var{port} -To run a program on the board, start up @code{@value{GDBP}} with the -name of your program as the argument. To connect to the board, use the -command @samp{target mips @var{port}}, where @var{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 @code{load} command to -download it. You can then use all the usual @value{GDBN} commands. - -For example, this sequence connects to the target board through a serial -port, and loads and runs a program called @var{prog} through the -debugger: - -@smallexample -host$ @value{GDBP} @var{prog} -@value{GDBN} is free software and @dots{} -(@value{GDBP}) target mips /dev/ttyb -(@value{GDBP}) load @var{prog} -(@value{GDBP}) run -@end smallexample - -@item target mips @var{hostname}:@var{portnumber} -On some @value{GDBN} 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 -@samp{@var{hostname}:@var{portnumber}}. - -@item target pmon @var{port} -@kindex target pmon @var{port} -PMON ROM monitor. - -@item target ddb @var{port} -@kindex target ddb @var{port} -NEC's DDB variant of PMON for Vr4300. - -@item target lsi @var{port} -@kindex target lsi @var{port} -LSI variant of PMON. - -@kindex target r3900 -@item target r3900 @var{dev} -Densan DVE-R3900 ROM monitor for Toshiba R3900 Mips. - -@kindex target array -@item target array @var{dev} -Array Tech LSI33K RAID controller board. - -@end table - - -@noindent -@value{GDBN} also supports these special commands for MIPS targets: - -@table @code -@item set processor @var{args} -@itemx show processor -@kindex set processor @var{args} -@kindex show processor -Use the @code{set processor} command to set the type of MIPS -processor when you want to access processor-type-specific registers. -For example, @code{set processor @var{r3041}} tells @value{GDBN} -to use the CPU registers appropriate for the 3041 chip. -Use the @code{show processor} command to see what MIPS processor @value{GDBN} -is using. Use the @code{info reg} command to see what registers -@value{GDBN} is using. - -@item set mipsfpu double -@itemx set mipsfpu single -@itemx set mipsfpu none -@itemx show mipsfpu -@kindex set mipsfpu -@kindex show mipsfpu -@cindex MIPS remote floating point -@cindex floating point, MIPS remote -If your target board does not support the MIPS floating point -coprocessor, you should use the command @samp{set mipsfpu none} (if you -need this, you may wish to put the command in your @value{GDBN} init -file). This tells @value{GDBN} how to find the return value of -functions which return floating point values. It also allows -@value{GDBN} 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 @sc{r4650} -processor, use the command @samp{set mipsfpu single}. The default -double precision floating point coprocessor may be selected using -@samp{set mipsfpu double}. - -In previous versions the only choices were double precision or no -floating point, so @samp{set mipsfpu on} will select double precision -and @samp{set mipsfpu off} will select no floating point. - -As usual, you can inquire about the @code{mipsfpu} variable with -@samp{show mipsfpu}. - -@item set remotedebug @var{n} -@itemx show remotedebug -@kindex set remotedebug@r{, MIPS protocol} -@kindex show remotedebug@r{, MIPS protocol} -@cindex @code{remotedebug}, MIPS protocol -@cindex MIPS @code{remotedebug} protocol -@c FIXME! For this to be useful, you must know something about the MIPS -@c FIXME...protocol. Where is it described? -You can see some debugging information about communications with the board -by setting the @code{remotedebug} variable. If you set it to @code{1} using -@samp{set remotedebug 1}, every packet is displayed. If you set it -to @code{2}, every character is displayed. You can check the current value -at any time with the command @samp{show remotedebug}. - -@item set timeout @var{seconds} -@itemx set retransmit-timeout @var{seconds} -@itemx show timeout -@itemx show retransmit-timeout -@cindex @code{timeout}, MIPS protocol -@cindex @code{retransmit-timeout}, MIPS protocol -@kindex set timeout -@kindex show timeout -@kindex set retransmit-timeout -@kindex show retransmit-timeout -You can control the timeout used while waiting for a packet, in the MIPS -remote protocol, with the @code{set timeout @var{seconds}} command. The -default is 5 seconds. Similarly, you can control the timeout used while -waiting for an acknowledgement of a packet with the @code{set -retransmit-timeout @var{seconds}} command. The default is 3 seconds. -You can inspect both values with @code{show timeout} and @code{show -retransmit-timeout}. (These commands are @emph{only} available when -@value{GDBN} is configured for @samp{--target=mips-idt-ecoff}.) - -The timeout set by @code{set timeout} does not apply when @value{GDBN} -is waiting for your program to stop. In that case, @value{GDBN} waits -forever because it has no way of knowing how long the program is going -to run before stopping. -@end table - -@node OpenRISC 1000 -@subsection OpenRISC 1000 -@cindex OpenRISC 1000 - -@cindex or1k boards -See OR1k Architecture document (@uref{www.opencores.org}) for more information -about platform and commands. - -@table @code - -@kindex target jtag -@item target jtag jtag://@var{host}:@var{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: @code{target jtag jtag://localhost:9999} - -@kindex or1ksim -@item or1ksim @var{command} -If connected to @code{or1ksim} OpenRISC 1000 Architectural -Simulator, proprietary commands can be executed. - -@kindex info or1k spr -@item info or1k spr -Displays spr groups. - -@item info or1k spr @var{group} -@itemx info or1k spr @var{groupno} -Displays register names in selected group. - -@item info or1k spr @var{group} @var{register} -@itemx info or1k spr @var{register} -@itemx info or1k spr @var{groupno} @var{registerno} -@itemx info or1k spr @var{registerno} -Shows information about specified spr register. - -@kindex spr -@item spr @var{group} @var{register} @var{value} -@itemx spr @var{register @var{value}} -@itemx spr @var{groupno} @var{registerno @var{value}} -@itemx spr @var{registerno @var{value}} -Writes @var{value} to specified spr register. -@end table - -Some implementations of OpenRISC 1000 Architecture also have hardware trace. -It is very similar to @value{GDBN} trace, except it does not interfere with normal -program execution and is thus much faster. Hardware breakpoints/watchpoint -triggers can be set using: -@table @code -@item $LEA/$LDATA -Load effective address/data -@item $SEA/$SDATA -Store effective address/data -@item $AEA/$ADATA -Access effective address ($SEA or $LEA) or data ($SDATA/$LDATA) -@item $FETCH -Fetch data -@end table - -When triggered, it can capture low level data, like: @code{PC}, @code{LSEA}, -@code{LDATA}, @code{SDATA}, @code{READSPR}, @code{WRITESPR}, @code{INSTR}. - -@code{htrace} commands: -@cindex OpenRISC 1000 htrace -@table @code -@kindex hwatch -@item hwatch @var{conditional} -Set hardware watchpoint on combination of Load/Store Effecive Address(es) -or Data. For example: - -@code{hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) && ($SDATA >= 50)} - -@code{hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) && ($SDATA >= 50)} - -@kindex htrace info -@item htrace info -Display information about current HW trace configuration. - -@kindex htrace trigger -@item htrace trigger @var{conditional} -Set starting criteria for HW trace. - -@kindex htrace qualifier -@item htrace qualifier @var{conditional} -Set acquisition qualifier for HW trace. - -@kindex htrace stop -@item htrace stop @var{conditional} -Set HW trace stopping criteria. - -@kindex htrace record -@item htrace record [@var{data}]* -Selects the data to be recorded, when qualifier is met and HW trace was -triggered. - -@kindex htrace enable -@item htrace enable -@kindex htrace disable -@itemx htrace disable -Enables/disables the HW trace. - -@kindex htrace rewind -@item htrace rewind [@var{filename}] -Clears currently recorded trace data. - -If filename is specified, new trace file is made and any newly collected data -will be written there. - -@kindex htrace print -@item htrace print [@var{start} [@var{len}]] -Prints trace buffer, using current record configuration. - -@kindex htrace mode continuous -@item htrace mode continuous -Set continuous trace mode. - -@kindex htrace mode suspend -@item htrace mode suspend -Set suspend trace mode. - -@end table - -@node PowerPC -@subsection PowerPC - -@table @code - -@kindex target dink32 -@item target dink32 @var{dev} -DINK32 ROM monitor. - -@kindex target ppcbug -@item target ppcbug @var{dev} -@kindex target ppcbug1 -@item target ppcbug1 @var{dev} -PPCBUG ROM monitor for PowerPC. - -@kindex target sds -@item target sds @var{dev} -SDS monitor, running on a PowerPC board (such as Motorola's ADS). - -@end table - -@node PA -@subsection HP PA Embedded - -@table @code - -@kindex target op50n -@item target op50n @var{dev} -OP50N monitor, running on an OKI HPPA board. - -@kindex target w89k -@item target w89k @var{dev} -W89K monitor, running on a Winbond HPPA board. - -@end table - -@node SH -@subsection Renesas SH - -@table @code - -@kindex target hms@r{, with Renesas SH} -@item target hms @var{dev} -A Renesas SH board attached via serial line to your host. Use special -commands @code{device} and @code{speed} to control the serial line and -the communications speed used. - -@kindex target e7000@r{, with Renesas SH} -@item target e7000 @var{dev} -E7000 emulator for Renesas SH. - -@kindex target sh3@r{, with SH} -@kindex target sh3e@r{, with SH} -@item target sh3 @var{dev} -@item target sh3e @var{dev} -Renesas SH-3 and SH-3E target systems. - -@end table - -@node Sparclet -@subsection Tsqware Sparclet - -@cindex Sparclet - -@value{GDBN} enables developers to debug tasks running on -Sparclet targets from a Unix host. -@value{GDBN} uses code that runs on -both the Unix host and on the Sparclet target. The program -@code{@value{GDBP}} is installed and executed on the Unix host. - -@table @code -@item remotetimeout @var{args} -@kindex remotetimeout -@value{GDBN} supports the option @code{remotetimeout}. -This option is set by the user, and @var{args} represents the number of -seconds @value{GDBN} waits for responses. -@end table - -@cindex compiling, on Sparclet -When compiling for debugging, include the options @samp{-g} to get debug -information and @samp{-Ttext} to relocate the program to where you wish to -load it on the target. You may also want to add the options @samp{-n} or -@samp{-N} in order to reduce the size of the sections. Example: - -@smallexample -sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N -@end smallexample - -You can use @code{objdump} to verify that the addresses are what you intended: - -@smallexample -sparclet-aout-objdump --headers --syms prog -@end smallexample - -@cindex running, on Sparclet -Once you have set -your Unix execution search path to find @value{GDBN}, you are ready to -run @value{GDBN}. From your Unix host, run @code{@value{GDBP}} -(or @code{sparclet-aout-gdb}, depending on your installation). - -@value{GDBN} comes up showing the prompt: - -@smallexample -(gdbslet) -@end smallexample - -@menu -* Sparclet File:: Setting the file to debug -* Sparclet Connection:: Connecting to Sparclet -* Sparclet Download:: Sparclet download -* Sparclet Execution:: Running and debugging -@end menu - -@node Sparclet File -@subsubsection Setting file to debug - -The @value{GDBN} command @code{file} lets you choose with program to debug. - -@smallexample -(gdbslet) file prog -@end smallexample - -@need 1000 -@value{GDBN} then attempts to read the symbol table of @file{prog}. -@value{GDBN} 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. -@value{GDBN} locates -the source files by searching the directories listed in the directory search -path (@pxref{Environment, ,Your program's environment}). -If it fails -to find a file, it displays a message such as: - -@smallexample -prog: No such file or directory. -@end smallexample - -When this happens, add the appropriate directories to the search paths with -the @value{GDBN} commands @code{path} and @code{dir}, and execute the -@code{target} command again. - -@node Sparclet Connection -@subsubsection Connecting to Sparclet - -The @value{GDBN} command @code{target} lets you connect to a Sparclet target. -To connect to a target on serial port ``@code{ttya}'', type: - -@smallexample -(gdbslet) target sparclet /dev/ttya -Remote target sparclet connected to /dev/ttya -main () at ../prog.c:3 -@end smallexample - -@need 750 -@value{GDBN} displays messages like these: - -@smallexample -Connected to ttya. -@end smallexample - -@node Sparclet Download -@subsubsection Sparclet download - -@cindex download to Sparclet -Once connected to the Sparclet target, -you can use the @value{GDBN} -@code{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 @code{load} -command. -Since the file format is aout, the program must be loaded to the starting -address. You can use @code{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 -@file{prog} was linked to text address 0x1201000, with data at 0x12010160 -and bss at 0x12010170, in @value{GDBN}, type: - -@smallexample -(gdbslet) load prog 0x12010000 -Loading section .text, size 0xdb0 vma 0x12010000 -@end smallexample - -If the code is loaded at a different address then what the program was linked -to, you may need to use the @code{section} and @code{add-symbol-file} commands -to tell @value{GDBN} where to map the symbol table. - -@node Sparclet Execution -@subsubsection Running and debugging - -@cindex running and debugging Sparclet programs -You can now begin debugging the task using @value{GDBN}'s execution control -commands, @code{b}, @code{step}, @code{run}, etc. See the @value{GDBN} -manual for the list of commands. - -@smallexample -(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) -@end smallexample - -@node Sparclite -@subsection Fujitsu Sparclite - -@table @code - -@kindex target sparclite -@item target sparclite @var{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 @var{dev} using @value{GDBN} standard -remote protocol. - -@end table - -@node ST2000 -@subsection Tandem ST2000 - -@value{GDBN} 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: - -@smallexample -target st2000 @var{dev} @var{speed} -@end smallexample - -@noindent -to establish it as your debugging environment. @var{dev} is normally -the name of a serial device, such as @file{/dev/ttya}, connected to the -ST2000 via a serial line. You can instead specify @var{dev} as a TCP -connection (for example, to a serial line attached via a terminal -concentrator) using the syntax @code{@var{hostname}:@var{portnumber}}. - -The @code{load} and @code{attach} commands are @emph{not} defined for -this target; you must load your program into the ST2000 as you normally -would for standalone operation. @value{GDBN} reads debugging information -(such as symbols) from a separate, debugging version of the program -available on your host computer. -@c FIXME!! This is terribly vague; what little content is here is -@c basically hearsay. - -@cindex ST2000 auxiliary commands -These auxiliary @value{GDBN} commands are available to help you with the ST2000 -environment: - -@table @code -@item st2000 @var{command} -@kindex st2000 @var{cmd} -@cindex STDBUG commands (ST2000) -@cindex commands to STDBUG (ST2000) -Send a @var{command} to the STDBUG monitor. See the manufacturer's -manual for available commands. - -@item connect -@cindex connect (to STDBUG) -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 @value{GDBN} command prompt: -@kbd{@key{RET}~.} (Return, followed by tilde and period) or -@kbd{@key{RET}~@key{C-d}} (Return, followed by tilde and control-D). -@end table - -@node Z8000 -@subsection Zilog Z8000 - -@cindex Z8000 -@cindex simulator, Z8000 -@cindex Zilog Z8000 simulator - -When configured for debugging Zilog Z8000 targets, @value{GDBN} includes -a Z8000 simulator. - -For the Z8000 family, @samp{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. - -@table @code -@item target sim @var{args} -@kindex sim -@kindex target sim@r{, with Z8000} -Debug programs on a simulated CPU. If the simulator supports setup -options, specify them via @var{args}. -@end table - -@noindent -After specifying this target, you can debug programs for the simulated -CPU in the same style as programs for your host computer; use the -@code{file} command to load a new program image, the @code{run} command -to run your program, and so on. - -As well as making available all the usual machine registers -(@pxref{Registers, ,Registers}), the Z8000 simulator provides three -additional items of information as specially named registers: - -@table @code - -@item cycles -Counts clock-ticks in the simulator. - -@item insts -Counts instructions run in the simulator. - -@item time -Execution time in 60ths of a second. - -@end table - -You can refer to these values in @value{GDBN} expressions with the usual -conventions; for example, @w{@samp{b fputc if $cycles>5000}} sets a -conditional breakpoint that suspends only after at least 5000 -simulated clock ticks. - -@node Architectures -@section Architectures - -This section describes characteristics of architectures that affect -all uses of @value{GDBN} with the architecture, both native and cross. - -@menu -* A29K:: -* Alpha:: -* MIPS:: -@end menu - -@node A29K -@subsection A29K - -@table @code - -@kindex set rstack_high_address -@cindex AMD 29K register stack -@cindex register stack, AMD29K -@item set rstack_high_address @var{address} -On AMD 29000 family processors, registers are saved in a separate -@dfn{register stack}. There is no way for @value{GDBN} to determine the -extent of this stack. Normally, @value{GDBN} just assumes that the -stack is ``large enough''. This may result in @value{GDBN} 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 @code{set rstack_high_address} command. The argument should be an -address, which you probably want to precede with @samp{0x} to specify in -hexadecimal. - -@kindex show rstack_high_address -@item show rstack_high_address -Display the current limit of the register stack, on AMD 29000 family -processors. - -@end table - -@node Alpha -@subsection Alpha - -See the following section. - -@node MIPS -@subsection MIPS - -@cindex stack on Alpha -@cindex stack on MIPS -@cindex Alpha stack -@cindex MIPS stack -Alpha- and MIPS-based computers use an unusual stack frame, which -sometimes requires @value{GDBN} to search backward in the object code to -find the beginning of a function. - -@cindex response time, MIPS debugging -To improve response time (especially for embedded applications, where -@value{GDBN} 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: - -@table @code -@cindex @code{heuristic-fence-post} (Alpha, MIPS) -@item set heuristic-fence-post @var{limit} -Restrict @value{GDBN} to examining at most @var{limit} bytes in its -search for the beginning of a function. A value of @var{0} (the -default) means there is no limit. However, except for @var{0}, the -larger the limit the more bytes @code{heuristic-fence-post} must search -and therefore the longer it takes to run. - -@item show heuristic-fence-post -Display the current limit. -@end table - -@noindent -These commands are available @emph{only} when @value{GDBN} is configured -for debugging programs on Alpha or MIPS processors. - - -@node Controlling GDB -@chapter Controlling @value{GDBN} - -You can alter the way @value{GDBN} interacts with you by using the -@code{set} command. For commands controlling how @value{GDBN} displays -data, see @ref{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 -@end menu - -@node Prompt -@section Prompt - -@cindex prompt - -@value{GDBN} indicates its readiness to read a command by printing a string -called the @dfn{prompt}. This string is normally @samp{(@value{GDBP})}. You -can change the prompt string with the @code{set prompt} command. For -instance, when debugging @value{GDBN} with @value{GDBN}, it is useful to change -the prompt in one of the @value{GDBN} sessions so that you can always tell -which one you are talking to. - -@emph{Note:} @code{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. - -@table @code -@kindex set prompt -@item set prompt @var{newprompt} -Directs @value{GDBN} to use @var{newprompt} as its prompt string henceforth. - -@kindex show prompt -@item show prompt -Prints a line of the form: @samp{Gdb's prompt is: @var{your-prompt}} -@end table - -@node Editing -@section Command editing -@cindex readline -@cindex command line editing - -@value{GDBN} reads its input commands via the @dfn{readline} interface. This -@sc{gnu} library provides consistent behavior for programs which provide a -command line interface to the user. Advantages are @sc{gnu} Emacs-style -or @dfn{vi}-style inline editing of commands, @code{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 @value{GDBN} with the -command @code{set}. - -@table @code -@kindex set editing -@cindex editing -@item set editing -@itemx set editing on -Enable command line editing (enabled by default). - -@item set editing off -Disable command line editing. - -@kindex show editing -@item show editing -Show whether command line editing is enabled. -@end table - -@node History -@section Command history - -@value{GDBN} 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 @value{GDBN} command -history facility. - -@table @code -@cindex history substitution -@cindex history file -@kindex set history filename -@kindex GDBHISTFILE -@item set history filename @var{fname} -Set the name of the @value{GDBN} command history file to @var{fname}. -This is the file where @value{GDBN} 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 @code{GDBHISTFILE}, or to -@file{./.gdb_history} (@file{./_gdb_history} on MS-DOS) if this variable -is not set. - -@cindex history save -@kindex set history save -@item set history save -@itemx set history save on -Record command history in a file, whose name may be specified with the -@code{set history filename} command. By default, this option is disabled. - -@item set history save off -Stop recording command history in a file. - -@cindex history size -@kindex set history size -@item set history size @var{size} -Set the number of commands which @value{GDBN} keeps in its history list. -This defaults to the value of the environment variable -@code{HISTSIZE}, or to 256 if this variable is not set. -@end table - -@cindex history expansion -History expansion assigns special meaning to the character @kbd{!}. -@ifset have-readline-appendices -@xref{Event Designators}. -@end ifset - -Since @kbd{!} is also the logical not operator in C, history expansion -is off by default. If you decide to enable history expansion with the -@code{set history expansion on} command, you may sometimes need to -follow @kbd{!} (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 -@kbd{!=} and @kbd{!(}, even when history expansion is enabled. - -The commands to control history expansion are: - -@table @code -@kindex set history expansion -@item set history expansion on -@itemx set history expansion -Enable history expansion. History expansion is off by default. - -@item set history expansion off -Disable history expansion. - -The readline code comes with more complete documentation of -editing and history expansion features. Users unfamiliar with @sc{gnu} Emacs -or @code{vi} may wish to read it. -@ifset have-readline-appendices -@xref{Command Line Editing}. -@end ifset - -@c @group -@kindex show history -@item show history -@itemx show history filename -@itemx show history save -@itemx show history size -@itemx show history expansion -These commands display the state of the @value{GDBN} history parameters. -@code{show history} by itself displays all four states. -@c @end group -@end table - -@table @code -@kindex shows -@item show commands -Display the last ten commands in the command history. - -@item show commands @var{n} -Print ten commands centered on command number @var{n}. - -@item show commands + -Print ten commands just after the commands last printed. -@end table - -@node Screen Size -@section Screen size -@cindex size of screen -@cindex pauses in output - -Certain commands to @value{GDBN} may produce large amounts of -information output to the screen. To help you read all of it, -@value{GDBN} pauses and asks you for input at the end of each page of -output. Type @key{RET} when you want to continue the output, or @kbd{q} -to discard the remaining output. Also, the screen width setting -determines when to wrap lines of output. Depending on what is being -printed, @value{GDBN} tries to break the line at a readable place, -rather than simply letting it overflow onto the following line. - -Normally @value{GDBN} knows the size of the screen from the terminal -driver software. For example, on Unix @value{GDBN} uses the termcap data base -together with the value of the @code{TERM} environment variable and the -@code{stty rows} and @code{stty cols} settings. If this is not correct, -you can override it with the @code{set height} and @code{set -width} commands: - -@table @code -@kindex set height -@kindex set width -@kindex show width -@kindex show height -@item set height @var{lpp} -@itemx show height -@itemx set width @var{cpl} -@itemx show width -These @code{set} commands specify a screen height of @var{lpp} lines and -a screen width of @var{cpl} characters. The associated @code{show} -commands display the current settings. - -If you specify a height of zero lines, @value{GDBN} 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 @samp{set width 0} to prevent @value{GDBN} -from wrapping its output. -@end table - -@node Numbers -@section Numbers -@cindex number representation -@cindex entering numbers - -You can always enter numbers in octal, decimal, or hexadecimal in -@value{GDBN} by the usual conventions: octal numbers begin with -@samp{0}, decimal numbers end with @samp{.}, and hexadecimal numbers -begin with @samp{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 @code{set -radix} command. - -@table @code -@kindex set input-radix -@item set input-radix @var{base} -Set the default base for numeric input. Supported choices -for @var{base} are decimal 8, 10, or 16. @var{base} must itself be -specified either unambiguously or using the current default radix; for -example, any of - -@smallexample -set radix 012 -set radix 10. -set radix 0xa -@end smallexample - -@noindent -sets the base to decimal. On the other hand, @samp{set radix 10} -leaves the radix unchanged no matter what it was. - -@kindex set output-radix -@item set output-radix @var{base} -Set the default base for numeric display. Supported choices -for @var{base} are decimal 8, 10, or 16. @var{base} must itself be -specified either unambiguously or using the current default radix. - -@kindex show input-radix -@item show input-radix -Display the current default base for numeric input. - -@kindex show output-radix -@item show output-radix -Display the current default base for numeric display. -@end table - -@node ABI -@section Configuring the current ABI - -@value{GDBN} can determine the @dfn{ABI} (Application Binary Interface) of your -application automatically. However, sometimes you need to override its -conclusions. Use these commands to manage @value{GDBN}'s view of the -current ABI. - -@cindex OS ABI -@kindex set osabi -@kindex show osabi - -One @value{GDBN} configuration can debug binaries for multiple operating -system targets, either via remote debugging or native emulation. -@value{GDBN} will autodetect the @dfn{OS ABI} (Operating System ABI) in use, -but you can override its conclusion using the @code{set osabi} command. -One example where this is useful is in debugging of binaries which use -an alternate C library (e.g.@: @sc{uClibc} for @sc{gnu}/Linux) which does -not have the same identifying marks that the standard C library for your -platform provides. - -@table @code -@item show osabi -Show the OS ABI currently in use. - -@item set osabi -With no argument, show the list of registered available OS ABI's. - -@item set osabi @var{abi} -Set the current OS ABI to @var{abi}. -@end table - -@cindex float promotion -@kindex set coerce-float-to-double - -Generally, the way that an argument of type @code{float} is passed to a -function depends on whether the function is prototyped. For a prototyped -(i.e.@: ANSI/ISO style) function, @code{float} arguments are passed unchanged, -according to the architecture's convention for @code{float}. For unprototyped -(i.e.@: K&R style) functions, @code{float} arguments are first promoted to type -@code{double} and then passed. - -Unfortunately, some forms of debug information do not reliably indicate whether -a function is prototyped. If @value{GDBN} calls a function that is not marked -as prototyped, it consults @kbd{set coerce-float-to-double}. - -@table @code -@item set coerce-float-to-double -@itemx set coerce-float-to-double on -Arguments of type @code{float} will be promoted to @code{double} when passed -to an unprototyped function. This is the default setting. - -@item set coerce-float-to-double off -Arguments of type @code{float} will be passed directly to unprototyped -functions. -@end table - -@kindex set cp-abi -@kindex show cp-abi -@value{GDBN} needs to know the ABI used for your program's C@t{++} -objects. The correct C@t{++} ABI depends on which C@t{++} compiler was -used to build your application. @value{GDBN} only fully supports -programs with a single C@t{++} ABI; if your program contains code using -multiple C@t{++} ABI's or if @value{GDBN} can not identify your -program's ABI correctly, you can tell @value{GDBN} which ABI to use. -Currently supported ABI's include ``gnu-v2'', for @code{g++} versions -before 3.0, ``gnu-v3'', for @code{g++} versions 3.0 and later, and -``hpaCC'' for the HP ANSI C@t{++} compiler. Other C@t{++} compilers may -use the ``gnu-v2'' or ``gnu-v3'' ABI's as well. The default setting is -``auto''. - -@table @code -@item show cp-abi -Show the C@t{++} ABI currently in use. - -@item set cp-abi -With no argument, show the list of supported C@t{++} ABI's. - -@item set cp-abi @var{abi} -@itemx set cp-abi auto -Set the current C@t{++} ABI to @var{abi}, or return to automatic detection. -@end table - -@node Messages/Warnings -@section Optional warnings and messages - -By default, @value{GDBN} is silent about its inner workings. If you are -running on a slow machine, you may want to use the @code{set verbose} -command. This makes @value{GDBN} tell you when it does a lengthy -internal operation, so you will not think it has crashed. - -Currently, the messages controlled by @code{set verbose} are those -which announce that the symbol table for a source file is being read; -see @code{symbol-file} in @ref{Files, ,Commands to specify files}. - -@table @code -@kindex set verbose -@item set verbose on -Enables @value{GDBN} output of certain informational messages. - -@item set verbose off -Disables @value{GDBN} output of certain informational messages. - -@kindex show verbose -@item show verbose -Displays whether @code{set verbose} is on or off. -@end table - -By default, if @value{GDBN} 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 (@pxref{Symbol Errors, ,Errors reading -symbol files}). - -@table @code - -@kindex set complaints -@item set complaints @var{limit} -Permits @value{GDBN} to output @var{limit} complaints about each type of -unusual symbols before becoming silent about the problem. Set -@var{limit} to zero to suppress all complaints; set it to a large number -to prevent complaints from being suppressed. - -@kindex show complaints -@item show complaints -Displays how many symbol complaints @value{GDBN} is permitted to produce. - -@end table - -By default, @value{GDBN} 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: - -@smallexample -(@value{GDBP}) run -The program being debugged has been started already. -Start it from the beginning? (y or n) -@end smallexample - -If you are willing to unflinchingly face the consequences of your own -commands, you can disable this ``feature'': - -@table @code - -@kindex set confirm -@cindex flinching -@cindex confirmation -@cindex stupid questions -@item set confirm off -Disables confirmation requests. - -@item set confirm on -Enables confirmation requests (the default). - -@kindex show confirm -@item show confirm -Displays state of confirmation requests. - -@end table - -@node Debugging Output -@section Optional messages about internal happenings -@table @code -@kindex set debug arch -@item set debug arch -Turns on or off display of gdbarch debugging info. The default is off -@kindex show debug arch -@item show debug arch -Displays the current state of displaying gdbarch debugging info. -@kindex set debug event -@item set debug event -Turns on or off display of @value{GDBN} event debugging info. The -default is off. -@kindex show debug event -@item show debug event -Displays the current state of displaying @value{GDBN} event debugging -info. -@kindex set debug expression -@item set debug expression -Turns on or off display of @value{GDBN} expression debugging info. The -default is off. -@kindex show debug expression -@item show debug expression -Displays the current state of displaying @value{GDBN} expression -debugging info. -@kindex set debug frame -@item set debug frame -Turns on or off display of @value{GDBN} frame debugging info. The -default is off. -@kindex show debug frame -@item show debug frame -Displays the current state of displaying @value{GDBN} frame debugging -info. -@kindex set debug overload -@item set debug overload -Turns on or off display of @value{GDBN} C@t{++} overload debugging -info. This includes info such as ranking of functions, etc. The default -is off. -@kindex show debug overload -@item show debug overload -Displays the current state of displaying @value{GDBN} C@t{++} overload -debugging info. -@kindex set debug remote -@cindex packets, reporting on stdout -@cindex serial connections, debugging -@item 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 -@value{GDBN} standard output stream. The default is off. -@kindex show debug remote -@item show debug remote -Displays the state of display of remote packets. -@kindex set debug serial -@item set debug serial -Turns on or off display of @value{GDBN} serial debugging info. The -default is off. -@kindex show debug serial -@item show debug serial -Displays the current state of displaying @value{GDBN} serial debugging -info. -@kindex set debug target -@item set debug target -Turns on or off display of @value{GDBN} target debugging info. This info -includes what is going on at the target level of GDB, as it happens. The -default is off. -@kindex show debug target -@item show debug target -Displays the current state of displaying @value{GDBN} target debugging -info. -@kindex set debug varobj -@item set debug varobj -Turns on or off display of @value{GDBN} variable object debugging -info. The default is off. -@kindex show debug varobj -@item show debug varobj -Displays the current state of displaying @value{GDBN} variable object -debugging info. -@end table - -@node Sequences -@chapter Canned Sequences of Commands - -Aside from breakpoint commands (@pxref{Break Commands, ,Breakpoint -command lists}), @value{GDBN} 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 -@end menu - -@node Define -@section User-defined commands - -@cindex user-defined command -A @dfn{user-defined command} is a sequence of @value{GDBN} commands to -which you assign a new name as a command. This is done with the -@code{define} command. User commands may accept up to 10 arguments -separated by whitespace. Arguments are accessed within the user command -via @var{$arg0@dots{}$arg9}. A trivial example: - -@smallexample -define adder - print $arg0 + $arg1 + $arg2 -@end smallexample - -@noindent -To execute the command use: - -@smallexample -adder 1 2 3 -@end smallexample - -@noindent -This defines the command @code{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. - -@table @code - -@kindex define -@item define @var{commandname} -Define a command named @var{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 @value{GDBN} command lines, -which are given following the @code{define} command. The end of these -commands is marked by a line containing @code{end}. - -@kindex if -@kindex else -@item 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 @code{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 @code{end}. - -@kindex while -@item while -The syntax is similar to @code{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 @code{end}. -The commands are executed repeatedly as long as the expression -evaluates to true. - -@kindex document -@item document @var{commandname} -Document the user-defined command @var{commandname}, so that it can be -accessed by @code{help}. The command @var{commandname} must already be -defined. This command reads lines of documentation just as @code{define} -reads the lines of the command definition, ending with @code{end}. -After the @code{document} command is finished, @code{help} on command -@var{commandname} displays the documentation you have written. - -You may use the @code{document} command again to change the -documentation of a command. Redefining the command with @code{define} -does not change the documentation. - -@kindex help user-defined -@item help user-defined -List all user-defined commands, with the first line of the documentation -(if any) for each. - -@kindex show user -@item show user -@itemx show user @var{commandname} -Display the @value{GDBN} commands used to define @var{commandname} (but -not its documentation). If no @var{commandname} is given, display the -definitions for all user-defined commands. - -@kindex show max-user-call-depth -@kindex set max-user-call-depth -@item show max-user-call-depth -@itemx set max-user-call-depth -The value of @code{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. - -@end table - -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 @value{GDBN} -commands that normally print messages to say what they are doing omit the -messages when used in a user-defined command. - -@node Hooks -@section User-defined command hooks -@cindex command hooks -@cindex hooks, for commands -@cindex hooks, pre-command - -@kindex hook -@kindex hook- -You may define @dfn{hooks}, which are a special kind of user-defined -command. Whenever you run the command @samp{foo}, if the user-defined -command @samp{hook-foo} exists, it is executed (with no arguments) -before that command. - -@cindex hooks, post-command -@kindex hookpost -@kindex hookpost- -A hook may also be defined which is run after the command you executed. -Whenever you run the command @samp{foo}, if the user-defined command -@samp{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. - -@c It would be nice if hookpost could be passed a parameter indicating -@c if the command it hooks executed properly or not. FIXME! - -@kindex stop@r{, a pseudo-command} -In addition, a pseudo-command, @samp{stop} exists. Defining -(@samp{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 @code{SIGALRM} signals while -single-stepping, but treat them normally during normal execution, -you could define: - -@smallexample -define hook-stop -handle SIGALRM nopass -end - -define hook-run -handle SIGALRM pass -end - -define hook-continue -handle SIGLARM pass -end -@end smallexample - -As a further example, to hook at the begining and end of the @code{echo} -command, and to add extra text to the beginning and end of the message, -you could define: - -@smallexample -define hook-echo -echo <<<--- -end - -define hookpost-echo -echo --->>>\n -end - -(@value{GDBP}) echo Hello World -<<<---Hello World--->>> -(@value{GDBP}) - -@end smallexample - -You can define a hook for any single-word command in @value{GDBN}, but -not for command aliases; you should define a hook for the basic command -name, e.g. @code{backtrace} rather than @code{bt}. -@c FIXME! So how does Joe User discover whether a command is an alias -@c or not? -If an error occurs during the execution of your hook, execution of -@value{GDBN} commands stops and @value{GDBN} 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 @code{define} command. - -@node Command Files -@section Command files - -@cindex command files -A command file for @value{GDBN} is a file of lines that are @value{GDBN} -commands. Comments (lines starting with @kbd{#}) 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. - -@cindex init file -@cindex @file{.gdbinit} -@cindex @file{gdb.ini} -When you start @value{GDBN}, it automatically executes commands from its -@dfn{init files}, normally called @file{.gdbinit}@footnote{The DJGPP -port of @value{GDBN} uses the name @file{gdb.ini} instead, due to the -limitations of file names imposed by DOS filesystems.}. -During startup, @value{GDBN} does the following: - -@enumerate -@item -Reads the init file (if any) in your home directory@footnote{On -DOS/Windows systems, the home directory is the one pointed to by the -@code{HOME} environment variable.}. - -@item -Processes command line options and operands. - -@item -Reads the init file (if any) in the current working directory. - -@item -Reads command files specified by the @samp{-x} option. -@end enumerate - -The init file in your home directory can set options (such as @samp{set -complaints}) that affect subsequent processing of command line options -and operands. Init files are not executed if you use the @samp{-nx} -option (@pxref{Mode Options, ,Choosing modes}). - -@cindex init file name -On some configurations of @value{GDBN}, the init file is known by a -different name (these are typically environments where a specialized -form of @value{GDBN} 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: - -@cindex @file{.vxgdbinit} -@itemize @bullet -@item -VxWorks (Wind River Systems real-time OS): @file{.vxgdbinit} - -@cindex @file{.os68gdbinit} -@item -OS68K (Enea Data Systems real-time OS): @file{.os68gdbinit} - -@cindex @file{.esgdbinit} -@item -ES-1800 (Ericsson Telecom AB M68000 emulator): @file{.esgdbinit} -@end itemize - -You can also request the execution of a command file with the -@code{source} command: - -@table @code -@kindex source -@item source @var{filename} -Execute the command file @var{filename}. -@end table - -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 @value{GDBN} commands that -normally print messages to say what they are doing omit the messages -when called from command files. - -@value{GDBN} 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. - -@smallexample -gdb < cmds > log 2>&1 -@end smallexample - -(The syntax above will vary depending on the shell used.) This example -will execute commands from the file @file{cmds}. All output and errors -would be directed to @file{log}. - -@node Output -@section Commands for controlled output - -During the execution of a command file or a user-defined command, normal -@value{GDBN} 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. - -@table @code -@kindex echo -@item echo @var{text} -@c I do not consider backslash-space a standard C escape sequence -@c because it is not in ANSI. -Print @var{text}. Nonprinting characters can be included in -@var{text} using C escape sequences, such as @samp{\n} to print a -newline. @strong{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 @samp{@w{ }and foo =@w{ }}, use the command -@samp{echo \@w{ }and foo = \@w{ }}. - -A backslash at the end of @var{text} can be used, as in C, to continue -the command onto subsequent lines. For example, - -@smallexample -echo This is some text\n\ -which is continued\n\ -onto several lines.\n -@end smallexample - -produces the same output as - -@smallexample -echo This is some text\n -echo which is continued\n -echo onto several lines.\n -@end smallexample - -@kindex output -@item output @var{expression} -Print the value of @var{expression} and nothing but that value: no -newlines, no @samp{$@var{nn} = }. The value is not entered in the -value history either. @xref{Expressions, ,Expressions}, for more information -on expressions. - -@item output/@var{fmt} @var{expression} -Print the value of @var{expression} in format @var{fmt}. You can use -the same formats as for @code{print}. @xref{Output Formats,,Output -formats}, for more information. - -@kindex printf -@item printf @var{string}, @var{expressions}@dots{} -Print the values of the @var{expressions} under the control of -@var{string}. The @var{expressions} are separated by commas and may be -either numbers or pointers. Their values are printed as specified by -@var{string}, exactly as if your program were to execute the C -subroutine -@c FIXME: the above implies that at least all ANSI C formats are -@c supported, but it isn't true: %E and %G don't work (or so it seems). -@c Either this is a bug, or the manual should document what formats are -@c supported. - -@smallexample -printf (@var{string}, @var{expressions}@dots{}); -@end smallexample - -For example, you can print two values in hex like this: - -@smallexample -printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo -@end smallexample - -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. -@end table - -@node Interpreters -@chapter Command Interpreters -@cindex command interpreters - -@value{GDBN} 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. - -@value{GDBN} currently supports two command interpreters, the console -interpreter (sometimes called the command-line interpreter or @sc{cli}) -and the machine interface interpreter (or @sc{gdb/mi}). This manual -describes both of these interfaces in great detail. - -By default, @value{GDBN} will start with the console interpreter. -However, the user may choose to start @value{GDBN} with another -interpreter by specifying the @option{-i} or @option{--interpreter} -startup options. Defined interpreters include: - -@table @code -@item console -@cindex console interpreter -The traditional console or command-line interpreter. This is the most often -used interpreter with @value{GDBN}. With no interpreter specified at runtime, -@value{GDBN} will use this interpreter. - -@item mi -@cindex mi interpreter -The newest @sc{gdb/mi} interface (currently @code{mi2}). Used primarily -by programs wishing to use @value{GDBN} as a backend for a debugger GUI -or an IDE. For more information, see @ref{GDB/MI, ,The @sc{gdb/mi} -Interface}. - -@item mi2 -@cindex mi2 interpreter -The current @sc{gdb/mi} interface. - -@item mi1 -@cindex mi1 interpreter -The @sc{gdb/mi} interface included in @value{GDBN} 5.1, 5.2, and 5.3. - -@end table - -@cindex invoke another interpreter -The interpreter being used by @value{GDBN} may not be dynamically -switched at runtime. Although possible, this could lead to a very -precarious situation. Consider an IDE using @sc{gdb/mi}. If a user -enters the command "interpreter-set console" in a console view, -@value{GDBN} would switch to using the console interpreter, rendering -the IDE inoperable! - -@kindex interpreter-exec -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 -@code{interpreter-exec} command: - -@smallexample -interpreter-exec mi "-data-list-register-names" -@end smallexample - -@sc{gdb/mi} has a similar command, although it is only available in versions of -@value{GDBN} which support @sc{gdb/mi} version 2 (or greater). - -@node TUI -@chapter @value{GDBN} Text User Interface -@cindex TUI -@cindex 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 -@end menu - -The @value{GDBN} Text User Interface, TUI in short, is a terminal -interface which uses the @code{curses} library to show the source -file, the assembly output, the program registers and @value{GDBN} -commands in separate text windows. - -The TUI is enabled by invoking @value{GDBN} using either -@pindex gdbtui -@samp{gdbtui} or @samp{gdb -tui}. - -@node TUI Overview -@section TUI overview - -The TUI has two display modes that can be switched while -@value{GDBN} runs: - -@itemize @bullet -@item -A curses (or TUI) mode in which it displays several text -windows on the terminal. - -@item -A standard mode which corresponds to the @value{GDBN} configured without -the TUI. -@end itemize - -In the TUI mode, @value{GDBN} can display several text window -on the terminal: - -@table @emph -@item command -This window is the @value{GDBN} command window with the @value{GDBN} -prompt and the @value{GDBN} outputs. The @value{GDBN} input is still -managed using readline but through the TUI. The @emph{command} -window is always visible. - -@item source -The source window shows the source file of the program. The current -line as well as active breakpoints are displayed in this window. - -@item assembly -The assembly window shows the disassembly output of the program. - -@item 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. - -@end table - -The source and assembly windows show the current program position -by highlighting the current line and marking them with the @samp{>} marker. -Breakpoints are also indicated with two markers. A first one -indicates the breakpoint type: - -@table @code -@item B -Breakpoint which was hit at least once. - -@item b -Breakpoint which was never hit. - -@item H -Hardware breakpoint which was hit at least once. - -@item h -Hardware breakpoint which was never hit. - -@end table - -The second marker indicates whether the breakpoint is enabled or not: - -@table @code -@item + -Breakpoint is enabled. - -@item - -Breakpoint is disabled. - -@end table - -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: - -@itemize @bullet -@item -source - -@item -assembly - -@item -source and assembly - -@item -source and registers - -@item -assembly and registers - -@end itemize - -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: - -@table @emph -@item target -Indicates the current gdb target -(@pxref{Targets, ,Specifying a Debugging Target}). - -@item process -Gives information about the current process or thread number. -When no process is being debugged, this field is set to @code{No process}. - -@item function -Gives the current function name for the selected frame. -The name is demangled if demangling is turned on (@pxref{Print Settings}). -When there is no symbol corresponding to the current program counter -the string @code{??} is displayed. - -@item line -Indicates the current line number for the selected frame. -When the current line number is not known the string @code{??} is displayed. - -@item pc -Indicates the current program counter address. - -@end table - -@node TUI Keys -@section TUI Key Bindings -@cindex TUI key bindings - -The TUI installs several key bindings in the readline keymaps -(@pxref{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 @emph{SingleKey} keymap which binds several keys directly to -@value{GDBN} commands. The following key bindings -are installed for both TUI mode and the @value{GDBN} standard mode. - -@table @kbd -@kindex C-x C-a -@item C-x C-a -@kindex C-x a -@itemx C-x a -@kindex C-x A -@itemx C-x A -Enter or leave the TUI mode. When the TUI mode is left, -the curses window management is left and @value{GDBN} 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. - -@kindex C-x 1 -@item C-x 1 -Use a TUI layout with only one window. The layout will -either be @samp{source} or @samp{assembly}. When the TUI mode -is not active, it will switch to the TUI mode. - -Think of this key binding as the Emacs @kbd{C-x 1} binding. - -@kindex C-x 2 -@item 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 @kbd{C-x 2} binding. - -@kindex C-x o -@item 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 @kbd{C-x o} binding. - -@kindex C-x s -@item C-x s -Use the TUI @emph{SingleKey} keymap that binds single key to gdb commands -(@pxref{TUI Single Key Mode}). - -@end table - -The following key bindings are handled only by the TUI mode: - -@table @key -@kindex PgUp -@item PgUp -Scroll the active window one page up. - -@kindex PgDn -@item PgDn -Scroll the active window one page down. - -@kindex Up -@item Up -Scroll the active window one line up. - -@kindex Down -@item Down -Scroll the active window one line down. - -@kindex Left -@item Left -Scroll the active window one column left. - -@kindex Right -@item Right -Scroll the active window one column right. - -@kindex C-L -@item C-L -Refresh the screen. - -@end table - -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 @key{C-p}, @key{C-n}, @key{C-b} and @key{C-f}. - -@node TUI Single Key Mode -@section TUI Single Key Mode -@cindex TUI single key mode - -The TUI provides a @emph{SingleKey} mode in which it installs a particular -key binding in the readline keymaps to connect single keys to -some gdb commands. - -@table @kbd -@kindex c @r{(SingleKey TUI key)} -@item c -continue - -@kindex d @r{(SingleKey TUI key)} -@item d -down - -@kindex f @r{(SingleKey TUI key)} -@item f -finish - -@kindex n @r{(SingleKey TUI key)} -@item n -next - -@kindex q @r{(SingleKey TUI key)} -@item q -exit the @emph{SingleKey} mode. - -@kindex r @r{(SingleKey TUI key)} -@item r -run - -@kindex s @r{(SingleKey TUI key)} -@item s -step - -@kindex u @r{(SingleKey TUI key)} -@item u -up - -@kindex v @r{(SingleKey TUI key)} -@item v -info locals - -@kindex w @r{(SingleKey TUI key)} -@item w -where - -@end table - -Other keys temporarily switch to the @value{GDBN} command prompt. -The key that was pressed is inserted in the editing buffer so that -it is possible to type most @value{GDBN} commands without interaction -with the TUI @emph{SingleKey} mode. Once the command is entered the TUI -@emph{SingleKey} mode is restored. The only way to permanently leave -this mode is by hitting @key{q} or @samp{@key{C-x} @key{s}}. - - -@node TUI Commands -@section TUI specific commands -@cindex TUI 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 @value{GDBN} runs. When @value{GDBN} -is in the standard mode, using these commands will automatically switch -in the TUI mode. - -@table @code -@item info win -@kindex info win -List and give the size of all displayed windows. - -@item layout next -@kindex layout next -Display the next layout. - -@item layout prev -@kindex layout prev -Display the previous layout. - -@item layout src -@kindex layout src -Display the source window only. - -@item layout asm -@kindex layout asm -Display the assembly window only. - -@item layout split -@kindex layout split -Display the source and assembly window. - -@item layout regs -@kindex layout regs -Display the register window together with the source or assembly window. - -@item focus next | prev | src | asm | regs | split -@kindex focus -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. - -@item refresh -@kindex refresh -Refresh the screen. This is similar to using @key{C-L} key. - -@item tui reg float -@kindex tui reg -Show the floating point registers in the register window. - -@item tui reg general -Show the general registers in the register window. - -@item 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: @code{general}, @code{float}, @code{system}, @code{vector}, -@code{all}, @code{save}, @code{restore}. - -@item tui reg system -Show the system registers in the register window. - -@item update -@kindex update -Update the source window and the current execution point. - -@item winheight @var{name} +@var{count} -@itemx winheight @var{name} -@var{count} -@kindex winheight -Change the height of the window @var{name} by @var{count} -lines. Positive counts increase the height, while negative counts -decrease it. - -@end table - -@node TUI Configuration -@section TUI configuration variables -@cindex TUI configuration variables - -The TUI has several configuration variables that control the -appearance of windows on the terminal. - -@table @code -@item set tui border-kind @var{kind} -@kindex set tui border-kind -Select the border appearance for the source, assembly and register windows. -The possible values are the following: -@table @code -@item space -Use a space character to draw the border. - -@item ascii -Use ascii characters + - and | to draw the border. - -@item acs -Use the Alternate Character Set to draw the border. The border is -drawn using character line graphics if the terminal supports them. - -@end table - -@item set tui active-border-mode @var{mode} -@kindex set tui active-border-mode -Select the attributes to display the border of the active window. -The possible values are @code{normal}, @code{standout}, @code{reverse}, -@code{half}, @code{half-standout}, @code{bold} and @code{bold-standout}. - -@item set tui border-mode @var{mode} -@kindex set tui border-mode -Select the attributes to display the border of other windows. -The @var{mode} can be one of the following: -@table @code -@item normal -Use normal attributes to display the border. - -@item standout -Use standout mode. - -@item reverse -Use reverse video mode. - -@item half -Use half bright mode. - -@item half-standout -Use half bright and standout mode. - -@item bold -Use extra bright or bold mode. - -@item bold-standout -Use extra bright or bold and standout mode. - -@end table - -@end table - -@node Emacs -@chapter Using @value{GDBN} under @sc{gnu} Emacs - -@cindex Emacs -@cindex @sc{gnu} Emacs -A special interface allows you to use @sc{gnu} Emacs to view (and -edit) the source files for the program you are debugging with -@value{GDBN}. - -To use this interface, use the command @kbd{M-x gdb} in Emacs. Give the -executable file you want to debug as an argument. This command starts -@value{GDBN} as a subprocess of Emacs, with input and output through a newly -created Emacs buffer. -@c (Do not use the @code{-tui} option to run @value{GDBN} from Emacs.) - -Using @value{GDBN} under Emacs is just like using @value{GDBN} normally except for two -things: - -@itemize @bullet -@item -All ``terminal'' input and output goes through the Emacs buffer. -@end itemize - -This applies both to @value{GDBN} 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, @kbd{C-c C-c} for an interrupt, @kbd{C-c C-z} for a -stop. - -@itemize @bullet -@item -@value{GDBN} displays source code through Emacs. -@end itemize - -Each time @value{GDBN} displays a stack frame, Emacs automatically finds the -source file for that frame and puts an arrow (@samp{=>}) at the -left margin of the current line. Emacs uses a separate buffer for -source display, and splits the screen to show both your @value{GDBN} session -and the source. - -Explicit @value{GDBN} @code{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 @kbd{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, @value{GDBN} may find your -program by searching your environment's @code{PATH} variable, but on -some operating systems it might not find the source. So, although the -@value{GDBN} input and output session proceeds normally, the auxiliary -buffer does not display the current source and line of execution. - -The initial working directory of @value{GDBN} is printed on the top -line of the @value{GDBN} I/O buffer and this serves as a default for -the commands that specify files for @value{GDBN} to operate -on. @xref{Files, ,Commands to specify files}. - -By default, @kbd{M-x gdb} calls the program called @file{gdb}. If you -need to call @value{GDBN} by a different name (for example, if you -keep several configurations around, with different names) you can -customize the Emacs variable @code{gud-gdb-command-name} to run the -one you want. - -In the @value{GDBN} I/O buffer, you can use these special Emacs commands in -addition to the standard Shell mode commands: - -@table @kbd -@item C-h m -Describe the features of Emacs' @value{GDBN} Mode. - -@item C-c C-s -Execute to another source line, like the @value{GDBN} @code{step} command; also -update the display window to show the current file and location. - -@item C-c C-n -Execute to next source line in this function, skipping all function -calls, like the @value{GDBN} @code{next} command. Then update the display window -to show the current file and location. - -@item C-c C-i -Execute one instruction, like the @value{GDBN} @code{stepi} command; update -display window accordingly. - -@item C-c C-f -Execute until exit from the selected stack frame, like the @value{GDBN} -@code{finish} command. - -@item C-c C-r -Continue execution of your program, like the @value{GDBN} @code{continue} -command. - -@item C-c < -Go up the number of frames indicated by the numeric argument -(@pxref{Arguments, , Numeric Arguments, Emacs, The @sc{gnu} Emacs Manual}), -like the @value{GDBN} @code{up} command. - -@item C-c > -Go down the number of frames indicated by the numeric argument, like the -@value{GDBN} @code{down} command. -@end table - -In any source file, the Emacs command @kbd{C-x SPC} (@code{gud-break}) -tells @value{GDBN} to set a breakpoint on the source line point is on. - -If you type @kbd{M-x speedbar}, then Emacs displays a separate frame which -shows a backtrace when the @value{GDBN} I/O buffer is current. Move -point to any frame in the stack and type @key{RET} to make it become the -current frame and display the associated source in the source buffer. -Alternatively, click @kbd{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 @code{f} in the @value{GDBN} 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 @value{GDBN} -communicates with Emacs in terms of line numbers. If you add or -delete lines from the text, the line numbers that @value{GDBN} 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 @value{GDBN} is given in -the Emacs manual (@pxref{Debuggers,,, Emacs, The @sc{gnu} Emacs Manual}). - -@c The following dropped because Epoch is nonstandard. Reactivate -@c if/when v19 does something similar. ---doc@cygnus.com 19dec1990 -@ignore -@kindex Emacs Epoch environment -@kindex Epoch -@kindex inspect - -Version 18 of @sc{gnu} Emacs has a built-in window system -called the @code{epoch} -environment. Users of this environment can use a new command, -@code{inspect} which performs identically to @code{print} except that -each value is printed in its own window. -@end ignore - - -@node GDB/MI -@chapter The @sc{gdb/mi} Interface - -@unnumberedsec Function and Purpose - -@cindex @sc{gdb/mi}, its purpose -@sc{gdb/mi} is a line based machine oriented text interface to @value{GDBN}. 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 @sc{gdb/mi} interface. It is written -in the form of a reference manual. - -Note that @sc{gdb/mi} is still under construction, so some of the -features described below are incomplete and subject to change. - -@unnumberedsec Notation and Terminology - -@cindex notational conventions, for @sc{gdb/mi} -This chapter uses the following notation: - -@itemize @bullet -@item -@code{|} separates two alternatives. - -@item -@code{[ @var{something} ]} indicates that @var{something} is optional: -it may or may not be given. - -@item -@code{( @var{group} )*} means that @var{group} inside the parentheses -may repeat zero or more times. - -@item -@code{( @var{group} )+} means that @var{group} inside the parentheses -may repeat one or more times. - -@item -@code{"@var{string}"} means a literal @var{string}. -@end itemize - -@ignore -@heading Dependencies -@end ignore - -@heading 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:: -@ignore -* GDB/MI Kod Commands:: -* GDB/MI Memory Overlay Commands:: -* GDB/MI Signal Handling Commands:: -@end ignore -* GDB/MI Stack Manipulation:: -* GDB/MI Symbol Query:: -* GDB/MI Target Manipulation:: -* GDB/MI Thread Commands:: -* GDB/MI Tracepoint Commands:: -* GDB/MI Variable Objects:: -@end menu - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Command Syntax -@section @sc{gdb/mi} Command Syntax - -@menu -* GDB/MI Input Syntax:: -* GDB/MI Output Syntax:: -* GDB/MI Simple Examples:: -@end menu - -@node GDB/MI Input Syntax -@subsection @sc{gdb/mi} Input Syntax - -@cindex input syntax for @sc{gdb/mi} -@cindex @sc{gdb/mi}, input syntax -@table @code -@item @var{command} @expansion{} -@code{@var{cli-command} | @var{mi-command}} - -@item @var{cli-command} @expansion{} -@code{[ @var{token} ] @var{cli-command} @var{nl}}, where -@var{cli-command} is any existing @value{GDBN} CLI command. - -@item @var{mi-command} @expansion{} -@code{[ @var{token} ] "-" @var{operation} ( " " @var{option} )* -@code{[} " --" @code{]} ( " " @var{parameter} )* @var{nl}} - -@item @var{token} @expansion{} -"any sequence of digits" - -@item @var{option} @expansion{} -@code{"-" @var{parameter} [ " " @var{parameter} ]} - -@item @var{parameter} @expansion{} -@code{@var{non-blank-sequence} | @var{c-string}} - -@item @var{operation} @expansion{} -@emph{any of the operations described in this chapter} - -@item @var{non-blank-sequence} @expansion{} -@emph{anything, provided it doesn't contain special characters such as -"-", @var{nl}, """ and of course " "} - -@item @var{c-string} @expansion{} -@code{""" @var{seven-bit-iso-c-string-content} """} - -@item @var{nl} @expansion{} -@code{CR | CR-LF} -@end table - -@noindent -Notes: - -@itemize @bullet -@item -The CLI commands are still handled by the @sc{mi} interpreter; their -output is described below. - -@item -The @code{@var{token}}, when present, is passed back when the command -finishes. - -@item -Some @sc{mi} commands accept optional arguments as part of the parameter -list. Each option is identified by a leading @samp{-} (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 -@samp{--} (this is useful when some parameters begin with a dash). -@end itemize - -Pragmatics: - -@itemize @bullet -@item -We want easy access to the existing CLI syntax (for debugging). - -@item -We want it to be easy to spot a @sc{mi} operation. -@end itemize - -@node GDB/MI Output Syntax -@subsection @sc{gdb/mi} Output Syntax - -@cindex output syntax of @sc{gdb/mi} -@cindex @sc{gdb/mi}, output syntax -The output from @sc{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 @samp{(@value{GDBP})}. - -If an input command was prefixed with a @code{@var{token}} then the -corresponding output for that command will also be prefixed by that same -@var{token}. - -@table @code -@item @var{output} @expansion{} -@code{( @var{out-of-band-record} )* [ @var{result-record} ] "(gdb)" @var{nl}} - -@item @var{result-record} @expansion{} -@code{ [ @var{token} ] "^" @var{result-class} ( "," @var{result} )* @var{nl}} - -@item @var{out-of-band-record} @expansion{} -@code{@var{async-record} | @var{stream-record}} - -@item @var{async-record} @expansion{} -@code{@var{exec-async-output} | @var{status-async-output} | @var{notify-async-output}} - -@item @var{exec-async-output} @expansion{} -@code{[ @var{token} ] "*" @var{async-output}} - -@item @var{status-async-output} @expansion{} -@code{[ @var{token} ] "+" @var{async-output}} - -@item @var{notify-async-output} @expansion{} -@code{[ @var{token} ] "=" @var{async-output}} - -@item @var{async-output} @expansion{} -@code{@var{async-class} ( "," @var{result} )* @var{nl}} - -@item @var{result-class} @expansion{} -@code{"done" | "running" | "connected" | "error" | "exit"} - -@item @var{async-class} @expansion{} -@code{"stopped" | @var{others}} (where @var{others} will be added -depending on the needs---this is still in development). - -@item @var{result} @expansion{} -@code{ @var{variable} "=" @var{value}} - -@item @var{variable} @expansion{} -@code{ @var{string} } - -@item @var{value} @expansion{} -@code{ @var{const} | @var{tuple} | @var{list} } - -@item @var{const} @expansion{} -@code{@var{c-string}} - -@item @var{tuple} @expansion{} -@code{ "@{@}" | "@{" @var{result} ( "," @var{result} )* "@}" } - -@item @var{list} @expansion{} -@code{ "[]" | "[" @var{value} ( "," @var{value} )* "]" | "[" -@var{result} ( "," @var{result} )* "]" } - -@item @var{stream-record} @expansion{} -@code{@var{console-stream-output} | @var{target-stream-output} | @var{log-stream-output}} - -@item @var{console-stream-output} @expansion{} -@code{"~" @var{c-string}} - -@item @var{target-stream-output} @expansion{} -@code{"@@" @var{c-string}} - -@item @var{log-stream-output} @expansion{} -@code{"&" @var{c-string}} - -@item @var{nl} @expansion{} -@code{CR | CR-LF} - -@item @var{token} @expansion{} -@emph{any sequence of digits}. -@end table - -@noindent -Notes: - -@itemize @bullet -@item -All output sequences end in a single line containing a period. - -@item -The @code{@var{token}} is from the corresponding request. If an execution -command is interrupted by the @samp{-exec-interrupt} command, the -@var{token} associated with the @samp{*stopped} message is the one of the -original execution command, not the one of the interrupt command. - -@item -@cindex status output in @sc{gdb/mi} -@var{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 @samp{+}. - -@item -@cindex async output in @sc{gdb/mi} -@var{exec-async-output} contains asynchronous state change on the target -(stopped, started, disappeared). All async output is prefixed by -@samp{*}. - -@item -@cindex notify output in @sc{gdb/mi} -@var{notify-async-output} contains supplementary information that the -client should handle (e.g., a new breakpoint information). All notify -output is prefixed by @samp{=}. - -@item -@cindex console output in @sc{gdb/mi} -@var{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 @samp{~}. - -@item -@cindex target output in @sc{gdb/mi} -@var{target-stream-output} is the output produced by the target program. -All the target output is prefixed by @samp{@@}. - -@item -@cindex log output in @sc{gdb/mi} -@var{log-stream-output} is output text coming from @value{GDBN}'s internals, for -instance messages that should be displayed as part of an error log. All -the log output is prefixed by @samp{&}. - -@item -@cindex list output in @sc{gdb/mi} -New @sc{gdb/mi} commands should only output @var{lists} containing -@var{values}. - - -@end itemize - -@xref{GDB/MI Stream Records, , @sc{gdb/mi} Stream Records}, for more -details about the various output records. - -@node GDB/MI Simple Examples -@subsection Simple Examples of @sc{gdb/mi} Interaction -@cindex @sc{gdb/mi}, simple examples - -This subsection presents several simple examples of interaction using -the @sc{gdb/mi} interface. In these examples, @samp{->} means that the -following line is passed to @sc{gdb/mi} as input, while @samp{<-} means -the output received from @sc{gdb/mi}. - -@subsubheading Target Stop -@c Ummm... There is no "-stop" command. This assumes async, no? -Here's an example of stopping the inferior process: - -@smallexample --> -stop -<- (@value{GDBP}) -@end smallexample - -@noindent -and later: - -@smallexample -<- *stop,reason="stop",address="0x123",source="a.c:123" -<- (@value{GDBP}) -@end smallexample - -@subsubheading Simple CLI Command - -Here's an example of a simple CLI command being passed through -@sc{gdb/mi} and on to the CLI. - -@smallexample --> print 1+2 -<- &"print 1+2\n" -<- ~"$1 = 3\n" -<- ^done -<- (@value{GDBP}) -@end smallexample - -@subsubheading Command With Side Effects - -@smallexample --> -symbol-file xyz.exe -<- *breakpoint,nr="3",address="0x123",source="a.c:123" -<- (@value{GDBP}) -@end smallexample - -@subsubheading A Bad Command - -Here's what happens if you pass a non-existent command: - -@smallexample --> -rubbish -<- ^error,msg="Undefined MI command: rubbish" -<- (@value{GDBP}) -@end smallexample - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Compatibility with CLI -@section @sc{gdb/mi} Compatibility with CLI - -@cindex compatibility, @sc{gdb/mi} and CLI -@cindex @sc{gdb/mi}, compatibility with CLI -To help users familiar with @value{GDBN}'s existing CLI interface, @sc{gdb/mi} -accepts existing CLI commands. As specified by the syntax, such -commands can be directly entered into the @sc{gdb/mi} interface and @value{GDBN} will -respond. - -This mechanism is provided as an aid to developers of @sc{gdb/mi} -clients and not as a reliable interface into the CLI. Since the command -is being interpreteted in an environment that assumes @sc{gdb/mi} -behaviour, the exact output of such commands is likely to end up being -an un-supported hybrid of @sc{gdb/mi} and CLI output. - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Output Records -@section @sc{gdb/mi} Output Records - -@menu -* GDB/MI Result Records:: -* GDB/MI Stream Records:: -* GDB/MI Out-of-band Records:: -@end menu - -@node GDB/MI Result Records -@subsection @sc{gdb/mi} Result Records - -@cindex result records in @sc{gdb/mi} -@cindex @sc{gdb/mi}, result records -In addition to a number of out-of-band notifications, the response to a -@sc{gdb/mi} command includes one of the following result indications: - -@table @code -@findex ^done -@item "^done" [ "," @var{results} ] -The synchronous operation was successful, @code{@var{results}} are the return -values. - -@item "^running" -@findex ^running -@c Is this one correct? Should it be an out-of-band notification? -The asynchronous operation was successfully started. The target is -running. - -@item "^error" "," @var{c-string} -@findex ^error -The operation failed. The @code{@var{c-string}} contains the corresponding -error message. -@end table - -@node GDB/MI Stream Records -@subsection @sc{gdb/mi} Stream Records - -@cindex @sc{gdb/mi}, stream records -@cindex stream records in @sc{gdb/mi} -@value{GDBN} 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 @sc{gdb/mi} interface using @dfn{stream records}. - -Each stream record begins with a unique @dfn{prefix character} which -identifies its stream (@pxref{GDB/MI Output Syntax, , @sc{gdb/mi} Output -Syntax}). In addition to the prefix, each stream record contains a -@code{@var{string-output}}. This is either raw text (with an implicit new -line) or a quoted C string (which does not contain an implicit newline). - -@table @code -@item "~" @var{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. - -@item "@@" @var{string-output} -The target output stream contains any textual output from the running -target. - -@item "&" @var{string-output} -The log stream contains debugging messages being produced by @value{GDBN}'s -internals. -@end table - -@node GDB/MI Out-of-band Records -@subsection @sc{gdb/mi} Out-of-band Records - -@cindex out-of-band records in @sc{gdb/mi} -@cindex @sc{gdb/mi}, out-of-band records -@dfn{Out-of-band} records are used to notify the @sc{gdb/mi} client of -additional changes that have occurred. Those changes can either be a -consequence of @sc{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. - -@table @code -@item "*" "stop" -@end table - - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Command Description Format -@section @sc{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. - -@subheading Motivation - -The motivation for this collection of commands. - -@subheading Introduction - -A brief introduction to this collection of commands as a whole. - -@subheading Commands - -For each command in the block, the following is described: - -@subsubheading Synopsis - -@smallexample - -command @var{args}@dots{} -@end smallexample - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} CLI command. - -@subsubheading Result - -@subsubheading Out-of-band - -@subsubheading Notes - -@subsubheading Example - - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Breakpoint Table Commands -@section @sc{gdb/mi} Breakpoint table commands - -@cindex breakpoint commands for @sc{gdb/mi} -@cindex @sc{gdb/mi}, breakpoint commands -This section documents @sc{gdb/mi} commands for manipulating -breakpoints. - -@subheading The @code{-break-after} Command -@findex -break-after - -@subsubheading Synopsis - -@smallexample - -break-after @var{number} @var{count} -@end smallexample - -The breakpoint number @var{number} is not in effect until it has been -hit @var{count} times. To see how this is reflected in the output of -the @samp{-break-list} command, see the description of the -@samp{-break-list} command below. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{ignore}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --break-insert main -^done,bkpt=@{number="1",addr="0x000100d0",file="hello.c",line="5"@} -(@value{GDBP}) --break-after 1 3 -~ -^done -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) -@end smallexample - -@ignore -@subheading The @code{-break-catch} Command -@findex -break-catch - -@subheading The @code{-break-commands} Command -@findex -break-commands -@end ignore - - -@subheading The @code{-break-condition} Command -@findex -break-condition - -@subsubheading Synopsis - -@smallexample - -break-condition @var{number} @var{expr} -@end smallexample - -Breakpoint @var{number} will stop the program only if the condition in -@var{expr} is true. The condition becomes part of the -@samp{-break-list} output (see the description of the @samp{-break-list} -command below). - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{condition}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --break-condition 1 1 -^done -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) -@end smallexample - -@subheading The @code{-break-delete} Command -@findex -break-delete - -@subsubheading Synopsis - -@smallexample - -break-delete ( @var{breakpoint} )+ -@end smallexample - -Delete the breakpoint(s) whose number(s) are specified in the argument -list. This is obviously reflected in the breakpoint list. - -@subsubheading @value{GDBN} command - -The corresponding @value{GDBN} command is @samp{delete}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --break-delete 1 -^done -(@value{GDBP}) --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=[]@} -(@value{GDBP}) -@end smallexample - -@subheading The @code{-break-disable} Command -@findex -break-disable - -@subsubheading Synopsis - -@smallexample - -break-disable ( @var{breakpoint} )+ -@end smallexample - -Disable the named @var{breakpoint}(s). The field @samp{enabled} in the -break list is now set to @samp{n} for the named @var{breakpoint}(s). - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{disable}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --break-disable 2 -^done -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) -@end smallexample - -@subheading The @code{-break-enable} Command -@findex -break-enable - -@subsubheading Synopsis - -@smallexample - -break-enable ( @var{breakpoint} )+ -@end smallexample - -Enable (previously disabled) @var{breakpoint}(s). - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{enable}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --break-enable 2 -^done -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) -@end smallexample - -@subheading The @code{-break-info} Command -@findex -break-info - -@subsubheading Synopsis - -@smallexample - -break-info @var{breakpoint} -@end smallexample - -@c REDUNDANT??? -Get information about a single breakpoint. - -@subsubheading @value{GDBN} command - -The corresponding @value{GDBN} command is @samp{info break @var{breakpoint}}. - -@subsubheading Example -N.A. - -@subheading The @code{-break-insert} Command -@findex -break-insert - -@subsubheading Synopsis - -@smallexample - -break-insert [ -t ] [ -h ] [ -r ] - [ -c @var{condition} ] [ -i @var{ignore-count} ] - [ -p @var{thread} ] [ @var{line} | @var{addr} ] -@end smallexample - -@noindent -If specified, @var{line}, can be one of: - -@itemize @bullet -@item function -@c @item +offset -@c @item -offset -@c @item linenum -@item filename:linenum -@item filename:function -@item *address -@end itemize - -The possible optional parameters of this command are: - -@table @samp -@item -t -Insert a tempoary breakpoint. -@item -h -Insert a hardware breakpoint. -@item -c @var{condition} -Make the breakpoint conditional on @var{condition}. -@item -i @var{ignore-count} -Initialize the @var{ignore-count}. -@item -r -Insert a regular breakpoint in all the functions whose names match the -given regular expression. Other flags are not applicable to regular -expresson. -@end table - -@subsubheading Result - -The result is in the form: - -@smallexample - ^done,bkptno="@var{number}",func="@var{funcname}", - file="@var{filename}",line="@var{lineno}" -@end smallexample - -@noindent -where @var{number} is the @value{GDBN} number for this breakpoint, @var{funcname} -is the name of the function where the breakpoint was inserted, -@var{filename} is the name of the source file which contains this -function, and @var{lineno} is the source line number within that file. - -Note: this format is open to change. -@c An out-of-band breakpoint instead of part of the result? - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} commands are @samp{break}, @samp{tbreak}, -@samp{hbreak}, @samp{thbreak}, and @samp{rbreak}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --break-insert main -^done,bkpt=@{number="1",addr="0x0001072c",file="recursive2.c",line="4"@} -(@value{GDBP}) --break-insert -t foo -^done,bkpt=@{number="2",addr="0x00010774",file="recursive2.c",line="11"@} -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) --break-insert -r foo.* -~int foo(int, int); -^done,bkpt=@{number="3",addr="0x00010774",file="recursive2.c",line="11"@} -(@value{GDBP}) -@end smallexample - -@subheading The @code{-break-list} Command -@findex -break-list - -@subsubheading Synopsis - -@smallexample - -break-list -@end smallexample - -Displays the list of inserted breakpoints, showing the following fields: - -@table @samp -@item Number -number of the breakpoint -@item Type -type of the breakpoint: @samp{breakpoint} or @samp{watchpoint} -@item Disposition -should the breakpoint be deleted or disabled when it is hit: @samp{keep} -or @samp{nokeep} -@item Enabled -is the breakpoint enabled or no: @samp{y} or @samp{n} -@item Address -memory location at which the breakpoint is set -@item What -logical location of the breakpoint, expressed by function name, file -name, line number -@item Times -number of times the breakpoint has been hit -@end table - -If there are no breakpoints or watchpoints, the @code{BreakpointTable} -@code{body} field is an empty list. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info break}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) -@end smallexample - -Here's an example of the result when there are no breakpoints: - -@smallexample -(@value{GDBP}) --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=[]@} -(@value{GDBP}) -@end smallexample - -@subheading The @code{-break-watch} Command -@findex -break-watch - -@subsubheading Synopsis - -@smallexample - -break-watch [ -a | -r ] -@end smallexample - -Create a watchpoint. With the @samp{-a} option it will create an -@dfn{access} watchpoint, i.e. a watchpoint that triggers either on a -read from or on a write to the memory location. With the @samp{-r} -option, the watchpoint created is a @dfn{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. -@xref{Set Watchpoints, , Setting watchpoints}. - -Note that @samp{-break-list} will report a single list of watchpoints and -breakpoints inserted. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} commands are @samp{watch}, @samp{awatch}, and -@samp{rwatch}. - -@subsubheading Example - -Setting a watchpoint on a variable in the @code{main} function: - -@smallexample -(@value{GDBP}) --break-watch x -^done,wpt=@{number="2",exp="x"@} -(@value{GDBP}) --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"@} -(@value{GDBP}) -@end smallexample - -Setting a watchpoint on a variable local to a function. @value{GDBN} will stop -the program execution twice: first for the variable changing value, then -for the watchpoint going out of scope. - -@smallexample -(@value{GDBP}) --break-watch C -^done,wpt=@{number="5",exp="C"@} -(@value{GDBP}) --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"@} -(@value{GDBP}) --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"@} -(@value{GDBP}) -@end smallexample - -Listing breakpoints and watchpoints, at different points in the program -execution. Note that once the watchpoint goes out of scope, it is -deleted. - -@smallexample -(@value{GDBP}) --break-watch C -^done,wpt=@{number="2",exp="C"@} -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) --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"@} -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) --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"@} -(@value{GDBP}) --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"@}]@} -(@value{GDBP}) -@end smallexample - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Data Manipulation -@section @sc{gdb/mi} Data Manipulation - -@cindex data manipulation, in @sc{gdb/mi} -@cindex @sc{gdb/mi}, data manipulation -This section describes the @sc{gdb/mi} commands that manipulate data: -examine memory and registers, evaluate expressions, etc. - -@c REMOVED FROM THE INTERFACE. -@c @subheading -data-assign -@c Change the value of a program variable. Plenty of side effects. -@c @subsubheading GDB command -@c set variable -@c @subsubheading Example -@c N.A. - -@subheading The @code{-data-disassemble} Command -@findex -data-disassemble - -@subsubheading Synopsis - -@smallexample - -data-disassemble - [ -s @var{start-addr} -e @var{end-addr} ] - | [ -f @var{filename} -l @var{linenum} [ -n @var{lines} ] ] - -- @var{mode} -@end smallexample - -@noindent -Where: - -@table @samp -@item @var{start-addr} -is the beginning address (or @code{$pc}) -@item @var{end-addr} -is the end address -@item @var{filename} -is the name of the file to disassemble -@item @var{linenum} -is the line number to disassemble around -@item @var{lines} -is the the number of disassembly lines to be produced. If it is -1, -the whole function will be disassembled, in case no @var{end-addr} is -specified. If @var{end-addr} is specified as a non-zero value, and -@var{lines} is lower than the number of disassembly lines between -@var{start-addr} and @var{end-addr}, only @var{lines} lines are -displayed; if @var{lines} is higher than the number of lines between -@var{start-addr} and @var{end-addr}, only the lines up to @var{end-addr} -are displayed. -@item @var{mode} -is either 0 (meaning only disassembly) or 1 (meaning mixed source and -disassembly). -@end table - -@subsubheading Result - -The output for each instruction is composed of four fields: - -@itemize @bullet -@item Address -@item Func-name -@item Offset -@item Instruction -@end itemize - -Note that whatever included in the instruction field, is not manipulated -directely by @sc{gdb/mi}, i.e. it is not possible to adjust its format. - -@subsubheading @value{GDBN} Command - -There's no direct mapping from this command to the CLI. - -@subsubheading Example - -Disassemble from the current value of @code{$pc} to @code{$pc + 20}: - -@smallexample -(@value{GDBP}) --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>"@}] -(@value{GDBP}) -@end smallexample - -Disassemble the whole @code{main} function. Line 32 is part of -@code{main}. - -@smallexample --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"@}, -[@dots{}] -@{address="0x0001081c",func-name="main",offset="96",inst="ret "@}, -@{address="0x00010820",func-name="main",offset="100",inst="restore "@}] -(@value{GDBP}) -@end smallexample - -Disassemble 3 instructions from the start of @code{main}: - -@smallexample -(@value{GDBP}) --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"@}] -(@value{GDBP}) -@end smallexample - -Disassemble 3 instructions from the start of @code{main} in mixed mode: - -@smallexample -(@value{GDBP}) --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"@}]@}] -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-data-evaluate-expression} Command -@findex -data-evaluate-expression - -@subsubheading Synopsis - -@smallexample - -data-evaluate-expression @var{expr} -@end smallexample - -Evaluate @var{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. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} commands are @samp{print}, @samp{output}, and -@samp{call}. In @code{gdbtk} only, there's a corresponding -@samp{gdb_eval} command. - -@subsubheading Example - -In the following example, the numbers that precede the commands are the -@dfn{tokens} described in @ref{GDB/MI Command Syntax, ,@sc{gdb/mi} -Command Syntax}. Notice how @sc{gdb/mi} returns the same tokens in its -output. - -@smallexample -211-data-evaluate-expression A -211^done,value="1" -(@value{GDBP}) -311-data-evaluate-expression &A -311^done,value="0xefffeb7c" -(@value{GDBP}) -411-data-evaluate-expression A+3 -411^done,value="4" -(@value{GDBP}) -511-data-evaluate-expression "A + 3" -511^done,value="4" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-data-list-changed-registers} Command -@findex -data-list-changed-registers - -@subsubheading Synopsis - -@smallexample - -data-list-changed-registers -@end smallexample - -Display a list of the registers that have changed. - -@subsubheading @value{GDBN} Command - -@value{GDBN} doesn't have a direct analog for this command; @code{gdbtk} -has the corresponding command @samp{gdb_changed_register_list}. - -@subsubheading Example - -On a PPC MBX board: - -@smallexample -(@value{GDBP}) --exec-continue -^running - -(@value{GDBP}) -*stopped,reason="breakpoint-hit",bkptno="1",frame=@{func="main", -args=[],file="try.c",line="5"@} -(@value{GDBP}) --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"] -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-data-list-register-names} Command -@findex -data-list-register-names - -@subsubheading Synopsis - -@smallexample - -data-list-register-names [ ( @var{regno} )+ ] -@end smallexample - -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. - -@subsubheading @value{GDBN} Command - -@value{GDBN} does not have a command which corresponds to -@samp{-data-list-register-names}. In @code{gdbtk} there is a -corresponding command @samp{gdb_regnames}. - -@subsubheading Example - -For the PPC MBX board: -@smallexample -(@value{GDBP}) --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"] -(@value{GDBP}) --data-list-register-names 1 2 3 -^done,register-names=["r1","r2","r3"] -(@value{GDBP}) -@end smallexample - -@subheading The @code{-data-list-register-values} Command -@findex -data-list-register-values - -@subsubheading Synopsis - -@smallexample - -data-list-register-values @var{fmt} [ ( @var{regno} )*] -@end smallexample - -Display the registers' contents. @var{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 @var{fmt} are: - -@table @code -@item x -Hexadecimal -@item o -Octal -@item t -Binary -@item d -Decimal -@item r -Raw -@item N -Natural -@end table - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} commands are @samp{info reg}, @samp{info -all-reg}, and (in @code{gdbtk}) @samp{gdb_fetch_registers}. - -@subsubheading Example - -For a PPC MBX board (note: line breaks are for readability only, they -don't appear in the actual output): - -@smallexample -(@value{GDBP}) --data-list-register-values r 64 65 -^done,register-values=[@{number="64",value="0xfe00a300"@}, -@{number="65",value="0x00029002"@}] -(@value{GDBP}) --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"@}] -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-data-read-memory} Command -@findex -data-read-memory - -@subsubheading Synopsis - -@smallexample - -data-read-memory [ -o @var{byte-offset} ] - @var{address} @var{word-format} @var{word-size} - @var{nr-rows} @var{nr-cols} [ @var{aschar} ] -@end smallexample - -@noindent -where: - -@table @samp -@item @var{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. - -@item @var{word-format} -The format to be used to print the memory words. The notation is the -same as for @value{GDBN}'s @code{print} command (@pxref{Output Formats, -,Output formats}). - -@item @var{word-size} -The size of each memory word in bytes. - -@item @var{nr-rows} -The number of rows in the output table. - -@item @var{nr-cols} -The number of columns in the output table. - -@item @var{aschar} -If present, indicates that each row should include an @sc{ascii} dump. The -value of @var{aschar} is used as a padding character when a byte is not a -member of the printable @sc{ascii} character set (printable @sc{ascii} -characters are those whose code is between 32 and 126, inclusively). - -@item @var{byte-offset} -An offset to add to the @var{address} before fetching memory. -@end table - -This command displays memory contents as a table of @var{nr-rows} by -@var{nr-cols} words, each word being @var{word-size} bytes. In total, -@code{@var{nr-rows} * @var{nr-cols} * @var{word-size}} bytes are read -(returned as @samp{total-bytes}). Should less than the requested number -of bytes be returned by the target, the missing words are identified -using @samp{N/A}. The number of bytes read from the target is returned -in @samp{nr-bytes} and the starting address used to read memory in -@samp{addr}. - -The address of the next/previous row or page is available in -@samp{next-row} and @samp{prev-row}, @samp{next-page} and -@samp{prev-page}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{x}. @code{gdbtk} has -@samp{gdb_get_mem} memory read command. - -@subsubheading Example - -Read six bytes of memory starting at @code{bytes+6} but then offset by -@code{-6} bytes. Format as three rows of two columns. One byte per -word. Display each word in hex. - -@smallexample -(@value{GDBP}) -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"]@}] -(@value{GDBP}) -@end smallexample - -Read two bytes of memory starting at address @code{shorts + 64} and -display as a single word formatted in decimal. - -@smallexample -(@value{GDBP}) -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"]@}] -(@value{GDBP}) -@end smallexample - -Read thirty two bytes of memory starting at @code{bytes+16} and format -as eight rows of four columns. Include a string encoding with @samp{x} -used as the non-printable character. - -@smallexample -(@value{GDBP}) -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=",-./"@}] -(@value{GDBP}) -@end smallexample - -@subheading The @code{-display-delete} Command -@findex -display-delete - -@subsubheading Synopsis - -@smallexample - -display-delete @var{number} -@end smallexample - -Delete the display @var{number}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{delete display}. - -@subsubheading Example -N.A. - - -@subheading The @code{-display-disable} Command -@findex -display-disable - -@subsubheading Synopsis - -@smallexample - -display-disable @var{number} -@end smallexample - -Disable display @var{number}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{disable display}. - -@subsubheading Example -N.A. - - -@subheading The @code{-display-enable} Command -@findex -display-enable - -@subsubheading Synopsis - -@smallexample - -display-enable @var{number} -@end smallexample - -Enable display @var{number}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{enable display}. - -@subsubheading Example -N.A. - - -@subheading The @code{-display-insert} Command -@findex -display-insert - -@subsubheading Synopsis - -@smallexample - -display-insert @var{expression} -@end smallexample - -Display @var{expression} every time the program stops. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{display}. - -@subsubheading Example -N.A. - - -@subheading The @code{-display-list} Command -@findex -display-list - -@subsubheading Synopsis - -@smallexample - -display-list -@end smallexample - -List the displays. Do not show the current values. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info display}. - -@subsubheading Example -N.A. - - -@subheading The @code{-environment-cd} Command -@findex -environment-cd - -@subsubheading Synopsis - -@smallexample - -environment-cd @var{pathdir} -@end smallexample - -Set @value{GDBN}'s working directory. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{cd}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb -^done -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-environment-directory} Command -@findex -environment-directory - -@subsubheading Synopsis - -@smallexample - -environment-directory [ -r ] [ @var{pathdir} ]+ -@end smallexample - -Add directories @var{pathdir} to beginning of search path for source files. -If the @samp{-r} option is used, the search path is reset to the default -search path. If directories @var{pathdir} are supplied in addition to the -@samp{-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. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{dir}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb -^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd" -(@value{GDBP}) --environment-directory "" -^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd" -(@value{GDBP}) --environment-directory -r /home/jjohnstn/src/gdb /usr/src -^done,source-path="/home/jjohnstn/src/gdb:/usr/src:$cdir:$cwd" -(@value{GDBP}) --environment-directory -r -^done,source-path="$cdir:$cwd" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-environment-path} Command -@findex -environment-path - -@subsubheading Synopsis - -@smallexample - -environment-path [ -r ] [ @var{pathdir} ]+ -@end smallexample - -Add directories @var{pathdir} to beginning of search path for object files. -If the @samp{-r} option is used, the search path is reset to the original -search path that existed at gdb start-up. If directories @var{pathdir} are -supplied in addition to the -@samp{-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. - - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{path}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --environment-path -^done,path="/usr/bin" -(@value{GDBP}) --environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb /bin -^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/bin:/usr/bin" -(@value{GDBP}) --environment-path -r /usr/local/bin -^done,path="/usr/local/bin:/usr/bin" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-environment-pwd} Command -@findex -environment-pwd - -@subsubheading Synopsis - -@smallexample - -environment-pwd -@end smallexample - -Show the current working directory. - -@subsubheading @value{GDBN} command - -The corresponding @value{GDBN} command is @samp{pwd}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --environment-pwd -^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb" -(@value{GDBP}) -@end smallexample - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Program Control -@section @sc{gdb/mi} Program control - -@subsubheading 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. - -@subsubheading Examples - -@noindent -Program exited normally: - -@smallexample -(@value{GDBP}) --exec-run -^running -(@value{GDBP}) -x = 55 -*stopped,reason="exited-normally" -(@value{GDBP}) -@end smallexample - -@noindent -Program exited exceptionally: - -@smallexample -(@value{GDBP}) --exec-run -^running -(@value{GDBP}) -x = 55 -*stopped,reason="exited",exit-code="01" -(@value{GDBP}) -@end smallexample - -Another way the program can terminate is if it receives a signal such as -@code{SIGINT}. In this case, @sc{gdb/mi} displays this: - -@smallexample -(@value{GDBP}) -*stopped,reason="exited-signalled",signal-name="SIGINT", -signal-meaning="Interrupt" -@end smallexample - - -@subheading The @code{-exec-abort} Command -@findex -exec-abort - -@subsubheading Synopsis - -@smallexample - -exec-abort -@end smallexample - -Kill the inferior running program. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{kill}. - -@subsubheading Example -N.A. - - -@subheading The @code{-exec-arguments} Command -@findex -exec-arguments - -@subsubheading Synopsis - -@smallexample - -exec-arguments @var{args} -@end smallexample - -Set the inferior program arguments, to be used in the next -@samp{-exec-run}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{set args}. - -@subsubheading Example - -@c FIXME! -Don't have one around. - - -@subheading The @code{-exec-continue} Command -@findex -exec-continue - -@subsubheading Synopsis - -@smallexample - -exec-continue -@end smallexample - -Asynchronous command. Resumes the execution of the inferior program -until a breakpoint is encountered, or until the inferior exits. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} corresponding is @samp{continue}. - -@subsubheading Example - -@smallexample --exec-continue -^running -(@value{GDBP}) -@@Hello world -*stopped,reason="breakpoint-hit",bkptno="2",frame=@{func="foo",args=[], -file="hello.c",line="13"@} -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-finish} Command -@findex -exec-finish - -@subsubheading Synopsis - -@smallexample - -exec-finish -@end smallexample - -Asynchronous command. Resumes the execution of the inferior program -until the current function is exited. Displays the results returned by -the function. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{finish}. - -@subsubheading Example - -Function returning @code{void}. - -@smallexample --exec-finish -^running -(@value{GDBP}) -@@hello from foo -*stopped,reason="function-finished",frame=@{func="main",args=[], -file="hello.c",line="7"@} -(@value{GDBP}) -@end smallexample - -Function returning other than @code{void}. The name of the internal -@value{GDBN} variable storing the result is printed, together with the -value itself. - -@smallexample --exec-finish -^running -(@value{GDBP}) -*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" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-interrupt} Command -@findex -exec-interrupt - -@subsubheading Synopsis - -@smallexample - -exec-interrupt -@end smallexample - -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 @samp{^done} output. If the user is trying to -interrupt a non-running program, an error message will be printed. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{interrupt}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) -111-exec-continue -111^running - -(@value{GDBP}) -222-exec-interrupt -222^done -(@value{GDBP}) -111*stopped,signal-name="SIGINT",signal-meaning="Interrupt", -frame=@{addr="0x00010140",func="foo",args=[],file="try.c",line="13"@} -(@value{GDBP}) - -(@value{GDBP}) --exec-interrupt -^error,msg="mi_cmd_exec_interrupt: Inferior not executing." -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-next} Command -@findex -exec-next - -@subsubheading Synopsis - -@smallexample - -exec-next -@end smallexample - -Asynchronous command. Resumes execution of the inferior program, stopping -when the beginning of the next source line is reached. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{next}. - -@subsubheading Example - -@smallexample --exec-next -^running -(@value{GDBP}) -*stopped,reason="end-stepping-range",line="8",file="hello.c" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-next-instruction} Command -@findex -exec-next-instruction - -@subsubheading Synopsis - -@smallexample - -exec-next-instruction -@end smallexample - -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. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{nexti}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --exec-next-instruction -^running - -(@value{GDBP}) -*stopped,reason="end-stepping-range", -addr="0x000100d4",line="5",file="hello.c" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-return} Command -@findex -exec-return - -@subsubheading Synopsis - -@smallexample - -exec-return -@end smallexample - -Makes current function return immediately. Doesn't execute the inferior. -Displays the new current frame. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{return}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) -200-break-insert callee4 -200^done,bkpt=@{number="1",addr="0x00010734", -file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"@} -(@value{GDBP}) -000-exec-run -000^running -(@value{GDBP}) -000*stopped,reason="breakpoint-hit",bkptno="1", -frame=@{func="callee4",args=[], -file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"@} -(@value{GDBP}) -205-break-delete -205^done -(@value{GDBP}) -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"@} -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-run} Command -@findex -exec-run - -@subsubheading Synopsis - -@smallexample - -exec-run -@end smallexample - -Asynchronous command. Starts execution of the inferior from the -beginning. The inferior executes until either a breakpoint is -encountered or the program exits. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{run}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --break-insert main -^done,bkpt=@{number="1",addr="0x0001072c",file="recursive2.c",line="4"@} -(@value{GDBP}) --exec-run -^running -(@value{GDBP}) -*stopped,reason="breakpoint-hit",bkptno="1", -frame=@{func="main",args=[],file="recursive2.c",line="4"@} -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-show-arguments} Command -@findex -exec-show-arguments - -@subsubheading Synopsis - -@smallexample - -exec-show-arguments -@end smallexample - -Print the arguments of the program. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{show args}. - -@subsubheading Example -N.A. - -@c @subheading -exec-signal - -@subheading The @code{-exec-step} Command -@findex -exec-step - -@subsubheading Synopsis - -@smallexample - -exec-step -@end smallexample - -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. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{step}. - -@subsubheading Example - -Stepping into a function: - -@smallexample --exec-step -^running -(@value{GDBP}) -*stopped,reason="end-stepping-range", -frame=@{func="foo",args=[@{name="a",value="10"@}, -@{name="b",value="0"@}],file="recursive2.c",line="11"@} -(@value{GDBP}) -@end smallexample - -Regular stepping: - -@smallexample --exec-step -^running -(@value{GDBP}) -*stopped,reason="end-stepping-range",line="14",file="recursive2.c" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-step-instruction} Command -@findex -exec-step-instruction - -@subsubheading Synopsis - -@smallexample - -exec-step-instruction -@end smallexample - -Asynchronous command. Resumes the inferior which executes one machine -instruction. The output, once @value{GDBN} 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. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{stepi}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --exec-step-instruction -^running - -(@value{GDBP}) -*stopped,reason="end-stepping-range", -frame=@{func="foo",args=[],file="try.c",line="10"@} -(@value{GDBP}) --exec-step-instruction -^running - -(@value{GDBP}) -*stopped,reason="end-stepping-range", -frame=@{addr="0x000100f4",func="foo",args=[],file="try.c",line="10"@} -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-exec-until} Command -@findex -exec-until - -@subsubheading Synopsis - -@smallexample - -exec-until [ @var{location} ] -@end smallexample - -Asynchronous command. Executes the inferior until the @var{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 @samp{location-reached}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{until}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --exec-until recursive2.c:6 -^running -(@value{GDBP}) -x = 55 -*stopped,reason="location-reached",frame=@{func="main",args=[], -file="recursive2.c",line="6"@} -(@value{GDBP}) -@end smallexample - -@ignore -@subheading -file-clear -Is this going away???? -@end ignore - - -@subheading The @code{-file-exec-and-symbols} Command -@findex -file-exec-and-symbols - -@subsubheading Synopsis - -@smallexample - -file-exec-and-symbols @var{file} -@end smallexample - -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, @value{GDBN} will produce -error messages. Otherwise, no output is produced, except a completion -notification. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{file}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx -^done -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-file-exec-file} Command -@findex -file-exec-file - -@subsubheading Synopsis - -@smallexample - -file-exec-file @var{file} -@end smallexample - -Specify the executable file to be debugged. Unlike -@samp{-file-exec-and-symbols}, the symbol table is @emph{not} read -from this file. If used without argument, @value{GDBN} clears the information -about the executable file. No output is produced, except a completion -notification. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{exec-file}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx -^done -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-file-list-exec-sections} Command -@findex -file-list-exec-sections - -@subsubheading Synopsis - -@smallexample - -file-list-exec-sections -@end smallexample - -List the sections of the current executable file. - -@subsubheading @value{GDBN} Command - -The @value{GDBN} command @samp{info file} shows, among the rest, the same -information as this command. @code{gdbtk} has a corresponding command -@samp{gdb_load_info}. - -@subsubheading Example -N.A. - - -@subheading The @code{-file-list-exec-source-file} Command -@findex -file-list-exec-source-file - -@subsubheading Synopsis - -@smallexample - -file-list-exec-source-file -@end smallexample - -List the line number, the current source file, and the absolute path -to the current source file for the current executable. - -@subsubheading @value{GDBN} Command - -There's no @value{GDBN} command which directly corresponds to this one. - -@subsubheading Example - -@smallexample -(@value{GDBP}) -123-file-list-exec-source-file -123^done,line="1",file="foo.c",fullname="/home/bar/foo.c" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-file-list-exec-source-files} Command -@findex -file-list-exec-source-files - -@subsubheading Synopsis - -@smallexample - -file-list-exec-source-files -@end smallexample - -List the source files for the current executable. - -@subsubheading @value{GDBN} Command - -There's no @value{GDBN} command which directly corresponds to this one. -@code{gdbtk} has an analogous command @samp{gdb_listfiles}. - -@subsubheading Example -N.A. - - -@subheading The @code{-file-list-shared-libraries} Command -@findex -file-list-shared-libraries - -@subsubheading Synopsis - -@smallexample - -file-list-shared-libraries -@end smallexample - -List the shared libraries in the program. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info shared}. - -@subsubheading Example -N.A. - - -@subheading The @code{-file-list-symbol-files} Command -@findex -file-list-symbol-files - -@subsubheading Synopsis - -@smallexample - -file-list-symbol-files -@end smallexample - -List symbol files. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info file} (part of it). - -@subsubheading Example -N.A. - - -@subheading The @code{-file-symbol-file} Command -@findex -file-symbol-file - -@subsubheading Synopsis - -@smallexample - -file-symbol-file @var{file} -@end smallexample - -Read symbol table info from the specified @var{file} argument. When -used without arguments, clears @value{GDBN}'s symbol table info. No output is -produced, except for a completion notification. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{symbol-file}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx -^done -(@value{GDBP}) -@end smallexample - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Miscellaneous Commands -@section Miscellaneous @value{GDBN} commands in @sc{gdb/mi} - -@c @subheading -gdb-complete - -@subheading The @code{-gdb-exit} Command -@findex -gdb-exit - -@subsubheading Synopsis - -@smallexample - -gdb-exit -@end smallexample - -Exit @value{GDBN} immediately. - -@subsubheading @value{GDBN} Command - -Approximately corresponds to @samp{quit}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --gdb-exit -@end smallexample - -@subheading The @code{-gdb-set} Command -@findex -gdb-set - -@subsubheading Synopsis - -@smallexample - -gdb-set -@end smallexample - -Set an internal @value{GDBN} variable. -@c IS THIS A DOLLAR VARIABLE? OR SOMETHING LIKE ANNOTATE ????? - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{set}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --gdb-set $foo=3 -^done -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-gdb-show} Command -@findex -gdb-show - -@subsubheading Synopsis - -@smallexample - -gdb-show -@end smallexample - -Show the current value of a @value{GDBN} variable. - -@subsubheading @value{GDBN} command - -The corresponding @value{GDBN} command is @samp{show}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --gdb-show annotate -^done,value="0" -(@value{GDBP}) -@end smallexample - -@c @subheading -gdb-source - - -@subheading The @code{-gdb-version} Command -@findex -gdb-version - -@subsubheading Synopsis - -@smallexample - -gdb-version -@end smallexample - -Show version information for @value{GDBN}. Used mostly in testing. - -@subsubheading @value{GDBN} Command - -There's no equivalent @value{GDBN} command. @value{GDBN} by default shows this -information when you start an interactive session. - -@subsubheading Example - -@c This example modifies the actual output from GDB to avoid overfull -@c box in TeX. -@smallexample -(@value{GDBP}) --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 -(@value{GDBP}) -@end smallexample - -@subheading The @code{-interpreter-exec} Command -@findex -interpreter-exec - -@subheading Synopsis - -@smallexample --interpreter-exec @var{interpreter} @var{command} -@end smallexample - -Execute the specified @var{command} in the given @var{interpreter}. - -@subheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{interpreter-exec}. - -@subheading Example - -@smallexample -(@value{GDBP}) --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 -(@value{GDBP}) -@end smallexample - -@ignore -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Kod Commands -@section @sc{gdb/mi} Kod Commands - -The Kod commands are not implemented. - -@c @subheading -kod-info - -@c @subheading -kod-list - -@c @subheading -kod-list-object-types - -@c @subheading -kod-show - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Memory Overlay Commands -@section @sc{gdb/mi} Memory Overlay Commands - -The memory overlay commands are not implemented. - -@c @subheading -overlay-auto - -@c @subheading -overlay-list-mapping-state - -@c @subheading -overlay-list-overlays - -@c @subheading -overlay-map - -@c @subheading -overlay-off - -@c @subheading -overlay-on - -@c @subheading -overlay-unmap - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Signal Handling Commands -@section @sc{gdb/mi} Signal Handling Commands - -Signal handling commands are not implemented. - -@c @subheading -signal-handle - -@c @subheading -signal-list-handle-actions - -@c @subheading -signal-list-signal-types -@end ignore - - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Stack Manipulation -@section @sc{gdb/mi} Stack Manipulation Commands - - -@subheading The @code{-stack-info-frame} Command -@findex -stack-info-frame - -@subsubheading Synopsis - -@smallexample - -stack-info-frame -@end smallexample - -Get info on the current frame. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info frame} or @samp{frame} -(without arguments). - -@subsubheading Example -N.A. - -@subheading The @code{-stack-info-depth} Command -@findex -stack-info-depth - -@subsubheading Synopsis - -@smallexample - -stack-info-depth [ @var{max-depth} ] -@end smallexample - -Return the depth of the stack. If the integer argument @var{max-depth} -is specified, do not count beyond @var{max-depth} frames. - -@subsubheading @value{GDBN} Command - -There's no equivalent @value{GDBN} command. - -@subsubheading Example - -For a stack with frame levels 0 through 11: - -@smallexample -(@value{GDBP}) --stack-info-depth -^done,depth="12" -(@value{GDBP}) --stack-info-depth 4 -^done,depth="4" -(@value{GDBP}) --stack-info-depth 12 -^done,depth="12" -(@value{GDBP}) --stack-info-depth 11 -^done,depth="11" -(@value{GDBP}) --stack-info-depth 13 -^done,depth="12" -(@value{GDBP}) -@end smallexample - -@subheading The @code{-stack-list-arguments} Command -@findex -stack-list-arguments - -@subsubheading Synopsis - -@smallexample - -stack-list-arguments @var{show-values} - [ @var{low-frame} @var{high-frame} ] -@end smallexample - -Display a list of the arguments for the frames between @var{low-frame} -and @var{high-frame} (inclusive). If @var{low-frame} and -@var{high-frame} are not provided, list the arguments for the whole call -stack. - -The @var{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. - -@subsubheading @value{GDBN} Command - -@value{GDBN} does not have an equivalent command. @code{gdbtk} has a -@samp{gdb_get_args} command which partially overlaps with the -functionality of @samp{-stack-list-arguments}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --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"@}] -(@value{GDBP}) --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=[]@}] -(@value{GDBP}) --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=[]@}] -(@value{GDBP}) --stack-list-arguments 0 2 2 -^done,stack-args=[frame=@{level="2",args=[name="intarg",name="strarg"]@}] -(@value{GDBP}) --stack-list-arguments 1 2 2 -^done,stack-args=[frame=@{level="2", -args=[@{name="intarg",value="2"@}, -@{name="strarg",value="0x11940 \"A string argument.\""@}]@}] -(@value{GDBP}) -@end smallexample - -@c @subheading -stack-list-exception-handlers - - -@subheading The @code{-stack-list-frames} Command -@findex -stack-list-frames - -@subsubheading Synopsis - -@smallexample - -stack-list-frames [ @var{low-frame} @var{high-frame} ] -@end smallexample - -List the frames currently on the stack. For each frame it displays the -following info: - -@table @samp -@item @var{level} -The frame number, 0 being the topmost frame, i.e. the innermost function. -@item @var{addr} -The @code{$pc} value for that frame. -@item @var{func} -Function name. -@item @var{file} -File name of the source file where the function lives. -@item @var{line} -Line number corresponding to the @code{$pc}. -@end table - -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. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} commands are @samp{backtrace} and @samp{where}. - -@subsubheading Example - -Full stack backtrace: - -@smallexample -(@value{GDBP}) --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"@}] -(@value{GDBP}) -@end smallexample - -Show frames between @var{low_frame} and @var{high_frame}: - -@smallexample -(@value{GDBP}) --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"@}] -(@value{GDBP}) -@end smallexample - -Show a single frame: - -@smallexample -(@value{GDBP}) --stack-list-frames 3 3 -^done,stack= -[frame=@{level="3",addr="0x000107a4",func="foo", - file="recursive2.c",line="14"@}] -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-stack-list-locals} Command -@findex -stack-list-locals - -@subsubheading Synopsis - -@smallexample - -stack-list-locals @var{print-values} -@end smallexample - -Display the local variable names for the current frame. With an -argument of 0 or @code{--no-values}, prints only the names of the variables. -With argument of 1 or @code{--all-values}, prints also their values. With -argument of 2 or @code{--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. - -@subsubheading @value{GDBN} Command - -@samp{info locals} in @value{GDBN}, @samp{gdb_get_locals} in @code{gdbtk}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --stack-list-locals 0 -^done,locals=[name="A",name="B",name="C"] -(@value{GDBP}) --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]"@}] -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-stack-select-frame} Command -@findex -stack-select-frame - -@subsubheading Synopsis - -@smallexample - -stack-select-frame @var{framenum} -@end smallexample - -Change the current frame. Select a different frame @var{framenum} on -the stack. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} commands are @samp{frame}, @samp{up}, -@samp{down}, @samp{select-frame}, @samp{up-silent}, and @samp{down-silent}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --stack-select-frame 2 -^done -(@value{GDBP}) -@end smallexample - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Symbol Query -@section @sc{gdb/mi} Symbol Query Commands - - -@subheading The @code{-symbol-info-address} Command -@findex -symbol-info-address - -@subsubheading Synopsis - -@smallexample - -symbol-info-address @var{symbol} -@end smallexample - -Describe where @var{symbol} is stored. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info address}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-info-file} Command -@findex -symbol-info-file - -@subsubheading Synopsis - -@smallexample - -symbol-info-file -@end smallexample - -Show the file for the symbol. - -@subsubheading @value{GDBN} Command - -There's no equivalent @value{GDBN} command. @code{gdbtk} has -@samp{gdb_find_file}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-info-function} Command -@findex -symbol-info-function - -@subsubheading Synopsis - -@smallexample - -symbol-info-function -@end smallexample - -Show which function the symbol lives in. - -@subsubheading @value{GDBN} Command - -@samp{gdb_get_function} in @code{gdbtk}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-info-line} Command -@findex -symbol-info-line - -@subsubheading Synopsis - -@smallexample - -symbol-info-line -@end smallexample - -Show the core addresses of the code for a source line. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info line}. -@code{gdbtk} has the @samp{gdb_get_line} and @samp{gdb_get_file} commands. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-info-symbol} Command -@findex -symbol-info-symbol - -@subsubheading Synopsis - -@smallexample - -symbol-info-symbol @var{addr} -@end smallexample - -Describe what symbol is at location @var{addr}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{info symbol}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-list-functions} Command -@findex -symbol-list-functions - -@subsubheading Synopsis - -@smallexample - -symbol-list-functions -@end smallexample - -List the functions in the executable. - -@subsubheading @value{GDBN} Command - -@samp{info functions} in @value{GDBN}, @samp{gdb_listfunc} and -@samp{gdb_search} in @code{gdbtk}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-list-lines} Command -@findex -symbol-list-lines - -@subsubheading Synopsis - -@smallexample - -symbol-list-lines @var{filename} -@end smallexample - -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. - -@subsubheading @value{GDBN} Command - -There is no corresponding @value{GDBN} command. - -@subsubheading Example -@smallexample -(@value{GDBP}) --symbol-list-lines basics.c -^done,lines=[@{pc="0x08048554",line="7"@},@{pc="0x0804855a",line="8"@}] -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-symbol-list-types} Command -@findex -symbol-list-types - -@subsubheading Synopsis - -@smallexample - -symbol-list-types -@end smallexample - -List all the type names. - -@subsubheading @value{GDBN} Command - -The corresponding commands are @samp{info types} in @value{GDBN}, -@samp{gdb_search} in @code{gdbtk}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-list-variables} Command -@findex -symbol-list-variables - -@subsubheading Synopsis - -@smallexample - -symbol-list-variables -@end smallexample - -List all the global and static variable names. - -@subsubheading @value{GDBN} Command - -@samp{info variables} in @value{GDBN}, @samp{gdb_search} in @code{gdbtk}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-locate} Command -@findex -symbol-locate - -@subsubheading Synopsis - -@smallexample - -symbol-locate -@end smallexample - -@subsubheading @value{GDBN} Command - -@samp{gdb_loc} in @code{gdbtk}. - -@subsubheading Example -N.A. - - -@subheading The @code{-symbol-type} Command -@findex -symbol-type - -@subsubheading Synopsis - -@smallexample - -symbol-type @var{variable} -@end smallexample - -Show type of @var{variable}. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{ptype}, @code{gdbtk} has -@samp{gdb_obj_variable}. - -@subsubheading Example -N.A. - - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Target Manipulation -@section @sc{gdb/mi} Target Manipulation Commands - - -@subheading The @code{-target-attach} Command -@findex -target-attach - -@subsubheading Synopsis - -@smallexample - -target-attach @var{pid} | @var{file} -@end smallexample - -Attach to a process @var{pid} or a file @var{file} outside of @value{GDBN}. - -@subsubheading @value{GDBN} command - -The corresponding @value{GDBN} command is @samp{attach}. - -@subsubheading Example -N.A. - - -@subheading The @code{-target-compare-sections} Command -@findex -target-compare-sections - -@subsubheading Synopsis - -@smallexample - -target-compare-sections [ @var{section} ] -@end smallexample - -Compare data of section @var{section} on target to the exec file. -Without the argument, all sections are compared. - -@subsubheading @value{GDBN} Command - -The @value{GDBN} equivalent is @samp{compare-sections}. - -@subsubheading Example -N.A. - - -@subheading The @code{-target-detach} Command -@findex -target-detach - -@subsubheading Synopsis - -@smallexample - -target-detach -@end smallexample - -Disconnect from the remote target. There's no output. - -@subsubheading @value{GDBN} command - -The corresponding @value{GDBN} command is @samp{detach}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --target-detach -^done -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-target-disconnect} Command -@findex -target-disconnect - -@subsubheading Synopsis - -@example - -target-disconnect -@end example - -Disconnect from the remote target. There's no output. - -@subsubheading @value{GDBN} command - -The corresponding @value{GDBN} command is @samp{disconnect}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --target-disconnect -^done -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-target-download} Command -@findex -target-download - -@subsubheading Synopsis - -@smallexample - -target-download -@end smallexample - -Loads the executable onto the remote target. -It prints out an update message every half second, which includes the fields: - -@table @samp -@item section -The name of the section. -@item section-sent -The size of what has been sent so far for that section. -@item section-size -The size of the section. -@item total-sent -The total size of what was sent so far (the current and the previous sections). -@item total-size -The size of the overall executable to download. -@end table - -@noindent -Each message is sent as status record (@pxref{GDB/MI Output Syntax, , -@sc{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: - -@table @samp -@item section -The name of the section. -@item section-size -The size of the section. -@item total-size -The size of the overall executable to download. -@end table - -@noindent -At the end, a summary is printed. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{load}. - -@subsubheading 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. - -@smallexample -(@value{GDBP}) --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" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-target-exec-status} Command -@findex -target-exec-status - -@subsubheading Synopsis - -@smallexample - -target-exec-status -@end smallexample - -Provide information on the state of the target (whether it is running or -not, for instance). - -@subsubheading @value{GDBN} Command - -There's no equivalent @value{GDBN} command. - -@subsubheading Example -N.A. - - -@subheading The @code{-target-list-available-targets} Command -@findex -target-list-available-targets - -@subsubheading Synopsis - -@smallexample - -target-list-available-targets -@end smallexample - -List the possible targets to connect to. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{help target}. - -@subsubheading Example -N.A. - - -@subheading The @code{-target-list-current-targets} Command -@findex -target-list-current-targets - -@subsubheading Synopsis - -@smallexample - -target-list-current-targets -@end smallexample - -Describe the current target. - -@subsubheading @value{GDBN} Command - -The corresponding information is printed by @samp{info file} (among -other things). - -@subsubheading Example -N.A. - - -@subheading The @code{-target-list-parameters} Command -@findex -target-list-parameters - -@subsubheading Synopsis - -@smallexample - -target-list-parameters -@end smallexample - -@c ???? - -@subsubheading @value{GDBN} Command - -No equivalent. - -@subsubheading Example -N.A. - - -@subheading The @code{-target-select} Command -@findex -target-select - -@subsubheading Synopsis - -@smallexample - -target-select @var{type} @var{parameters @dots{}} -@end smallexample - -Connect @value{GDBN} to the remote target. This command takes two args: - -@table @samp -@item @var{type} -The type of target, for instance @samp{async}, @samp{remote}, etc. -@item @var{parameters} -Device names, host names and the like. @xref{Target Commands, , -Commands for managing targets}, for more details. -@end table - -The output is a connection notification, followed by the address at -which the target program is, in the following form: - -@smallexample -^connected,addr="@var{address}",func="@var{function name}", - args=[@var{arg list}] -@end smallexample - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{target}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --target-select async /dev/ttya -^connected,addr="0xfe00a300",func="??",args=[] -(@value{GDBP}) -@end smallexample - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Thread Commands -@section @sc{gdb/mi} Thread Commands - - -@subheading The @code{-thread-info} Command -@findex -thread-info - -@subsubheading Synopsis - -@smallexample - -thread-info -@end smallexample - -@subsubheading @value{GDBN} command - -No equivalent. - -@subsubheading Example -N.A. - - -@subheading The @code{-thread-list-all-threads} Command -@findex -thread-list-all-threads - -@subsubheading Synopsis - -@smallexample - -thread-list-all-threads -@end smallexample - -@subsubheading @value{GDBN} Command - -The equivalent @value{GDBN} command is @samp{info threads}. - -@subsubheading Example -N.A. - - -@subheading The @code{-thread-list-ids} Command -@findex -thread-list-ids - -@subsubheading Synopsis - -@smallexample - -thread-list-ids -@end smallexample - -Produces a list of the currently known @value{GDBN} thread ids. At the -end of the list it also prints the total number of such threads. - -@subsubheading @value{GDBN} Command - -Part of @samp{info threads} supplies the same information. - -@subsubheading Example - -No threads present, besides the main process: - -@smallexample -(@value{GDBP}) --thread-list-ids -^done,thread-ids=@{@},number-of-threads="0" -(@value{GDBP}) -@end smallexample - - -Several threads: - -@smallexample -(@value{GDBP}) --thread-list-ids -^done,thread-ids=@{thread-id="3",thread-id="2",thread-id="1"@}, -number-of-threads="3" -(@value{GDBP}) -@end smallexample - - -@subheading The @code{-thread-select} Command -@findex -thread-select - -@subsubheading Synopsis - -@smallexample - -thread-select @var{threadnum} -@end smallexample - -Make @var{threadnum} the current thread. It prints the number of the new -current thread, and the topmost frame for that thread. - -@subsubheading @value{GDBN} Command - -The corresponding @value{GDBN} command is @samp{thread}. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --exec-next -^running -(@value{GDBP}) -*stopped,reason="end-stepping-range",thread-id="2",line="187", -file="../../../devo/gdb/testsuite/gdb.threads/linux-dp.c" -(@value{GDBP}) --thread-list-ids -^done, -thread-ids=@{thread-id="3",thread-id="2",thread-id="1"@}, -number-of-threads="3" -(@value{GDBP}) --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"@} -(@value{GDBP}) -@end smallexample - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Tracepoint Commands -@section @sc{gdb/mi} Tracepoint Commands - -The tracepoint commands are not yet implemented. - -@c @subheading -trace-actions - -@c @subheading -trace-delete - -@c @subheading -trace-disable - -@c @subheading -trace-dump - -@c @subheading -trace-enable - -@c @subheading -trace-exists - -@c @subheading -trace-find - -@c @subheading -trace-frame-number - -@c @subheading -trace-info - -@c @subheading -trace-insert - -@c @subheading -trace-list - -@c @subheading -trace-pass-count - -@c @subheading -trace-save - -@c @subheading -trace-start - -@c @subheading -trace-stop - - -@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -@node GDB/MI Variable Objects -@section @sc{gdb/mi} Variable Objects - - -@subheading Motivation for Variable Objects in @sc{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 @code{Insight}. - -The two main reasons for that are: - -@enumerate 1 -@item -It has been proven in practice (it is already on its second generation). - -@item -It will shorten development time (needless to say how important it is -now). -@end enumerate - -The original interface was designed to be used by Tcl code, so it was -slightly changed so it could be used through @sc{gdb/mi}. This section -describes the @sc{gdb/mi} operations that will be available and gives some -hints about their use. - -@emph{Note}: In addition to the set of operations described here, we -expect the @sc{gui} implementation of a variable window to require, at -least, the following operations: - -@itemize @bullet -@item @code{-gdb-show} @code{output-radix} -@item @code{-stack-list-arguments} -@item @code{-stack-list-locals} -@item @code{-stack-select-frame} -@end itemize - -@subheading Introduction to Variable Objects in @sc{gdb/mi} - -@cindex variable objects in @sc{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 @code{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@t{++} 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 @code{int}, hex -for pointers, etc.). - -The following is the complete set of @sc{gdb/mi} operations defined to -access this functionality: - -@multitable @columnfractions .4 .6 -@item @strong{Operation} -@tab @strong{Description} - -@item @code{-var-create} -@tab create a variable object -@item @code{-var-delete} -@tab delete the variable object and its children -@item @code{-var-set-format} -@tab set the display format of this variable -@item @code{-var-show-format} -@tab show the display format of this variable -@item @code{-var-info-num-children} -@tab tells how many children this object has -@item @code{-var-list-children} -@tab return a list of the object's children -@item @code{-var-info-type} -@tab show the type of this variable object -@item @code{-var-info-expression} -@tab print what this variable object represents -@item @code{-var-show-attributes} -@tab is this variable editable? does it exist here? -@item @code{-var-evaluate-expression} -@tab get the value of this variable -@item @code{-var-assign} -@tab set the value of this variable -@item @code{-var-update} -@tab update the variable and its children -@end multitable - -In the next subsection we describe each operation in detail and suggest -how it can be used. - -@subheading Description And Use of Operations on Variable Objects - -@subheading The @code{-var-create} Command -@findex -var-create - -@subsubheading Synopsis - -@smallexample - -var-create @{@var{name} | "-"@} - @{@var{frame-addr} | "*"@} @var{expression} -@end smallexample - -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 @var{name} parameter is the string by which the object can be -referenced. It must be unique. If @samp{-} is specified, the varobj -system will generate a string ``varNNNNNN'' automatically. It will be -unique provided that one does not specify @var{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 @var{frame-addr}. A @samp{*} indicates that the current -frame should be used. - -@var{expression} is any expression valid on the current language set (must not -begin with a @samp{*}), or one of the following: - -@itemize @bullet -@item -@samp{*@var{addr}}, where @var{addr} is the address of a memory cell - -@item -@samp{*@var{addr}-@var{addr}} --- a memory address range (TBD) - -@item -@samp{$@var{regname}} --- a CPU register name -@end itemize - -@subsubheading 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 @value{GDBN} CLI: - -@smallexample - name="@var{name}",numchild="N",type="@var{type}" -@end smallexample - - -@subheading The @code{-var-delete} Command -@findex -var-delete - -@subsubheading Synopsis - -@smallexample - -var-delete @var{name} -@end smallexample - -Deletes a previously created variable object and all of its children. - -Returns an error if the object @var{name} is not found. - - -@subheading The @code{-var-set-format} Command -@findex -var-set-format - -@subsubheading Synopsis - -@smallexample - -var-set-format @var{name} @var{format-spec} -@end smallexample - -Sets the output format for the value of the object @var{name} to be -@var{format-spec}. - -The syntax for the @var{format-spec} is as follows: - -@smallexample - @var{format-spec} @expansion{} - @{binary | decimal | hexadecimal | octal | natural@} -@end smallexample - - -@subheading The @code{-var-show-format} Command -@findex -var-show-format - -@subsubheading Synopsis - -@smallexample - -var-show-format @var{name} -@end smallexample - -Returns the format used to display the value of the object @var{name}. - -@smallexample - @var{format} @expansion{} - @var{format-spec} -@end smallexample - - -@subheading The @code{-var-info-num-children} Command -@findex -var-info-num-children - -@subsubheading Synopsis - -@smallexample - -var-info-num-children @var{name} -@end smallexample - -Returns the number of children of a variable object @var{name}: - -@smallexample - numchild=@var{n} -@end smallexample - - -@subheading The @code{-var-list-children} Command -@findex -var-list-children - -@subsubheading Synopsis - -@smallexample - -var-list-children [@var{print-values}] @var{name} -@end smallexample - -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 @code{--no-values}, prints only the names of the -variables. With an optional preceding argument of 1 or @code{--all-values}, -also prints their values. - -@subsubheading Example - -@smallexample -(@value{GDBP}) - -var-list-children n - numchild=@var{n},children=[@{name=@var{name}, - numchild=@var{n},type=@var{type}@},@r{(repeats N times)}] -(@value{GDBP}) - -var-list-children --all-values n - numchild=@var{n},children=[@{name=@var{name}, - numchild=@var{n},value=@var{value},type=@var{type}@},@r{(repeats N times)}] -@end smallexample - - -@subheading The @code{-var-info-type} Command -@findex -var-info-type - -@subsubheading Synopsis - -@smallexample - -var-info-type @var{name} -@end smallexample - -Returns the type of the specified variable @var{name}. The type is -returned as a string in the same format as it is output by the -@value{GDBN} CLI: - -@smallexample - type=@var{typename} -@end smallexample - - -@subheading The @code{-var-info-expression} Command -@findex -var-info-expression - -@subsubheading Synopsis - -@smallexample - -var-info-expression @var{name} -@end smallexample - -Returns what is represented by the variable object @var{name}: - -@smallexample - lang=@var{lang-spec},exp=@var{expression} -@end smallexample - -@noindent -where @var{lang-spec} is @code{@{"C" | "C++" | "Java"@}}. - -@subheading The @code{-var-show-attributes} Command -@findex -var-show-attributes - -@subsubheading Synopsis - -@smallexample - -var-show-attributes @var{name} -@end smallexample - -List attributes of the specified variable object @var{name}: - -@smallexample - status=@var{attr} [ ( ,@var{attr} )* ] -@end smallexample - -@noindent -where @var{attr} is @code{@{ @{ editable | noneditable @} | TBD @}}. - -@subheading The @code{-var-evaluate-expression} Command -@findex -var-evaluate-expression - -@subsubheading Synopsis - -@smallexample - -var-evaluate-expression @var{name} -@end smallexample - -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: - -@smallexample - value=@var{value} -@end smallexample - -Note that one must invoke @code{-var-list-children} for a variable -before the value of a child variable can be evaluated. - -@subheading The @code{-var-assign} Command -@findex -var-assign - -@subsubheading Synopsis - -@smallexample - -var-assign @var{name} @var{expression} -@end smallexample - -Assigns the value of @var{expression} to the variable object specified -by @var{name}. The object must be @samp{editable}. If the variable's -value is altered by the assign, the variable will show up in any -subsequent @code{-var-update} list. - -@subsubheading Example - -@smallexample -(@value{GDBP}) --var-assign var1 3 -^done,value="3" -(@value{GDBP}) --var-update * -^done,changelist=[@{name="var1",in_scope="true",type_changed="false"@}] -(@value{GDBP}) -@end smallexample - -@subheading The @code{-var-update} Command -@findex -var-update - -@subsubheading Synopsis - -@smallexample - -var-update @{@var{name} | "*"@} -@end smallexample - -Update the value of the variable object @var{name} by evaluating its -expression after fetching all the new values from memory or registers. -A @samp{*} causes all existing variable objects to be updated. - - -@node Annotations -@chapter @value{GDBN} Annotations - -This chapter describes annotations in @value{GDBN}. Annotations were -designed to interface @value{GDBN} to graphical user interfaces or other -similar programs which want to interact with @value{GDBN} at a -relatively high level. - -The annotation mechanism has largely been superseeded by @sc{gdb/mi} -(@pxref{GDB/MI}). - -@ignore -This is Edition @value{EDITION}, @value{DATE}. -@end ignore - -@menu -* Annotations Overview:: What annotations are; the general syntax. -* Server Prefix:: Issuing a command without affecting user state. -* Prompting:: Annotations marking @value{GDBN}'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. -@end menu - -@node Annotations Overview -@section What is an Annotation? -@cindex annotations - -Annotations start with a newline character, two @samp{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 @samp{control-z} -characters denotes literal output from @value{GDBN}. Currently there is -no need for @value{GDBN} to output a newline followed by two -@samp{control-z} characters, but if there was such a need, the -annotations could be extended with an @samp{escape} annotation which -means those three characters as output. - -The annotation @var{level}, which is specified using the -@option{--annotate} command line option (@pxref{Mode Options}), controls -how much information @value{GDBN} 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 @value{GDBN} is run as a -subprocess of @sc{gnu} Emacs, level 3 is the maximum annotation suitable -for programs that control @value{GDBN}, and level 2 annotations have -been made obsolete (@pxref{Limitations, , Limitations of the Annotation -Interface, annotate, GDB's Obsolete Annotations}). This chapter -describes level 3 annotations. - -A simple example of starting up @value{GDBN} with annotations is: - -@smallexample -$ @kbd{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 -@kbd{quit} - -^Z^Zpost-prompt -$ -@end smallexample - -Here @samp{quit} is input to @value{GDBN}; the rest is output from -@value{GDBN}. The three lines beginning @samp{^Z^Z} (where @samp{^Z} -denotes a @samp{control-z} character) are annotations; the rest is -output from @value{GDBN}. - -@node Server Prefix -@section The Server Prefix -@cindex server prefix for annotations - -To issue a command to @value{GDBN} without affecting certain aspects of -the state which is seen by users, prefix it with @samp{server }. This -means that this command will not affect the command history, nor will it -affect @value{GDBN}'s notion of which command to repeat if @key{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 @code{output} command instead of the @code{print} command. - -@node Prompting -@section Annotation for @value{GDBN} Input - -@cindex annotations for prompts -When @value{GDBN} 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 @dfn{input type}. Each -input type has three annotations: a @code{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 @code{post-} -annotation which denotes the end of any echo which may (or may not) be -associated with the input. For example, the @code{prompt} input type -features the following annotations: - -@smallexample -^Z^Zpre-prompt -^Z^Zprompt -^Z^Zpost-prompt -@end smallexample - -The input types are - -@table @code -@findex pre-prompt -@findex prompt -@findex post-prompt -@item prompt -When @value{GDBN} is prompting for a command (the main @value{GDBN} prompt). - -@findex pre-commands -@findex commands -@findex post-commands -@item commands -When @value{GDBN} prompts for a set of commands, like in the @code{commands} -command. The annotations are repeated for each command which is input. - -@findex pre-overload-choice -@findex overload-choice -@findex post-overload-choice -@item overload-choice -When @value{GDBN} wants the user to select between various overloaded functions. - -@findex pre-query -@findex query -@findex post-query -@item query -When @value{GDBN} wants the user to confirm a potentially dangerous operation. - -@findex pre-prompt-for-continue -@findex prompt-for-continue -@findex post-prompt-for-continue -@item prompt-for-continue -When @value{GDBN} is asking the user to press return to continue. Note: Don't -expect this to work well; instead use @code{set height 0} to disable -prompting. This is because the counting of lines is buggy in the -presence of annotations. -@end table - -@node Errors -@section Errors -@cindex annotations for errors, warnings and interrupts - -@findex quit -@smallexample -^Z^Zquit -@end smallexample - -This annotation occurs right before @value{GDBN} responds to an interrupt. - -@findex error -@smallexample -^Z^Zerror -@end smallexample - -This annotation occurs right before @value{GDBN} responds to an error. - -Quit and error annotations indicate that any annotations which @value{GDBN} was -in the middle of may end abruptly. For example, if a -@code{value-history-begin} annotation is followed by a @code{error}, one -cannot expect to receive the matching @code{value-history-end}. One -cannot expect not to receive it either, however; an error annotation -does not necessarily mean that @value{GDBN} is immediately returning all the way -to the top level. - -@findex error-begin -A quit or error annotation may be preceded by - -@smallexample -^Z^Zerror-begin -@end smallexample - -Any output between that and the quit or error annotation is the error -message. - -Warning messages are not yet annotated. -@c If we want to change that, need to fix warning(), type_error(), -@c range_error(), and possibly other places. - -@node Invalidation -@section Invalidation Notices - -@cindex annotations for invalidation messages -The following annotations say that certain pieces of state may have -changed. - -@table @code -@findex frames-invalid -@item ^Z^Zframes-invalid - -The frames (for example, output from the @code{backtrace} command) may -have changed. - -@findex breakpoints-invalid -@item ^Z^Zbreakpoints-invalid - -The breakpoints may have changed. For example, the user just added or -deleted a breakpoint. -@end table - -@node Annotations for Running -@section Running the Program -@cindex annotations for running programs - -@findex starting -@findex stopping -When the program starts executing due to a @value{GDBN} command such as -@code{step} or @code{continue}, - -@smallexample -^Z^Zstarting -@end smallexample - -is output. When the program stops, - -@smallexample -^Z^Zstopped -@end smallexample - -is output. Before the @code{stopped} annotation, a variety of -annotations describe how the program stopped. - -@table @code -@findex exited -@item ^Z^Zexited @var{exit-status} -The program exited, and @var{exit-status} is the exit status (zero for -successful exit, otherwise nonzero). - -@findex signalled -@findex signal-name -@findex signal-name-end -@findex signal-string -@findex signal-string-end -@item ^Z^Zsignalled -The program exited with a signal. After the @code{^Z^Zsignalled}, the -annotation continues: - -@smallexample -@var{intro-text} -^Z^Zsignal-name -@var{name} -^Z^Zsignal-name-end -@var{middle-text} -^Z^Zsignal-string -@var{string} -^Z^Zsignal-string-end -@var{end-text} -@end smallexample - -@noindent -where @var{name} is the name of the signal, such as @code{SIGILL} or -@code{SIGSEGV}, and @var{string} is the explanation of the signal, such -as @code{Illegal Instruction} or @code{Segmentation fault}. -@var{intro-text}, @var{middle-text}, and @var{end-text} are for the -user's benefit and have no particular format. - -@findex signal -@item ^Z^Zsignal -The syntax of this annotation is just like @code{signalled}, but @value{GDBN} is -just saying that the program received the signal, not that it was -terminated with it. - -@findex breakpoint -@item ^Z^Zbreakpoint @var{number} -The program hit breakpoint number @var{number}. - -@findex watchpoint -@item ^Z^Zwatchpoint @var{number} -The program hit watchpoint number @var{number}. -@end table - -@node Source Annotations -@section Displaying Source -@cindex annotations for source display - -@findex source -The following annotation is used instead of displaying source code: - -@smallexample -^Z^Zsource @var{filename}:@var{line}:@var{character}:@var{middle}:@var{addr} -@end smallexample - -where @var{filename} is an absolute file name indicating which source -file, @var{line} is the line number within that file (where 1 is the -first line in the file), @var{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), -@var{middle} is @samp{middle} if @var{addr} is in the middle of the -line, or @samp{beg} if @var{addr} is at the beginning of the line, and -@var{addr} is the address in the target program associated with the -source which is being displayed. @var{addr} is in the form @samp{0x} -followed by one or more lowercase hex digits (note that this does not -depend on the language). - -@node GDB Bugs -@chapter Reporting Bugs in @value{GDBN} -@cindex bugs in @value{GDBN} -@cindex reporting bugs in @value{GDBN} - -Your bug reports play an essential role in making @value{GDBN} 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 @value{GDBN} work better. Bug -reports are your contribution to the maintenance of @value{GDBN}. - -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 -@end menu - -@node Bug Criteria -@section Have you found a bug? -@cindex bug criteria - -If you are not sure whether you have found a bug, here are some guidelines: - -@itemize @bullet -@cindex fatal signal -@cindex debugger crash -@cindex crash of debugger -@item -If the debugger gets a fatal signal, for any input whatever, that is a -@value{GDBN} bug. Reliable debuggers never crash. - -@cindex error on valid input -@item -If @value{GDBN} 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.) - -@cindex invalid input -@item -If @value{GDBN} 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''. - -@item -If you are an experienced user of debugging tools, your suggestions -for improvement of @value{GDBN} are welcome in any case. -@end itemize - -@node Bug Reporting -@section How to report bugs -@cindex bug reports -@cindex @value{GDBN} bugs, reporting - -A number of companies and individuals offer support for @sc{gnu} products. -If you obtained @value{GDBN} 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 @file{etc/SERVICE} in the @sc{gnu} Emacs -distribution. -@c should add a web page ref... - -In any event, we also recommend that you submit bug reports for -@value{GDBN}. The prefered method is to submit them directly using -@uref{http://www.gnu.org/software/gdb/bugs/, @value{GDBN}'s Bugs web -page}. Alternatively, the @email{bug-gdb@@gnu.org, e-mail gateway} can -be used. - -@strong{Do not send bug reports to @samp{info-gdb}, or to -@samp{help-gdb}, or to any newsgroups.} Most users of @value{GDBN} do -not want to receive bug reports. Those that do have arranged to receive -@samp{bug-gdb}. - -The mailing list @samp{bug-gdb} has a newsgroup @samp{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: -@strong{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 -@emph{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: - -@itemize @bullet -@item -The version of @value{GDBN}. @value{GDBN} announces it if you start -with no arguments; you can also print it at any time using @code{show -version}. - -Without this, we will not know whether there is any point in looking for -the bug in the current version of @value{GDBN}. - -@item -The type of machine you are using, and the operating system name and -version number. - -@item -What compiler (and its version) was used to compile @value{GDBN}---e.g. -``@value{GCC}--2.8.1''. - -@item -What compiler (and its version) was used to compile the program you are -debugging---e.g. ``@value{GCC}--2.8.1'', or ``HP92453-01 A.10.32.03 HP -C Compiler''. For GCC, you can say @code{gcc --version} to get this -information; for other compilers, see the documentation for those -compilers. - -@item -The command arguments you gave the compiler to compile your example and -observe the bug. For example, did you use @samp{-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. - -@item -A complete input script, and all necessary source files, that will -reproduce the bug. - -@item -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 @value{GDBN} 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 @value{GDBN} 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. - -@item -If you wish to suggest changes to the @value{GDBN} source, send us context -diffs. If you even discuss something in the @value{GDBN} 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. - -@end itemize - -Here are some things that are not necessary: - -@itemize @bullet -@item -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 @emph{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. - -@item -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 @value{GDBN} 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. - -@item -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. -@end itemize - -@c The readline documentation is distributed with the readline code -@c and consists of the two following files: -@c rluser.texinfo -@c inc-hist.texinfo -@c Use -I with makeinfo to point to the appropriate directory, -@c environment var TEXINPUTS with TeX. -@include rluser.texinfo -@include inc-hist.texinfo - - -@node Formatting Documentation -@appendix Formatting Documentation - -@cindex @value{GDBN} reference card -@cindex reference card -The @value{GDBN} 4 release includes an already-formatted reference card, ready -for printing with PostScript or Ghostscript, in the @file{gdb} -subdirectory of the main source directory@footnote{In -@file{gdb-@value{GDBVN}/gdb/refcard.ps} of the version @value{GDBVN} -release.}. If you can use PostScript or Ghostscript with your printer, -you can print the reference card immediately with @file{refcard.ps}. - -The release also includes the source for the reference card. You -can format it, using @TeX{}, by typing: - -@smallexample -make refcard.dvi -@end smallexample - -The @value{GDBN} reference card is designed to print in @dfn{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 @sc{dvi} output program. - -@cindex documentation - -All the documentation for @value{GDBN} 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 @code{texi2roff}) to typeset the printed version. - -@value{GDBN} includes an already formatted copy of the on-line Info -version of this manual in the @file{gdb} subdirectory. The main Info -file is @file{gdb-@value{GDBVN}/gdb/gdb.info}, and it refers to -subordinate files matching @samp{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 @code{info} subsystem in @sc{gnu} -Emacs or the standalone @code{info} program, available as part of the -@sc{gnu} Texinfo distribution. - -If you want to format these Info files yourself, you need one of the -Info formatting programs, such as @code{texinfo-format-buffer} or -@code{makeinfo}. - -If you have @code{makeinfo} installed, and are in the top level -@value{GDBN} source directory (@file{gdb-@value{GDBVN}}, in the case of -version @value{GDBVN}), you can make the Info file by typing: - -@smallexample -cd gdb -make gdb.info -@end smallexample - -If you want to typeset and print copies of this manual, you need @TeX{}, -a program to print its @sc{dvi} output files, and @file{texinfo.tex}, the -Texinfo definitions file. - -@TeX{} is a typesetting program; it does not print files directly, but -produces output files called @sc{dvi} files. To print a typeset -document, you need a program to print @sc{dvi} files. If your system -has @TeX{} installed, chances are it has such a program. The precise -command to use depends on your system; @kbd{lpr -d} is common; another -(for PostScript devices) is @kbd{dvips}. The @sc{dvi} print command may -require a file name without any extension or a @samp{.dvi} extension. - -@TeX{} also requires a macro definitions file called -@file{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. @file{texinfo.tex} is distributed with GDB -and is located in the @file{gdb-@var{version-number}/texinfo} -directory. - -If you have @TeX{} and a @sc{dvi} printer program installed, you can -typeset and print this manual. First switch to the the @file{gdb} -subdirectory of the main source directory (for example, to -@file{gdb-@value{GDBVN}/gdb}) and type: - -@smallexample -make gdb.dvi -@end smallexample - -Then give @file{gdb.dvi} to your @sc{dvi} printing program. - -@node Installing GDB -@appendix Installing @value{GDBN} -@cindex configuring @value{GDBN} -@cindex installation -@cindex configuring @value{GDBN}, and source tree subdirectories - -@value{GDBN} comes with a @code{configure} script that automates the process -of preparing @value{GDBN} for installation; you can then use @code{make} to -build the @code{gdb} program. -@iftex -@c irrelevant in info file; it's as current as the code it lives with. -@footnote{If you have a more recent version of @value{GDBN} than @value{GDBVN}, -look at the @file{README} file in the sources; we may have improved the -installation procedures since publishing this manual.} -@end iftex - -The @value{GDBN} distribution includes all the source code you need for -@value{GDBN} in a single directory, whose name is usually composed by -appending the version number to @samp{gdb}. - -For example, the @value{GDBN} version @value{GDBVN} distribution is in the -@file{gdb-@value{GDBVN}} directory. That directory contains: - -@table @code -@item gdb-@value{GDBVN}/configure @r{(and supporting files)} -script for configuring @value{GDBN} and all its supporting libraries - -@item gdb-@value{GDBVN}/gdb -the source specific to @value{GDBN} itself - -@item gdb-@value{GDBVN}/bfd -source for the Binary File Descriptor library - -@item gdb-@value{GDBVN}/include -@sc{gnu} include files - -@item gdb-@value{GDBVN}/libiberty -source for the @samp{-liberty} free software library - -@item gdb-@value{GDBVN}/opcodes -source for the library of opcode tables and disassemblers - -@item gdb-@value{GDBVN}/readline -source for the @sc{gnu} command-line interface - -@item gdb-@value{GDBVN}/glob -source for the @sc{gnu} filename pattern-matching subroutine - -@item gdb-@value{GDBVN}/mmalloc -source for the @sc{gnu} memory-mapped malloc package -@end table - -The simplest way to configure and build @value{GDBN} is to run @code{configure} -from the @file{gdb-@var{version-number}} source directory, which in -this example is the @file{gdb-@value{GDBVN}} directory. - -First switch to the @file{gdb-@var{version-number}} source directory -if you are not already in it; then run @code{configure}. Pass the -identifier for the platform on which @value{GDBN} will run as an -argument. - -For example: - -@smallexample -cd gdb-@value{GDBVN} -./configure @var{host} -make -@end smallexample - -@noindent -where @var{host} is an identifier such as @samp{sun4} or -@samp{decstation}, that identifies the platform where @value{GDBN} will run. -(You can often leave off @var{host}; @code{configure} tries to guess the -correct value by examining your system.) - -Running @samp{configure @var{host}} and then running @code{make} builds the -@file{bfd}, @file{readline}, @file{mmalloc}, and @file{libiberty} -libraries, then @code{gdb} itself. The configured source files, and the -binaries, are left in the corresponding source directories. - -@need 750 -@code{configure} is a Bourne-shell (@code{/bin/sh}) script; if your -system does not recognize this automatically when you run a different -shell, you may need to run @code{sh} on it explicitly: - -@smallexample -sh configure @var{host} -@end smallexample - -If you run @code{configure} from a directory that contains source -directories for multiple libraries or programs, such as the -@file{gdb-@value{GDBVN}} source directory for version @value{GDBVN}, @code{configure} -creates configuration files for every directory level underneath (unless -you tell it not to, with the @samp{--norecursion} option). - -You should run the @code{configure} script from the top directory in the -source tree, the @file{gdb-@var{version-number}} directory. If you run -@code{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 @code{configure} from the @file{gdb} subdirectory -of the @file{gdb-@var{version-number}} directory, you will omit the -configuration of @file{bfd}, @file{readline}, and other sibling -directories of the @file{gdb} subdirectory. This leads to build errors -about missing include files such as @file{bfd/bfd.h}. - -You can install @code{@value{GDBP}} anywhere; it has no hardwired paths. -However, you should make sure that the shell on your path (named by -the @samp{SHELL} environment variable) is publicly readable. Remember -that @value{GDBN} uses the shell to start your program---some systems refuse to -let @value{GDBN} debug child processes whose programs are not readable. - -@menu -* Separate Objdir:: Compiling @value{GDBN} in another directory -* Config Names:: Specifying names for hosts and targets -* Configure Options:: Summary of options for configure -@end menu - -@node Separate Objdir -@section Compiling @value{GDBN} in another directory - -If you want to run @value{GDBN} versions for several host or target machines, -you need a different @code{gdb} compiled for each combination of -host and target. @code{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 @code{make} program -handles the @samp{VPATH} feature (@sc{gnu} @code{make} does), running -@code{make} in each of these directories builds the @code{gdb} -program specified there. - -To build @code{gdb} in a separate directory, run @code{configure} -with the @samp{--srcdir} option to specify where to find the source. -(You also need to specify a path to find @code{configure} -itself from your working directory. If the path to @code{configure} -would be the same as the argument to @samp{--srcdir}, you can leave out -the @samp{--srcdir} option; it is assumed.) - -For example, with version @value{GDBVN}, you can build @value{GDBN} in a -separate directory for a Sun 4 like this: - -@smallexample -@group -cd gdb-@value{GDBVN} -mkdir ../gdb-sun4 -cd ../gdb-sun4 -../gdb-@value{GDBVN}/configure sun4 -make -@end group -@end smallexample - -When @code{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 @file{libiberty.a} in the -directory @file{gdb-sun4/libiberty}, and @value{GDBN} itself in -@file{gdb-sun4/gdb}. - -Make sure that your path to the @file{configure} script has just one -instance of @file{gdb} in it. If your path to @file{configure} looks -like @file{../gdb-@value{GDBVN}/gdb/configure}, you are configuring only -one subdirectory of @value{GDBN}, not the whole package. This leads to -build errors about missing include files such as @file{bfd/bfd.h}. - -One popular reason to build several @value{GDBN} configurations in separate -directories is to configure @value{GDBN} for cross-compiling (where -@value{GDBN} runs on one machine---the @dfn{host}---while debugging -programs that run on another machine---the @dfn{target}). -You specify a cross-debugging target by -giving the @samp{--target=@var{target}} option to @code{configure}. - -When you run @code{make} to build a program or library, you must run -it in a configured directory---whatever directory you were in when you -called @code{configure} (or one of its subdirectories). - -The @code{Makefile} that @code{configure} generates in each source -directory also runs recursively. If you type @code{make} in a source -directory such as @file{gdb-@value{GDBVN}} (or in a separate configured -directory configured with @samp{--srcdir=@var{dirname}/gdb-@value{GDBVN}}), 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 @code{make} on them in parallel (for example, -if they are NFS-mounted on each of the hosts); they will not interfere -with each other. - -@node Config Names -@section Specifying names for hosts and targets - -The specifications used for hosts and targets in the @code{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: - -@smallexample -@var{architecture}-@var{vendor}-@var{os} -@end smallexample - -For example, you can use the alias @code{sun4} as a @var{host} argument, -or as the value for @var{target} in a @code{--target=@var{target}} -option. The equivalent full name is @samp{sparc-sun-sunos4}. - -The @code{configure} script accompanying @value{GDBN} does not provide -any query facility to list all supported host and target names or -aliases. @code{configure} calls the Bourne shell script -@code{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: - -@smallexample -% 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 -@end smallexample - -@noindent -@code{config.sub} is also distributed in the @value{GDBN} source -directory (@file{gdb-@value{GDBVN}}, for version @value{GDBVN}). - -@node Configure Options -@section @code{configure} options - -Here is a summary of the @code{configure} options and arguments that -are most often useful for building @value{GDBN}. @code{configure} also has -several other options not listed here. @inforef{What Configure -Does,,configure.info}, for a full explanation of @code{configure}. - -@smallexample -configure @r{[}--help@r{]} - @r{[}--prefix=@var{dir}@r{]} - @r{[}--exec-prefix=@var{dir}@r{]} - @r{[}--srcdir=@var{dirname}@r{]} - @r{[}--norecursion@r{]} @r{[}--rm@r{]} - @r{[}--target=@var{target}@r{]} - @var{host} -@end smallexample - -@noindent -You may introduce options with a single @samp{-} rather than -@samp{--} if you prefer; but you may abbreviate option names if you use -@samp{--}. - -@table @code -@item --help -Display a quick summary of how to invoke @code{configure}. - -@item --prefix=@var{dir} -Configure the source to install programs and files under directory -@file{@var{dir}}. - -@item --exec-prefix=@var{dir} -Configure the source to install programs under directory -@file{@var{dir}}. - -@c avoid splitting the warning from the explanation: -@need 2000 -@item --srcdir=@var{dirname} -@strong{Warning: using this option requires @sc{gnu} @code{make}, or another -@code{make} that implements the @code{VPATH} feature.}@* -Use this option to make configurations in directories separate from the -@value{GDBN} source directories. Among other things, you can use this to -build (or maintain) several configurations simultaneously, in separate -directories. @code{configure} writes configuration specific files in -the current directory, but arranges for them to use the source in the -directory @var{dirname}. @code{configure} creates directories under -the working directory in parallel to the source directories below -@var{dirname}. - -@item --norecursion -Configure only the directory level where @code{configure} is executed; do not -propagate configuration to subdirectories. - -@item --target=@var{target} -Configure @value{GDBN} for cross-debugging programs running on the specified -@var{target}. Without this option, @value{GDBN} is configured to debug -programs that run on the same machine (@var{host}) as @value{GDBN} itself. - -There is no convenient way to generate a list of all available targets. - -@item @var{host} @dots{} -Configure @value{GDBN} to run on the specified @var{host}. - -There is no convenient way to generate a list of all available hosts. -@end table - -There are many other options available as well, but they are generally -needed for special purposes only. - -@node Maintenance Commands -@appendix Maintenance Commands -@cindex maintenance commands -@cindex internal commands - -In addition to commands intended for @value{GDBN} users, @value{GDBN} -includes a number of commands intended for @value{GDBN} developers. -These commands are provided here for reference. - -@table @code -@kindex maint info breakpoints -@item @anchor{maint info breakpoints}maint info breakpoints -Using the same format as @samp{info breakpoints}, display both the -breakpoints you've set explicitly, and those @value{GDBN} is using for -internal purposes. Internal breakpoints are shown with negative -breakpoint numbers. The type column identifies what kind of breakpoint -is shown: - -@table @code -@item breakpoint -Normal, explicitly set breakpoint. - -@item watchpoint -Normal, explicitly set watchpoint. - -@item longjmp -Internal breakpoint, used to handle correctly stepping through -@code{longjmp} calls. - -@item longjmp resume -Internal breakpoint at the target of a @code{longjmp}. - -@item until -Temporary internal breakpoint used by the @value{GDBN} @code{until} command. - -@item finish -Temporary internal breakpoint used by the @value{GDBN} @code{finish} command. - -@item shlib events -Shared library events. - -@end table - -@kindex maint internal-error -@kindex maint internal-warning -@item maint internal-error -@itemx maint internal-warning -Cause @value{GDBN} to call the internal function @code{internal_error} -or @code{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 @value{GDBN} or create a core file of the current -@value{GDBN} session. - -@smallexample -(gdb) @kbd{maint internal-error testing, 1, 2} -@dots{}/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) @kbd{n} -Create a core file? (y or n) @kbd{n} -(gdb) -@end smallexample - -Takes an optional parameter that is used as the text of the error or -warning message. - -@kindex maint print dummy-frames -@item maint print dummy-frames - -Prints the contents of @value{GDBN}'s internal dummy-frame stack. - -@smallexample -(gdb) @kbd{b add} -@dots{} -(gdb) @kbd{print add(2,3)} -Breakpoint 2, add (a=2, b=3) at @dots{} -58 return (a + b); -The program being debugged stopped while in a function called from GDB. -@dots{} -(gdb) @kbd{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) -@end smallexample - -Takes an optional file parameter. - -@kindex maint print registers -@kindex maint print raw-registers -@kindex maint print cooked-registers -@kindex maint print register-groups -@item maint print registers -@itemx maint print raw-registers -@itemx maint print cooked-registers -@itemx maint print register-groups -Print @value{GDBN}'s internal register data structures. - -The command @code{maint print raw-registers} includes the contents of -the raw register cache; the command @code{maint print cooked-registers} -includes the (cooked) value of all registers; and the command -@code{maint print register-groups} includes the groups that each -register is a member of. @xref{Registers,, Registers, gdbint, -@value{GDBN} Internals}. - -Takes an optional file parameter. - -@kindex maint print reggroups -@item maint print reggroups -Print @value{GDBN}'s internal register group data structures. - -Takes an optional file parameter. - -@smallexample -(gdb) @kbd{maint print reggroups} - Group Type - general user - float user - all user - vector user - system user - save internal - restore internal -@end smallexample - -@kindex maint set profile -@kindex maint show profile -@cindex profiling GDB -@item maint set profile -@itemx maint show profile -Control profiling of @value{GDBN}. - -Profiling will be disabled until you use the @samp{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 @value{GDBN}, the results will be written to a log file. Remember that -if you use profiling, @value{GDBN} will overwrite the profiling log file -(often called @file{gmon.out}). If you have a record of important profiling -data in a @file{gmon.out} file, be sure to move it to a safe location. - -Configuring with @samp{--enable-profiling} arranges for @value{GDBN} to be -compiled with the @samp{-pg} compiler option. - -@end table - - -@node Remote Protocol -@appendix @value{GDBN} Remote Serial Protocol - -@menu -* Overview:: -* Packets:: -* Stop Reply Packets:: -* General Query Packets:: -* Register Packet Format:: -* Examples:: -* File-I/O remote protocol extension:: -@end menu - -@node Overview -@section 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 @value{GDBN}. - -In the examples below, @samp{->} and @samp{<-} are used to indicate -transmitted and received data respectfully. - -@cindex protocol, @value{GDBN} remote serial -@cindex serial protocol, @value{GDBN} remote -@cindex remote serial protocol -All @value{GDBN} commands and responses (other than acknowledgments) are -sent as a @var{packet}. A @var{packet} is introduced with the character -@samp{$}, the actual @var{packet-data}, and the terminating character -@samp{#} followed by a two-digit @var{checksum}: - -@smallexample -@code{$}@var{packet-data}@code{#}@var{checksum} -@end smallexample -@noindent - -@cindex checksum, for @value{GDBN} remote -@noindent -The two-digit @var{checksum} is computed as the modulo 256 sum of all -characters between the leading @samp{$} and the trailing @samp{#} (an -eight bit unsigned checksum). - -Implementors should note that prior to @value{GDBN} 5.0 the protocol -specification also included an optional two-digit @var{sequence-id}: - -@smallexample -@code{$}@var{sequence-id}@code{:}@var{packet-data}@code{#}@var{checksum} -@end smallexample - -@cindex sequence-id, for @value{GDBN} remote -@noindent -That @var{sequence-id} was appended to the acknowledgment. @value{GDBN} -has never output @var{sequence-id}s. Stubs that handle packets added -since @value{GDBN} 5.0 must not accept @var{sequence-id}. - -@cindex acknowledgment, for @value{GDBN} remote -When either the host or the target machine receives a packet, the first -response expected is an acknowledgment: either @samp{+} (to indicate -the package was received correctly) or @samp{-} (to request -retransmission): - -@smallexample --> @code{$}@var{packet-data}@code{#}@var{checksum} -<- @code{+} -@end smallexample -@noindent - -The host (@value{GDBN}) sends @var{command}s, and the target (the -debugging stub incorporated in your program) sends a @var{response}. In -the case of step and continue @var{command}s, the response is only sent -when the operation has completed (the target has again stopped). - -@var{packet-data} consists of a sequence of characters with the -exception of @samp{#} and @samp{$} (see @samp{X} packet for additional -exceptions). - -Fields within the packet should be separated using @samp{,} @samp{;} or -@cindex remote protocol, field separator -@samp{:}. Except where otherwise noted all numbers are represented in -@sc{hex} with leading zeros suppressed. - -Implementors should note that prior to @value{GDBN} 5.0, the character -@samp{:} could not appear as the third character in a packet (as it -would potentially conflict with the @var{sequence-id}). - -Response @var{data} can be run-length encoded to save space. A @samp{*} -means that the next character is an @sc{ascii} encoding giving a repeat count -which stands for that many repetitions of the character preceding the -@samp{*}. The encoding is @code{n+29}, yielding a printable character -where @code{n >=3} (which is where rle starts to win). The printable -characters @samp{$}, @samp{#}, @samp{+} and @samp{-} or with a numeric -value greater than 126 should not be used. - -So: -@smallexample -"@code{0* }" -@end smallexample -@noindent -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 @var{command} not supported by the stub, an empty response -(@samp{$#00}) should be returned. That way it is possible to extend the -protocol. A newer @value{GDBN} can tell if a packet is supported based -on that response. - -A stub is required to support the @samp{g}, @samp{G}, @samp{m}, @samp{M}, -@samp{c}, and @samp{s} @var{command}s. All other @var{command}s are -optional. - -@node Packets -@section Packets - -The following table provides a complete list of all currently defined -@var{command}s and their corresponding response @var{data}. - -@table @r - -@item @code{!} --- extended mode -@cindex @code{!} packet - -Enable extended mode. In extended mode, the remote server is made -persistent. The @samp{R} packet is used to restart the program being -debugged. - -Reply: -@table @samp -@item OK -The remote target both supports and has enabled extended mode. -@end table - -@item @code{?} --- last signal -@cindex @code{?} packet - -Indicate the reason the target halted. The reply is the same as for -step and continue. - -Reply: -@xref{Stop Reply Packets}, for the reply specifications. - -@item @code{a} --- reserved - -Reserved for future use. - -@item @code{A}@var{arglen}@code{,}@var{argnum}@code{,}@var{arg}@code{,@dots{}} --- set program arguments @strong{(reserved)} -@cindex @code{A} packet - -Initialized @samp{argv[]} array passed into program. @var{arglen} -specifies the number of bytes in the hex encoded byte stream @var{arg}. -See @code{gdbserver} for more details. - -Reply: -@table @samp -@item OK -@item E@var{NN} -@end table - -@item @code{b}@var{baud} --- set baud @strong{(deprecated)} -@cindex @code{b} packet - -Change the serial line speed to @var{baud}. - -JTC: @emph{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: @emph{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.} - -@item @code{B}@var{addr},@var{mode} --- set breakpoint @strong{(deprecated)} -@cindex @code{B} packet - -Set (@var{mode} is @samp{S}) or clear (@var{mode} is @samp{C}) a -breakpoint at @var{addr}. - -This packet has been replaced by the @samp{Z} and @samp{z} packets -(@pxref{insert breakpoint or watchpoint packet}). - -@item @code{c}@var{addr} --- continue -@cindex @code{c} packet - -@var{addr} is address to resume. If @var{addr} is omitted, resume at -current address. - -Reply: -@xref{Stop Reply Packets}, for the reply specifications. - -@item @code{C}@var{sig}@code{;}@var{addr} --- continue with signal -@cindex @code{C} packet - -Continue with signal @var{sig} (hex signal number). If -@code{;}@var{addr} is omitted, resume at same address. - -Reply: -@xref{Stop Reply Packets}, for the reply specifications. - -@item @code{d} --- toggle debug @strong{(deprecated)} -@cindex @code{d} packet - -Toggle debug flag. - -@item @code{D} --- detach -@cindex @code{D} packet - -Detach @value{GDBN} from the remote system. Sent to the remote target -before @value{GDBN} disconnects via the @code{detach} command. - -Reply: -@table @samp -@item @emph{no response} -@value{GDBN} does not check for any response after sending this packet. -@end table - -@item @code{e} --- reserved - -Reserved for future use. - -@item @code{E} --- reserved - -Reserved for future use. - -@item @code{f} --- reserved - -Reserved for future use. - -@item @code{F}@var{RC}@code{,}@var{EE}@code{,}@var{CF}@code{;}@var{XX} --- Reply to target's F packet. -@cindex @code{F} packet - -This packet is send by @value{GDBN} as reply to a @code{F} request packet -sent by the target. This is part of the File-I/O protocol extension. -@xref{File-I/O remote protocol extension}, for the specification. - -@item @code{g} --- read registers -@anchor{read registers packet} -@cindex @code{g} packet - -Read general registers. - -Reply: -@table @samp -@item @var{XX@dots{}} -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 @samp{g} @var{packet} are -determined by the @value{GDBN} internal macros -@var{DEPRECATED_REGISTER_RAW_SIZE} and @var{REGISTER_NAME} macros. The -specification of several standard @code{g} packets is specified below. -@item E@var{NN} -for an error. -@end table - -@item @code{G}@var{XX@dots{}} --- write regs -@cindex @code{G} packet - -@xref{read registers packet}, for a description of the @var{XX@dots{}} -data. - -Reply: -@table @samp -@item OK -for success -@item E@var{NN} -for an error -@end table - -@item @code{h} --- reserved - -Reserved for future use. - -@item @code{H}@var{c}@var{t@dots{}} --- set thread -@cindex @code{H} packet - -Set thread for subsequent operations (@samp{m}, @samp{M}, @samp{g}, -@samp{G}, et.al.). @var{c} depends on the operation to be performed: it -should be @samp{c} for step and continue operations, @samp{g} for other -operations. The thread designator @var{t@dots{}} may be -1, meaning all -the threads, a thread number, or zero which means pick any thread. - -Reply: -@table @samp -@item OK -for success -@item E@var{NN} -for an error -@end table - -@c FIXME: JTC: -@c 'H': How restrictive (or permissive) is the thread model. If a -@c thread is selected and stopped, are other threads allowed -@c to continue to execute? As I mentioned above, I think the -@c semantics of each command when a thread is selected must be -@c described. For example: -@c -@c 'g': If the stub supports threads and a specific thread is -@c selected, returns the register block from that thread; -@c otherwise returns current registers. -@c -@c 'G' If the stub supports threads and a specific thread is -@c selected, sets the registers of the register block of -@c that thread; otherwise sets current registers. - -@item @code{i}@var{addr}@code{,}@var{nnn} --- cycle step @strong{(draft)} -@anchor{cycle step packet} -@cindex @code{i} packet - -Step the remote target by a single clock cycle. If @code{,}@var{nnn} is -present, cycle step @var{nnn} cycles. If @var{addr} is present, cycle -step starting at that address. - -@item @code{I} --- signal then cycle step @strong{(reserved)} -@cindex @code{I} packet - -@xref{step with signal packet}. @xref{cycle step packet}. - -@item @code{j} --- reserved - -Reserved for future use. - -@item @code{J} --- reserved - -Reserved for future use. - -@item @code{k} --- kill request -@cindex @code{k} packet - -FIXME: @emph{There is no description of how to operate when a specific -thread context has been selected (i.e.@: does 'k' kill only that -thread?)}. - -@item @code{K} --- reserved - -Reserved for future use. - -@item @code{l} --- reserved - -Reserved for future use. - -@item @code{L} --- reserved - -Reserved for future use. - -@item @code{m}@var{addr}@code{,}@var{length} --- read memory -@cindex @code{m} packet - -Read @var{length} bytes of memory starting at address @var{addr}. -Neither @value{GDBN} nor the stub assume that sized memory transfers are -assumed using word aligned accesses. FIXME: @emph{A word aligned memory -transfer mechanism is needed.} - -Reply: -@table @samp -@item @var{XX@dots{}} -@var{XX@dots{}} is mem contents. Can be fewer bytes than requested if able -to read only part of the data. Neither @value{GDBN} nor the stub assume -that sized memory transfers are assumed using word aligned -accesses. FIXME: @emph{A word aligned memory transfer mechanism is -needed.} -@item E@var{NN} -@var{NN} is errno -@end table - -@item @code{M}@var{addr},@var{length}@code{:}@var{XX@dots{}} --- write mem -@cindex @code{M} packet - -Write @var{length} bytes of memory starting at address @var{addr}. -@var{XX@dots{}} is the data. - -Reply: -@table @samp -@item OK -for success -@item E@var{NN} -for an error (this includes the case where only part of the data was -written). -@end table - -@item @code{n} --- reserved - -Reserved for future use. - -@item @code{N} --- reserved - -Reserved for future use. - -@item @code{o} --- reserved - -Reserved for future use. - -@item @code{O} --- reserved - -Reserved for future use. - -@item @code{p}@var{n@dots{}} --- read reg @strong{(reserved)} -@cindex @code{p} packet - -@xref{write register packet}. - -Reply: -@table @samp -@item @var{r@dots{}.} -The hex encoded value of the register in target byte order. -@end table - -@item @code{P}@var{n@dots{}}@code{=}@var{r@dots{}} --- write register -@anchor{write register packet} -@cindex @code{P} packet - -Write register @var{n@dots{}} with value @var{r@dots{}}, which contains two hex -digits for each byte in the register (target byte order). - -Reply: -@table @samp -@item OK -for success -@item E@var{NN} -for an error -@end table - -@item @code{q}@var{query} --- general query -@anchor{general query packet} -@cindex @code{q} packet - -Request info about @var{query}. In general @value{GDBN} queries have a -leading upper case letter. Custom vendor queries should use a company -prefix (in lower case) ex: @samp{qfsf.var}. @var{query} may optionally -be followed by a @samp{,} or @samp{;} separated list. Stubs must ensure -that they match the full @var{query} name. - -Reply: -@table @samp -@item @var{XX@dots{}} -Hex encoded data from query. The reply can not be empty. -@item E@var{NN} -error reply -@item -Indicating an unrecognized @var{query}. -@end table - -@item @code{Q}@var{var}@code{=}@var{val} --- general set -@cindex @code{Q} packet - -Set value of @var{var} to @var{val}. - -@xref{general query packet}, for a discussion of naming conventions. - -@item @code{r} --- reset @strong{(deprecated)} -@cindex @code{r} packet - -Reset the entire system. - -@item @code{R}@var{XX} --- remote restart -@cindex @code{R} packet - -Restart the program being debugged. @var{XX}, while needed, is ignored. -This packet is only available in extended mode. - -Reply: -@table @samp -@item @emph{no reply} -The @samp{R} packet has no reply. -@end table - -@item @code{s}@var{addr} --- step -@cindex @code{s} packet - -@var{addr} is address to resume. If @var{addr} is omitted, resume at -same address. - -Reply: -@xref{Stop Reply Packets}, for the reply specifications. - -@item @code{S}@var{sig}@code{;}@var{addr} --- step with signal -@anchor{step with signal packet} -@cindex @code{S} packet - -Like @samp{C} but step not continue. - -Reply: -@xref{Stop Reply Packets}, for the reply specifications. - -@item @code{t}@var{addr}@code{:}@var{PP}@code{,}@var{MM} --- search -@cindex @code{t} packet - -Search backwards starting at address @var{addr} for a match with pattern -@var{PP} and mask @var{MM}. @var{PP} and @var{MM} are 4 bytes. -@var{addr} must be at least 3 digits. - -@item @code{T}@var{XX} --- thread alive -@cindex @code{T} packet - -Find out if the thread XX is alive. - -Reply: -@table @samp -@item OK -thread is still alive -@item E@var{NN} -thread is dead -@end table - -@item @code{u} --- reserved - -Reserved for future use. - -@item @code{U} --- reserved - -Reserved for future use. - -@item @code{v} --- verbose packet prefix - -Packets starting with @code{v} are identified by a multi-letter name, -up to the first @code{;} or @code{?} (or the end of the packet). - -@item @code{vCont}[;@var{action}[@code{:}@var{tid}]]... --- extended resume -@cindex @code{vCont} packet - -Resume the inferior. Different actions may be specified for each thread. -If an action is specified with no @var{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: - -@table @code -@item c -Continue. -@item C@var{sig} -Continue with signal @var{sig}. @var{sig} should be two hex digits. -@item s -Step. -@item S@var{sig} -Step with signal @var{sig}. @var{sig} should be two hex digits. -@end table - -The optional @var{addr} argument normally associated with these packets is -not supported in @code{vCont}. - -Reply: -@xref{Stop Reply Packets}, for the reply specifications. - -@item @code{vCont?} --- extended resume query -@cindex @code{vCont?} packet - -Query support for the @code{vCont} packet. - -Reply: -@table @samp -@item @code{vCont}[;@var{action}]... -The @code{vCont} packet is supported. Each @var{action} is a supported -command in the @code{vCont} packet. -@item -The @code{vCont} packet is not supported. -@end table - -@item @code{V} --- reserved - -Reserved for future use. - -@item @code{w} --- reserved - -Reserved for future use. - -@item @code{W} --- reserved - -Reserved for future use. - -@item @code{x} --- reserved - -Reserved for future use. - -@item @code{X}@var{addr}@code{,}@var{length}@var{:}@var{XX@dots{}} --- write mem (binary) -@cindex @code{X} packet - -@var{addr} is address, @var{length} is number of bytes, @var{XX@dots{}} -is binary data. The characters @code{$}, @code{#}, and @code{0x7d} are -escaped using @code{0x7d}. - -Reply: -@table @samp -@item OK -for success -@item E@var{NN} -for an error -@end table - -@item @code{y} --- reserved - -Reserved for future use. - -@item @code{Y} reserved - -Reserved for future use. - -@item @code{z}@var{type}@code{,}@var{addr}@code{,}@var{length} --- remove breakpoint or watchpoint @strong{(draft)} -@itemx @code{Z}@var{type}@code{,}@var{addr}@code{,}@var{length} --- insert breakpoint or watchpoint @strong{(draft)} -@anchor{insert breakpoint or watchpoint packet} -@cindex @code{z} packet -@cindex @code{Z} packets - -Insert (@code{Z}) or remove (@code{z}) a @var{type} breakpoint or -watchpoint starting at address @var{address} and covering the next -@var{length} bytes. - -Each breakpoint and watchpoint packet @var{type} is documented -separately. - -@emph{Implementation notes: A remote target shall return an empty string -for an unrecognized breakpoint or watchpoint packet @var{type}. A -remote target shall support either both or neither of a given -@code{Z}@var{type}@dots{} and @code{z}@var{type}@dots{} packet pair. To -avoid potential problems with duplicate packets, the operations should -be implemented in an idempotent way.} - -@item @code{z}@code{0}@code{,}@var{addr}@code{,}@var{length} --- remove memory breakpoint @strong{(draft)} -@item @code{Z}@code{0}@code{,}@var{addr}@code{,}@var{length} --- insert memory breakpoint @strong{(draft)} -@cindex @code{z0} packet -@cindex @code{Z0} packet - -Insert (@code{Z0}) or remove (@code{z0}) a memory breakpoint at address -@code{addr} of size @code{length}. - -A memory breakpoint is implemented by replacing the instruction at -@var{addr} with a software breakpoint or trap instruction. The -@code{length} is used by targets that indicates the size of the -breakpoint (in bytes) that should be inserted (e.g., the @sc{arm} and -@sc{mips} can insert either a 2 or 4 byte breakpoint). - -@emph{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: -@table @samp -@item OK -success -@item -not supported -@item E@var{NN} -for an error -@end table - -@item @code{z}@code{1}@code{,}@var{addr}@code{,}@var{length} --- remove hardware breakpoint @strong{(draft)} -@item @code{Z}@code{1}@code{,}@var{addr}@code{,}@var{length} --- insert hardware breakpoint @strong{(draft)} -@cindex @code{z1} packet -@cindex @code{Z1} packet - -Insert (@code{Z1}) or remove (@code{z1}) a hardware breakpoint at -address @code{addr} of size @code{length}. - -A hardware breakpoint is implemented using a mechanism that is not -dependant on being able to modify the target's memory. - -@emph{Implementation note: A hardware breakpoint is not affected by code -movement.} - -Reply: -@table @samp -@item OK -success -@item -not supported -@item E@var{NN} -for an error -@end table - -@item @code{z}@code{2}@code{,}@var{addr}@code{,}@var{length} --- remove write watchpoint @strong{(draft)} -@item @code{Z}@code{2}@code{,}@var{addr}@code{,}@var{length} --- insert write watchpoint @strong{(draft)} -@cindex @code{z2} packet -@cindex @code{Z2} packet - -Insert (@code{Z2}) or remove (@code{z2}) a write watchpoint. - -Reply: -@table @samp -@item OK -success -@item -not supported -@item E@var{NN} -for an error -@end table - -@item @code{z}@code{3}@code{,}@var{addr}@code{,}@var{length} --- remove read watchpoint @strong{(draft)} -@item @code{Z}@code{3}@code{,}@var{addr}@code{,}@var{length} --- insert read watchpoint @strong{(draft)} -@cindex @code{z3} packet -@cindex @code{Z3} packet - -Insert (@code{Z3}) or remove (@code{z3}) a read watchpoint. - -Reply: -@table @samp -@item OK -success -@item -not supported -@item E@var{NN} -for an error -@end table - -@item @code{z}@code{4}@code{,}@var{addr}@code{,}@var{length} --- remove access watchpoint @strong{(draft)} -@item @code{Z}@code{4}@code{,}@var{addr}@code{,}@var{length} --- insert access watchpoint @strong{(draft)} -@cindex @code{z4} packet -@cindex @code{Z4} packet - -Insert (@code{Z4}) or remove (@code{z4}) an access watchpoint. - -Reply: -@table @samp -@item OK -success -@item -not supported -@item E@var{NN} -for an error -@end table - -@end table - -@node Stop Reply Packets -@section Stop Reply Packets -@cindex stop reply packets - -The @samp{C}, @samp{c}, @samp{S}, @samp{s} and @samp{?} packets can -receive any of the below as a reply. In the case of the @samp{C}, -@samp{c}, @samp{S} and @samp{s} packets, that reply is only returned -when the target halts. In the below the exact meaning of @samp{signal -number} is poorly defined. In general one of the UNIX signal numbering -conventions is used. - -@table @samp - -@item S@var{AA} -@var{AA} is the signal number - -@item @code{T}@var{AA}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;} -@cindex @code{T} packet reply - -@var{AA} = two hex digit signal number; @var{n...} = register number -(hex), @var{r...} = target byte ordered register contents, size defined -by @code{DEPRECATED_REGISTER_RAW_SIZE}; @var{n...} = @samp{thread}, -@var{r...} = thread process ID, this is a hex integer; @var{n...} = -(@samp{watch} | @samp{rwatch} | @samp{awatch}, @var{r...} = data -address, this is a hex integer; @var{n...} = other string not starting -with valid hex digit. @value{GDBN} should ignore this @var{n...}, -@var{r...} pair and go on to the next. This way we can extend the -protocol. - -@item W@var{AA} - -The process exited, and @var{AA} is the exit status. This is only -applicable to certain targets. - -@item X@var{AA} - -The process terminated with signal @var{AA}. - -@item O@var{XX@dots{}} - -@var{XX@dots{}} is hex encoding of @sc{ascii} data. This can happen at -any time while the program is running and the debugger should continue -to wait for @samp{W}, @samp{T}, etc. - -@item F@var{call-id}@code{,}@var{parameter@dots{}} - -@var{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 @value{GDBN}. -@xref{File-I/O remote protocol extension}, for a list of implemented -system calls. - -@var{parameter@dots{}} is a list of parameters as defined for this very -system call. - -The target replies with this packet when it expects @value{GDBN} to call -a host system call on behalf of the target. @value{GDBN} replies with -an appropriate @code{F} packet and keeps up waiting for the next reply -packet from the target. The latest @samp{C}, @samp{c}, @samp{S} or -@samp{s} action is expected to be continued. -@xref{File-I/O remote protocol extension}, for more details. - -@end table - -@node General Query Packets -@section General Query Packets - -The following set and query packets have already been defined. - -@table @r - -@item @code{q}@code{C} --- current thread - -Return the current thread id. - -Reply: -@table @samp -@item @code{QC}@var{pid} -Where @var{pid} is a HEX encoded 16 bit process id. -@item * -Any other reply implies the old pid. -@end table - -@item @code{q}@code{fThreadInfo} -- all thread ids - -@code{q}@code{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 @code{qf}@code{ThreadInfo} query; subsequent queries in the -sequence will be the @code{qs}@code{ThreadInfo} query. - -NOTE: replaces the @code{qL} query (see below). - -Reply: -@table @samp -@item @code{m}@var{id} -A single thread id -@item @code{m}@var{id},@var{id}@dots{} -a comma-separated list of thread ids -@item @code{l} -(lower case 'el') denotes end of list. -@end table - -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. @value{GDBN} -will respond to each reply with a request for more thread ids (using the -@code{qs} form of the query), until the target responds with @code{l} -(lower-case el, for @code{'last'}). - -@item @code{q}@code{ThreadExtraInfo}@code{,}@var{id} --- extra thread info - -Where @var{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 -@value{GDBN} to tell the user about the thread. The string is displayed -in @value{GDBN}'s @samp{info threads} display. Some examples of -possible thread extra info strings are ``Runnable'', or ``Blocked on -Mutex''. - -Reply: -@table @samp -@item @var{XX@dots{}} -Where @var{XX@dots{}} is a hex encoding of @sc{ascii} data, comprising -the printable string containing the extra information about the thread's -attributes. -@end table - -@item @code{q}@code{L}@var{startflag}@var{threadcount}@var{nextthread} --- query @var{LIST} or @var{threadLIST} @strong{(deprecated)} - -Obtain thread information from RTOS. Where: @var{startflag} (one hex -digit) is one to indicate the first query and zero to indicate a -subsequent query; @var{threadcount} (two hex digits) is the maximum -number of threads the response packet can contain; and @var{nextthread} -(eight hex digits), for subsequent queries (@var{startflag} is zero), is -returned in the response as @var{argthread}. - -NOTE: this query is replaced by the @code{q}@code{fThreadInfo} query -(see above). - -Reply: -@table @samp -@item @code{q}@code{M}@var{count}@var{done}@var{argthread}@var{thread@dots{}} -Where: @var{count} (two hex digits) is the number of threads being -returned; @var{done} (one hex digit) is zero to indicate more threads -and one indicates no further threads; @var{argthreadid} (eight hex -digits) is @var{nextthread} from the request packet; @var{thread@dots{}} -is a sequence of thread IDs from the target. @var{threadid} (eight hex -digits). See @code{remote.c:parse_threadlist_response()}. -@end table - -@item @code{q}@code{CRC:}@var{addr}@code{,}@var{length} --- compute CRC of memory block - -Reply: -@table @samp -@item @code{E}@var{NN} -An error (such as memory fault) -@item @code{C}@var{CRC32} -A 32 bit cyclic redundancy check of the specified memory region. -@end table - -@item @code{q}@code{Offsets} --- query sect offs - -Get section offsets that the target used when re-locating the downloaded -image. @emph{Note: while a @code{Bss} offset is included in the -response, @value{GDBN} ignores this and instead applies the @code{Data} -offset to the @code{Bss} section.} - -Reply: -@table @samp -@item @code{Text=}@var{xxx}@code{;Data=}@var{yyy}@code{;Bss=}@var{zzz} -@end table - -@item @code{q}@code{P}@var{mode}@var{threadid} --- thread info request - -Returns information on @var{threadid}. Where: @var{mode} is a hex -encoded 32 bit mode; @var{threadid} is a hex encoded 64 bit thread ID. - -Reply: -@table @samp -@item * -@end table - -See @code{remote.c:remote_unpack_thread_info_response()}. - -@item @code{q}@code{Rcmd,}@var{command} --- remote command - -@var{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 @code{O}@var{output} console output packets. -@emph{Implementors should note that providing access to a stubs's -interpreter may have security implications}. - -Reply: -@table @samp -@item OK -A command response with no output. -@item @var{OUTPUT} -A command response with the hex encoded output string @var{OUTPUT}. -@item @code{E}@var{NN} -Indicate a badly formed request. -@item @samp{} -When @samp{q}@samp{Rcmd} is not recognized. -@end table - -@item @code{qSymbol::} --- symbol lookup - -Notify the target that @value{GDBN} is prepared to serve symbol lookup -requests. Accept requests from the target for the values of symbols. - -Reply: -@table @samp -@item @code{OK} -The target does not need to look up any (more) symbols. -@item @code{qSymbol:}@var{sym_name} -The target requests the value of symbol @var{sym_name} (hex encoded). -@value{GDBN} may provide the value by using the -@code{qSymbol:}@var{sym_value}:@var{sym_name} message, described below. -@end table - -@item @code{qSymbol:}@var{sym_value}:@var{sym_name} --- symbol value - -Set the value of @var{sym_name} to @var{sym_value}. - -@var{sym_name} (hex encoded) is the name of a symbol whose value the -target has previously requested. - -@var{sym_value} (hex) is the value for symbol @var{sym_name}. If -@value{GDBN} cannot supply a value for @var{sym_name}, then this field -will be empty. - -Reply: -@table @samp -@item @code{OK} -The target does not need to look up any (more) symbols. -@item @code{qSymbol:}@var{sym_name} -The target requests the value of a new symbol @var{sym_name} (hex -encoded). @value{GDBN} will continue to supply the values of symbols -(if available), until the target ceases to request them. -@end table - -@item @code{qPart}:@var{object}:@code{read}:@var{annex}:@var{offset},@var{length} --- read special data - -Read uninterpreted bytes from the target's special data area -identified by the keyword @code{object}. -Request @var{length} bytes starting at @var{offset} bytes into the data. -The content and encoding of @var{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 @samp{@code{qPart}:@var{object}:@code{read}:@dots{}} -requests use the same reply formats, listed below. - -@table @asis -@item @code{qPart}:@code{auxv}:@code{read}::@var{offset},@var{length} -Access the target's @dfn{auxiliary vector}. @xref{Auxiliary Vector}. -Note @var{annex} must be empty. -@end table - -Reply: -@table @asis -@item @code{OK} -The @var{offset} in the request is at the end of the data. -There is no more data to be read. - -@item @var{XX@dots{}} -Hex encoded data bytes read. -This may be fewer bytes than the @var{length} in the request. - -@item @code{E00} -The request was malformed, or @var{annex} was invalid. - -@item @code{E}@var{nn} -The offset was invalid, or there was an error encountered reading the data. -@var{nn} is a hex-encoded @code{errno} value. - -@item @code{""} (empty) -An empty reply indicates the @var{object} or @var{annex} string was not -recognized by the stub. -@end table - -@item @code{qPart}:@var{object}:@code{write}:@var{annex}:@var{offset}:@var{data@dots{}} - -Write uninterpreted bytes into the target's special data area -identified by the keyword @code{object}, -starting at @var{offset} bytes into the data. -@var{data@dots{}} is the hex-encoded data to be written. -The content and encoding of @var{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: -@table @asis -@item @var{nn} -@var{nn} (hex encoded) is the number of bytes written. -This may be fewer bytes than supplied in the request. - -@item @code{E00} -The request was malformed, or @var{annex} was invalid. - -@item @code{E}@var{nn} -The offset was invalid, or there was an error encountered writing the data. -@var{nn} is a hex-encoded @code{errno} value. - -@item @code{""} (empty) -An empty reply indicates the @var{object} or @var{annex} string was not -recognized by the stub, or that the object does not support writing. -@end table - -@item @code{qPart}:@var{object}:@var{operation}:@dots{} -Requests of this form may be added in the future. When a stub does -not recognize the @var{object} keyword, or its support for -@var{object} does not recognize the @var{operation} keyword, -the stub must respond with an empty packet. -@end table - -@node Register Packet Format -@section Register Packet Format - -The following @samp{g}/@samp{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. - -@table @r - -@item 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. - -@item MIPS64 - -All registers are transfered as sixty-four bit quantities (including -thirty-two bit registers such as @code{sr}). The ordering is the same -as @code{MIPS32}. - -@end table - -@node Examples -@section Examples - -Example sequence of a target being re-started. Notice how the restart -does not get any direct output: - -@smallexample --> @code{R00} -<- @code{+} -@emph{target restarts} --> @code{?} -<- @code{+} -<- @code{T001:1234123412341234} --> @code{+} -@end smallexample - -Example sequence of a target being stepped by a single instruction: - -@smallexample --> @code{G1445@dots{}} -<- @code{+} --> @code{s} -<- @code{+} -@emph{time passes} -<- @code{T001:1234123412341234} --> @code{+} --> @code{g} -<- @code{+} -<- @code{1455@dots{}} --> @code{+} -@end smallexample - -@node File-I/O remote protocol extension -@section File-I/O remote protocol extension -@cindex 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:: -@end menu - -@node File-I/O Overview -@subsection File-I/O Overview -@cindex 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, -@value{GDBN} and the target's @value{GDBN} 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 @samp{C}, @samp{c}, @samp{S} or @samp{s} -packets. While @value{GDBN} 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 @samp{C}, @samp{c}, @samp{S} or @samp{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 @value{GDBN} is required. - -@smallexample -(gdb) continue - <- target requests 'system call X' - target is stopped, @value{GDBN} executes system call - -> GDB returns result - ... target continues, GDB returns to wait for the target - <- target hits breakpoint and sends a Txx packet -@end smallexample - -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. - -@node Protocol basics -@subsection Protocol basics -@cindex protocol basics, file-i/o - -The File-I/O protocol uses the @code{F} packet, as request as well -as as reply packet. Since a File-I/O system call can only occur when -@value{GDBN} is waiting for the continuing or stepping target, the -File-I/O request is a reply that @value{GDBN} has to expect as a result -of a former @samp{C}, @samp{c}, @samp{S} or @samp{s} packet. -This @code{F} packet contains all information needed to allow @value{GDBN} -to call the appropriate host system call: - -@itemize @bullet -@item -A unique identifier for the requested system call. - -@item -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. - -@end itemize - -At that point @value{GDBN} has to perform the following actions. - -@itemize @bullet -@item -If parameter pointer values are given, which point to data needed as input -to a system call, @value{GDBN} requests this data from the target with a -standard @code{m} packet request. This additional communication has to be -expected by the target implementation and is handled as any other @code{m} -packet. - -@item -@value{GDBN} translates all value from protocol representation to host -representation as needed. Datatypes are coerced into the host types. - -@item -@value{GDBN} calls the system call - -@item -It then coerces datatypes back to protocol representation. - -@item -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 @code{M} or @code{X} packet. This packet has to be expected -by the target implementation and is handled as any other @code{M} or @code{X} -packet. - -@end itemize - -Eventually @value{GDBN} replies with another @code{F} packet which contains all -necessary information for the target to continue. This at least contains - -@itemize @bullet -@item -Return value. - -@item -@code{errno}, if has been changed by the system call. - -@item -``Ctrl-C'' flag. - -@end itemize - -After having done the needed type and value coercion, the target continues -the latest continue or step action. - -@node The F request packet -@subsection The @code{F} request packet -@cindex file-i/o request packet -@cindex @code{F} request packet - -The @code{F} request packet has the following format: - -@table @samp - -@smallexample -@code{F}@var{call-id}@code{,}@var{parameter@dots{}} -@end smallexample - -@var{call-id} is the identifier to indicate the host system call to be called. -This is just the name of the function. - -@var{parameter@dots{}} are the parameters to the system call. - -@end table - -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. - -@node The F reply packet -@subsection The @code{F} reply packet -@cindex file-i/o reply packet -@cindex @code{F} reply packet - -The @code{F} reply packet has the following format: - -@table @samp - -@smallexample -@code{F}@var{retcode}@code{,}@var{errno}@code{,}@var{Ctrl-C flag}@code{;}@var{call specific attachment} -@end smallexample - -@var{retcode} is the return code of the system call as hexadecimal value. - -@var{errno} is the errno set by the call, in protocol specific representation. -This parameter can be omitted if the call was successful. - -@var{Ctrl-C flag} is only send if the user requested a break. In this -case, @var{errno} must be send as well, even if the call was successful. -The @var{Ctrl-C flag} itself consists of the character 'C': - -@smallexample -F0,0,C -@end smallexample - -@noindent -or, if the call was interupted before the host call has been performed: - -@smallexample -F-1,4,C -@end smallexample - -@noindent -assuming 4 is the protocol specific representation of @code{EINTR}. - -@end table - -@node Memory transfer -@subsection Memory transfer -@cindex memory transfer, in file-i/o protocol - -Structured data which is transferred using a memory read or write as e.g.@: -a @code{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 @code{F} packet is sent resp.@: by @value{GDBN} before -it transfers memory to the target. Transferred pointers to structured -data should point to the already coerced data at any time. - -@node The Ctrl-C message -@subsection The Ctrl-C message -@cindex ctrl-c message, in file-i/o protocol - -A special case is, if the @var{Ctrl-C flag} is set in the @value{GDBN} -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 @code{SIGINT}''. Consequentially, the target should actually stop -(as with a break message) and return to @value{GDBN} with a @code{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: - -@itemize @bullet -@item -The system call hasn't been performed on the host yet. - -@item -The system call on the host has been finished. - -@end itemize - -These two states can be distinguished by the target by the value of the -returned @code{errno}. If it's the protocol representation of @code{EINTR}, the system -call hasn't been performed. This is equivalent to the @code{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. - -@value{GDBN} must behave reliable. If the system call has not been called -yet, @value{GDBN} may send the @code{F} reply immediately, setting @code{EINTR} as -@code{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 -@value{GDBN}. This requires sending @code{M} or @code{X} packets as they fit. -The @code{F} packet may only be send when either nothing has happened -or the full action has been completed. - -@node Console I/O -@subsection Console I/O -@cindex console i/o as part of file-i/o - -By default and if not explicitely closed by the target system, the file -descriptors 0, 1 and 2 are connected to the @value{GDBN} console. Output -on the @value{GDBN} console is handled as any other file output operation -(@code{write(1, @dots{})} or @code{write(2, @dots{})}). Console input is handled -by @value{GDBN} 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: - -@itemize @bullet -@item -The user presses @kbd{Ctrl-C}. The behaviour is as explained above, the -@code{read} -system call is treated as finished. - -@item -The user presses @kbd{Enter}. This is treated as end of input with a trailing -line feed. - -@item -The user presses @kbd{Ctrl-D}. This is treated as end of input. No trailing -character, especially no Ctrl-D is appended to the input. - -@end itemize - -If the user has typed more characters as fit in the buffer given to -the read call, the trailing characters are buffered in @value{GDBN} until -either another @code{read(0, @dots{})} is requested by the target or debugging -is stopped on users request. - -@node The isatty call -@subsection The isatty(3) call -@cindex isatty call, file-i/o protocol - -A special case in this protocol is the library call @code{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 @value{GDBN} console, 0 otherwise. Implementing through system calls -would require implementing @code{ioctl} and would be more complex than -needed. - -@node The system call -@subsection The system(3) call -@cindex system call, file-i/o protocol - -The other special case in this protocol is the @code{system} call which -is implemented as it's own call, too. @value{GDBN} is taking over the full -task of calling the necessary host calls to perform the @code{system} -call. The return value of @code{system} is simplified before it's returned -to the target. Basically, the only signal transmitted back is @code{EINTR} -in case the user pressed @kbd{Ctrl-C}. Otherwise the return value consists -entirely of the exit status of the called command. - -Due to security concerns, the @code{system} call is refused to be called -by @value{GDBN} by default. The user has to allow this call explicitly by -entering - -@table @samp -@kindex set remote system-call-allowed 1 -@item @code{set remote system-call-allowed 1} -@end table - -Disabling the @code{system} call is done by - -@table @samp -@kindex set remote system-call-allowed 0 -@item @code{set remote system-call-allowed 0} -@end table - -The current setting is shown by typing - -@table @samp -@kindex show remote system-call-allowed -@item @code{show remote system-call-allowed} -@end table - -@node List of supported calls -@subsection List of supported calls -@cindex list of supported file-i/o calls - -@menu -* open:: -* close:: -* read:: -* write:: -* lseek:: -* rename:: -* unlink:: -* stat/fstat:: -* gettimeofday:: -* isatty:: -* system:: -@end menu - -@node open -@unnumberedsubsubsec open -@cindex open, file-i/o system call - -@smallexample -@exdent Synopsis: -int open(const char *pathname, int flags); -int open(const char *pathname, int flags, mode_t mode); - -@exdent Request: -Fopen,pathptr/len,flags,mode -@end smallexample - -@noindent -@code{flags} is the bitwise or of the following values: - -@table @code -@item 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. - -@item O_EXCL -When used with O_CREAT, if the file already exists it is -an error and open() fails. - -@item 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. - -@item O_APPEND -The file is opened in append mode. - -@item O_RDONLY -The file is opened for reading only. - -@item O_WRONLY -The file is opened for writing only. - -@item O_RDWR -The file is opened for reading and writing. - -@noindent -Each other bit is silently ignored. - -@end table - -@noindent -@code{mode} is the bitwise or of the following values: - -@table @code -@item S_IRUSR -User has read permission. - -@item S_IWUSR -User has write permission. - -@item S_IRGRP -Group has read permission. - -@item S_IWGRP -Group has write permission. - -@item S_IROTH -Others have read permission. - -@item S_IWOTH -Others have write permission. - -@noindent -Each other bit is silently ignored. - -@end table - -@smallexample -@exdent Return value: -open returns the new file descriptor or -1 if an error -occured. - -@exdent Errors: -@end smallexample - -@table @code -@item EEXIST -pathname already exists and O_CREAT and O_EXCL were used. - -@item EISDIR -pathname refers to a directory. - -@item EACCES -The requested access is not allowed. - -@item ENAMETOOLONG -pathname was too long. - -@item ENOENT -A directory component in pathname does not exist. - -@item ENODEV -pathname refers to a device, pipe, named pipe or socket. - -@item EROFS -pathname refers to a file on a read-only filesystem and -write access was requested. - -@item EFAULT -pathname is an invalid pointer value. - -@item ENOSPC -No space on device to create the file. - -@item EMFILE -The process already has the maximum number of files open. - -@item ENFILE -The limit on the total number of files open on the system -has been reached. - -@item EINTR -The call was interrupted by the user. -@end table - -@node close -@unnumberedsubsubsec close -@cindex close, file-i/o system call - -@smallexample -@exdent Synopsis: -int close(int fd); - -@exdent Request: -Fclose,fd - -@exdent Return value: -close returns zero on success, or -1 if an error occurred. - -@exdent Errors: -@end smallexample - -@table @code -@item EBADF -fd isn't a valid open file descriptor. - -@item EINTR -The call was interrupted by the user. -@end table - -@node read -@unnumberedsubsubsec read -@cindex read, file-i/o system call - -@smallexample -@exdent Synopsis: -int read(int fd, void *buf, unsigned int count); - -@exdent Request: -Fread,fd,bufptr,count - -@exdent 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. - -@exdent Errors: -@end smallexample - -@table @code -@item EBADF -fd is not a valid file descriptor or is not open for -reading. - -@item EFAULT -buf is an invalid pointer value. - -@item EINTR -The call was interrupted by the user. -@end table - -@node write -@unnumberedsubsubsec write -@cindex write, file-i/o system call - -@smallexample -@exdent Synopsis: -int write(int fd, const void *buf, unsigned int count); - -@exdent Request: -Fwrite,fd,bufptr,count - -@exdent Return value: -On success, the number of bytes written are returned. -Zero indicates nothing was written. On error, -1 -is returned. - -@exdent Errors: -@end smallexample - -@table @code -@item EBADF -fd is not a valid file descriptor or is not open for -writing. - -@item EFAULT -buf is an invalid pointer value. - -@item EFBIG -An attempt was made to write a file that exceeds the -host specific maximum file size allowed. - -@item ENOSPC -No space on device to write the data. - -@item EINTR -The call was interrupted by the user. -@end table - -@node lseek -@unnumberedsubsubsec lseek -@cindex lseek, file-i/o system call - -@smallexample -@exdent Synopsis: -long lseek (int fd, long offset, int flag); - -@exdent Request: -Flseek,fd,offset,flag -@end smallexample - -@code{flag} is one of: - -@table @code -@item SEEK_SET -The offset is set to offset bytes. - -@item SEEK_CUR -The offset is set to its current location plus offset -bytes. - -@item SEEK_END -The offset is set to the size of the file plus offset -bytes. -@end table - -@smallexample -@exdent 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. - -@exdent Errors: -@end smallexample - -@table @code -@item EBADF -fd is not a valid open file descriptor. - -@item ESPIPE -fd is associated with the @value{GDBN} console. - -@item EINVAL -flag is not a proper value. - -@item EINTR -The call was interrupted by the user. -@end table - -@node rename -@unnumberedsubsubsec rename -@cindex rename, file-i/o system call - -@smallexample -@exdent Synopsis: -int rename(const char *oldpath, const char *newpath); - -@exdent Request: -Frename,oldpathptr/len,newpathptr/len - -@exdent Return value: -On success, zero is returned. On error, -1 is returned. - -@exdent Errors: -@end smallexample - -@table @code -@item EISDIR -newpath is an existing directory, but oldpath is not a -directory. - -@item EEXIST -newpath is a non-empty directory. - -@item EBUSY -oldpath or newpath is a directory that is in use by some -process. - -@item EINVAL -An attempt was made to make a directory a subdirectory -of itself. - -@item 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. - -@item EFAULT -oldpathptr or newpathptr are invalid pointer values. - -@item EACCES -No access to the file or the path of the file. - -@item ENAMETOOLONG - -oldpath or newpath was too long. - -@item ENOENT -A directory component in oldpath or newpath does not exist. - -@item EROFS -The file is on a read-only filesystem. - -@item ENOSPC -The device containing the file has no room for the new -directory entry. - -@item EINTR -The call was interrupted by the user. -@end table - -@node unlink -@unnumberedsubsubsec unlink -@cindex unlink, file-i/o system call - -@smallexample -@exdent Synopsis: -int unlink(const char *pathname); - -@exdent Request: -Funlink,pathnameptr/len - -@exdent Return value: -On success, zero is returned. On error, -1 is returned. - -@exdent Errors: -@end smallexample - -@table @code -@item EACCES -No access to the file or the path of the file. - -@item EPERM -The system does not allow unlinking of directories. - -@item EBUSY -The file pathname cannot be unlinked because it's -being used by another process. - -@item EFAULT -pathnameptr is an invalid pointer value. - -@item ENAMETOOLONG -pathname was too long. - -@item ENOENT -A directory component in pathname does not exist. - -@item ENOTDIR -A component of the path is not a directory. - -@item EROFS -The file is on a read-only filesystem. - -@item EINTR -The call was interrupted by the user. -@end table - -@node stat/fstat -@unnumberedsubsubsec stat/fstat -@cindex fstat, file-i/o system call -@cindex stat, file-i/o system call - -@smallexample -@exdent Synopsis: -int stat(const char *pathname, struct stat *buf); -int fstat(int fd, struct stat *buf); - -@exdent Request: -Fstat,pathnameptr/len,bufptr -Ffstat,fd,bufptr - -@exdent Return value: -On success, zero is returned. On error, -1 is returned. - -@exdent Errors: -@end smallexample - -@table @code -@item EBADF -fd is not a valid open file. - -@item ENOENT -A directory component in pathname does not exist or the -path is an empty string. - -@item ENOTDIR -A component of the path is not a directory. - -@item EFAULT -pathnameptr is an invalid pointer value. - -@item EACCES -No access to the file or the path of the file. - -@item ENAMETOOLONG -pathname was too long. - -@item EINTR -The call was interrupted by the user. -@end table - -@node gettimeofday -@unnumberedsubsubsec gettimeofday -@cindex gettimeofday, file-i/o system call - -@smallexample -@exdent Synopsis: -int gettimeofday(struct timeval *tv, void *tz); - -@exdent Request: -Fgettimeofday,tvptr,tzptr - -@exdent Return value: -On success, 0 is returned, -1 otherwise. - -@exdent Errors: -@end smallexample - -@table @code -@item EINVAL -tz is a non-NULL pointer. - -@item EFAULT -tvptr and/or tzptr is an invalid pointer value. -@end table - -@node isatty -@unnumberedsubsubsec isatty -@cindex isatty, file-i/o system call - -@smallexample -@exdent Synopsis: -int isatty(int fd); - -@exdent Request: -Fisatty,fd - -@exdent Return value: -Returns 1 if fd refers to the @value{GDBN} console, 0 otherwise. - -@exdent Errors: -@end smallexample - -@table @code -@item EINTR -The call was interrupted by the user. -@end table - -@node system -@unnumberedsubsubsec system -@cindex system, file-i/o system call - -@smallexample -@exdent Synopsis: -int system(const char *command); - -@exdent Request: -Fsystem,commandptr/len - -@exdent 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. - -@exdent Errors: -@end smallexample - -@table @code -@item EINTR -The call was interrupted by the user. -@end table - -@node Protocol specific representation of datatypes -@subsection Protocol specific representation of datatypes -@cindex protocol specific representation of datatypes, in file-i/o protocol - -@menu -* Integral datatypes:: -* Pointer values:: -* struct stat:: -* struct timeval:: -@end menu - -@node Integral datatypes -@unnumberedsubsubsec Integral datatypes -@cindex integral datatypes, in file-i/o protocol - -The integral datatypes used in the system calls are - -@smallexample -int@r{,} unsigned int@r{,} long@r{,} unsigned long@r{,} mode_t @r{and} time_t -@end smallexample - -@code{Int}, @code{unsigned int}, @code{mode_t} and @code{time_t} are -implemented as 32 bit values in this protocol. - -@code{Long} and @code{unsigned long} are implemented as 64 bit types. - -@xref{Limits}, for corresponding MIN and MAX values (similar to those -in @file{limits.h}) to allow range checking on host and target. - -@code{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 @code{struct stat} have to be given in big endian -byte order. - -@node Pointer values -@unnumberedsubsubsec Pointer values -@cindex pointer values, in file-i/o protocol - -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.@: - -@smallexample -@code{1aaf/12} -@end smallexample - -@noindent -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: - -@smallexample -``hello, world'' at address 0x123456 -@end smallexample - -@noindent -is transmitted as - -@smallexample -@code{123456/d} -@end smallexample - -@node struct stat -@unnumberedsubsubsec struct stat -@cindex struct stat, in file-i/o protocol - -The buffer of type struct stat used by the target and @value{GDBN} is defined -as follows: - -@smallexample -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 */ -@}; -@end smallexample - -The integral datatypes are conforming to the definitions given in the -approriate section (see @ref{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. - -@smallexample -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. -@end smallexample - -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. - -@node struct timeval -@unnumberedsubsubsec struct timeval -@cindex struct timeval, in file-i/o protocol - -The buffer of type struct timeval used by the target and @value{GDBN} -is defined as follows: - -@smallexample -struct timeval @{ - time_t tv_sec; /* second */ - long tv_usec; /* microsecond */ -@}; -@end smallexample - -The integral datatypes are conforming to the definitions given in the -approriate section (see @ref{Integral datatypes}, for details) so this -structure is of size 8 bytes. - -@node Constants -@subsection Constants -@cindex constants, in file-i/o protocol - -The following values are used for the constants inside of the -protocol. @value{GDBN} 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:: -@end menu - -@node Open flags -@unnumberedsubsubsec Open flags -@cindex open flags, in file-i/o protocol - -All values are given in hexadecimal representation. - -@smallexample - O_RDONLY 0x0 - O_WRONLY 0x1 - O_RDWR 0x2 - O_APPEND 0x8 - O_CREAT 0x200 - O_TRUNC 0x400 - O_EXCL 0x800 -@end smallexample - -@node mode_t values -@unnumberedsubsubsec mode_t values -@cindex mode_t values, in file-i/o protocol - -All values are given in octal representation. - -@smallexample - 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 -@end smallexample - -@node Errno values -@unnumberedsubsubsec Errno values -@cindex errno values, in file-i/o protocol - -All values are given in decimal representation. - -@smallexample - 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 -@end smallexample - - EUNKNOWN is used as a fallback error value if a host system returns - any error value not in the list of supported error numbers. - -@node Lseek flags -@unnumberedsubsubsec Lseek flags -@cindex lseek flags, in file-i/o protocol - -@smallexample - SEEK_SET 0 - SEEK_CUR 1 - SEEK_END 2 -@end smallexample - -@node Limits -@unnumberedsubsubsec Limits -@cindex limits, in file-i/o protocol - -All values are given in decimal representation. - -@smallexample - INT_MIN -2147483648 - INT_MAX 2147483647 - UINT_MAX 4294967295 - LONG_MIN -9223372036854775808 - LONG_MAX 9223372036854775807 - ULONG_MAX 18446744073709551615 -@end smallexample - -@node File-I/O Examples -@subsection File-I/O Examples -@cindex file-i/o examples - -Example sequence of a write call, file descriptor 3, buffer is at target -address 0x1234, 6 bytes should be written: - -@smallexample -<- @code{Fwrite,3,1234,6} -@emph{request memory read from target} --> @code{m1234,6} -<- XXXXXX -@emph{return "6 bytes written"} --> @code{F6} -@end smallexample - -Example sequence of a read call, file descriptor 3, buffer is at target -address 0x1234, 6 bytes should be read: - -@smallexample -<- @code{Fread,3,1234,6} -@emph{request memory write to target} --> @code{X1234,6:XXXXXX} -@emph{return "6 bytes read"} --> @code{F6} -@end smallexample - -Example sequence of a read call, call fails on the host due to invalid -file descriptor (EBADF): - -@smallexample -<- @code{Fread,3,1234,6} --> @code{F-1,9} -@end smallexample - -Example sequence of a read call, user presses Ctrl-C before syscall on -host is called: - -@smallexample -<- @code{Fread,3,1234,6} --> @code{F-1,4,C} -<- @code{T02} -@end smallexample - -Example sequence of a read call, user presses Ctrl-C after syscall on -host is called: - -@smallexample -<- @code{Fread,3,1234,6} --> @code{X1234,6:XXXXXX} -<- @code{T02} -@end smallexample - -@include agentexpr.texi - -@include gpl.texi - -@raisesections -@include fdl.texi -@lowersections - -@node Index -@unnumbered Index - -@printindex cp - -@tex -% I think something like @colophon should be in texinfo. In the -% meantime: -\long\def\colophon{\hbox to0pt{}\vfill -\centerline{The body of this manual is set in} -\centerline{\fontname\tenrm,} -\centerline{with headings in {\bf\fontname\tenbf}} -\centerline{and examples in {\tt\fontname\tentt}.} -\centerline{{\it\fontname\tenit\/},} -\centerline{{\bf\fontname\tenbf}, and} -\centerline{{\sl\fontname\tensl\/}} -\centerline{are used for emphasis.}\vfill} -\page\colophon -% Blame: doc@cygnus.com, 1991. -@end tex - -@bye diff --git a/contrib/gdb/gdb/doc/gdbint.texinfo b/contrib/gdb/gdb/doc/gdbint.texinfo deleted file mode 100644 index 2fe4b29fa1ab..000000000000 --- a/contrib/gdb/gdb/doc/gdbint.texinfo +++ /dev/null @@ -1,6757 +0,0 @@ -\input texinfo @c -*- texinfo -*- -@setfilename gdbint.info -@include gdb-cfg.texi -@dircategory Software development -@direntry -* Gdb-Internals: (gdbint). The GNU debugger's internals. -@end direntry - -@ifinfo -This file documents the internals of the GNU debugger @value{GDBN}. -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''. -@end ifinfo - -@setchapternewpage off -@settitle @value{GDBN} Internals - -@syncodeindex fn cp -@syncodeindex vr cp - -@titlepage -@title @value{GDBN} Internals -@subtitle{A guide to the internals of the GNU debugger} -@author John Gilmore -@author Cygnus Solutions -@author Second Edition: -@author Stan Shebs -@author Cygnus Solutions -@page -@tex -\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$ -\xdef\manvers{\$Revision$} % For use in headers, footers too -{\parskip=0pt -\hfill Cygnus Solutions\par -\hfill \manvers\par -\hfill \TeX{}info \texinfoversion\par -} -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1990,1991,1992,1993,1994,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 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''. -@end titlepage - -@contents - -@node Top -@c Perhaps this should be the title of the document (but only for info, -@c not for TeX). Existing GNU manuals seem inconsistent on this point. -@top Scope of this Document - -This document documents the internals of the GNU debugger, @value{GDBN}. It -includes description of @value{GDBN}'s key algorithms and operations, as well -as the mechanisms that adapt @value{GDBN} 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:: @value{GDBN} Currently available observers -* GNU Free Documentation License:: The license for this documentation -* Index:: -@end menu - -@node Requirements - -@chapter Requirements -@cindex requirements for @value{GDBN} - -Before diving into the internals, you should understand the formal -requirements and other expectations for @value{GDBN}. Although some -of these may seem obvious, there have been proposals for @value{GDBN} -that have run counter to these requirements. - -First of all, @value{GDBN} 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. - -@value{GDBN} is an interactive tool. Although a batch mode is -available, @value{GDBN}'s primary role is to interact with a human -programmer. - -@value{GDBN} 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. - -@value{GDBN} 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. - -@value{GDBN} 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. - -@value{GDBN} should be able to run everywhere. No other debugger is -available for even half as many configurations as @value{GDBN} -supports. - - -@node Overall Structure - -@chapter Overall Structure - -@value{GDBN} consists of three major subsystems: user interface, -symbol handling (the @dfn{symbol side}), and target system handling (the -@dfn{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. - -@section The Symbol Side - -The symbolic side of @value{GDBN} can be thought of as ``everything -you can do in @value{GDBN} without having a live program running''. -For instance, you can look at the types of variables, and evaluate -many kinds of expressions. - -@section The Target Side - -The target side of @value{GDBN} 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, @value{GDBN} will use symbolic info to present addresses -relative to symbols rather than as raw numbers, but it will work either -way. - -@section Configurations - -@cindex host -@cindex target -@dfn{Host} refers to attributes of the system where @value{GDBN} runs. -@dfn{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 @dfn{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 @code{upage}, running @code{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 -@code{#include} files that are only available on the host system. Core -file handling and @code{setjmp} handling are two common cases. - -When you want to make @value{GDBN} work ``native'' on a particular machine, you -have to include all three kinds of information. - - -@node Algorithms - -@chapter Algorithms -@cindex algorithms - -@value{GDBN} 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. - -@section Frames - -@cindex frame -@cindex call stack frame -A frame is a construct that @value{GDBN} uses to keep track of calling -and called functions. - -@findex create_new_frame -@vindex FRAME_FP -@code{FRAME_FP} in the machine description has no meaning to the -machine-independent part of @value{GDBN}, except that it is used when -setting up a new frame from scratch, as follows: - -@smallexample -create_new_frame (read_register (DEPRECATED_FP_REGNUM), read_pc ())); -@end smallexample - -@cindex frame pointer register -Other than that, all the meaning imparted to @code{DEPRECATED_FP_REGNUM} -is imparted by the machine-dependent code. So, -@code{DEPRECATED_FP_REGNUM} can have any value that is convenient for -the code that creates new frames. (@code{create_new_frame} calls -@code{DEPRECATED_INIT_EXTRA_FRAME_INFO} if it is defined; that is where -you should use the @code{DEPRECATED_FP_REGNUM} value, if your frames are -nonstandard.) - -@cindex frame chain -Given a @value{GDBN} frame, define @code{DEPRECATED_FRAME_CHAIN} to -determine the address of the calling function's frame. This will be -used to create a new @value{GDBN} frame struct, and then -@code{DEPRECATED_INIT_EXTRA_FRAME_INFO} and -@code{DEPRECATED_INIT_FRAME_PC} will be called for the new frame. - -@section Breakpoint Handling - -@cindex breakpoints -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. - -@cindex hardware breakpoints -@cindex program counter -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 @dfn{program counter}) -ever matches a value in a breakpoint registers, the CPU raises an -exception and reports it to @value{GDBN}. - -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 @value{GDBN}'s point of view they work the same; -@value{GDBN} 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, @value{GDBN} will -start trying to set software breakpoints. (On some architectures, -notably the 32-bit x86 platforms, @value{GDBN} cannot always know -whether there's enough hardware resources to insert all the hardware -breakpoints and watchpoints. On those platforms, @value{GDBN} prints -an error message only when the program being debugged is continued.) - -@cindex software breakpoints -Software breakpoints require @value{GDBN} to do somewhat more work. -The basic theory is that @value{GDBN} 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, -@value{GDBN} will take the exception and stop the program. When the -user says to continue, @value{GDBN} 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. - -@findex BREAKPOINT -The basic definition of the software breakpoint is the macro -@code{BREAKPOINT}. - -Basic breakpoint object handling is in @file{breakpoint.c}. However, -much of the interesting breakpoint action is in @file{infrun.c}. - -@section Single Stepping - -@section Signal Handling - -@section Thread Handling - -@section Inferior Function Calls - -@section Longjmp Support - -@cindex @code{longjmp} debugging -@value{GDBN} has support for figuring out that the target is doing a -@code{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 @samp{maint info breakpoint} -command. - -@findex GET_LONGJMP_TARGET -To make this work, you need to define a macro called -@code{GET_LONGJMP_TARGET}, which will examine the @code{jmp_buf} -structure and extract the longjmp target address. Since @code{jmp_buf} -is target specific, you will need to define it in the appropriate -@file{tm-@var{target}.h} file. Look in @file{tm-sun4os4.h} and -@file{sparc-tdep.c} for examples of how to do this. - -@section Watchpoints -@cindex watchpoints - -Watchpoints are a special kind of breakpoints (@pxref{Algorithms, -breakpoints}) 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. - -@cindex hardware watchpoints -@cindex software watchpoints -Watchpoints can be either hardware-assisted or not; the latter type is -known as ``software watchpoints.'' @value{GDBN} always uses -hardware-assisted watchpoints if they are available, and falls back on -software watchpoints otherwise. Typical situations where @value{GDBN} -will use software watchpoints are: - -@itemize @bullet -@item -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 @value{GDBN} to use software -watchpoints. - -@item -The value of the expression to be watched depends on data held in -registers (as opposed to memory). - -@item -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. - -@item -No hardware-assisted watchpoints provided by the target -implementation. -@end itemize - -Software watchpoints are very slow, since @value{GDBN} 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. - -@value{GDBN} uses several macros and primitives to support hardware -watchpoints: - -@table @code -@findex TARGET_HAS_HARDWARE_WATCHPOINTS -@item TARGET_HAS_HARDWARE_WATCHPOINTS -If defined, the target supports hardware watchpoints. - -@findex TARGET_CAN_USE_HARDWARE_WATCHPOINT -@item TARGET_CAN_USE_HARDWARE_WATCHPOINT (@var{type}, @var{count}, @var{other}) -Return the number of hardware watchpoints of type @var{type} that are -possible to be set. The value is positive if @var{count} watchpoints -of this type can be set, zero if setting watchpoints of this type is -not supported, and negative if @var{count} is more than the maximum -number of watchpoints of type @var{type} that can be set. @var{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). - -@findex TARGET_REGION_OK_FOR_HW_WATCHPOINT -@item TARGET_REGION_OK_FOR_HW_WATCHPOINT (@var{addr}, @var{len}) -Return non-zero if hardware watchpoints can be used to watch a region -whose address is @var{addr} and whose length in bytes is @var{len}. - -@findex TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT -@item TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (@var{size}) -Return non-zero if hardware watchpoints can be used to watch a region -whose size is @var{size}. @value{GDBN} only uses this macro as a -fall-back, in case @code{TARGET_REGION_OK_FOR_HW_WATCHPOINT} is not -defined. - -@findex TARGET_DISABLE_HW_WATCHPOINTS -@item TARGET_DISABLE_HW_WATCHPOINTS (@var{pid}) -Disables watchpoints in the process identified by @var{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. - -@findex TARGET_ENABLE_HW_WATCHPOINTS -@item TARGET_ENABLE_HW_WATCHPOINTS (@var{pid}) -Enables watchpoints in the process identified by @var{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. - -@findex target_insert_watchpoint -@findex target_remove_watchpoint -@item target_insert_watchpoint (@var{addr}, @var{len}, @var{type}) -@itemx target_remove_watchpoint (@var{addr}, @var{len}, @var{type}) -Insert or remove a hardware watchpoint starting at @var{addr}, for -@var{len} bytes. @var{type} is the watchpoint type, one of the -possible values of the enumerated data type @code{target_hw_bp_type}, -defined by @file{breakpoint.h} as follows: - -@smallexample - 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 */ - @}; -@end smallexample - -@noindent -These two macros should return 0 for success, non-zero for failure. - -@cindex insert or remove hardware breakpoint -@findex target_remove_hw_breakpoint -@findex target_insert_hw_breakpoint -@item target_remove_hw_breakpoint (@var{addr}, @var{shadow}) -@itemx target_insert_hw_breakpoint (@var{addr}, @var{shadow}) -Insert or remove a hardware-assisted breakpoint at address @var{addr}. -Returns zero for success, non-zero for failure. @var{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. - -@findex target_stopped_data_address -@item target_stopped_data_address () -If the inferior has some watchpoint that triggered, return the address -associated with that watchpoint. Otherwise, return zero. - -@findex HAVE_STEPPABLE_WATCHPOINT -@item HAVE_STEPPABLE_WATCHPOINT -If defined to a non-zero value, it is not necessary to disable a -watchpoint to step over it. - -@findex HAVE_NONSTEPPABLE_WATCHPOINT -@item HAVE_NONSTEPPABLE_WATCHPOINT -If defined to a non-zero value, @value{GDBN} should disable a -watchpoint to step the inferior over it. - -@findex HAVE_CONTINUABLE_WATCHPOINT -@item HAVE_CONTINUABLE_WATCHPOINT -If defined to a non-zero value, it is possible to continue the -inferior after a watchpoint has been hit. - -@findex CANNOT_STEP_HW_WATCHPOINTS -@item CANNOT_STEP_HW_WATCHPOINTS -If this is defined to a non-zero value, @value{GDBN} will remove all -watchpoints before stepping the inferior. - -@findex STOPPED_BY_WATCHPOINT -@item STOPPED_BY_WATCHPOINT (@var{wait_status}) -Return non-zero if stopped by a watchpoint. @var{wait_status} is of -the type @code{struct target_waitstatus}, defined by @file{target.h}. -@end table - -@subsection x86 Watchpoints -@cindex x86 debug registers -@cindex watchpoints, on x86 - -The 32-bit Intel x86 (a.k.a.@: ia32) processors feature special debug -registers designed to facilitate debugging. @value{GDBN} 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 @value{GDBN}. - -To use the generic x86 watchpoint support, a port should do the -following: - -@itemize @bullet -@findex I386_USE_GENERIC_WATCHPOINTS -@item -Define the macro @code{I386_USE_GENERIC_WATCHPOINTS} somewhere in the -target-dependent headers. - -@item -Include the @file{config/i386/nm-i386.h} header file @emph{after} -defining @code{I386_USE_GENERIC_WATCHPOINTS}. - -@item -Add @file{i386-nat.o} to the value of the Make variable -@code{NATDEPFILES} (@pxref{Native Debugging, NATDEPFILES}) or -@code{TDEPFILES} (@pxref{Target Architecture Definition, TDEPFILES}). - -@item -Provide implementations for the @code{I386_DR_LOW_*} macros described -below. Typically, each macro should call a target-specific function -which does the real work. -@end itemize - -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: - -@table @code -@findex I386_DR_LOW_SET_CONTROL -@item I386_DR_LOW_SET_CONTROL (@var{val}) -Set the Debug Control (DR7) register to the value @var{val}. - -@findex I386_DR_LOW_SET_ADDR -@item I386_DR_LOW_SET_ADDR (@var{idx}, @var{addr}) -Put the address @var{addr} into the debug register number @var{idx}. - -@findex I386_DR_LOW_RESET_ADDR -@item I386_DR_LOW_RESET_ADDR (@var{idx}) -Reset (i.e.@: zero out) the address stored in the debug register -number @var{idx}. - -@findex I386_DR_LOW_GET_STATUS -@item I386_DR_LOW_GET_STATUS -Return the value of the Debug Status (DR6) register. This value is -used immediately after it is returned by -@code{I386_DR_LOW_GET_STATUS}, so as to support per-thread status -register values. -@end table - -For each one of the 4 debug registers (whose indices are from 0 to 3) -that store addresses, a reference count is maintained by @value{GDBN}, -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. @value{GDBN} -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 -@value{GDBN} 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 -@value{GDBN}'s application code: - -@table @code -@findex i386_region_ok_for_watchpoint -@item i386_region_ok_for_watchpoint (@var{addr}, @var{len}) -The macro @code{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. - -@findex i386_stopped_data_address -@item i386_stopped_data_address (void) -The macros @code{STOPPED_BY_WATCHPOINT} and -@code{target_stopped_data_address} are set to call this function. The -argument passed to @code{STOPPED_BY_WATCHPOINT} is ignored. This -function examines the breakpoint condition bits in the DR6 Debug -Status register, as returned by the @code{I386_DR_LOW_GET_STATUS} -macro, and returns the address associated with the first bit that is -set in DR6. - -@findex i386_insert_watchpoint -@findex i386_remove_watchpoint -@item i386_insert_watchpoint (@var{addr}, @var{len}, @var{type}) -@itemx i386_remove_watchpoint (@var{addr}, @var{len}, @var{type}) -Insert or remove a watchpoint. The macros -@code{target_insert_watchpoint} and @code{target_remove_watchpoint} -are set to call these functions. @code{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 @var{addr}, sets the mirrored value of DR7 Debug Control -register as appropriate for the @var{len} and @var{type} parameters, -and then passes the new values of the debug register and DR7 to the -inferior by calling @code{I386_DR_LOW_SET_ADDR} and -@code{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. - -@code{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 @code{I386_DR_LOW_RESET_ADDR} and -@code{I386_DR_LOW_SET_CONTROL}. If a register is shared by several -watchpoints, each time a @code{i386_remove_watchpoint} is called, it -decrements the reference count, and only calls -@code{I386_DR_LOW_RESET_ADDR} and @code{I386_DR_LOW_SET_CONTROL} when -the count goes to zero. - -@findex i386_insert_hw_breakpoint -@findex i386_remove_hw_breakpoint -@item i386_insert_hw_breakpoint (@var{addr}, @var{shadow} -@itemx i386_remove_hw_breakpoint (@var{addr}, @var{shadow}) -These functions insert and remove hardware-assisted breakpoints. The -macros @code{target_insert_hw_breakpoint} and -@code{target_remove_hw_breakpoint} are set to call these functions. -These functions work like @code{i386_insert_watchpoint} and -@code{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. - -@findex i386_stopped_by_hwbp -@item i386_stopped_by_hwbp (void) -This function returns non-zero if the inferior has some watchpoint or -hardware breakpoint that triggered. It works like -@code{i386_stopped_data_address}, except that it doesn't return the -address whose watchpoint triggered. - -@findex i386_cleanup_dregs -@item 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. -@end table - -@noindent -@strong{Notes:} -@enumerate 1 -@item -x86 processors support setting watchpoints on I/O reads or writes. -However, since no target supports this (as of March 2001), and since -@code{enum target_hw_bp_type} doesn't even have an enumeration for I/O -watchpoints, this feature is not yet available to @value{GDBN} running -on x86. - -@item -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 @value{GDBN} -always sets watchpoints to be locally enabled, since global -watchpoints might interfere with the underlying OS and are probably -unavailable in many platforms. -@end enumerate - -@section Observing changes in @value{GDBN} internals -@cindex observer pattern interface -@cindex notifications about changes in internals - -In order to function properly, several modules need to be notified when -some changes occur in the @value{GDBN} 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 -@value{GDBN}. The fact that they only supported one ``client'' was also -a strong limitation. - -A new paradigm, based on the Observer pattern of the @cite{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 @ref{GDB Observers} for a brief description of the observers -currently implemented in GDB. The rationale for the current -implementation is also briefly discussed. - -@node User Interface - -@chapter User Interface - -@value{GDBN} has several user interfaces. Although the command-line interface -is the most common and most familiar, there are others. - -@section Command Interpreter - -@cindex command interpreter -@cindex CLI -The command interpreter in @value{GDBN} 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 @samp{set} command just starts a lookup on the -@code{setlist} command list, while @samp{set thread} recurses -to the @code{set_thread_cmd_list}. - -@findex add_cmd -@findex add_com -To add commands in general, use @code{add_cmd}. @code{add_com} adds to -the main command list, and should be used for those commands. The usual -place to add commands is in the @code{_initialize_@var{xyz}} routines at -the ends of most source files. - -@findex add_setshow_cmd -@findex add_setshow_cmd_full -To add paired @samp{set} and @samp{show} commands, use -@code{add_setshow_cmd} or @code{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. - -@cindex deprecating commands -@findex deprecate_cmd -Before removing commands from the command set it is a good idea to -deprecate them for some time. Use @code{deprecate_cmd} on commands or -aliases to set the deprecated flag. @code{deprecate_cmd} takes a -@code{struct cmd_list_element} as it's first argument. You can use the -return value from @code{add_com} or @code{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 -@code{deprecate_cmd} should be the full name of the command, i.e. the -entire string the user should type at the command line. - -@section UI-Independent Output---the @code{ui_out} Functions -@c This section is based on the documentation written by Fernando -@c Nasser <fnasser@redhat.com>. - -@cindex @code{ui_out} functions -The @code{ui_out} functions present an abstraction level for the -@value{GDBN} output code. They hide the specifics of different user -interfaces supported by @value{GDBN}, and thus free the programmer -from the need to write several versions of the same code, one each for -every UI, to produce output. - -@subsection Overview and Terminology - -In general, execution of each @value{GDBN} command produces some sort -of output, and can even generate an input request. - -Output can be generated for the following purposes: - -@itemize @bullet -@item -to display a @emph{result} of an operation; - -@item -to convey @emph{info} or produce side-effects of a requested -operation; - -@item -to provide a @emph{notification} of an asynchronous event (including -progress indication of a prolonged asynchronous operation); - -@item -to display @emph{error messages} (including warnings); - -@item -to show @emph{debug data}; - -@item -to @emph{query} or prompt a user for input (a special case). -@end itemize - -@noindent -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: - -@itemize @bullet -@item -output of the actual data - -@item -formatting the output as appropriate for console output, to make it -easily readable by humans - -@item -machine oriented formatting--a more terse formatting to allow for easy -parsing by programs which read @value{GDBN}'s output - -@item -annotation, whose purpose is to help legacy GUIs to identify interesting -parts in the output -@end itemize - -The @code{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 @value{GDBN} is -deprecated. - -Output can be in the form of a single item, which we call a @dfn{field}; -a @dfn{list} consisting of identical fields; a @dfn{tuple} consisting of -non-identical fields; or a @dfn{table}, which is a tuple consisting of a -header and a body. In a BNF-like form: - -@table @code -@item <table> @expansion{} -@code{<header> <body>} -@item <header> @expansion{} -@code{@{ <column> @}} -@item <column> @expansion{} -@code{<width> <alignment> <title>} -@item <body> @expansion{} -@code{@{<row>@}} -@end table - - -@subsection General Conventions - -Most @code{ui_out} routines are of type @code{void}, the exceptions are -@code{ui_out_stream_new} (which returns a pointer to the newly created -object) and the @code{make_cleanup} routines. - -The first parameter is always the @code{ui_out} vector object, a pointer -to a @code{struct ui_out}. - -The @var{format} parameter is like in @code{printf} family of functions. -When it is present, there must also be a variable list of arguments -sufficient used to satisfy the @code{%} specifiers in the supplied -format. - -When a character string argument is not used in a @code{ui_out} function -call, a @code{NULL} pointer has to be supplied instead. - - -@subsection Table, Tuple and List Functions - -@cindex list output functions -@cindex table output functions -@cindex tuple output functions -This section introduces @code{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 @dfn{tuple} is a sequence of @dfn{fields}, each field -containing information about an object; a @dfn{list} is a sequence of -fields where each field describes an identical object. - -Use the @dfn{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. - -@cindex nesting level in @code{ui_out} functions -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: - -@smallexample - ui_out_table_begin - ui_out_table_header - @dots{} - ui_out_table_body - ui_out_tuple_begin - ui_out_field_* - @dots{} - ui_out_tuple_end - @dots{} - ui_out_table_end -@end smallexample - -Here is the description of table-, tuple- and list-related @code{ui_out} -functions: - -@deftypefun void ui_out_table_begin (struct ui_out *@var{uiout}, int @var{nbrofcols}, int @var{nr_rows}, const char *@var{tblid}) -The function @code{ui_out_table_begin} marks the beginning of the output -of a table. It should always be called before any other @code{ui_out} -function for a given table. @var{nbrofcols} is the number of columns in -the table. @var{nr_rows} is the number of rows in the table. -@var{tblid} is an optional string identifying the table. The string -pointed to by @var{tblid} is copied by the implementation of -@code{ui_out_table_begin}, so the application can free the string if it -was @code{malloc}ed. - -The companion function @code{ui_out_table_end}, described below, marks -the end of the table's output. -@end deftypefun - -@deftypefun void ui_out_table_header (struct ui_out *@var{uiout}, int @var{width}, enum ui_align @var{alignment}, const char *@var{colhdr}) -@code{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 @code{ui_out_table_begin}, but before -@code{ui_out_table_body}. - -The value of @var{width} gives the column width in characters. The -value of @var{alignment} is one of @code{left}, @code{center}, and -@code{right}, and it specifies how to align the header: left-justify, -center, or right-justify it. @var{colhdr} points to a string that -specifies the column header; the implementation copies that string, so -column header strings in @code{malloc}ed storage can be freed after the -call. -@end deftypefun - -@deftypefun void ui_out_table_body (struct ui_out *@var{uiout}) -This function delimits the table header from the table body. -@end deftypefun - -@deftypefun void ui_out_table_end (struct ui_out *@var{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 @code{ui_out_table_end} for each -call to @code{ui_out_table_begin}, otherwise the @code{ui_out} functions -will signal an internal error. -@end deftypefun - -The output of the tuples that represent the table rows must follow the -call to @code{ui_out_table_body} and precede the call to -@code{ui_out_table_end}. You build a tuple by calling -@code{ui_out_tuple_begin} and @code{ui_out_tuple_end}, with suitable -calls to functions which actually output fields between them. - -@deftypefun void ui_out_tuple_begin (struct ui_out *@var{uiout}, const char *@var{id}) -This function marks the beginning of a tuple output. @var{id} points -to an optional string that identifies the tuple; it is copied by the -implementation, and so strings in @code{malloc}ed storage can be freed -after the call. -@end deftypefun - -@deftypefun void ui_out_tuple_end (struct ui_out *@var{uiout}) -This function signals an end of a tuple output. There should be exactly -one call to @code{ui_out_tuple_end} for each call to -@code{ui_out_tuple_begin}, otherwise an internal @value{GDBN} error will -be signaled. -@end deftypefun - -@deftypefun struct cleanup *make_cleanup_ui_out_tuple_begin_end (struct ui_out *@var{uiout}, const char *@var{id}) -This function first opens the tuple and then establishes a cleanup -(@pxref{Coding, Cleanups}) to close the tuple. It provides a convenient -and correct implementation of the non-portable@footnote{The function -cast is not portable ISO C.} code sequence: -@smallexample -struct cleanup *old_cleanup; -ui_out_tuple_begin (uiout, "..."); -old_cleanup = make_cleanup ((void(*)(void *)) ui_out_tuple_end, - uiout); -@end smallexample -@end deftypefun - -@deftypefun void ui_out_list_begin (struct ui_out *@var{uiout}, const char *@var{id}) -This function marks the beginning of a list output. @var{id} points to -an optional string that identifies the list; it is copied by the -implementation, and so strings in @code{malloc}ed storage can be freed -after the call. -@end deftypefun - -@deftypefun void ui_out_list_end (struct ui_out *@var{uiout}) -This function signals an end of a list output. There should be exactly -one call to @code{ui_out_list_end} for each call to -@code{ui_out_list_begin}, otherwise an internal @value{GDBN} error will -be signaled. -@end deftypefun - -@deftypefun struct cleanup *make_cleanup_ui_out_list_begin_end (struct ui_out *@var{uiout}, const char *@var{id}) -Similar to @code{make_cleanup_ui_out_tuple_begin_end}, this function -opens a list and then establishes cleanup (@pxref{Coding, Cleanups}) -that will close the list.list. -@end deftypefun - -@subsection Item Output Functions - -@cindex item output functions -@cindex field output functions -@cindex data output -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. - -@deftypefun void ui_out_field_fmt (struct ui_out *@var{uiout}, char *@var{fldname}, char *@var{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 @var{format}, a -@code{printf}-like format string. The optional argument @var{fldname} -supplies the name of the field. The data items themselves are -supplied as additional arguments after @var{format}. - -This generic function should be used only when it is not possible to -use one of the specialized versions (see below). -@end deftypefun - -@deftypefun void ui_out_field_int (struct ui_out *@var{uiout}, const char *@var{fldname}, int @var{value}) -This function outputs a value of an @code{int} variable. It uses the -@code{"%d"} output conversion specification. @var{fldname} specifies -the name of the field. -@end deftypefun - -@deftypefun void ui_out_field_fmt_int (struct ui_out *@var{uiout}, int @var{width}, enum ui_align @var{alignment}, const char *@var{fldname}, int @var{value}) -This function outputs a value of an @code{int} variable. It differs from -@code{ui_out_field_int} in that the caller specifies the desired @var{width} and @var{alignment} of the output. -@var{fldname} specifies -the name of the field. -@end deftypefun - -@deftypefun void ui_out_field_core_addr (struct ui_out *@var{uiout}, const char *@var{fldname}, CORE_ADDR @var{address}) -This function outputs an address. -@end deftypefun - -@deftypefun void ui_out_field_string (struct ui_out *@var{uiout}, const char *@var{fldname}, const char *@var{string}) -This function outputs a string using the @code{"%s"} conversion -specification. -@end deftypefun - -Sometimes, there's a need to compose your output piece by piece using -functions that operate on a stream, such as @code{value_print} or -@code{fprintf_symbol_filtered}. These functions accept an argument of -the type @code{struct ui_file *}, a pointer to a @code{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 -@code{ui_file} object to the @code{ui_out} functions. To this end, -you first create a @code{ui_stream} object by calling -@code{ui_out_stream_new}, pass the @code{stream} member of that -@code{ui_stream} object to @code{value_print} and similar functions, -and finally call @code{ui_out_field_stream} to output the field you -constructed. When the @code{ui_stream} object is no longer needed, -you should destroy it and free its memory by calling -@code{ui_out_stream_delete}. - -@deftypefun struct ui_stream *ui_out_stream_new (struct ui_out *@var{uiout}) -This function creates a new @code{ui_stream} object which uses the -same output methods as the @code{ui_out} object whose pointer is -passed in @var{uiout}. It returns a pointer to the newly created -@code{ui_stream} object. -@end deftypefun - -@deftypefun void ui_out_stream_delete (struct ui_stream *@var{streambuf}) -This functions destroys a @code{ui_stream} object specified by -@var{streambuf}. -@end deftypefun - -@deftypefun void ui_out_field_stream (struct ui_out *@var{uiout}, const char *@var{fieldname}, struct ui_stream *@var{streambuf}) -This function consumes all the data accumulated in -@code{streambuf->stream} and outputs it like -@code{ui_out_field_string} does. After a call to -@code{ui_out_field_stream}, the accumulated data no longer exists, but -the stream is still valid and may be used for producing more fields. -@end deftypefun - -@strong{Important:} If there is any chance that your code could bail -out before completing output generation and reaching the point where -@code{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: - -@smallexample - struct ui_stream *mybuf = ui_out_stream_new (uiout); - struct cleanup *old = make_cleanup (ui_out_stream_delete, mybuf); - ... - do_cleanups (old); -@end smallexample - -If the function already has the old cleanup chain set (for other kinds -of cleanups), you just have to add your cleanup to it: - -@smallexample - mybuf = ui_out_stream_new (uiout); - make_cleanup (ui_out_stream_delete, mybuf); -@end smallexample - -Note that with cleanups in place, you should not call -@code{ui_out_stream_delete} directly, or you would attempt to free the -same buffer twice. - -@subsection Utility Output Functions - -@deftypefun void ui_out_field_skip (struct ui_out *@var{uiout}, const char *@var{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 -@var{fldname} specifies a name for the (missing) filed. -@end deftypefun - -@deftypefun void ui_out_text (struct ui_out *@var{uiout}, const char *@var{string}) -This function outputs the text in @var{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 @code{ui_out_field_string} to output a -string field, and use @code{ui_out_message}, described below, to -output short messages. -@end deftypefun - -@deftypefun void ui_out_spaces (struct ui_out *@var{uiout}, int @var{nspaces}) -This function outputs @var{nspaces} spaces. It is handy to align the -text produced by @code{ui_out_text} with the rest of the table or -list. -@end deftypefun - -@deftypefun void ui_out_message (struct ui_out *@var{uiout}, int @var{verbosity}, const char *@var{format}, ...) -This function produces a formatted message, provided that the current -verbosity level is at least as large as given by @var{verbosity}. The -current verbosity level is specified by the user with the @samp{set -verbositylevel} command.@footnote{As of this writing (April 2001), -setting verbosity level is not yet implemented, and is always returned -as zero. So calling @code{ui_out_message} with a @var{verbosity} -argument more than zero will cause the message to never be printed.} -@end deftypefun - -@deftypefun void ui_out_wrap_hint (struct ui_out *@var{uiout}, char *@var{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. @var{indent}, if non-@code{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 @code{ui_out_wrap_hint}, or until an -explicit newline is produced by one of the other functions. If -@var{indent} is @code{NULL}, the wrapped text will not be indented. -@end deftypefun - -@deftypefun void ui_out_flush (struct ui_out *@var{uiout}) -This function flushes whatever output has been accumulated so far, if -the UI buffers output. -@end deftypefun - - -@subsection Examples of Use of @code{ui_out} functions - -@cindex using @code{ui_out} functions -@cindex @code{ui_out} functions, usage examples -This section gives some practical examples of using the @code{ui_out} -functions to generalize the old console-oriented code in -@value{GDBN}. The examples all come from functions defined on the -@file{breakpoints.c} file. - -This example, from the @code{breakpoint_1} function, shows how to -produce a table. - -The original code was: - -@smallexample - 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 (); - @} -@end smallexample - -Here's the new version: - -@smallexample - nr_printable_breakpoints = @dots{}; - - 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 (); -@end smallexample - -This example, from the @code{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: - -@smallexample - 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]); - @dots{} -@end smallexample - -This is the new version: - -@smallexample - 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]); - @dots{} -@end smallexample - -This example, also from @code{print_one_breakpoint}, shows how to -produce a complicated output field using the @code{print_expression} -functions which requires a stream to be passed. It also shows how to -automate stream destruction with cleanups. The original code was: - -@smallexample - annotate_field (5); - print_expression (b->exp, gdb_stdout); -@end smallexample - -The new version is: - -@smallexample - 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); -@end smallexample - -This example, also from @code{print_one_breakpoint}, shows how to use -@code{ui_out_text} and @code{ui_out_field_string}. The original code -was: - -@smallexample - annotate_field (5); - if (b->dll_pathname == NULL) - printf_filtered ("<any library> "); - else - printf_filtered ("library \"%s\" ", b->dll_pathname); -@end smallexample - -It became: - -@smallexample - 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, "\" "); - @} -@end smallexample - -The following example from @code{print_one_breakpoint} shows how to -use @code{ui_out_field_int} and @code{ui_out_spaces}. The original -code was: - -@smallexample - annotate_field (5); - if (b->forked_inferior_pid != 0) - printf_filtered ("process %d ", b->forked_inferior_pid); -@end smallexample - -It became: - -@smallexample - 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); - @} -@end smallexample - -Here's an example of using @code{ui_out_field_string}. The original -code was: - -@smallexample - annotate_field (5); - if (b->exec_pathname != NULL) - printf_filtered ("program \"%s\" ", b->exec_pathname); -@end smallexample - -It became: - -@smallexample - 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, "\" "); - @} -@end smallexample - -Finally, here's an example of printing an address. The original code: - -@smallexample - annotate_field (4); - printf_filtered ("%s ", - local_hex_string_custom ((unsigned long) b->address, "08l")); -@end smallexample - -It became: - -@smallexample - annotate_field (4); - ui_out_field_core_addr (uiout, "Address", b->address); -@end smallexample - - -@section Console Printing - -@section TUI - -@node libgdb - -@chapter libgdb - -@section libgdb 1.0 -@cindex @code{libgdb} -@code{libgdb} 1.0 was an abortive project of years ago. The theory was -to provide an API to @value{GDBN}'s functionality. - -@section libgdb 2.0 -@cindex @code{libgdb} -@code{libgdb} 2.0 is an ongoing effort to update @value{GDBN} so that is -better able to support graphical and other environments. - -Since @code{libgdb} development is on-going, its architecture is still -evolving. The following components have so far been identified: - -@itemize @bullet -@item -Observer - @file{gdb-events.h}. -@item -Builder - @file{ui-out.h} -@item -Event Loop - @file{event-loop.h} -@item -Library - @file{gdb.h} -@end itemize - -The model that ties these components together is described below. - -@section The @code{libgdb} Model - -A client of @code{libgdb} interacts with the library in two ways. - -@itemize @bullet -@item -As an observer (using @file{gdb-events}) receiving notifications from -@code{libgdb} of any internal state changes (break point changes, run -state, etc). -@item -As a client querying @code{libgdb} (using the @file{ui-out} builder) to -obtain various status values from @value{GDBN}. -@end itemize - -Since @code{libgdb} could have multiple clients (e.g. a GUI supporting -the existing @value{GDBN} CLI), those clients must co-operate when -controlling @code{libgdb}. In particular, a client must ensure that -@code{libgdb} is idle (i.e. no other client is using @code{libgdb}) -before responding to a @file{gdb-event} by making a query. - -@section CLI support - -At present @value{GDBN}'s CLI is very much entangled in with the core of -@code{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 @code{libgdb} up to be bi-modal -(alternate between CLI and client query modes). The notes below sketch -out the theory: - -@itemize @bullet -@item -The client registers itself as an observer of @code{libgdb}. -@item -The client create and install @code{cli-out} builder using its own -versions of the @code{ui-file} @code{gdb_stderr}, @code{gdb_stdtarg} and -@code{gdb_stdout} streams. -@item -The client creates a separate custom @code{ui-out} builder that is only -used while making direct queries to @code{libgdb}. -@end itemize - -When the client receives input intended for the CLI, it simply passes it -along. Since the @code{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 @code{gdb_stdout} et.@: al.@: streams. -At the same time, the client is kept abreast of internal changes by -virtue of being a @code{libgdb} observer. - -The only restriction on the client is that it must wait until -@code{libgdb} becomes idle before initiating any queries (using the -client's custom builder). - -@section @code{libgdb} components - -@subheading Observer - @file{gdb-events.h} -@file{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 @code{libgdb} has -finished the current command. - -@subheading Builder - @file{ui-out.h} -@file{ui-out} provides the infrastructure necessary for a client to -create a builder. That builder is then passed down to @code{libgdb} -when doing any queries. - -@subheading Event Loop - @file{event-loop.h} -@c There could be an entire section on the event-loop -@file{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 -@value{GDBN} can better handle the problem of some commands blocking -instead of returning. - -@subheading Library - @file{gdb.h} -@file{libgdb} is the most obvious component of this system. It provides -the query interface. Each function is parameterized by a @code{ui-out} -builder. The result of the query is constructed using that builder -before the query function returns. - -@node Symbol Handling - -@chapter Symbol Handling - -Symbols are a key part of @value{GDBN}'s operation. Symbols include variables, -functions, and types. - -@section Symbol Reading - -@cindex symbol reading -@cindex reading of symbols -@cindex symbol files -@value{GDBN} reads symbols from @dfn{symbol files}. The usual symbol -file is the file containing the program which @value{GDBN} is -debugging. @value{GDBN} can be directed to use a different file for -symbols (with the @samp{symbol-file} command), and it can also read -more symbols via the @samp{add-file} and @samp{load} commands, or while -reading symbols from shared libraries. - -@findex find_sym_fns -Symbol files are initially opened by code in @file{symfile.c} using -the BFD library (@pxref{Support Libraries}). BFD identifies the type -of the file by examining its header. @code{find_sym_fns} then uses -this identification to locate a set of symbol-reading functions. - -@findex add_symtab_fns -@cindex @code{sym_fns} structure -@cindex adding a symbol-reading module -Symbol-reading modules identify themselves to @value{GDBN} by calling -@code{add_symtab_fns} during their module initialization. The argument -to @code{add_symtab_fns} is a @code{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: - -@table @code -@item @var{xyz}_symfile_init(struct sym_fns *sf) - -@cindex secondary symbol file -Called from @code{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 @code{@var{xyz}_symfile_init} is a newly allocated -@code{struct sym_fns} whose @code{bfd} field contains the BFD for the -new symbol file being read. Its @code{private} field has been zeroed, -and can be modified as desired. Typically, a struct of private -information will be @code{malloc}'d, and a pointer to it will be placed -in the @code{private} field. - -There is no result from @code{@var{xyz}_symfile_init}, but it can call -@code{error} if it detects an unavoidable problem. - -@item @var{xyz}_new_init() - -Called from @code{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 -@value{GDBN} will be discarded by @code{symbol_file_add}. It has no -arguments and no result. It may be called after -@code{@var{xyz}_symfile_init}, if a new symbol table is being read, or -may be called alone if all symbols are simply being discarded. - -@item @var{xyz}_symfile_read(struct sym_fns *sf, CORE_ADDR addr, int mainline) - -Called from @code{symbol_file_add} to actually read the symbols from a -symbol-file into a set of psymtabs or symtabs. - -@code{sf} points to the @code{struct sym_fns} originally passed to -@code{@var{xyz}_sym_init} for possible initialization. @code{addr} is -the offset between the file's specified start address and its true -address in memory. @code{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.@refill -@end table - -In addition, if a symbol-reading module creates psymtabs when -@var{xyz}_symfile_read is called, these psymtabs will contain a pointer -to a function @code{@var{xyz}_psymtab_to_symtab}, which can be called -from any point in the @value{GDBN} symbol-handling code. - -@table @code -@item @var{xyz}_psymtab_to_symtab (struct partial_symtab *pst) - -Called from @code{psymtab_to_symtab} (or the @code{PSYMTAB_TO_SYMTAB} macro) if -the psymtab has not already been read in and had its @code{pst->symtab} -pointer set. The argument is the psymtab to be fleshed-out into a -symtab. Upon return, @code{pst->readin} should have been set to 1, and -@code{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. -@end table - -@section Partial Symbol Tables - -@value{GDBN} has three types of symbol tables: - -@itemize @bullet -@cindex full symbol table -@cindex symtabs -@item -Full symbol tables (@dfn{symtabs}). These contain the main -information about symbols and addresses. - -@cindex psymtabs -@item -Partial symbol tables (@dfn{psymtabs}). These contain enough -information to know when to read the corresponding part of the full -symbol table. - -@cindex minimal symbol table -@cindex minsymtabs -@item -Minimal symbol tables (@dfn{msymtabs}). These contain information -gleaned from non-debugging symbols. -@end itemize - -@cindex partial symbol table -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 @value{GDBN} 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. -@c (@xref{Symbol Reading}.) - -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 @code{enum} values declared at file scope. - -The psymtab also contains the range of instruction addresses that the -full symbol table would represent. - -@cindex finding a symbol -@cindex symbol lookup -The idea is that there are only two ways for the user (or much of the -code in the debugger) to reference a symbol: - -@itemize @bullet -@findex find_pc_function -@findex find_pc_line -@item -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. -@code{find_pc_function}, @code{find_pc_line}, and other -@code{find_pc_@dots{}} functions handle this. - -@cindex lookup_symbol -@item -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. @code{lookup_symbol} -does most of the work here. -@end itemize - -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 @value{GDBN} 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. - -@section Types - -@unnumberedsubsec Fundamental Types (e.g., @code{FT_VOID}, @code{FT_BOOLEAN}). - -@cindex fundamental types -These are the fundamental types that @value{GDBN} 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 @value{GDBN} knows about for all the languages that @value{GDBN} -knows about. - -@unnumberedsubsec Type Codes (e.g., @code{TYPE_CODE_PTR}, @code{TYPE_CODE_ARRAY}). - -@cindex type codes -Each time @value{GDBN} builds an internal type, it marks it with one -of these types. The type may be a fundamental type, such as -@code{TYPE_CODE_INT}, or a derived type, such as @code{TYPE_CODE_PTR} -which is a pointer to another type. Typically, several @code{FT_*} -types map to one @code{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. - -@unnumberedsubsec Builtin Types (e.g., @code{builtin_type_void}, @code{builtin_type_char}). - -These are instances of type structs that roughly correspond to -fundamental types and are created as global types for @value{GDBN} to -use for various ugly historical reasons. We eventually want to -eliminate these. Note for example that @code{builtin_type_int} -initialized in @file{gdbtypes.c} is basically the same as a -@code{TYPE_CODE_INT} type that is initialized in @file{c-lang.c} for -an @code{FT_INTEGER} fundamental type. The difference is that the -@code{builtin_type} is not associated with any particular objfile, and -only one instance exists, while @file{c-lang.c} builds as many -@code{TYPE_CODE_INT} types as needed, with each one associated with -some particular objfile. - -@section Object File Formats -@cindex object file formats - -@subsection a.out - -@cindex @code{a.out} format -The @code{a.out} format is the original file format for Unix. It -consists of three sections: @code{text}, @code{data}, and @code{bss}, -which are for program code, initialized data, and uninitialized data, -respectively. - -The @code{a.out} format is so simple that it doesn't have any reserved -place for debugging information. (Hey, the original Unix hackers used -@samp{adb}, which is a machine-language debugger!) The only debugging -format for @code{a.out} is stabs, which is encoded as a set of normal -symbols with distinctive attributes. - -The basic @code{a.out} reader is in @file{dbxread.c}. - -@subsection COFF - -@cindex COFF format -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 @file{coffread.c}. - -@subsection ECOFF - -@cindex ECOFF format -ECOFF is an extended COFF originally introduced for Mips and Alpha -workstations. - -The basic ECOFF reader is in @file{mipsread.c}. - -@subsection XCOFF - -@cindex XCOFF format -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 @code{dbx}-style stabs whose strings are located in the -@code{.debug} section (rather than the string table). For more -information, see @ref{Top,,,stabs,The Stabs Debugging Format}. - -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). - -@subsection PE - -@cindex PE-COFF format -Windows 95 and NT use the PE (@dfn{Portable Executable}) format for their -executables. PE is basically COFF with additional headers. - -While BFD includes special PE support, @value{GDBN} needs only the basic -COFF reader. - -@subsection ELF - -@cindex ELF format -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 @file{elfread.c}. - -@subsection SOM - -@cindex SOM format -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 @file{hpread.c}. - -@subsection Other File Formats - -@cindex Netware Loadable Module format -Other file formats that have been supported by @value{GDBN} include Netware -Loadable Modules (@file{nlmread.c}). - -@section Debugging File Formats - -This section describes characteristics of debugging information that -are independent of the object file format. - -@subsection stabs - -@cindex stabs debugging info -@code{stabs} started out as special symbols within the @code{a.out} -format. Since then, it has been encapsulated into other file -formats, such as COFF and ELF. - -While @file{dbxread.c} does some of the basic stab processing, -including for encapsulated versions, @file{stabsread.c} does -the real work. - -@subsection COFF - -@cindex COFF debugging info -The basic COFF definition includes debugging information. The level -of support is minimal and non-extensible, and is not often used. - -@subsection Mips debug (Third Eye) - -@cindex ECOFF debugging info -ECOFF includes a definition of a special debug format. - -The file @file{mdebugread.c} implements reading for this format. - -@subsection DWARF 1 - -@cindex DWARF 1 debugging info -DWARF 1 is a debugging format that was originally designed to be -used with ELF in SVR4 systems. - -@c GCC_PRODUCER -@c GPLUS_PRODUCER -@c LCC_PRODUCER -@c If defined, these are the producer strings in a DWARF 1 file. All of -@c these have reasonable defaults already. - -The DWARF 1 reader is in @file{dwarfread.c}. - -@subsection DWARF 2 - -@cindex DWARF 2 debugging info -DWARF 2 is an improved but incompatible version of DWARF 1. - -The DWARF 2 reader is in @file{dwarf2read.c}. - -@subsection SOM - -@cindex SOM debugging info -Like COFF, the SOM definition includes debugging information. - -@section Adding a New Symbol Reader to @value{GDBN} - -@cindex adding debugging info reader -If you are using an existing object file format (@code{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 @value{GDBN} will have to call swapping routines -from BFD and a few other BFD internal routines to locate the debugging -information. As much as possible, @value{GDBN} 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 -@file{bfd/lib@var{xyz}.h}, which is included by @value{GDBN}. - - -@node Language Support - -@chapter Language Support - -@cindex language support -@value{GDBN}'s language support is mainly driven by the symbol reader, -although it is possible for the user to set the source language -manually. - -@value{GDBN} chooses the source language by looking at the extension -of the file recorded in the debug info; @file{.c} means C, @file{.f} -means Fortran, etc. It may also use a special-purpose language -identifier if the debug format supports it, like with DWARF. - -@section Adding a Source Language to @value{GDBN} - -@cindex adding source language -To add other languages to @value{GDBN}'s expression parser, follow the -following steps: - -@table @emph -@item Create the expression parser. - -@cindex expression parser -This should reside in a file @file{@var{lang}-exp.y}. Routines for -building parsed expressions into a @code{union exp_element} list are in -@file{parse.c}. - -@cindex language parser -Since we can't depend upon everyone having Bison, and YACC produces -parsers that define a bunch of global names, the following lines -@strong{must} be included at the top of the YACC parser, to prevent the -various parsers from defining the same global names: - -@smallexample -#define yyparse @var{lang}_parse -#define yylex @var{lang}_lex -#define yyerror @var{lang}_error -#define yylval @var{lang}_lval -#define yychar @var{lang}_char -#define yydebug @var{lang}_debug -#define yypact @var{lang}_pact -#define yyr1 @var{lang}_r1 -#define yyr2 @var{lang}_r2 -#define yydef @var{lang}_def -#define yychk @var{lang}_chk -#define yypgo @var{lang}_pgo -#define yyact @var{lang}_act -#define yyexca @var{lang}_exca -#define yyerrflag @var{lang}_errflag -#define yynerrs @var{lang}_nerrs -@end smallexample - -At the bottom of your parser, define a @code{struct language_defn} and -initialize it with the right values for your language. Define an -@code{initialize_@var{lang}} routine and have it call -@samp{add_language(@var{lang}_language_defn)} to tell the rest of @value{GDBN} -that your language exists. You'll need some other supporting variables -and functions, which will be used via pointers from your -@code{@var{lang}_language_defn}. See the declaration of @code{struct -language_defn} in @file{language.h}, and the other @file{*-exp.y} files, -for more information. - -@item Add any evaluation routines, if necessary - -@cindex expression evaluation routines -@findex evaluate_subexp -@findex prefixify_subexp -@findex length_of_subexp -If you need new opcodes (that represent the operations of the language), -add them to the enumerated type in @file{expression.h}. Add support -code for these operations in the @code{evaluate_subexp} function -defined in the file @file{eval.c}. Add cases -for new opcodes in two functions from @file{parse.c}: -@code{prefixify_subexp} and @code{length_of_subexp}. These compute -the number of @code{exp_element}s that a given operation takes up. - -@item Update some existing code - -Add an enumerated identifier for your language to the enumerated type -@code{enum language} in @file{defs.h}. - -Update the routines in @file{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. - -@vindex current_language -Also included in @file{language.c} is the code that updates the variable -@code{current_language}, and the routines that translate the -@code{language_@var{lang}} enumerated identifier into a printable -string. - -@findex _initialize_language -Update the function @code{_initialize_language} to include your -language. This function picks the default language upon startup, so is -dependent upon which languages that @value{GDBN} is built for. - -@findex allocate_symtab -Update @code{allocate_symtab} in @file{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. - -@findex print_subexp -@findex op_print_tab -Add helper code to @code{print_subexp} (in @file{expprint.c}) to handle any new -expression opcodes you have added to @file{expression.h}. Also, add the -printed representations of your operators to @code{op_print_tab}. - -@item Add a place of call - -@findex parse_exp_1 -Add a call to @code{@var{lang}_parse()} and @code{@var{lang}_error} in -@code{parse_exp_1} (defined in @file{parse.c}). - -@item Use macros to trim code - -@cindex trimming language-dependent code -The user has the option of building @value{GDBN} for some or all of the -languages. If the user decides to build @value{GDBN} for the language -@var{lang}, then every file dependent on @file{language.h} will have the -macro @code{_LANG_@var{lang}} defined in it. Use @code{#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 @value{GDBN} -is not build for @var{lang}, then @file{@var{lang}-exp.tab.o} (the -compiled form of your parser) is not linked into @value{GDBN} at all. - -See the file @file{configure.in} for how @value{GDBN} is configured -for different languages. - -@item Edit @file{Makefile.in} - -Add dependencies in @file{Makefile.in}. Make sure you update the macro -variables such as @code{HFILES} and @code{OBJS}, otherwise your code may -not get linked in, or, worse yet, it may not get @code{tar}red into the -distribution! -@end table - - -@node Host Definition - -@chapter 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. - -@section Adding a New Host - -@cindex adding a new host -@cindex host, adding -@value{GDBN}'s host configuration support normally happens via Autoconf. -New host-specific definitions should not be needed. Older hosts -@value{GDBN} still use the host-specific definitions and files listed -below, but these mostly exist for historical reasons, and will -eventually disappear. - -@table @file -@item gdb/config/@var{arch}/@var{xyz}.mh -This file once contained both host and native configuration information -(@pxref{Native Debugging}) for the machine @var{xyz}. The host -configuration information is now handed by Autoconf. - -Host configuration information included a definition of -@code{XM_FILE=xm-@var{xyz}.h} and possibly definitions for @code{CC}, -@code{SYSV_DEFINE}, @code{XM_CFLAGS}, @code{XM_ADD_FILES}, -@code{XM_CLIBS}, @code{XM_CDEPS}, etc.; see @file{Makefile.in}. - -New host only configurations do not need this file. - -@item gdb/config/@var{arch}/xm-@var{xyz}.h -This file once contained definitions and includes required when hosting -gdb on machine @var{xyz}. Those definitions and includes are now -handled by Autoconf. - -New host and native configurations do not need this file. - -@emph{Maintainer's note: Some hosts continue to use the @file{xm-xyz.h} -file to define the macros @var{HOST_FLOAT_FORMAT}, -@var{HOST_DOUBLE_FORMAT} and @var{HOST_LONG_DOUBLE_FORMAT}. That code -also needs to be replaced with either an Autoconf or run-time test.} - -@end table - -@subheading Generic Host Support Files - -@cindex generic host support -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 @file{xm-@var{xyz}.h} file. If these routines work for -the @var{xyz} host, you can just include the generic file's name (with -@samp{.o}, not @samp{.c}) in @code{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 @code{@var{xyz}-xdep.c}, and put @code{@var{xyz}-xdep.o} -into @code{XDEPFILES}. - -@table @file -@cindex remote debugging support -@cindex serial line support -@item ser-unix.c -This contains serial line support for Unix systems. This is always -included, via the makefile variable @code{SER_HARDWIRE}; override this -variable in the @file{.mh} file to avoid it. - -@item ser-go32.c -This contains serial line support for 32-bit programs running under DOS, -using the DJGPP (a.k.a.@: GO32) execution environment. - -@cindex TCP remote support -@item ser-tcp.c -This contains generic TCP support using sockets. -@end table - -@section Host Conditionals - -When @value{GDBN} 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: - -@ftable @code -@item @value{GDBN}INIT_FILENAME -The default name of @value{GDBN}'s initialization file (normally -@file{.gdbinit}). - -@item NO_STD_REGS -This macro is deprecated. - -@item NO_SYS_FILE -Define this if your system does not have a @code{<sys/file.h>}. - -@item SIGWINCH_HANDLER -If your host defines @code{SIGWINCH}, you can define this to be the name -of a function to be called if @code{SIGWINCH} is received. - -@item SIGWINCH_HANDLER_BODY -Define this to expand into code that will define the function named by -the expansion of @code{SIGWINCH_HANDLER}. - -@item ALIGN_STACK_ON_STARTUP -@cindex stack alignment -Define this if your system is of a sort that will crash in -@code{tgetent} if the stack happens not to be longword-aligned when -@code{main} is called. This is a rare situation, but is known to occur -on several different types of systems. - -@item CRLF_SOURCE_FILES -@cindex DOS text files -Define this if host files use @code{\r\n} rather than @code{\n} as a -line terminator. This will cause source file listings to omit @code{\r} -characters when printing and it will allow @code{\r\n} line endings of files -which are ``sourced'' by gdb. It must be possible to open files in binary -mode using @code{O_BINARY} or, for fopen, @code{"rb"}. - -@item DEFAULT_PROMPT -@cindex prompt -The default value of the prompt string (normally @code{"(gdb) "}). - -@item DEV_TTY -@cindex terminal device -The name of the generic TTY device, defaults to @code{"/dev/tty"}. - -@item FCLOSE_PROVIDED -Define this if the system declares @code{fclose} in the headers included -in @code{defs.h}. This isn't needed unless your compiler is unusually -anal. - -@item FOPEN_RB -Define this if binary files are opened the same way as text files. - -@item GETENV_PROVIDED -Define this if the system declares @code{getenv} in its headers included -in @code{defs.h}. This isn't needed unless your compiler is unusually -anal. - -@item HAVE_MMAP -@findex mmap -In some cases, use the system call @code{mmap} for reading symbol -tables. For some machines this allows for sharing and quick updates. - -@item HAVE_TERMIO -Define this if the host system has @code{termio.h}. - -@item INT_MAX -@itemx INT_MIN -@itemx LONG_MAX -@itemx UINT_MAX -@itemx ULONG_MAX -Values for host-side constants. - -@item ISATTY -Substitute for isatty, if not available. - -@item LONGEST -This is the longest integer type available on the host. If not defined, -it will default to @code{long long} or @code{long}, depending on -@code{CC_HAS_LONG_LONG}. - -@item CC_HAS_LONG_LONG -@cindex @code{long long} data type -Define this if the host C compiler supports @code{long long}. This is set -by the @code{configure} script. - -@item PRINTF_HAS_LONG_LONG -Define this if the host can handle printing of long long integers via -the printf format conversion specifier @code{ll}. This is set by the -@code{configure} script. - -@item HAVE_LONG_DOUBLE -Define this if the host C compiler supports @code{long double}. This is -set by the @code{configure} script. - -@item PRINTF_HAS_LONG_DOUBLE -Define this if the host can handle printing of long double float-point -numbers via the printf format conversion specifier @code{Lg}. This is -set by the @code{configure} script. - -@item 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 -@code{Lg}. This is set by the @code{configure} script. - -@item LSEEK_NOT_LINEAR -Define this if @code{lseek (n)} does not necessarily move to byte number -@code{n} in the file. This is only used when reading source files. It -is normally faster to define @code{CRLF_SOURCE_FILES} when possible. - -@item L_SET -This macro is used as the argument to @code{lseek} (or, most commonly, -@code{bfd_seek}). FIXME, should be replaced by SEEK_SET instead, -which is the POSIX equivalent. - -@item NORETURN -If defined, this should be one or more tokens, such as @code{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. - -@item ATTR_NORETURN -If defined, this should be one or more tokens, such as -@code{__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. - -@item NO_SIGINTERRUPT -@findex siginterrupt -Define this to indicate that @code{siginterrupt} is not available. - -@item SEEK_CUR -@itemx SEEK_SET -Define these to appropriate value for the system @code{lseek}, if not already -defined. - -@item STOP_SIGNAL -This is the signal for stopping @value{GDBN}. Defaults to -@code{SIGTSTP}. (Only redefined for the Convex.) - -@item USE_O_NOCTTY -Define this if the interior's tty should be opened with the @code{O_NOCTTY} -flag. (FIXME: This should be a native-only flag, but @file{inflow.c} is -always linked in.) - -@item USG -Means that System V (prior to SVR4) include files are in use. (FIXME: -This symbol is abused in @file{infrun.c}, @file{regex.c}, and -@file{utils.c} for other things, at the moment.) - -@item lint -Define this to help placate @code{lint} in some situations. - -@item volatile -Define this to override the defaults of @code{__volatile__} or -@code{/**/}. -@end ftable - - -@node Target Architecture Definition - -@chapter Target Architecture Definition - -@cindex target architecture definition -@value{GDBN}'s target architecture defines what sort of -machine-language programs @value{GDBN} can work with, and how it works -with them. - -The target architecture object is implemented as the C structure -@code{struct gdbarch *}. The structure, and its methods, are generated -using the Bourne shell script @file{gdbarch.sh}. - -@section Operating System ABI Variant Handling -@cindex OS ABI variants - -@value{GDBN} 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 @dfn{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 @dfn{generic}, while sniffers for a specific architecture are -considered to be @dfn{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 @code{EI_OSABI} field of the ELF header, as well as note -sections known to be used by several operating systems. - -@cindex fine-tuning @code{gdbarch} structure -A @dfn{handler} is used to fine-tune the @code{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 @file{osabi.h}: - -@table @code - -@findex GDB_OSABI_UNKNOWN -@item GDB_OSABI_UNKNOWN -The ABI of the inferior is unknown. The default @code{gdbarch} -settings for the architecture will be used. - -@findex GDB_OSABI_SVR4 -@item GDB_OSABI_SVR4 -UNIX System V Release 4 - -@findex GDB_OSABI_HURD -@item GDB_OSABI_HURD -GNU using the Hurd kernel - -@findex GDB_OSABI_SOLARIS -@item GDB_OSABI_SOLARIS -Sun Solaris - -@findex GDB_OSABI_OSF1 -@item GDB_OSABI_OSF1 -OSF/1, including Digital UNIX and Compaq Tru64 UNIX - -@findex GDB_OSABI_LINUX -@item GDB_OSABI_LINUX -GNU using the Linux kernel - -@findex GDB_OSABI_FREEBSD_AOUT -@item GDB_OSABI_FREEBSD_AOUT -FreeBSD using the a.out executable format - -@findex GDB_OSABI_FREEBSD_ELF -@item GDB_OSABI_FREEBSD_ELF -FreeBSD using the ELF executable format - -@findex GDB_OSABI_NETBSD_AOUT -@item GDB_OSABI_NETBSD_AOUT -NetBSD using the a.out executable format - -@findex GDB_OSABI_NETBSD_ELF -@item GDB_OSABI_NETBSD_ELF -NetBSD using the ELF executable format - -@findex GDB_OSABI_WINCE -@item GDB_OSABI_WINCE -Windows CE - -@findex GDB_OSABI_GO32 -@item GDB_OSABI_GO32 -DJGPP - -@findex GDB_OSABI_NETWARE -@item GDB_OSABI_NETWARE -Novell NetWare - -@findex GDB_OSABI_ARM_EABI_V1 -@item GDB_OSABI_ARM_EABI_V1 -ARM Embedded ABI version 1 - -@findex GDB_OSABI_ARM_EABI_V2 -@item GDB_OSABI_ARM_EABI_V2 -ARM Embedded ABI version 2 - -@findex GDB_OSABI_ARM_APCS -@item GDB_OSABI_ARM_APCS -Generic ARM Procedure Call Standard - -@end table - -Here are the functions that make up the OS ABI framework: - -@deftypefun const char *gdbarch_osabi_name (enum gdb_osabi @var{osabi}) -Return the name of the OS ABI corresponding to @var{osabi}. -@end deftypefun - -@deftypefun void gdbarch_register_osabi (enum bfd_architecture @var{arch}, unsigned long @var{machine}, enum gdb_osabi @var{osabi}, void (*@var{init_osabi})(struct gdbarch_info @var{info}, struct gdbarch *@var{gdbarch})) -Register the OS ABI handler specified by @var{init_osabi} for the -architecture, machine type and OS ABI specified by @var{arch}, -@var{machine} and @var{osabi}. In most cases, a value of zero for the -machine type, which implies the architecture's default machine type, -will suffice. -@end deftypefun - -@deftypefun void gdbarch_register_osabi_sniffer (enum bfd_architecture @var{arch}, enum bfd_flavour @var{flavour}, enum gdb_osabi (*@var{sniffer})(bfd *@var{abfd})) -Register the OS ABI file sniffer specified by @var{sniffer} for the -BFD architecture/flavour pair specified by @var{arch} and @var{flavour}. -If @var{arch} is @code{bfd_arch_unknown}, the sniffer is considered to -be generic, and is allowed to examine @var{flavour}-flavoured files for -any architecture. -@end deftypefun - -@deftypefun enum gdb_osabi gdbarch_lookup_osabi (bfd *@var{abfd}) -Examine the file described by @var{abfd} to determine its OS ABI. -The value @code{GDB_OSABI_UNKNOWN} is returned if the OS ABI cannot -be determined. -@end deftypefun - -@deftypefun void gdbarch_init_osabi (struct gdbarch info @var{info}, struct gdbarch *@var{gdbarch}, enum gdb_osabi @var{osabi}) -Invoke the OS ABI handler corresponding to @var{osabi} to fine-tune the -@code{gdbarch} structure specified by @var{gdbarch}. If a handler -corresponding to @var{osabi} has not been registered for @var{gdbarch}'s -architecture, a warning will be issued and the debugging session will continue -with the defaults already established for @var{gdbarch}. -@end deftypefun - -@section Registers and Memory - -@value{GDBN}'s model of the target machine is rather simple. -@value{GDBN} assumes the machine includes a bank of registers and a -block of memory. Each register may have a different size. - -@value{GDBN} 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 @code{REGISTER_NAME} and related macros. - -@value{GDBN} can handle big-endian, little-endian, and bi-endian architectures. - -@section Pointers Are Not Always Addresses -@cindex pointer representation -@cindex address representation -@cindex word-addressed machines -@cindex separate data and code address spaces -@cindex spaces, separate data and code address -@cindex address spaces, separate data and code -@cindex code pointers, word-addressed -@cindex converting between pointers and addresses -@cindex D10V 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@footnote{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.}. -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 @code{0xC020} refers to byte address -@code{0xC020} when used as a data address, but refers to byte address -@code{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!---@value{GDBN} tries to distinguish between @dfn{addresses}, which are -byte numbers, and @dfn{pointers}, which are the target's representation -of an address of a particular type of data. In the example above, -@code{0xC020} is the pointer, which refers to one of the addresses -@code{0xC020} or @code{0x30080}, depending on the type imposed upon it. -@value{GDBN} 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 @value{GDBN} 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: - -@deftypefun CORE_ADDR extract_typed_address (void *@var{buf}, struct type *@var{type}) -Treat the bytes at @var{buf} as a pointer or reference of type -@var{type}, and return the address it represents, in a manner -appropriate for the current architecture. This yields an address -@value{GDBN} can use to read target memory, disassemble, etc. Note that -@var{buf} refers to a buffer in @value{GDBN}'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 -@var{buf} and returns it. However, if the current architecture is the -D10V, this function will return a 16-bit integer extracted from -@var{buf}, multiplied by four if @var{type} is a pointer to a function. - -If @var{type} is not a pointer or reference type, then this function -will signal an internal error. -@end deftypefun - -@deftypefun CORE_ADDR store_typed_address (void *@var{buf}, struct type *@var{type}, CORE_ADDR @var{addr}) -Store the address @var{addr} in @var{buf}, in the proper format for a -pointer of type @var{type} in the current architecture. Note that -@var{buf} refers to a buffer in @value{GDBN}'s memory, not the -inferior's. - -For example, if the current architecture is the Intel x86, this function -stores @var{addr} unmodified as a little-endian integer of the -appropriate length in @var{buf}. However, if the current architecture -is the D10V, this function divides @var{addr} by four if @var{type} is -a pointer to a function, and then stores it in @var{buf}. - -If @var{type} is not a pointer or reference type, then this function -will signal an internal error. -@end deftypefun - -@deftypefun CORE_ADDR value_as_address (struct value *@var{val}) -Assuming that @var{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 @code{extract_typed_address}. -@end deftypefun - -@deftypefun CORE_ADDR value_from_pointer (struct type *@var{type}, CORE_ADDR @var{addr}) -Create and return a value representing a pointer of type @var{type} to -the address @var{addr}, as appropriate for the current architecture. -This function performs architecture-specific conversions as described -above for @code{store_typed_address}. -@end deftypefun - -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. - -@deftypefn {Target Macro} CORE_ADDR POINTER_TO_ADDRESS (struct type *@var{type}, char *@var{buf}) -Assume that @var{buf} holds a pointer of type @var{type}, in the -appropriate format for the current architecture. Return the byte -address the pointer refers to. - -This function may safely assume that @var{type} is either a pointer or a -C@t{++} reference type. -@end deftypefn - -@deftypefn {Target Macro} void ADDRESS_TO_POINTER (struct type *@var{type}, char *@var{buf}, CORE_ADDR @var{addr}) -Store in @var{buf} a pointer of type @var{type} representing the address -@var{addr}, in the appropriate format for the current architecture. - -This function may safely assume that @var{type} is either a pointer or a -C@t{++} reference type. -@end deftypefn - -@section Address Classes -@cindex address classes -@cindex DW_AT_byte_size -@cindex DW_AT_address_class - -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, @code{DW_AT_byte_size} in @w{DWARF 2}) or through an explicit -address class attribute (e.g, @code{DW_AT_address_class} in @w{DWARF 2}), the -following macros should be defined in order to disambiguate these -types within @value{GDBN} as well as provide the added information to -a @value{GDBN} user when printing type expressions. - -@deftypefn {Target Macro} int ADDRESS_CLASS_TYPE_FLAGS (int @var{byte_size}, int @var{dwarf2_addr_class}) -Returns the type flags needed to construct a pointer type whose size -is @var{byte_size} and whose address class is @var{dwarf2_addr_class}. -This function is normally called from within a symbol reader. See -@file{dwarf2read.c}. -@end deftypefn - -@deftypefn {Target Macro} char *ADDRESS_CLASS_TYPE_FLAGS_TO_NAME (int @var{type_flags}) -Given the type flags representing an address class qualifier, return -its name. -@end deftypefn -@deftypefn {Target Macro} int ADDRESS_CLASS_NAME_to_TYPE_FLAGS (int @var{name}, int *var{type_flags_ptr}) -Given an address qualifier name, set the @code{int} refererenced by @var{type_flags_ptr} to the type flags -for that address class qualifier. -@end deftypefn - -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 @w{DWARF 2} information for this architecture simply -uses a @code{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: - -@smallexample -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; -@} -@end smallexample - -The qualifier @code{@@short} is used in @value{GDBN}'s type expressions -to indicate the presence of one of these "short" pointers. E.g, if -the debug information indicates that @code{short_ptr_var} is one of these -short pointers, @value{GDBN} might show the following behavior: - -@smallexample -(gdb) ptype short_ptr_var -type = int * @@short -@end smallexample - - -@section Raw and Virtual Register Representations -@cindex raw register representation -@cindex virtual register representation -@cindex representations, raw and virtual registers - -@emph{Maintainer note: This section is pretty much obsolete. The -functionality described here has largely been replaced by -pseudo-registers and the mechanisms described in @ref{Target -Architecture Definition, , Using Different Register and Memory Data -Representations}. See also @uref{http://www.gnu.org/software/gdb/bugs/, -Bug Tracking Database} and -@uref{http://sources.redhat.com/gdb/current/ari/, ARI Index} 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 @value{GDBN}'s terminology, the @dfn{raw} representation is the one used in -the target registers, and the @dfn{virtual} representation is the one -used in memory, and within @value{GDBN} @code{struct value} objects. - -@emph{Maintainer note: Notice that the same mechanism is being used to -both convert a register to a @code{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: - -@itemize @bullet -@item -The x86 architecture supports an 80-bit @code{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. - -@item -Some 64-bit MIPS targets present 32-bit registers to @value{GDBN} as 64-bit -registers, with garbage in their upper bits. @value{GDBN} 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. -@end itemize - -In general, the raw representation is determined by the architecture, or -@value{GDBN}'s interface to the architecture, while the virtual representation -can be chosen for @value{GDBN}'s convenience. @value{GDBN}'s register file, -@code{registers}, holds the register contents in raw format, and the -@value{GDBN} remote protocol transmits register values in raw format. - -Your architecture may define the following macros to request -conversions between the raw and virtual format: - -@deftypefn {Target Macro} int REGISTER_CONVERTIBLE (int @var{reg}) -Return non-zero if register number @var{reg}'s value needs different raw -and virtual formats. - -You should not use @code{REGISTER_CONVERT_TO_VIRTUAL} for a register -unless this macro returns a non-zero value for that register. -@end deftypefn - -@deftypefn {Target Macro} int DEPRECATED_REGISTER_RAW_SIZE (int @var{reg}) -The size of register number @var{reg}'s raw value. This is the number -of bytes the register will occupy in @code{registers}, or in a @value{GDBN} -remote protocol packet. -@end deftypefn - -@deftypefn {Target Macro} int DEPRECATED_REGISTER_VIRTUAL_SIZE (int @var{reg}) -The size of register number @var{reg}'s value, in its virtual format. -This is the size a @code{struct value}'s buffer will have, holding that -register's value. -@end deftypefn - -@deftypefn {Target Macro} struct type *DEPRECATED_REGISTER_VIRTUAL_TYPE (int @var{reg}) -This is the type of the virtual representation of register number -@var{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, @value{GDBN} -always uses the virtual form. -@end deftypefn - -@deftypefn {Target Macro} void REGISTER_CONVERT_TO_VIRTUAL (int @var{reg}, struct type *@var{type}, char *@var{from}, char *@var{to}) -Convert the value of register number @var{reg} to @var{type}, which -should always be @code{DEPRECATED_REGISTER_VIRTUAL_TYPE (@var{reg})}. The buffer -at @var{from} holds the register's value in raw format; the macro should -convert the value to virtual format, and place it at @var{to}. - -Note that @code{REGISTER_CONVERT_TO_VIRTUAL} and -@code{REGISTER_CONVERT_TO_RAW} take their @var{reg} and @var{type} -arguments in different orders. - -You should only use @code{REGISTER_CONVERT_TO_VIRTUAL} with registers -for which the @code{REGISTER_CONVERTIBLE} macro returns a non-zero -value. -@end deftypefn - -@deftypefn {Target Macro} void REGISTER_CONVERT_TO_RAW (struct type *@var{type}, int @var{reg}, char *@var{from}, char *@var{to}) -Convert the value of register number @var{reg} to @var{type}, which -should always be @code{DEPRECATED_REGISTER_VIRTUAL_TYPE (@var{reg})}. The buffer -at @var{from} holds the register's value in raw format; the macro should -convert the value to virtual format, and place it at @var{to}. - -Note that REGISTER_CONVERT_TO_VIRTUAL and REGISTER_CONVERT_TO_RAW take -their @var{reg} and @var{type} arguments in different orders. -@end deftypefn - - -@section Using Different Register and Memory Data Representations -@cindex register representation -@cindex memory representation -@cindex representations, register and memory -@cindex register data formats, converting -@cindex @code{struct value}, converting register contents to - -@emph{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 -@uref{http://sources.redhat.com/gdb/current/ari/, A.R. Index} and -@uref{http://www.gnu.org/software/gdb/bugs, Bug Tracking Database} 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: - -@itemize @bullet - -@item -The Alpha architecture can represent 32 bit integer values in -floating-point registers. - -@item -The x86 architecture supports 80-bit floating-point registers. The -@code{long double} data type occupies 96 bits in memory but only 80 bits -when stored in a register. - -@end itemize - -In general, the register representation of a data type is determined by -the architecture, or @value{GDBN}'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: - -@deftypefn {Target Macro} int CONVERT_REGISTER_P (int @var{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 @code{REGISTER_TO_VALUE} and -@code{VALUE_TO_REGISTER} are used to perform any necessary conversion. -@end deftypefn - -@deftypefn {Target Macro} void REGISTER_TO_VALUE (int @var{reg}, struct type *@var{type}, char *@var{from}, char *@var{to}) -Convert the value of register number @var{reg} to a data object of type -@var{type}. The buffer at @var{from} holds the register's value in raw -format; the converted value should be placed in the buffer at @var{to}. - -Note that @code{REGISTER_TO_VALUE} and @code{VALUE_TO_REGISTER} take -their @var{reg} and @var{type} arguments in different orders. - -You should only use @code{REGISTER_TO_VALUE} with registers for which -the @code{CONVERT_REGISTER_P} macro returns a non-zero value. -@end deftypefn - -@deftypefn {Target Macro} void VALUE_TO_REGISTER (struct type *@var{type}, int @var{reg}, char *@var{from}, char *@var{to}) -Convert a data value of type @var{type} to register number @var{reg}' -raw format. - -Note that @code{REGISTER_TO_VALUE} and @code{VALUE_TO_REGISTER} take -their @var{reg} and @var{type} arguments in different orders. - -You should only use @code{VALUE_TO_REGISTER} with registers for which -the @code{CONVERT_REGISTER_P} macro returns a non-zero value. -@end deftypefn - -@deftypefn {Target Macro} void REGISTER_CONVERT_TO_TYPE (int @var{regnum}, struct type *@var{type}, char *@var{buf}) -See @file{mips-tdep.c}. It does not do what you want. -@end deftypefn - - -@section Frame Interpretation - -@section Inferior Call Setup - -@section Compiler Characteristics - -@section Target Conditionals - -This section describes the macros that you can use to define the target -machine. - -@table @code - -@item ADDR_BITS_REMOVE (addr) -@findex ADDR_BITS_REMOVE -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 @var{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 @code{((addr) & ~3)}. - -@item ADDRESS_CLASS_NAME_TO_TYPE_FLAGS (@var{name}, @var{type_flags_ptr}) -@findex ADDRESS_CLASS_NAME_TO_TYPE_FLAGS -If @var{name} is a valid address class qualifier name, set the @code{int} -referenced by @var{type_flags_ptr} to the mask representing the qualifier -and return 1. If @var{name} is not a valid address class qualifier name, -return 0. - -The value for @var{type_flags_ptr} should be one of -@code{TYPE_FLAG_ADDRESS_CLASS_1}, @code{TYPE_FLAG_ADDRESS_CLASS_2}, or -possibly some combination of these values or'd together. -@xref{Target Architecture Definition, , Address Classes}. - -@item ADDRESS_CLASS_NAME_TO_TYPE_FLAGS_P () -@findex ADDRESS_CLASS_NAME_TO_TYPE_FLAGS_P -Predicate which indicates whether @code{ADDRESS_CLASS_NAME_TO_TYPE_FLAGS} -has been defined. - -@item ADDRESS_CLASS_TYPE_FLAGS (@var{byte_size}, @var{dwarf2_addr_class}) -@findex ADDRESS_CLASS_TYPE_FLAGS (@var{byte_size}, @var{dwarf2_addr_class}) -Given a pointers byte size (as described by the debug information) and -the possible @code{DW_AT_address_class} value, return the type flags -used by @value{GDBN} to represent this address class. The value -returned should be one of @code{TYPE_FLAG_ADDRESS_CLASS_1}, -@code{TYPE_FLAG_ADDRESS_CLASS_2}, or possibly some combination of these -values or'd together. -@xref{Target Architecture Definition, , Address Classes}. - -@item ADDRESS_CLASS_TYPE_FLAGS_P () -@findex ADDRESS_CLASS_TYPE_FLAGS_P -Predicate which indicates whether @code{ADDRESS_CLASS_TYPE_FLAGS} has -been defined. - -@item ADDRESS_CLASS_TYPE_FLAGS_TO_NAME (@var{type_flags}) -@findex ADDRESS_CLASS_TYPE_FLAGS_TO_NAME -Return the name of the address class qualifier associated with the type -flags given by @var{type_flags}. - -@item ADDRESS_CLASS_TYPE_FLAGS_TO_NAME_P () -@findex ADDRESS_CLASS_TYPE_FLAGS_TO_NAME_P -Predicate which indicates whether @code{ADDRESS_CLASS_TYPE_FLAGS_TO_NAME} has -been defined. -@xref{Target Architecture Definition, , Address Classes}. - -@item ADDRESS_TO_POINTER (@var{type}, @var{buf}, @var{addr}) -@findex ADDRESS_TO_POINTER -Store in @var{buf} a pointer of type @var{type} representing the address -@var{addr}, in the appropriate format for the current architecture. -This macro may safely assume that @var{type} is either a pointer or a -C@t{++} reference type. -@xref{Target Architecture Definition, , Pointers Are Not Always Addresses}. - -@item BELIEVE_PCC_PROMOTION -@findex BELIEVE_PCC_PROMOTION -Define if the compiler promotes a @code{short} or @code{char} -parameter to an @code{int}, but still reports the parameter as its -original type, rather than the promoted type. - -@item BELIEVE_PCC_PROMOTION_TYPE -@findex BELIEVE_PCC_PROMOTION_TYPE -Define this if @value{GDBN} should believe the type of a @code{short} -argument when compiled by @code{pcc}, but look within a full int space to get -its value. Only defined for Sun-3 at present. - -@item BITS_BIG_ENDIAN -@findex BITS_BIG_ENDIAN -Define this if the numbering of bits in the targets does @strong{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. - -@item BREAKPOINT -@findex 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. - -@code{BREAKPOINT} has been deprecated in favor of -@code{BREAKPOINT_FROM_PC}. - -@item BIG_BREAKPOINT -@itemx LITTLE_BREAKPOINT -@findex LITTLE_BREAKPOINT -@findex BIG_BREAKPOINT -Similar to BREAKPOINT, but used for bi-endian targets. - -@code{BIG_BREAKPOINT} and @code{LITTLE_BREAKPOINT} have been deprecated in -favor of @code{BREAKPOINT_FROM_PC}. - -@item DEPRECATED_REMOTE_BREAKPOINT -@itemx DEPRECATED_LITTLE_REMOTE_BREAKPOINT -@itemx DEPRECATED_BIG_REMOTE_BREAKPOINT -@findex DEPRECATED_BIG_REMOTE_BREAKPOINT -@findex DEPRECATED_LITTLE_REMOTE_BREAKPOINT -@findex DEPRECATED_REMOTE_BREAKPOINT -Specify the breakpoint instruction sequence for a remote target. -@code{DEPRECATED_REMOTE_BREAKPOINT}, -@code{DEPRECATED_BIG_REMOTE_BREAKPOINT} and -@code{DEPRECATED_LITTLE_REMOTE_BREAKPOINT} have been deprecated in -favor of @code{BREAKPOINT_FROM_PC} (@pxref{BREAKPOINT_FROM_PC}). - -@item BREAKPOINT_FROM_PC (@var{pcptr}, @var{lenptr}) -@findex BREAKPOINT_FROM_PC -@anchor{BREAKPOINT_FROM_PC} 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 @code{*@var{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 @var{BREAKPOINT} macros. - -@item MEMORY_INSERT_BREAKPOINT (@var{addr}, @var{contents_cache}) -@itemx MEMORY_REMOVE_BREAKPOINT (@var{addr}, @var{contents_cache}) -@findex MEMORY_REMOVE_BREAKPOINT -@findex MEMORY_INSERT_BREAKPOINT -Insert or remove memory based breakpoints. Reasonable defaults -(@code{default_memory_insert_breakpoint} and -@code{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 -@code{MEMORY_INSERT_BREAKPOINT} and @code{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 -@code{BREAKPOINT_FROM_PC} needs to read the target's memory for some -reason. - -@item ADJUST_BREAKPOINT_ADDRESS (@var{address}) -@findex ADJUST_BREAKPOINT_ADDRESS -@cindex breakpoint address adjusted -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 @file{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, @value{GDBN} must be careful to @emph{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 @emph{first} instruction is the instruction -at the lowest address and has nothing to do with execution order.) - -The FR-V's @code{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, @value{GDBN} prints a warning when an adjusted breakpoint -is initially set and each time that that breakpoint is hit. - -@item DEPRECATED_CALL_DUMMY_WORDS -@findex DEPRECATED_CALL_DUMMY_WORDS -Pointer to an array of @code{LONGEST} words of data containing -host-byte-ordered @code{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 @code{push_dummy_code} -(@pxref{push_dummy_code}). - -@item DEPRECATED_SIZEOF_CALL_DUMMY_WORDS -@findex DEPRECATED_SIZEOF_CALL_DUMMY_WORDS -The size of @code{DEPRECATED_CALL_DUMMY_WORDS}. This must return a -positive value. See also @code{DEPRECATED_CALL_DUMMY_LENGTH}. - -This method has been replaced by @code{push_dummy_code} -(@pxref{push_dummy_code}). - -@item CALL_DUMMY -@findex CALL_DUMMY -A static initializer for @code{DEPRECATED_CALL_DUMMY_WORDS}. -Deprecated. - -This method has been replaced by @code{push_dummy_code} -(@pxref{push_dummy_code}). - -@item CALL_DUMMY_LOCATION -@findex CALL_DUMMY_LOCATION -See the file @file{inferior.h}. - -This method has been replaced by @code{push_dummy_code} -(@pxref{push_dummy_code}). - -@item CANNOT_FETCH_REGISTER (@var{regno}) -@findex CANNOT_FETCH_REGISTER -A C expression that should be nonzero if @var{regno} cannot be fetched -from an inferior process. This is only relevant if -@code{FETCH_INFERIOR_REGISTERS} is not defined. - -@item CANNOT_STORE_REGISTER (@var{regno}) -@findex CANNOT_STORE_REGISTER -A C expression that should be nonzero if @var{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, -@value{GDBN} will assume that all registers may be written. - -@item DO_DEFERRED_STORES -@itemx CLEAR_DEFERRED_STORES -@findex CLEAR_DEFERRED_STORES -@findex DO_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? - -@item int CONVERT_REGISTER_P(@var{regnum}) -@findex CONVERT_REGISTER_P -Return non-zero if register @var{regnum} can represent data values in a -non-standard form. -@xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}. - -@item DECR_PC_AFTER_BREAK -@findex 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 -@code{BREAKPOINT}, though not always. For most targets this value will be 0. - -@item DISABLE_UNSETTABLE_BREAK (@var{addr}) -@findex DISABLE_UNSETTABLE_BREAK -If defined, this should evaluate to 1 if @var{addr} is in a shared -library in which breakpoints cannot be set and so should be disabled. - -@item PRINT_FLOAT_INFO() -@findex PRINT_FLOAT_INFO -If defined, then the @samp{info float} command will print information about -the processor's floating point unit. - -@item print_registers_info (@var{gdbarch}, @var{frame}, @var{regnum}, @var{all}) -@findex print_registers_info -If defined, pretty print the value of the register @var{regnum} for the -specified @var{frame}. If the value of @var{regnum} is -1, pretty print -either all registers (@var{all} is non zero) or a select subset of -registers (@var{all} is zero). - -The default method prints one register per line, and if @var{all} is -zero omits floating-point registers. - -@item PRINT_VECTOR_INFO() -@findex PRINT_VECTOR_INFO -If defined, then the @samp{info vector} command will call this function -to print information about the processor's vector unit. - -By default, the @samp{info vector} command will print all vector -registers (the register's type having the vector attribute). - -@item DWARF_REG_TO_REGNUM -@findex DWARF_REG_TO_REGNUM -Convert DWARF register number into @value{GDBN} regnum. If not defined, -no conversion will be performed. - -@item DWARF2_REG_TO_REGNUM -@findex DWARF2_REG_TO_REGNUM -Convert DWARF2 register number into @value{GDBN} regnum. If not -defined, no conversion will be performed. - -@item ECOFF_REG_TO_REGNUM -@findex ECOFF_REG_TO_REGNUM -Convert ECOFF register number into @value{GDBN} regnum. If not defined, -no conversion will be performed. - -@item END_OF_TEXT_DEFAULT -@findex END_OF_TEXT_DEFAULT -This is an expression that should designate the end of the text section. -@c (? FIXME ?) - -@item EXTRACT_RETURN_VALUE(@var{type}, @var{regbuf}, @var{valbuf}) -@findex EXTRACT_RETURN_VALUE -Define this to extract a function's return value of type @var{type} from -the raw register state @var{regbuf} and copy that, in virtual format, -into @var{valbuf}. - -This method has been deprecated in favour of @code{gdbarch_return_value} -(@pxref{gdbarch_return_value}). - -@item DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(@var{regbuf}) -@findex DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS -@anchor{DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS} -When defined, extract from the array @var{regbuf} (containing the raw -register state) the @code{CORE_ADDR} at which a function should return -its structure value. - -@xref{gdbarch_return_value}. - -@item DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P() -@findex DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P -Predicate for @code{DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS}. - -@item DEPRECATED_FP_REGNUM -@findex 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 @code{DEPRECATED_TARGET_READ_FP} -is not defined. - -@item DEPRECATED_FRAMELESS_FUNCTION_INVOCATION(@var{fi}) -@findex DEPRECATED_FRAMELESS_FUNCTION_INVOCATION -Define this to an expression that returns 1 if the function invocation -represented by @var{fi} does not have a stack frame associated with it. -Otherwise return 0. - -@item frame_align (@var{address}) -@anchor{frame_align} -@findex frame_align -Define this to adjust @var{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 (@pxref{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 @code{DEPRECATED_STACK_ALIGN}, this function always adjusts the -address in the direction of stack growth. - -By default, no frame based stack alignment is performed. - -@item int frame_red_zone_size - -The number of bytes, beyond the innermost-stack-address, reserved by the -@sc{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, @value{GDBN} adjusts the innermost-stack-address by -@var{frame_red_zone_size} bytes before pushing parameters onto the -stack. - -By default, zero bytes are allocated. The value must be aligned -(@pxref{frame_align}). - -The @sc{amd64} (nee x86-64) @sc{abi} documentation refers to the -@emph{red zone} when describing this scratch area. -@cindex red zone - -@item DEPRECATED_FRAME_CHAIN(@var{frame}) -@findex DEPRECATED_FRAME_CHAIN -Given @var{frame}, return a pointer to the calling frame. - -@item DEPRECATED_FRAME_CHAIN_VALID(@var{chain}, @var{thisframe}) -@findex DEPRECATED_FRAME_CHAIN_VALID -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 @code{NULL} -chain pointers, dummy frames, and frames whose PC values are inside the -startup file (e.g.@: @file{crt0.o}), inside @code{main}, or inside -@code{_start}. - -@item DEPRECATED_FRAME_INIT_SAVED_REGS(@var{frame}) -@findex DEPRECATED_FRAME_INIT_SAVED_REGS -See @file{frame.h}. Determines the address of all registers in the -current stack frame storing each in @code{frame->saved_regs}. Space for -@code{frame->saved_regs} shall be allocated by -@code{DEPRECATED_FRAME_INIT_SAVED_REGS} using -@code{frame_saved_regs_zalloc}. - -@code{FRAME_FIND_SAVED_REGS} is deprecated. - -@item FRAME_NUM_ARGS (@var{fi}) -@findex FRAME_NUM_ARGS -For the frame described by @var{fi} return the number of arguments that -are being passed. If the number of arguments is not known, return -@code{-1}. - -@item DEPRECATED_FRAME_SAVED_PC(@var{frame}) -@findex DEPRECATED_FRAME_SAVED_PC -@anchor{DEPRECATED_FRAME_SAVED_PC} Given @var{frame}, return the pc -saved there. This is the return address. - -This method is deprecated. @xref{unwind_pc}. - -@item CORE_ADDR unwind_pc (struct frame_info *@var{this_frame}) -@findex unwind_pc -@anchor{unwind_pc} Return the instruction address, in @var{this_frame}'s -caller, at which execution will resume after @var{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: - -@smallexample -ULONGEST pc; -frame_unwind_unsigned_register (this_frame, D10V_PC_REGNUM, &pc); -return d10v_make_iaddr (pc); -@end smallexample - -@noindent -@xref{DEPRECATED_FRAME_SAVED_PC}, which this method replaces. - -@item CORE_ADDR unwind_sp (struct frame_info *@var{this_frame}) -@findex unwind_sp -@anchor{unwind_sp} Return the frame's inner most stack address. This is -commonly refered to as the frame's @dfn{stack pointer}. - -The implementation, which must be frame agnostic (work with any frame), -is typically no more than: - -@smallexample -ULONGEST sp; -frame_unwind_unsigned_register (this_frame, D10V_SP_REGNUM, &sp); -return d10v_make_daddr (sp); -@end smallexample - -@noindent -@xref{TARGET_READ_SP}, which this method replaces. - -@item FUNCTION_EPILOGUE_SIZE -@findex FUNCTION_EPILOGUE_SIZE -For some COFF targets, the @code{x_sym.x_misc.x_fsize} field of the -function end symbol is 0. For such targets, you must define -@code{FUNCTION_EPILOGUE_SIZE} to expand into the standard size of a -function's epilogue. - -@item FUNCTION_START_OFFSET -@findex 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 @code{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, @code{FUNCTION_START_OFFSET} would -be 2 on the VAX. - -@item GCC_COMPILED_FLAG_SYMBOL -@itemx GCC2_COMPILED_FLAG_SYMBOL -@findex GCC2_COMPILED_FLAG_SYMBOL -@findex GCC_COMPILED_FLAG_SYMBOL -If defined, these are the names of the symbols that @value{GDBN} will -look for to detect that GCC compiled the file. The default symbols -are @code{gcc_compiled.} and @code{gcc2_compiled.}, -respectively. (Currently only defined for the Delta 68.) - -@item @value{GDBN}_MULTI_ARCH -@findex @value{GDBN}_MULTI_ARCH -If defined and non-zero, enables support for multiple architectures -within @value{GDBN}. - -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. - -@item @value{GDBN}_TARGET_IS_HPPA -@findex @value{GDBN}_TARGET_IS_HPPA -This determines whether horrible kludge code in @file{dbxread.c} and -@file{partial-stab.h} is used to mangle multiple-symbol-table files from -HPPA's. This should all be ripped out, and a scheme like @file{elfread.c} -used instead. - -@item GET_LONGJMP_TARGET -@findex 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 @file{setjmp.h} is needed to define it. - -This macro determines the target PC address that @code{longjmp} will jump to, -assuming that we have just stopped at a @code{longjmp} breakpoint. It takes a -@code{CORE_ADDR *} as argument, and stores the target PC value through this -pointer. It examines the current state of the machine as needed. - -@item DEPRECATED_GET_SAVED_REGISTER -@findex DEPRECATED_GET_SAVED_REGISTER -Define this if you need to supply your own definition for the function -@code{DEPRECATED_GET_SAVED_REGISTER}. - -@item DEPRECATED_IBM6000_TARGET -@findex 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. - -@item I386_USE_GENERIC_WATCHPOINTS -An x86-based target can define this to use the generic x86 watchpoint -support; see @ref{Algorithms, I386_USE_GENERIC_WATCHPOINTS}. - -@item SYMBOLS_CAN_START_WITH_DOLLAR -@findex SYMBOLS_CAN_START_WITH_DOLLAR -Some systems have routines whose names start with @samp{$}. Giving this -macro a non-zero value tells @value{GDBN}'s expression parser to check for such -routines when parsing tokens that begin with @samp{$}. - -On HP-UX, certain system routines (millicode) have names beginning with -@samp{$} or @samp{$$}. For example, @code{$$dyncall} is a millicode -routine that handles inter-space procedure calls on PA-RISC. - -@item DEPRECATED_INIT_EXTRA_FRAME_INFO (@var{fromleaf}, @var{frame}) -@findex DEPRECATED_INIT_EXTRA_FRAME_INFO -If additional information about the frame is required this should be -stored in @code{frame->extra_info}. Space for @code{frame->extra_info} -is allocated using @code{frame_extra_info_zalloc}. - -@item DEPRECATED_INIT_FRAME_PC (@var{fromleaf}, @var{prev}) -@findex DEPRECATED_INIT_FRAME_PC -This is a C statement that sets the pc of the frame pointed to by -@var{prev}. [By default...] - -@item INNER_THAN (@var{lhs}, @var{rhs}) -@findex INNER_THAN -Returns non-zero if stack address @var{lhs} is inner than (nearer to the -stack top) stack address @var{rhs}. Define this as @code{lhs < rhs} if -the target's stack grows downward in memory, or @code{lhs > rsh} if the -stack grows upward. - -@item gdbarch_in_function_epilogue_p (@var{gdbarch}, @var{pc}) -@findex gdbarch_in_function_epilogue_p -Returns non-zero if the given @var{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. - -@item SIGTRAMP_START (@var{pc}) -@findex SIGTRAMP_START -@itemx SIGTRAMP_END (@var{pc}) -@findex SIGTRAMP_END -Define these to be the start and end address of the @code{sigtramp} for the -given @var{pc}. On machines where the address is just a compile time -constant, the macro expansion will typically just ignore the supplied -@var{pc}. - -@item IN_SOLIB_CALL_TRAMPOLINE (@var{pc}, @var{name}) -@findex IN_SOLIB_CALL_TRAMPOLINE -Define this to evaluate to nonzero if the program is stopped in the -trampoline that connects to a shared library. - -@item IN_SOLIB_RETURN_TRAMPOLINE (@var{pc}, @var{name}) -@findex IN_SOLIB_RETURN_TRAMPOLINE -Define this to evaluate to nonzero if the program is stopped in the -trampoline that returns from a shared library. - -@item IN_SOLIB_DYNSYM_RESOLVE_CODE (@var{pc}) -@findex IN_SOLIB_DYNSYM_RESOLVE_CODE -Define this to evaluate to nonzero if the program is stopped in the -dynamic linker. - -@item SKIP_SOLIB_RESOLVER (@var{pc}) -@findex SKIP_SOLIB_RESOLVER -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. - -@item INTEGER_TO_ADDRESS (@var{type}, @var{buf}) -@findex INTEGER_TO_ADDRESS -@cindex converting integers to addresses -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. - -@emph{Pragmatics: When the user copies a well defined expression from -their source code and passes it, as a parameter, to @value{GDBN}'s -@code{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, @value{GDBN} 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 @value{GDBN} casts integers -to pointers; they are complaining that they can't take an address from a -disassembly listing and give it to @code{x/i}. Adding an architecture -method like @code{INTEGER_TO_ADDRESS} certainly makes it possible for -@value{GDBN} to ``get it right'' in all circumstances.} - -@xref{Target Architecture Definition, , Pointers Are Not Always -Addresses}. - -@item NO_HIF_SUPPORT -@findex NO_HIF_SUPPORT -(Specific to the a29k.) - -@item POINTER_TO_ADDRESS (@var{type}, @var{buf}) -@findex POINTER_TO_ADDRESS -Assume that @var{buf} holds a pointer of type @var{type}, in the -appropriate format for the current architecture. Return the byte -address the pointer refers to. -@xref{Target Architecture Definition, , Pointers Are Not Always Addresses}. - -@item REGISTER_CONVERTIBLE (@var{reg}) -@findex REGISTER_CONVERTIBLE -Return non-zero if @var{reg} uses different raw and virtual formats. -@xref{Target Architecture Definition, , Raw and Virtual Register Representations}. - -@item REGISTER_TO_VALUE(@var{regnum}, @var{type}, @var{from}, @var{to}) -@findex REGISTER_TO_VALUE -Convert the raw contents of register @var{regnum} into a value of type -@var{type}. -@xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}. - -@item DEPRECATED_REGISTER_RAW_SIZE (@var{reg}) -@findex DEPRECATED_REGISTER_RAW_SIZE -Return the raw size of @var{reg}; defaults to the size of the register's -virtual type. -@xref{Target Architecture Definition, , Raw and Virtual Register Representations}. - -@item register_reggroup_p (@var{gdbarch}, @var{regnum}, @var{reggroup}) -@findex register_reggroup_p -@cindex register groups -Return non-zero if register @var{regnum} is a member of the register -group @var{reggroup}. - -By default, registers are grouped as follows: - -@table @code -@item float_reggroup -Any register with a valid name and a floating-point type. -@item vector_reggroup -Any register with a valid name and a vector type. -@item general_reggroup -Any register with a valid name and a type other than vector or -floating-point. @samp{float_reggroup}. -@item save_reggroup -@itemx restore_reggroup -@itemx all_reggroup -Any register with a valid name. -@end table - -@item DEPRECATED_REGISTER_VIRTUAL_SIZE (@var{reg}) -@findex DEPRECATED_REGISTER_VIRTUAL_SIZE -Return the virtual size of @var{reg}; defaults to the size of the -register's virtual type. -Return the virtual size of @var{reg}. -@xref{Target Architecture Definition, , Raw and Virtual Register Representations}. - -@item DEPRECATED_REGISTER_VIRTUAL_TYPE (@var{reg}) -@findex REGISTER_VIRTUAL_TYPE -Return the virtual type of @var{reg}. -@xref{Target Architecture Definition, , Raw and Virtual Register Representations}. - -@item struct type *register_type (@var{gdbarch}, @var{reg}) -@findex register_type -If defined, return the type of register @var{reg}. This function -superseeds @code{DEPRECATED_REGISTER_VIRTUAL_TYPE}. @xref{Target Architecture -Definition, , Raw and Virtual Register Representations}. - -@item REGISTER_CONVERT_TO_VIRTUAL(@var{reg}, @var{type}, @var{from}, @var{to}) -@findex REGISTER_CONVERT_TO_VIRTUAL -Convert the value of register @var{reg} from its raw form to its virtual -form. -@xref{Target Architecture Definition, , Raw and Virtual Register Representations}. - -@item REGISTER_CONVERT_TO_RAW(@var{type}, @var{reg}, @var{from}, @var{to}) -@findex REGISTER_CONVERT_TO_RAW -Convert the value of register @var{reg} from its virtual form to its raw -form. -@xref{Target Architecture Definition, , Raw and Virtual Register Representations}. - -@item const struct regset *regset_from_core_section (struct gdbarch * @var{gdbarch}, const char * @var{sect_name}, size_t @var{sect_size}) -@findex regset_from_core_section -Return the appropriate register set for a core file section with name -@var{sect_name} and size @var{sect_size}. - - -@item RETURN_VALUE_ON_STACK(@var{type}) -@findex RETURN_VALUE_ON_STACK -@cindex returning structures by value -@cindex structures, returning by value - -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 @samp{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 @value{GDBN} uses here is kind of odd. - -@itemize @bullet -@item -If the type being returned by value is not a structure, union, or array, -and @code{RETURN_VALUE_ON_STACK} returns zero, then @value{GDBN} -concludes the value is not returned using the struct convention. - -@item -Otherwise, @value{GDBN} calls @code{USE_STRUCT_CONVENTION} (see below). -If that returns non-zero, @value{GDBN} assumes the struct convention is -in use. -@end itemize - -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 @code{RETURN_VALUE_ON_STACK} likes, @emph{and} something -that @code{USE_STRUCT_CONVENTION} likes. - -Note that, in C and C@t{++}, 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. - -@item SOFTWARE_SINGLE_STEP_P() -@findex SOFTWARE_SINGLE_STEP_P -Define this as 1 if the target does not have a hardware single-step -mechanism. The macro @code{SOFTWARE_SINGLE_STEP} must also be defined. - -@item SOFTWARE_SINGLE_STEP(@var{signal}, @var{insert_breapoints_p}) -@findex SOFTWARE_SINGLE_STEP -A function that inserts or removes (depending on -@var{insert_breapoints_p}) breakpoints at each possible destinations of -the next instruction. See @file{sparc-tdep.c} and @file{rs6000-tdep.c} -for examples. - -@item SOFUN_ADDRESS_MAYBE_MISSING -@findex 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. - -@code{SOFUN_ADDRESS_MAYBE_MISSING} indicates that a particular set of -hacks of this sort are in use, affecting @code{N_SO} and @code{N_FUN} -entries in stabs-format debugging information. @code{N_SO} stabs mark -the beginning and ending addresses of compilation units in the text -segment. @code{N_FUN} stabs mark the starts and ends of functions. - -@code{SOFUN_ADDRESS_MAYBE_MISSING} means two things: - -@itemize @bullet -@item -@code{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. - -@item -@code{N_SO} stabs have an address of zero, too. You just look at the -@code{N_FUN} stabs that appear before and after the @code{N_SO} stab, -and guess the starting and ending addresses of the compilation unit from -them. -@end itemize - -@item PCC_SOL_BROKEN -@findex PCC_SOL_BROKEN -(Used only in the Convex target.) - -@item PC_IN_SIGTRAMP (@var{pc}, @var{name}) -@findex PC_IN_SIGTRAMP -@cindex sigtramp -The @dfn{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 @var{pc} and the -(possibly NULL) name of the function in which that @var{pc} resides, -returns nonzero if the @var{pc} and/or @var{name} show that we are in -sigtramp. - -@item PC_LOAD_SEGMENT -@findex PC_LOAD_SEGMENT -If defined, print information about the load segment for the program -counter. (Defined only for the RS/6000.) - -@item PC_REGNUM -@findex 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 @code{TARGET_READ_PC} and -@code{TARGET_WRITE_PC} are not defined. - -@item PARM_BOUNDARY -@findex PARM_BOUNDARY -If non-zero, round arguments to a boundary of this many bits before -pushing them on the stack. - -@item stabs_argument_has_addr (@var{gdbarch}, @var{type}) -@findex stabs_argument_has_addr -@findex DEPRECATED_REG_STRUCT_HAS_ADDR -@anchor{stabs_argument_has_addr} Define this to return nonzero if a -function argument of type @var{type} is passed by reference instead of -value. - -This method replaces @code{DEPRECATED_REG_STRUCT_HAS_ADDR} -(@pxref{DEPRECATED_REG_STRUCT_HAS_ADDR}). - -@item PROCESS_LINENUMBER_HOOK -@findex PROCESS_LINENUMBER_HOOK -A hook defined for XCOFF reading. - -@item PROLOGUE_FIRSTLINE_OVERLAP -@findex PROLOGUE_FIRSTLINE_OVERLAP -(Only used in unsupported Convex configuration.) - -@item PS_REGNUM -@findex PS_REGNUM -If defined, this is the number of the processor status register. (This -definition is only used in generic code when parsing "$ps".) - -@item DEPRECATED_POP_FRAME -@findex DEPRECATED_POP_FRAME -@findex frame_pop -If defined, used by @code{frame_pop} to remove a stack frame. This -method has been superseeded by generic code. - -@item push_dummy_call (@var{gdbarch}, @var{func_addr}, @var{regcache}, @var{pc_addr}, @var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr}) -@findex push_dummy_call -@findex DEPRECATED_PUSH_ARGUMENTS. -@anchor{push_dummy_call} Define this to push the dummy frame's call to -the inferior function onto the stack. In addition to pushing -@var{nargs}, the code should push @var{struct_addr} (when -@var{struct_return}), and the return address (@var{bp_addr}). - -Returns the updated top-of-stack pointer. - -This method replaces @code{DEPRECATED_PUSH_ARGUMENTS}. - -@item CORE_ADDR push_dummy_code (@var{gdbarch}, @var{sp}, @var{funaddr}, @var{using_gcc}, @var{args}, @var{nargs}, @var{value_type}, @var{real_pc}, @var{bp_addr}) -@findex push_dummy_code -@findex DEPRECATED_FIX_CALL_DUMMY -@anchor{push_dummy_code} Given a stack based call dummy, push the -instruction sequence (including space for a breakpoint) to which the -called function should return. - -Set @var{bp_addr} to the address at which the breakpoint instruction -should be inserted, @var{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 -(@pxref{frame_align}) breakpoint, @var{bp_addr} is set to the address -reserved for that breakpoint, and @var{real_pc} set to @var{funaddr}. - -This method replaces @code{DEPRECATED_CALL_DUMMY_WORDS}, -@code{DEPRECATED_SIZEOF_CALL_DUMMY_WORDS}, @code{CALL_DUMMY}, -@code{CALL_DUMMY_LOCATION}, @code{DEPRECATED_REGISTER_SIZE}, -@code{GDB_TARGET_IS_HPPA}, -@code{DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET}, and -@code{DEPRECATED_FIX_CALL_DUMMY}. - -@item DEPRECATED_PUSH_DUMMY_FRAME -@findex DEPRECATED_PUSH_DUMMY_FRAME -Used in @samp{call_function_by_hand} to create an artificial stack frame. - -@item DEPRECATED_REGISTER_BYTES -@findex DEPRECATED_REGISTER_BYTES -The total amount of space needed to store @value{GDBN}'s copy of the -machine's register state. - -This is no longer needed. @value{GDBN} instead computes the size of the -register buffer at run-time. - -@item REGISTER_NAME(@var{i}) -@findex REGISTER_NAME -Return the name of register @var{i} as a string. May return @code{NULL} -or @code{NUL} to indicate that register @var{i} is not valid. - -@item DEPRECATED_REG_STRUCT_HAS_ADDR (@var{gcc_p}, @var{type}) -@findex DEPRECATED_REG_STRUCT_HAS_ADDR -@anchor{DEPRECATED_REG_STRUCT_HAS_ADDR}Define this to return 1 if the -given type will be passed by pointer rather than directly. - -This method has been replaced by @code{stabs_argument_has_addr} -(@pxref{stabs_argument_has_addr}). - -@item SAVE_DUMMY_FRAME_TOS (@var{sp}) -@findex SAVE_DUMMY_FRAME_TOS -@anchor{SAVE_DUMMY_FRAME_TOS} Used in @samp{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 @code{SP} -after both the dummy frame and space for parameters/results have been -allocated on the stack. @xref{unwind_dummy_id}. - -@item SDB_REG_TO_REGNUM -@findex SDB_REG_TO_REGNUM -Define this to convert sdb register numbers into @value{GDBN} regnums. If not -defined, no conversion will be done. - -@item enum return_value_convention gdbarch_return_value (struct gdbarch *@var{gdbarch}, struct type *@var{valtype}, struct regcache *@var{regcache}, void *@var{readbuf}, const void *@var{writebuf}) -@findex gdbarch_return_value -@anchor{gdbarch_return_value} Given a function with a return-value of -type @var{rettype}, return which return-value convention that function -would use. - -@value{GDBN} currently recognizes two function return-value conventions: -@code{RETURN_VALUE_REGISTER_CONVENTION} where the return value is found -in registers; and @code{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 @var{writebuf} is -non-@code{NULL}, also copy the return-value in @var{writebuf} into -@var{regcache}. - -If the register convention is being used, and @var{readbuf} is -non-@code{NULL}, also copy the return value from @var{regcache} into -@var{readbuf} (@var{regcache} contains a copy of the registers from the -just returned function). - -@xref{DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS}, for a description of how -return-values that use the struct convention are handled. - -@emph{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 -@value{GDBN} were written in an @sc{oo} language, this method would -instead return an object that knew how to perform the register -return-value extract and store.} - -@emph{Maintainer note: This method does not take a @var{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 @var{rettype} with @code{struct value} -@var{function} should be persued.} - -@emph{Maintainer note: The @var{regcache} parameter limits this methods -to the inner most frame. While replacing @var{regcache} with a -@code{struct frame_info} @var{frame} parameter would remove that -limitation there has yet to be a demonstrated need for such a change.} - -@item SKIP_PERMANENT_BREAKPOINT -@findex SKIP_PERMANENT_BREAKPOINT -Advance the inferior's PC past a permanent breakpoint. @value{GDBN} 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 @code{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. - -@item SKIP_PROLOGUE (@var{pc}) -@findex SKIP_PROLOGUE -A C expression that returns the address of the ``real'' code beyond the -function entry prologue found at @var{pc}. - -@item SKIP_TRAMPOLINE_CODE (@var{pc}) -@findex SKIP_TRAMPOLINE_CODE -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. - -@item SP_REGNUM -@findex 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. - -@item STAB_REG_TO_REGNUM -@findex STAB_REG_TO_REGNUM -Define this to convert stab register numbers (as gotten from `r' -declarations) into @value{GDBN} regnums. If not defined, no conversion will be -done. - -@item DEPRECATED_STACK_ALIGN (@var{addr}) -@anchor{DEPRECATED_STACK_ALIGN} -@findex DEPRECATED_STACK_ALIGN -Define this to increase @var{addr} so that it meets the alignment -requirements for the processor's stack. - -Unlike @ref{frame_align}, this function always adjusts @var{addr} -upwards. - -By default, no stack alignment is performed. - -@item STEP_SKIPS_DELAY (@var{addr}) -@findex STEP_SKIPS_DELAY -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, @value{GDBN} will single-step over that instruction before resuming -normally. Currently only defined for the Mips. - -@item STORE_RETURN_VALUE (@var{type}, @var{regcache}, @var{valbuf}) -@findex STORE_RETURN_VALUE -A C expression that writes the function return value, found in -@var{valbuf}, into the @var{regcache}. @var{type} is the type of the -value that is to be returned. - -This method has been deprecated in favour of @code{gdbarch_return_value} -(@pxref{gdbarch_return_value}). - -@item SUN_FIXED_LBRAC_BUG -@findex SUN_FIXED_LBRAC_BUG -(Used only for Sun-3 and Sun-4 targets.) - -@item SYMBOL_RELOADING_DEFAULT -@findex SYMBOL_RELOADING_DEFAULT -The default value of the ``symbol-reloading'' variable. (Never defined in -current sources.) - -@item TARGET_CHAR_BIT -@findex TARGET_CHAR_BIT -Number of bits in a char; defaults to 8. - -@item TARGET_CHAR_SIGNED -@findex TARGET_CHAR_SIGNED -Non-zero if @code{char} is normally signed on this architecture; zero if -it should be unsigned. - -The ISO C standard requires the compiler to treat @code{char} as -equivalent to either @code{signed char} or @code{unsigned char}; any -character in the standard execution set is supposed to be positive. -Most compilers treat @code{char} as signed, but @code{char} is unsigned -on the IBM S/390, RS6000, and PowerPC targets. - -@item TARGET_COMPLEX_BIT -@findex TARGET_COMPLEX_BIT -Number of bits in a complex number; defaults to @code{2 * TARGET_FLOAT_BIT}. - -At present this macro is not used. - -@item TARGET_DOUBLE_BIT -@findex TARGET_DOUBLE_BIT -Number of bits in a double float; defaults to @code{8 * TARGET_CHAR_BIT}. - -@item TARGET_DOUBLE_COMPLEX_BIT -@findex TARGET_DOUBLE_COMPLEX_BIT -Number of bits in a double complex; defaults to @code{2 * TARGET_DOUBLE_BIT}. - -At present this macro is not used. - -@item TARGET_FLOAT_BIT -@findex TARGET_FLOAT_BIT -Number of bits in a float; defaults to @code{4 * TARGET_CHAR_BIT}. - -@item TARGET_INT_BIT -@findex TARGET_INT_BIT -Number of bits in an integer; defaults to @code{4 * TARGET_CHAR_BIT}. - -@item TARGET_LONG_BIT -@findex TARGET_LONG_BIT -Number of bits in a long integer; defaults to @code{4 * TARGET_CHAR_BIT}. - -@item TARGET_LONG_DOUBLE_BIT -@findex TARGET_LONG_DOUBLE_BIT -Number of bits in a long double float; -defaults to @code{2 * TARGET_DOUBLE_BIT}. - -@item TARGET_LONG_LONG_BIT -@findex TARGET_LONG_LONG_BIT -Number of bits in a long long integer; defaults to @code{2 * TARGET_LONG_BIT}. - -@item TARGET_PTR_BIT -@findex TARGET_PTR_BIT -Number of bits in a pointer; defaults to @code{TARGET_INT_BIT}. - -@item TARGET_SHORT_BIT -@findex TARGET_SHORT_BIT -Number of bits in a short integer; defaults to @code{2 * TARGET_CHAR_BIT}. - -@item TARGET_READ_PC -@findex TARGET_READ_PC -@itemx TARGET_WRITE_PC (@var{val}, @var{pid}) -@findex TARGET_WRITE_PC -@anchor{TARGET_WRITE_PC} -@itemx TARGET_READ_SP -@findex TARGET_READ_SP -@itemx TARGET_READ_FP -@findex TARGET_READ_FP -@findex read_pc -@findex write_pc -@findex read_sp -@findex read_fp -@anchor{TARGET_READ_SP} These change the behavior of @code{read_pc}, -@code{write_pc}, @code{read_sp} and @code{deprecated_read_fp}. For most -targets, these may be left undefined. @value{GDBN} will call the read -and write register functions with the relevant @code{_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. - -@xref{unwind_sp}, which replaces @code{TARGET_READ_SP}. - -@item TARGET_VIRTUAL_FRAME_POINTER(@var{pc}, @var{regp}, @var{offsetp}) -@findex TARGET_VIRTUAL_FRAME_POINTER -Returns a @code{(register, offset)} pair representing the virtual frame -pointer in use at the code address @var{pc}. If virtual frame pointers -are not used, a default definition simply returns -@code{DEPRECATED_FP_REGNUM}, with an offset of zero. - -@item TARGET_HAS_HARDWARE_WATCHPOINTS -If non-zero, the target has support for hardware-assisted -watchpoints. @xref{Algorithms, watchpoints}, for more details and -other related macros. - -@item TARGET_PRINT_INSN (@var{addr}, @var{info}) -@findex TARGET_PRINT_INSN -This is the function used by @value{GDBN} to print an assembly -instruction. It prints the instruction at address @var{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 -@code{deprecated_tm_print_insn}. This usually points to a function in -the @code{opcodes} library (@pxref{Support Libraries, ,Opcodes}). -@var{info} is a structure (of type @code{disassemble_info}) defined in -@file{include/dis-asm.h} used to pass information to the instruction -decoding routine. - -@item struct frame_id unwind_dummy_id (struct frame_info *@var{frame}) -@findex unwind_dummy_id -@anchor{unwind_dummy_id} Given @var{frame} return a @code{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 @code{SAVE_DUMMY_FRAME_TOS}. -@xref{SAVE_DUMMY_FRAME_TOS}. - -@item USE_STRUCT_CONVENTION (@var{gcc_p}, @var{type}) -@findex USE_STRUCT_CONVENTION -If defined, this must be an expression that is nonzero if a value of the -given @var{type} being returned from a function must have space -allocated for it on the stack. @var{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 @code{gdbarch_return_value} -(@pxref{gdbarch_return_value}). - -@item VALUE_TO_REGISTER(@var{type}, @var{regnum}, @var{from}, @var{to}) -@findex VALUE_TO_REGISTER -Convert a value of type @var{type} into the raw contents of register -@var{regnum}'s. -@xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}. - -@item VARIABLES_INSIDE_BLOCK (@var{desc}, @var{gcc_p}) -@findex VARIABLES_INSIDE_BLOCK -For dbx-style debugging information, if the compiler puts variable -declarations inside LBRAC/RBRAC blocks, this should be defined to be -nonzero. @var{desc} is the value of @code{n_desc} from the -@code{N_RBRAC} symbol, and @var{gcc_p} is true if @value{GDBN} has noticed the -presence of either the @code{GCC_COMPILED_SYMBOL} or the -@code{GCC2_COMPILED_SYMBOL}. By default, this is 0. - -@item OS9K_VARIABLES_INSIDE_BLOCK (@var{desc}, @var{gcc_p}) -@findex OS9K_VARIABLES_INSIDE_BLOCK -Similarly, for OS/9000. Defaults to 1. -@end table - -Motorola M68K target conditionals. - -@ftable @code -@item BPT_VECTOR -Define this to be the 4-bit location of the breakpoint trap vector. If -not defined, it will default to @code{0xf}. - -@item REMOTE_BPT_VECTOR -Defaults to @code{1}. - -@item NAME_OF_MALLOC -@findex 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". - -@end ftable - -@section Adding a New Target - -@cindex adding a target -The following files add a target to @value{GDBN}: - -@table @file -@vindex TDEPFILES -@item gdb/config/@var{arch}/@var{ttt}.mt -Contains a Makefile fragment specific to this target. Specifies what -object files are needed for target @var{ttt}, by defining -@samp{TDEPFILES=@dots{}} and @samp{TDEPLIBS=@dots{}}. Also specifies -the header file which describes @var{ttt}, by defining @samp{TM_FILE= -tm-@var{ttt}.h}. - -You can also define @samp{TM_CFLAGS}, @samp{TM_CLIBS}, @samp{TM_CDEPS}, -but these are now deprecated, replaced by autoconf, and may go away in -future versions of @value{GDBN}. - -@item gdb/@var{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 -@file{tm-@var{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. - -@item gdb/@var{arch}-tdep.c -@itemx gdb/@var{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 -@file{@var{ttt}-tdep.h}. It can be shared among many targets that use -the same processor. - -@item gdb/config/@var{arch}/tm-@var{ttt}.h -(@file{tm.h} is a link to this file, created by @code{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. - -@item gdb/config/@var{arch}/tm-@var{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 -@file{tm-@var{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. - -@end table - -If you are adding a new operating system for an existing CPU chip, add a -@file{config/tm-@var{os}.h} file that describes the operating system -facilities that are unusual (extra symbol table info; the breakpoint -instruction needed; etc.). Then write a @file{@var{arch}/tm-@var{os}.h} -that just @code{#include}s @file{tm-@var{arch}.h} and -@file{config/tm-@var{os}.h}. - - -@section Converting an existing Target Architecture to Multi-arch -@cindex converting targets 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: - -@itemize @bullet - -@item -Directly convert a group of functions into macros (the conversion does -not change the behavior of any of the functions). - -@item -Replace a non-multi-arch with a multi-arch mechanism (e.g., -@code{FRAME_INFO}). - -@item -Enable multi-arch level one. - -@item -Delete one or more files. - -@end itemize - -@noindent -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 @emph{fairly} -obvious. Such patches, when submitted by developers listed in the -@file{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. - -@subsection Preparation - -The first step is to establish control. Build (with @option{-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 @value{GDBN} stop compiling -with @option{-Werror}. - -@subsection Add the multi-arch initialization code - -The objective of this step is to establish the basic multi-arch -framework. It involves - -@itemize @bullet - -@item -The addition of a @code{@var{arch}_gdbarch_init} function@footnote{The -above is from the original example and uses K&R C. @value{GDBN} -has since converted to ISO C but lets ignore that.} that creates -the architecture: -@smallexample -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; -@} -@end smallexample -@noindent -@emph{} - -@item -A per-architecture dump function to print any architecture specific -information: -@smallexample -static void -mips_dump_tdep (struct gdbarch *current_gdbarch, - struct ui_file *file) -@{ - @dots{} code to print architecture specific info @dots{} -@} -@end smallexample - -@item -A change to @code{_initialize_@var{arch}_tdep} to register this new -architecture: -@smallexample -void -_initialize_mips_tdep (void) -@{ - gdbarch_register (bfd_arch_mips, mips_gdbarch_init, - mips_dump_tdep); -@end smallexample - -@item -Add the macro @code{GDB_MULTI_ARCH}, defined as 0 (zero), to the file@* -@file{config/@var{arch}/tm-@var{arch}.h}. - -@end itemize - -@subsection Update multi-arch incompatible mechanisms - -Some mechanisms do not work with multi-arch. They include: - -@table @code -@item FRAME_FIND_SAVED_REGS -Replaced with @code{DEPRECATED_FRAME_INIT_SAVED_REGS} -@end table - -@noindent -At this stage you could also consider converting the macros into -functions. - -@subsection Prepare for multi-arch level to one - -Temporally set @code{GDB_MULTI_ARCH} to @code{GDB_MULTI_ARCH_PARTIAL} -and then build and start @value{GDBN} (the change should not be -committed). @value{GDBN} 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 @code{@var{arch}_gdbarch_init} to set all the missing -architecture methods and wrap the corresponding macros in @code{#if -!GDB_MULTI_ARCH} (patch(es)). - -@subsection Set multi-arch level one - -Change the value of @code{GDB_MULTI_ARCH} to GDB_MULTI_ARCH_PARTIAL (a -single patch). - -Any problems with throwing ``the switch'' should have been fixed -already. - -@subsection Convert remaining macros - -Suggest converting macros into functions (and setting the corresponding -architecture method) in small batches. - -@subsection Set multi-arch level to two - -This should go smoothly. - -@subsection Delete the TM file - -The @file{tm-@var{arch}.h} can be deleted. @file{@var{arch}.mt} and -@file{configure.in} updated. - - -@node Target Vector Definition - -@chapter Target Vector Definition -@cindex target vector - -The target vector defines the interface between @value{GDBN}'s -abstract handling of target systems, and the nitty-gritty code that -actually exercises control over a process or a serial port. -@value{GDBN} includes some 30-40 different target vectors; however, -each configuration of @value{GDBN} includes only a few of them. - -@section File Targets - -Both executables and core files have target vectors. - -@section Standard Protocol and Remote Stubs - -@value{GDBN}'s file @file{remote.c} talks a serial protocol to code -that runs in the target system. @value{GDBN} provides several sample -@dfn{stubs} that can be integrated into target programs or operating -systems for this purpose; they are named @file{*-stub.c}. - -The @value{GDBN} 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 -@code{trap_low}: - -@enumerate -@item -%l1 and %l2 contain pc and npc respectively at the time of the trap; - -@item -traps are disabled; - -@item -you are in the correct trap window. -@end enumerate - -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 @code{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 @code{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 @value{GDBN}. - -@section ROM Monitor Interface - -@section Custom Protocols - -@section Transport Layer - -@section Builtin Simulator - - -@node Native Debugging - -@chapter Native Debugging -@cindex native debugging - -Several files control @value{GDBN}'s configuration for native support: - -@table @file -@vindex NATDEPFILES -@item gdb/config/@var{arch}/@var{xyz}.mh -Specifies Makefile fragments needed by a @emph{native} configuration on -machine @var{xyz}. In particular, this lists the required -native-dependent object files, by defining @samp{NATDEPFILES=@dots{}}. -Also specifies the header file which describes native support on -@var{xyz}, by defining @samp{NAT_FILE= nm-@var{xyz}.h}. You can also -define @samp{NAT_CFLAGS}, @samp{NAT_ADD_FILES}, @samp{NAT_CLIBS}, -@samp{NAT_CDEPS}, etc.; see @file{Makefile.in}. - -@emph{Maintainer's note: The @file{.mh} suffix is because this file -originally contained @file{Makefile} fragments for hosting @value{GDBN} -on machine @var{xyz}. While the file is no longer used for this -purpose, the @file{.mh} suffix remains. Perhaps someone will -eventually rename these fragments so that they have a @file{.mn} -suffix.} - -@item gdb/config/@var{arch}/nm-@var{xyz}.h -(@file{nm.h} is a link to this file, created by @code{configure}). Contains C -macro definitions describing the native system environment, such as -child process control and core file support. - -@item gdb/@var{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. -@end table - -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 @file{nm-@var{xyz}.h} file. If these routines work for -the @var{xyz} host, you can just include the generic file's name (with -@samp{.o}, not @samp{.c}) in @code{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 @file{@var{xyz}-nat.c}, and put @file{@var{xyz}-nat.o} -into @code{NATDEPFILES}. - -@table @file -@item inftarg.c -This contains the @emph{target_ops vector} that supports Unix child -processes on systems which use ptrace and wait to control the child. - -@item procfs.c -This contains the @emph{target_ops vector} that supports Unix child -processes on systems which use /proc to control the child. - -@item 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. - -@item infptrace.c -This is the low level interface to inferior processes for systems using -the Unix @code{ptrace} call in a vanilla way. -@end table - -@section Native core file Support -@cindex native core files - -@table @file -@findex fetch_core_registers -@item core-aout.c::fetch_core_registers() -Support for reading registers out of a core file. This routine calls -@code{register_addr()}, see below. Now that BFD is used to read core -files, virtually all machines should use @code{core-aout.c}, and should -just provide @code{fetch_core_registers} in @code{@var{xyz}-nat.c} (or -@code{REGISTER_U_ADDR} in @code{nm-@var{xyz}.h}). - -@item core-aout.c::register_addr() -If your @code{nm-@var{xyz}.h} file defines the macro -@code{REGISTER_U_ADDR(addr, blockend, regno)}, it should be defined to -set @code{addr} to the offset within the @samp{user} struct of @value{GDBN} -register number @code{regno}. @code{blockend} is the offset within the -``upage'' of @code{u.u_ar0}. If @code{REGISTER_U_ADDR} is defined, -@file{core-aout.c} will define the @code{register_addr()} function and -use the macro in it. If you do not define @code{REGISTER_U_ADDR}, but -you are using the standard @code{fetch_core_registers()}, you will need -to define your own version of @code{register_addr()}, put it into your -@code{@var{xyz}-nat.c} file, and be sure @code{@var{xyz}-nat.o} is in -the @code{NATDEPFILES} list. If you have your own -@code{fetch_core_registers()}, you may not need a separate -@code{register_addr()}. Many custom @code{fetch_core_registers()} -implementations simply locate the registers themselves.@refill -@end table - -When making @value{GDBN} 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 -@file{bfd/trad-core.c}. First, use whatever @code{#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 -@file{machine/reg.h}), and an include file that defines whatever header -exists on a core file (e.g. the u-area or a @code{struct core}). Then -modify @code{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 @value{GDBN}, you need a matching routine called -@code{fetch_core_registers}. If you can use the generic one, it's in -@file{core-aout.c}; if not, it's in your @file{@var{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 @value{GDBN}'s ``registers'' array. - -If your system uses @file{/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. - -@section ptrace - -@section /proc - -@section win32 - -@section shared libraries - -@section Native Conditionals -@cindex native conditionals - -When @value{GDBN} 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 @file{nm-@var{system}.h}. - -@table @code -@item ATTACH_DETACH -@findex ATTACH_DETACH -If defined, then @value{GDBN} will include support for the @code{attach} and -@code{detach} commands. - -@item CHILD_PREPARE_TO_STORE -@findex 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 @file{xm-@var{system}.h} files -currently.] - -@item FETCH_INFERIOR_REGISTERS -@findex FETCH_INFERIOR_REGISTERS -Define this if the native-dependent code will provide its own routines -@code{fetch_inferior_registers} and @code{store_inferior_registers} in -@file{@var{host}-nat.c}. If this symbol is @emph{not} defined, and -@file{infptrace.c} is included in this configuration, the default -routines in @file{infptrace.c} are used for these functions. - -@item FILES_INFO_HOOK -@findex FILES_INFO_HOOK -(Only defined for Convex.) - -@item FP0_REGNUM -@findex 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, @file{/proc} support uses this -to decide whether floats are in use on this target. - -@item GET_LONGJMP_TARGET -@findex 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 -@file{setjmp.h} is needed to define it. - -This macro determines the target PC address that @code{longjmp} will jump to, -assuming that we have just stopped at a longjmp breakpoint. It takes a -@code{CORE_ADDR *} as argument, and stores the target PC value through this -pointer. It examines the current state of the machine as needed. - -@item I386_USE_GENERIC_WATCHPOINTS -An x86-based machine can define this to use the generic x86 watchpoint -support; see @ref{Algorithms, I386_USE_GENERIC_WATCHPOINTS}. - -@item KERNEL_U_ADDR -@findex KERNEL_U_ADDR -Define this to the address of the @code{u} structure (the ``user -struct'', also known as the ``u-page'') in kernel virtual memory. @value{GDBN} -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. - -@item KERNEL_U_ADDR_BSD -@findex KERNEL_U_ADDR_BSD -Define this to cause @value{GDBN} to determine the address of @code{u} at -runtime, by using Berkeley-style @code{nlist} on the kernel's image in -the root directory. - -@item KERNEL_U_ADDR_HPUX -@findex KERNEL_U_ADDR_HPUX -Define this to cause @value{GDBN} to determine the address of @code{u} at -runtime, by using HP-style @code{nlist} on the kernel's image in the -root directory. - -@item ONE_PROCESS_WRITETEXT -@findex 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. - -@item PROC_NAME_FMT -@findex PROC_NAME_FMT -Defines the format for the name of a @file{/proc} device. Should be -defined in @file{nm.h} @emph{only} in order to override the default -definition in @file{procfs.c}. - -@item PTRACE_FP_BUG -@findex PTRACE_FP_BUG -See @file{mach386-xdep.c}. - -@item PTRACE_ARG3_TYPE -@findex PTRACE_ARG3_TYPE -The type of the third argument to the @code{ptrace} system call, if it -exists and is different from @code{int}. - -@item REGISTER_U_ADDR -@findex REGISTER_U_ADDR -Defines the offset of the registers in the ``u area''. - -@item SHELL_COMMAND_CONCAT -@findex SHELL_COMMAND_CONCAT -If defined, is a string to prefix on the shell command used to start the -inferior. - -@item SHELL_FILE -@findex SHELL_FILE -If defined, this is the name of the shell to use to run the inferior. -Defaults to @code{"/bin/sh"}. - -@item SOLIB_ADD (@var{filename}, @var{from_tty}, @var{targ}, @var{readsyms}) -@findex SOLIB_ADD -Define this to expand into an expression that will cause the symbols in -@var{filename} to be added to @value{GDBN}'s symbol table. If -@var{readsyms} is zero symbols are not read but any necessary low level -processing for @var{filename} is still done. - -@item SOLIB_CREATE_INFERIOR_HOOK -@findex 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. - -@item START_INFERIOR_TRAPS_EXPECTED -@findex START_INFERIOR_TRAPS_EXPECTED -When starting an inferior, @value{GDBN} 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. - -@item SVR4_SHARED_LIBS -@findex SVR4_SHARED_LIBS -Define this to indicate that SVR4-style shared libraries are in use. - -@item USE_PROC_FS -@findex USE_PROC_FS -This determines whether small routines in @file{*-tdep.c}, which -translate register values between @value{GDBN}'s internal -representation and the @file{/proc} representation, are compiled. - -@item U_REGS_OFFSET -@findex 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 -@file{infptrace.c} are being used (that is, @file{infptrace.c} is -configured in, and @code{FETCH_INFERIOR_REGISTERS} is not defined). If -the default value from @file{infptrace.c} is good enough, leave it -undefined. - -The default value means that u.u_ar0 @emph{points to} the location of -the registers. I'm guessing that @code{#define U_REGS_OFFSET 0} means -that @code{u.u_ar0} @emph{is} the location of the registers. - -@item CLEAR_SOLIB -@findex CLEAR_SOLIB -See @file{objfiles.c}. - -@item DEBUG_PTRACE -@findex DEBUG_PTRACE -Define this to debug @code{ptrace} calls. -@end table - - -@node Support Libraries - -@chapter Support Libraries - -@section BFD -@cindex BFD library - -BFD provides support for @value{GDBN} in several ways: - -@table @emph -@item 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. - -@item 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). @value{GDBN} simply -calls BFD to read or write section @var{x} at byte offset @var{y} for -length @var{z}. - -@item 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. - -@item locating the symbol information -@value{GDBN} uses an internal interface of BFD to determine where to find the -symbol information in an executable file or symbol-file. @value{GDBN} itself -handles the reading of symbols, since BFD does not ``understand'' debug -symbols, but @value{GDBN} uses BFD's cached information to find the symbols, -string table, etc. -@end table - -@section opcodes -@cindex opcodes library - -The opcodes library provides @value{GDBN}'s disassembler. (It's a separate -library because it's also used in binutils, for @file{objdump}). - -@section readline - -@section mmalloc - -@section libiberty -@cindex @code{libiberty} library - -The @code{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). - -@value{GDBN} uses various features provided by the @code{libiberty} -library, for instance the C@t{++} demangler, the @acronym{IEEE} -floating format support functions, the input options parser -@samp{getopt}, the @samp{obstack} extension, and other functions. - -@subsection @code{obstacks} in @value{GDBN} -@cindex @code{obstacks} - -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 @acronym{LIFO} fashion on an obstack (see -@code{libiberty}'s documenatation for a more detailed explanation of -@code{obstacks}). - -The most noticeable use of the @code{obstacks} in @value{GDBN} is in -object files. There is an obstack associated with each internal -representation of an object file. Lots of things get allocated on -these @code{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 @code{obstacks} is -that memory for it gets allocated (with @code{obstack_alloc}) at -various times during a debugging sesssion, but it is released all at -once using the @code{obstack_free} function. The @code{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 -@code{obstacks}, this allows to free only a top portion of the -obstack. There are a few instances in @value{GDBN} where such thing -happens. Calls to @code{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 -@code{obstack_alloc} and the @code{obstack_free} allocates anything -else on the same obstack. For this reason it is best and safest to -use temporary @code{obstacks}. - -Releasing the whole obstack is also not safe per se. It is safe only -under the condition that we know the @code{obstacks} memory is no -longer needed. In @value{GDBN} we get rid of the @code{obstacks} only -when we get rid of the whole objfile(s), for instance upon reading a -new symbol file. - -@section gnu-regex -@cindex regular expressions library - -Regex conditionals. - -@table @code -@item C_ALLOCA - -@item NFAILURES - -@item RE_NREGS - -@item SIGN_EXTEND_CHAR - -@item SWITCH_ENUM_BUG - -@item SYNTAX_TABLE - -@item Sword - -@item sparc -@end table - -@section include - -@node Coding - -@chapter Coding - -This chapter covers topics that are lower-level than the major -algorithms of @value{GDBN}. - -@section Cleanups -@cindex cleanups - -Cleanups are a structured way to deal with things that need to be done -later. - -When your code does something (e.g., @code{xmalloc} some memory, or -@code{open} a file) that needs to be undone later (e.g., @code{xfree} -the memory or @code{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: - -@table @code -@item struct cleanup *@var{old_chain}; -Declare a variable which will hold a cleanup chain handle. - -@findex make_cleanup -@item @var{old_chain} = make_cleanup (@var{function}, @var{arg}); -Make a cleanup which will cause @var{function} to be called with -@var{arg} (a @code{char *}) later. The result, @var{old_chain}, is a -handle that can later be passed to @code{do_cleanups} or -@code{discard_cleanups}. Unless you are going to call -@code{do_cleanups} or @code{discard_cleanups}, you can ignore the result -from @code{make_cleanup}. - -@findex do_cleanups -@item do_cleanups (@var{old_chain}); -Do all cleanups added to the chain since the corresponding -@code{make_cleanup} call was made. - -@findex discard_cleanups -@item discard_cleanups (@var{old_chain}); -Same as @code{do_cleanups} except that it just removes the cleanups from -the chain and does not call the specified functions. -@end table - -Cleanups are implemented as a chain. The handle returned by -@code{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.: - -@smallexample -make_cleanup (a, 0); -@{ - struct cleanup *old = make_cleanup (b, 0); - make_cleanup (c, 0) - ... - do_cleanups (old); -@} -@end smallexample - -@noindent -will call @code{c()} and @code{b()} but will not call @code{a()}. The -cleanup that calls @code{a()} will remain in the cleanup chain, and will -be done later unless otherwise discarded.@refill - -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 -@code{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 @code{error} is -called and a forced stack unwind occurs) by ensuring that the -@code{xfree} will always be called: - -@smallexample -struct cleanup *old = make_cleanup (null_cleanup, 0); -data = xmalloc (sizeof blah); -make_cleanup (xfree, data); -... blah blah ... -do_cleanups (old); -@end smallexample - -The second style is try/except. Before it exits, your code-block calls -@code{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: - -@smallexample -FILE *file = fopen ("afile", "r"); -struct cleanup *old = make_cleanup (close_file, file); -... blah blah ... -discard_cleanups (old); -return file; -@end smallexample - -Some functions, e.g. @code{fputs_filtered()} or @code{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 -@samp{longjmp} instead). - -@section Per-architecture module data -@cindex per-architecture module data -@cindex multi-arch data -@cindex data-pointer, per-architecture/per-module - -The multi-arch framework includes a mechanism for adding module specific -per-architecture data-pointers to the @code{struct gdbarch} architecture -object. - -A module registers one or more per-architecture data-pointers using the -function @code{register_gdbarch_data}: - -@deftypefun struct gdbarch_data *register_gdbarch_data (gdbarch_data_init_ftype *@var{init}) - -The @var{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 (@code{NULL}) and its value has been requested via a call -to @code{gdbarch_data}. A data-pointer can also be initialize -explicitly using @code{set_gdbarch_data}. - -Any memory required by the @var{init} function should be allocated -using @code{GDBARCH_OBSTACK_ZALLOC}. That memory is automatically -released when the corresponding architecture is deleted. - -The function @code{register_gdbarch_data} returns a @code{struct -gdbarch_data} that is used to identify the data-pointer that was added -to the module. - -@end deftypefun - -A typical module has an @code{init} function of the form: - -@smallexample -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); - @dots{} - return data; -@} -@end smallexample - -Since uninitialized (@code{NULL}) data-pointers are initialized -on-demand, an @code{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 @code{init} call graph -does not contain cycles. - -The data-pointer is registered with the call: - -@smallexample -void -_initialize_nozel (void) -@{ - nozel_handle = register_gdbarch_data (nozel_init); -@dots{} -@end smallexample - -The per-architecture data-pointer is accessed using the function: - -@deftypefun void *gdbarch_data (struct gdbarch *@var{gdbarch}, struct gdbarch_data *@var{data_handle}) -Given the architecture @var{arch} and module data handle -@var{data_handle} (returned by @code{register_gdbarch_data}, this -function returns the current value of the per-architecture data-pointer. -@end deftypefun - -The non-@code{NULL} data-pointer returned by @code{gdbarch_data} should -be saved in a local variable and then used directly: - -@smallexample -int -nozel_total (struct gdbarch *gdbarch) -@{ - int total; - struct nozel *data = gdbarch_data (gdbarch, nozel_handle); - @dots{} - return total; -@} -@end smallexample - -It is also possible to directly initialize the data-pointer using: - -@deftypefun void set_gdbarch_data (struct gdbarch *@var{gdbarch}, struct gdbarch_data *@var{handle}, void *@var{pointer}) -Set the still @code{NULL} data-pointer corresponding to @var{handle} -to the non-@code{NULL} @var{pointer} value. -@end deftypefun - -This function is used by modules that require a mechanism for explicitly -setting the per-architecture data-pointer during architecture creation: - -@smallexample -/* 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; -@} -@end smallexample - -@smallexample -/* Called during architecture creation. */ -extern void -set_gdbarch_nozel (struct gdbarch *gdbarch, int total) -@{ - struct nozel *data = gdbarch_nozel (gdbarch); - @dots{} - data->total = total; -@} -@end smallexample - -@smallexample -void -_initialize_nozel (void) -@{ - nozel_handle = register_gdbarch_data (nozel_init); - @dots{} -@end smallexample - -@noindent -Note that an @code{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. - - -@section Wrapping Output Lines -@cindex line wrap in output - -@findex wrap_here -Output that goes through @code{printf_filtered} or @code{fputs_filtered} -or @code{fputs_demangled} needs only to have calls to @code{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 @code{wrap_here} is an indentation string which is -printed @emph{only} if the line breaks there. This argument is saved -away and used later. It must remain valid until the next call to -@code{wrap_here} or until a newline has been printed through the -@code{*_filtered} functions. Don't pass in a local variable and then -return! - -It is usually best to call @code{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 (@code{printf}) output. Symbol reading routines that -print warnings are a good example. - -@section @value{GDBN} Coding Standards -@cindex coding standards - -@value{GDBN} follows the GNU coding standards, as described in -@file{etc/standards.texi}. This file is also available for anonymous -FTP from GNU archive sites. @value{GDBN} takes a strict interpretation -of the standard; in general, when the GNU standard recommends a practice -but does not require it, @value{GDBN} requires it. - -@value{GDBN} follows an additional set of coding standards specific to -@value{GDBN}, as described in the following sections. - - -@subsection ISO C - -@value{GDBN} assumes an ISO/IEC 9899:1990 (a.k.a.@: ISO C90) compliant -compiler. - -@value{GDBN} does not assume an ISO C or POSIX compliant C library. - - -@subsection Memory Management - -@value{GDBN} does not use the functions @code{malloc}, @code{realloc}, -@code{calloc}, @code{free} and @code{asprintf}. - -@value{GDBN} uses the functions @code{xmalloc}, @code{xrealloc} and -@code{xcalloc} when allocating memory. Unlike @code{malloc} et.al.@: -these functions do not return when the memory pool is empty. Instead, -they unwind the stack using cleanups. These functions return -@code{NULL} when requested to allocate a chunk of memory of size zero. - -@emph{Pragmatics: By using these functions, the need to check every -memory allocation is removed. These functions provide portable -behavior.} - -@value{GDBN} does not use the function @code{free}. - -@value{GDBN} uses the function @code{xfree} to return memory to the -memory pool. Consistent with ISO-C, this function ignores a request to -free a @code{NULL} pointer. - -@emph{Pragmatics: On some systems @code{free} fails when passed a -@code{NULL} pointer.} - -@value{GDBN} can use the non-portable function @code{alloca} for the -allocation of small temporary values (such as strings). - -@emph{Pragmatics: This function is very non-portable. Some systems -restrict the memory being allocated to no more than a few kilobytes.} - -@value{GDBN} uses the string function @code{xstrdup} and the print -function @code{xasprintf}. - -@emph{Pragmatics: @code{asprintf} and @code{strdup} can fail. Print -functions such as @code{sprintf} are very prone to buffer overflow -errors.} - - -@subsection Compiler Warnings -@cindex compiler warnings - -With few exceptions, developers should include the configuration option -@samp{--enable-gdb-build-warnings=,-Werror} when building @value{GDBN}. -The exceptions are listed in the file @file{gdb/MAINTAINERS}. - -This option causes @value{GDBN} (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: - -@table @samp -@item -Wimplicit -Since @value{GDBN} 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 -@samp{-Wstrict-prototypes}. - -@item -Wreturn-type -Such code often appears to work except on instruction set architectures -that use register windows. - -@item -Wcomment - -@item -Wtrigraphs - -@item -Wformat -@itemx -Wformat-nonliteral -Since @value{GDBN} uses the @code{format printf} attribute on all -@code{printf} like functions these check not just @code{printf} calls -but also calls to functions such as @code{fprintf_unfiltered}. - -@item -Wparentheses -This warning includes uses of the assignment operator within an -@code{if} statement. - -@item -Wpointer-arith - -@item -Wuninitialized - -@item -Wunused-label -This warning has the additional benefit of detecting the absence of the -@code{case} reserved word in a switch statement: -@smallexample -enum @{ FD_SCHEDULED, NOTHING_SCHEDULED @} sched; -@dots{} -switch (sched) - @{ - case FD_SCHEDULED: - @dots{}; - break; - NOTHING_SCHEDULED: - @dots{}; - break; - @} -@end smallexample - -@item -Wunused-function -@end table - -@emph{Pragmatics: Due to the way that @value{GDBN} is implemented most -functions have unused parameters. Consequently the warning -@samp{-Wunused-parameter} is precluded from the list. The macro -@code{ATTRIBUTE_UNUSED} is not used as it leads to false negatives --- -it is not an error to have @code{ATTRIBUTE_UNUSED} on a parameter that -is being used. The options @samp{-Wall} and @samp{-Wunused} are also -precluded because they both include @samp{-Wunused-parameter}.} - -@emph{Pragmatics: @value{GDBN} has not simply accepted the warnings -enabled by @samp{-Wall -Werror -W...}. Instead it is selecting warnings -when and where their benefits can be demonstrated.} - -@subsection Formatting - -@cindex source code 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. - -@smallexample -/* Declaration */ -static void foo (void); -/* Definition */ -void -foo (void) -@{ -@} -@end smallexample - -@emph{Pragmatics: This simplifies scripting. Function definitions can -be found using @samp{^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 @code{diff} and @code{patch} utilities. - -Pointers are declared using the traditional K&R C style: - -@smallexample -void *foo; -@end smallexample - -@noindent -and not: - -@smallexample -void * foo; -void* foo; -@end smallexample - -@subsection Comments - -@cindex comment formatting -The standard GNU requirements on comments must be followed strictly. - -Block comments must appear in the following form, with no @code{/*}- or -@code{*/}-only lines, and no leading @code{*}: - -@smallexample -/* 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 @value{GDBN} should read more commands. */ -@end smallexample - -(Note that this format is encouraged by Emacs; tabbing for a multi-line -comment works correctly, and @kbd{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. - -@subsection C Usage - -@cindex C data types -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. - -@cindex function usage -Use functions freely. There are only a handful of compute-bound areas -in @value{GDBN} that might be affected by the overhead of a function -call, mainly in symbol reading. Most of @value{GDBN}'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. - -@emph{Macros are bad, M'kay.} -(But if you have to use a macro, make sure that the macro arguments are -protected with parentheses.) - -@cindex types - -Declarations like @samp{struct foo *} should be used in preference to -declarations like @samp{typedef struct foo @{ @dots{} @} *foo_ptr}. - - -@subsection Function Prototypes -@cindex function prototypes - -Prototypes must be used when both @emph{declaring} and @emph{defining} -a function. Prototypes for @value{GDBN} 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 @code{_initialize_*} functions, which must -be external so that @file{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. - - -@subsection Internal Error Recovery - -During its execution, @value{GDBN} 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 @value{GDBN} has detected, at -run time, a corrupt or erroneous situation. - -When reporting an internal error, @value{GDBN} uses -@code{internal_error} and @code{gdb_assert}. - -@value{GDBN} must not call @code{abort} or @code{assert}. - -@emph{Pragmatics: There is no @code{internal_warning} function. Either -the code detected a user error, recovered from it and issued a -@code{warning} or the code failed to correctly recover from the user -error and issued an @code{internal_error}.} - -@subsection File Names - -Any file used when building the core of @value{GDBN} must be in lower -case. Any file used when building the core of @value{GDBN} must be 8.3 -unique. These requirements apply to both source and generated files. - -@emph{Pragmatics: The core of @value{GDBN} must be buildable on many -platforms including DJGPP and MacOS/HFS. Every time an unfriendly file -is introduced to the build process both @file{Makefile.in} and -@file{configure.in} need to be modified accordingly. Compare the -convoluted conversion process needed to transform @file{COPYING} into -@file{copying.c} with the conversion needed to transform -@file{version.in} into @file{version.c}.} - -Any file non 8.3 compliant file (that is not used when building the core -of @value{GDBN}) must be added to @file{gdb/config/djgpp/fnchange.lst}. - -@emph{Pragmatics: This is clearly a compromise.} - -When @value{GDBN} has a local version of a system header file (ex -@file{string.h}) the file name based on the POSIX header prefixed with -@file{gdb_} (@file{gdb_string.h}). These headers should be relatively -independent: they should use only macros defined by @file{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.@: @value{GDBN} and @sc{gdbserver}. - -For other files @samp{-} is used as the separator. - - -@subsection Include Files - -A @file{.c} file should include @file{defs.h} first. - -A @file{.c} file should directly include the @code{.h} file of every -declaration and/or definition it directly refers to. It cannot rely on -indirect inclusion. - -A @file{.h} file should directly include the @code{.h} file of every -declaration and/or definition it directly refers to. It cannot rely on -indirect inclusion. Exception: The file @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 @code{.c} file. -Exception: a declaration for the @code{_initialize} function that -pacifies @option{-Wmissing-declaration}. - -A @code{typedef} definition should only appear in one include file. - -An opaque @code{struct} declaration can appear in multiple @file{.h} -files. Where possible, a @file{.h} file should use an opaque -@code{struct} declaration instead of an include. - -All @file{.h} files should be wrapped in: - -@smallexample -#ifndef INCLUDE_FILE_NAME_H -#define INCLUDE_FILE_NAME_H -header body -#endif -@end smallexample - - -@subsection Clean Design and Portable Implementation - -@cindex design -In addition to getting the syntax right, there's the little question of -semantics. Some things are done in certain ways in @value{GDBN} because long -experience has shown that the more obvious ways caused various kinds of -trouble. - -@cindex assumptions about targets -You can't assume the byte order of anything that comes from a target -(including @var{value}s, object files, and instructions). Such things -must be byte-swapped using @code{SWAP_TARGET_AND_HOST} in -@value{GDBN}, or one of the swap routines defined in @file{bfd.h}, -such as @code{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 @code{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. - -@cindex portability -Insertion of new @code{#ifdef}'s will be frowned upon. It's much better -to write the code portably than to conditionalize it for various -systems. - -@cindex system dependencies -New @code{#ifdef}'s which test for specific compilers or manufacturers -or operating systems are unacceptable. All @code{#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. - -@cindex portable file name handling -@cindex file names, portability -One particularly notorious area where system dependencies tend to -creep in is handling of file names. The mainline @value{GDBN} code -assumes Posix semantics of file names: absolute file names begin with -a forward slash @file{/}, 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: - -@table @code -@findex HAVE_DOS_BASED_FILE_SYSTEM -@item 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. - -@findex IS_DIR_SEPARATOR -@item IS_DIR_SEPARATOR (@var{c}) -Evaluates to a non-zero value if @var{c} is a directory separator -character. On Unix and GNU/Linux systems, only a slash @file{/} is -such a character, but on Windows, both @file{/} and @file{\} will -pass. - -@findex IS_ABSOLUTE_PATH -@item IS_ABSOLUTE_PATH (@var{file}) -Evaluates to a non-zero value if @var{file} is an absolute file name. -For Unix and GNU/Linux hosts, a name which begins with a slash -@file{/} is absolute. On DOS and Windows, @file{d:/foo} and -@file{x:\bar} are also absolute file names. - -@findex FILENAME_CMP -@item FILENAME_CMP (@var{f1}, @var{f2}) -Calls a function which compares file names @var{f1} and @var{f2} as -appropriate for the underlying host filesystem. For Posix systems, -this simply calls @code{strcmp}; on case-insensitive filesystems it -will call @code{strcasecmp} instead. - -@findex DIRNAME_SEPARATOR -@item DIRNAME_SEPARATOR -Evaluates to a character which separates directories in -@code{PATH}-style lists, typically held in environment variables. -This character is @samp{:} on Unix, @samp{;} on DOS and Windows. - -@findex SLASH_STRING -@item SLASH_STRING -This evaluates to a constant string you should use to produce an -absolute filename from leading directories and the file's basename. -@code{SLASH_STRING} is @code{"/"} on most systems, but might be -@code{"\\"} for some Windows-based ports. -@end table - -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 @code{dirname} and -@code{basename} library functions (available in @code{libiberty} for -platforms which don't provide them), instead of searching for a slash -with @code{strrchr}. - -Another way to generalize @value{GDBN} along a particular interface is with an -attribute struct. For example, @value{GDBN} has been generalized to handle -multiple kinds of remote interfaces---not by @code{#ifdef}s everywhere, but -by defining the @code{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., -@code{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 @value{GDBN}'s access to multiple source languages. - -Please avoid duplicating code. For example, in @value{GDBN} 3.x all -the code interfacing between @code{ptrace} and the rest of -@value{GDBN} was duplicated in @file{*-dep.c}, and so changing -something was very painful. In @value{GDBN} 4.x, these have all been -consolidated into @file{infptrace.c}. @file{infptrace.c} can deal -with variations between systems the same way any system-independent -file would (hooks, @code{#if defined}, etc.), and machines which are -radically different don't need to use @file{infptrace.c} at all. - -All debugging code must be controllable using the @samp{set debug -@var{module}} command. Do not use @code{printf} to print trace -messages. Use @code{fprintf_unfiltered(gdb_stdlog, ...}. Do not use -@code{#ifdef DEBUG}. - - -@node Porting GDB - -@chapter Porting @value{GDBN} -@cindex porting to new machines - -Most of the work in making @value{GDBN} 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 -@var{xyz} (e.g., @samp{sun4}), and its full three-part configuration -name is @code{@var{arch}-@var{xvend}-@var{xos}} (e.g., -@samp{sparc-sun-sunos4}). In particular: - -@itemize @bullet -@item -In the top level directory, edit @file{config.sub} and add @var{arch}, -@var{xvend}, and @var{xos} to the lists of supported architectures, -vendors, and operating systems near the bottom of the file. Also, add -@var{xyz} as an alias that maps to -@code{@var{arch}-@var{xvend}-@var{xos}}. You can test your changes by -running - -@smallexample -./config.sub @var{xyz} -@end smallexample - -@noindent -and - -@smallexample -./config.sub @code{@var{arch}-@var{xvend}-@var{xos}} -@end smallexample - -@noindent -which should both respond with @code{@var{arch}-@var{xvend}-@var{xos}} -and no error messages. - -@noindent -You need to port BFD, if that hasn't been done already. Porting BFD is -beyond the scope of this manual. - -@item -To configure @value{GDBN} itself, edit @file{gdb/configure.host} to recognize -your system and set @code{gdb_host} to @var{xyz}, and (unless your -desired target is already available) also edit @file{gdb/configure.tgt}, -setting @code{gdb_target} to something appropriate (for instance, -@var{xyz}). - -@emph{Maintainer's note: Work in progress. The file -@file{gdb/configure.host} originally needed to be modified when either a -new native target or a new host machine was being added to @value{GDBN}. -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.} - -@item -Finally, you'll need to specify and define @value{GDBN}'s host-, native-, and -target-dependent @file{.h} and @file{.c} files used for your -configuration. -@end itemize - -@node Releasing GDB - -@chapter Releasing @value{GDBN} -@cindex making a new release of gdb - -@section Versions and Branches - -@subsection Version Identifiers - -@value{GDBN}'s version is determined by the file @file{gdb/version.in}. - -@value{GDBN}'s mainline uses ISO dates to differentiate between -versions. The CVS repository uses @var{YYYY}-@var{MM}-@var{DD}-cvs -while the corresponding snapshot uses @var{YYYYMMDD}. - -@value{GDBN}'s release branch uses a slightly more complicated scheme. -When the branch is first cut, the mainline version identifier is -prefixed with the @var{major}.@var{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 (@var{M}.@var{N}) has been made, the version prefix is updated -to @var{M}.@var{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: - -@table @asis -@item 5.1.1 -final release from previous branch -@item 2002-03-03-cvs -main-line the day the branch is cut -@item 5.1.90-2002-03-03-cvs -corresponding branch version -@item 5.1.91 -first draft release candidate -@item 5.1.91-2002-03-17-cvs -updated branch version -@item 5.1.92 -second draft release candidate -@item 5.1.92-2002-03-31-cvs -updated branch version -@item 5.1.93 -final release candidate (see below) -@item 5.2 -official release -@item 5.2.0.90-2002-04-07-cvs -updated CVS branch version -@item 5.2.1 -second official release -@end table - -Notes: - -@itemize @bullet -@item -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. -@item -For 5.1.93 the bziped tar ball @file{gdb-5.1.93.tar.bz2} is just the -official @file{gdb-5.2.tar} renamed and compressed. -@end itemize - -To avoid version conflicts, vendors are expected to modify the file -@file{gdb/version.in} to include a vendor unique alphabetic identifier -(an official @value{GDBN} release never uses alphabetic characters in -its version identifer). - -Since @value{GDBN} 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. - - -@subsection Branches - -@value{GDBN} draws a release series (5.2, 5.2.1, @dots{}) 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: - -@smallexample -gdb_N_M-YYYY-MM-DD-branchpoint -gdb_N_M-YYYY-MM-DD-branch -gdb_M_N-YYYY-MM-DD-release -@end smallexample - -Release 5.2 is trialing the branch and release tags: - -@smallexample -gdb_N_M-YYYY-MM-DD-branchpoint -gdb_N_M-branch -gdb_M_N-YYYY-MM-DD-release -@end smallexample - -@emph{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.} - - -@section Branch Commit Policy - -The branch commit policy is pretty slack. @value{GDBN} releases 5.0, -5.1 and 5.2 all used the below: - -@itemize @bullet -@item -The @file{gdb/MAINTAINERS} file still holds. -@item -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 @file{gdb/PROBLEMS} -file is better than committing a hack. -@item -When considering a patch for the branch, suggested criteria include: -Does it fix a build? Does it fix the sequence @kbd{break main; run} -when debugging a static binary? -@item -The further a change is from the core of @value{GDBN}, the less likely -the change will worry anyone (e.g., target specific code). -@item -Only post a proposal to change the core of @value{GDBN} after you've -sent individual bribes to all the people listed in the -@file{MAINTAINERS} file @t{;-)} -@end itemize - -@emph{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.} - - -@section 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 @value{GDBN} -(an old target, an unused file). - -Obsolete code is identified by adding an @code{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 @value{GDBN} community has a reasonable opportunity to respond. -Remember, everything on the Internet takes a week. - -@enumerate -@item -Post the proposal on @email{gdb@@sources.redhat.com, the GDB mailing -list} Creating a bug report to track the task's state, is also highly -recommended. -@item -Wait a week or so. -@item -Post the proposal on @email{gdb-announce@@sources.redhat.com, the GDB -Announcement mailing list}. -@item -Wait a week or so. -@item -Go through and edit all relevant files and lines so that they are -prefixed with the word @code{OBSOLETE}. -@item -Wait until the next GDB version, containing this obsolete code, has been -released. -@item -Remove the obsolete code. -@end enumerate - -@noindent -@emph{Maintainer note: While removing old code is regrettable it is -hopefully better for @value{GDBN}'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.} - - - -@section 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 @value{GDBN} from even -building. If you can't get the problem fixed, document it in the -@file{gdb/PROBLEMS} file. - -@subheading Prompt for @file{gdb/NEWS} - -People always forget. Send a post reminding them but also if you know -something interesting happened add it yourself. The @code{schedule} -script will mention this in its e-mail. - -@subheading Review @file{gdb/README} - -Grab one of the nightly snapshots and then walk through the -@file{gdb/README} looking for anything that can be improved. The -@code{schedule} script will mention this in its e-mail. - -@subheading Refresh any imported files. - -A number of files are taken from external repositories. They include: - -@itemize @bullet -@item -@file{texinfo/texinfo.tex} -@item -@file{config.guess} et.@: al.@: (see the top-level @file{MAINTAINERS} -file) -@item -@file{etc/standards.texi}, @file{etc/make-stds.texi} -@end itemize - -@subheading Check the ARI - -@uref{http://sources.redhat.com/gdb/ari,,A.R.I.} is an @code{awk} script -(Awk Regression Index ;-) that checks for a number of errors and coding -conventions. The checks include things like using @code{malloc} instead -of @code{xmalloc} and file naming problems. There shouldn't be any -regressions. - -@subsection Review the bug data base - -Close anything obviously fixed. - -@subsection Check all cross targets build - -The targets are listed in @file{gdb/MAINTAINERS}. - - -@section Cut the Branch - -@subheading Create the branch - -@smallexample -$ 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 ^^ -... -$ -@end smallexample - -@itemize @bullet -@item -by using @kbd{-D YYYY-MM-DD-gmt} the branch is forced to an exact -date/time. -@item -the trunk is first taged so that the branch point can easily be found -@item -Insight (which includes GDB) and dejagnu are all tagged at the same time -@item -@file{version.in} gets bumped to avoid version number conflicts -@item -the reading of @file{.cvsrc} is disabled using @file{-f} -@end itemize - -@subheading Update @file{version.in} - -@smallexample -$ 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 -@end smallexample - -@itemize @bullet -@item -@file{0000-00-00} is used as a date to pump prime the version.in update -mechanism -@item -@file{.90} and the previous branch version are used as fairly arbitrary -initial branch version number -@end itemize - - -@subheading Update the web and news pages - -Something? - -@subheading Tweak cron to track the new branch - -The file @file{gdbadmin/cron/crontab} contains gdbadmin's cron table. -This file needs to be updated so that: - -@itemize @bullet -@item -a daily timestamp is added to the file @file{version.in} -@item -the new branch is included in the snapshot process -@end itemize - -@noindent -See the file @file{gdbadmin/cron/README} for how to install the updated -cron table. - -The file @file{gdbadmin/ss/README} should also be reviewed to reflect -any changes. That file is copied to both the branch/ and current/ -snapshot directories. - - -@subheading Update the NEWS and README files - -The @file{NEWS} file needs to be updated so that on the branch it refers -to @emph{changes in the current release} while on the trunk it also -refers to @emph{changes since the current release}. - -The @file{README} file needs to be updated so that it refers to the -current release. - -@subheading Post the branch info - -Send an announcement to the mailing lists: - -@itemize @bullet -@item -@email{gdb-announce@@sources.redhat.com, GDB Announcement mailing list} -@item -@email{gdb@@sources.redhat.com, GDB Discsussion mailing list} and -@email{gdb-testers@@sources.redhat.com, GDB Discsussion mailing list} -@end itemize - -@emph{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: - -@itemize @bullet -@item -the branch tag -@item -how to check out the branch using CVS -@item -the date/number of weeks until the release -@item -the branch commit policy -still holds. -@end itemize - -@section Stabilize the branch - -Something goes here. - -@section 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. - -@subsection 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). - -@subsubheading Freeze the branch - -Send out an e-mail notifying everyone that the branch is frozen to -@email{gdb-patches@@sources.redhat.com}. - -@subsubheading Establish a few defaults. - -@smallexample -$ 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 -$ -@end smallexample - -@noindent -Notes: - -@itemize @bullet -@item -Check the @code{autoconf} version carefully. You want to be using the -version taken from the @file{binutils} snapshot directory, which can be -found at @uref{ftp://sources.redhat.com/pub/binutils/}. It is very -unlikely that a system installed version of @code{autoconf} (e.g., -@file{/usr/bin/autoconf}) is correct. -@end itemize - -@subsubheading Check out the relevant modules: - -@smallexample -$ for m in gdb insight dejagnu -do -( mkdir -p $m && cd $m && cvs -q -f -d /cvs/src co -P -r $b $m ) -done -$ -@end smallexample - -@noindent -Note: - -@itemize @bullet -@item -The reading of @file{.cvsrc} is disabled (@file{-f}) so that there isn't -any confusion between what is written here and what your local -@code{cvs} really does. -@end itemize - -@subsubheading Update relevant files. - -@table @file - -@item 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 @file{ChangeLog} entry. - -@smallexample -$ 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 -@end smallexample - -@item gdb/README - -You'll need to update: - -@itemize @bullet -@item -the version -@item -the update date -@item -who did it -@end itemize - -@smallexample -$ 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 -@end smallexample - -@emph{Maintainer note: Hopefully the @file{README} file was reviewed -before the initial branch was cut so just a simple substitute is needed -to get it updated.} - -@emph{Maintainer note: Other projects generate @file{README} and -@file{INSTALL} from the core documentation. This might be worth -pursuing.} - -@item gdb/version.in - -@smallexample -$ 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 -@end smallexample - -@item dejagnu/src/dejagnu/configure.in - -Dejagnu is more complicated. The version number is a parameter to -@code{AM_INIT_AUTOMAKE}. Tweak it to read something like gdb-5.1.91. - -Don't forget to re-generate @file{configure}. - -Don't forget to include a @file{ChangeLog} entry. - -@smallexample -$ emacs dejagnu/src/dejagnu/configure.in -... -c-x 4 a -... -c-x c-s c-x c-c -$ ( cd dejagnu/src/dejagnu && autoconf ) -@end smallexample - -@end table - -@subsubheading Do the dirty work - -This is identical to the process used to create the daily snapshot. - -@smallexample -$ 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 ) -@end smallexample - -If the top level source directory does not have @file{src-release} -(@value{GDBN} version 5.3.1 or earlier), try these commands instead: - -@smallexample -$ 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 ) -@end smallexample - -@subsubheading Check the source files - -You're looking for files that have mysteriously disappeared. -@kbd{distclean} has the habit of deleting files it shouldn't. Watch out -for the @file{version.in} update @kbd{cronjob}. - -@smallexample -$ ( cd gdb/src && cvs -f -q -n update ) -M djunpack.bat -? gdb-5.1.91.tar -? proto-toplev -@dots{} lots of generated files @dots{} -M gdb/ChangeLog -M gdb/NEWS -M gdb/README -M gdb/version.in -@dots{} lots of generated files @dots{} -$ -@end smallexample - -@noindent -@emph{Don't worry about the @file{gdb.info-??} or -@file{gdb/p-exp.tab.c}. They were generated (and yes @file{gdb.info-1} -was also generated only something strange with CVS means that they -didn't get supressed). Fixing it would be nice though.} - -@subsubheading Create compressed versions of the release - -@smallexample -$ 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 -$ -@end smallexample - -@noindent -Note: - -@itemize @bullet -@item -A pipe such as @kbd{bunzip2 < xxx.bz2 | gzip -9 > xxx.gz} is not since, -in that mode, @code{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 @code{tar} and @code{bzip2} as separate passes. -@end itemize - -@subsection Sanity check the tar ball - -Pick a popular machine (Solaris/PPC?) and try the build on that. - -@smallexample -$ bunzip2 < gdb-5.2.tar.bz2 | tar xpf - -$ cd gdb-5.2 -$ ./configure -$ make -@dots{} -$ ./gdb/gdb ./gdb/gdb -GNU gdb 5.2 -@dots{} -(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) -@end smallexample - -@subsection Make a release candidate available - -If this is a release candidate then the only remaining steps are: - -@enumerate -@item -Commit @file{version.in} and @file{ChangeLog} -@item -Tweak @file{version.in} (and @file{ChangeLog} to read -@var{L}.@var{M}.@var{N}-0000-00-00-cvs so that the version update -process can restart. -@item -Make the release candidate available in -@uref{ftp://sources.redhat.com/pub/gdb/snapshots/branch} -@item -Notify the relevant mailing lists ( @email{gdb@@sources.redhat.com} and -@email{gdb-testers@@sources.redhat.com} that the candidate is available. -@end enumerate - -@subsection Make a formal release available - -(And you thought all that was required was to post an e-mail.) - -@subsubheading Install on sware - -Copy the new files to both the release and the old release directory: - -@smallexample -$ cp *.bz2 *.gz ~ftp/pub/gdb/old-releases/ -$ cp *.bz2 *.gz ~ftp/pub/gdb/releases -@end smallexample - -@noindent -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): - -@smallexample -$ cd ~ftp/pub/gdb/releases -$ rm @dots{} -@end smallexample - -@noindent -Update the file @file{README} and @file{.message} in the releases -directory: - -@smallexample -$ vi README -@dots{} -$ rm -f .message -$ ln README .message -@end smallexample - -@subsubheading Update the web pages. - -@table @file - -@item htdocs/download/ANNOUNCEMENT -This file, which is posted as the official announcement, includes: -@itemize @bullet -@item -General announcement -@item -News. If making an @var{M}.@var{N}.1 release, retain the news from -earlier @var{M}.@var{N} release. -@item -Errata -@end itemize - -@item htdocs/index.html -@itemx htdocs/news/index.html -@itemx htdocs/download/index.html -These files include: -@itemize @bullet -@item -announcement of the most recent release -@item -news entry (remember to update both the top level and the news directory). -@end itemize -These pages also need to be regenerate using @code{index.sh}. - -@item download/onlinedocs/ -You need to find the magic command that is used to generate the online -docs from the @file{.tar.bz2}. The best way is to look in the output -from one of the nightly @code{cron} jobs and then just edit accordingly. -Something like: - -@smallexample -$ ~/ss/update-web-docs \ - ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \ - $PWD/www \ - /www/sourceware/htdocs/gdb/download/onlinedocs \ - gdb -@end smallexample - -@item download/ari/ -Just like the online documentation. Something like: - -@smallexample -$ /bin/sh ~/ss/update-web-ari \ - ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \ - $PWD/www \ - /www/sourceware/htdocs/gdb/download/ari \ - gdb -@end smallexample - -@end table - -@subsubheading Shadow the pages onto gnu - -Something goes here. - - -@subsubheading Install the @value{GDBN} tar ball on GNU - -At the time of writing, the GNU machine was @kbd{gnudist.gnu.org} in -@file{~ftp/gnu/gdb}. - -@subsubheading Make the @file{ANNOUNCEMENT} - -Post the @file{ANNOUNCEMENT} file you created above to: - -@itemize @bullet -@item -@email{gdb-announce@@sources.redhat.com, GDB Announcement mailing list} -@item -@email{info-gnu@@gnu.org, General GNU Announcement list} (but delay it a -day or so to let things get out) -@item -@email{bug-gdb@@gnu.org, GDB Bug Report mailing list} -@end itemize - -@subsection Cleanup - -The release is out but you're still not finished. - -@subsubheading Commit outstanding changes - -In particular you'll need to commit any changes to: - -@itemize @bullet -@item -@file{gdb/ChangeLog} -@item -@file{gdb/version.in} -@item -@file{gdb/NEWS} -@item -@file{gdb/README} -@end itemize - -@subsubheading Tag the release - -Something like: - -@smallexample -$ 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 ) -@end smallexample - -Insight is used since that contains more of the release than -@value{GDBN} (@code{dejagnu} doesn't get tagged but I think we can live -with that). - -@subsubheading Mention the release on the trunk - -Just put something in the @file{ChangeLog} so that the trunk also -indicates when the release was made. - -@subsubheading Restart @file{gdb/version.in} - -If @file{gdb/version.in} does not contain an ISO date such as -@kbd{2002-01-24} then the daily @code{cronjob} won't update it. Having -committed all the release changes it can be set to -@file{5.2.0_0000-00-00-cvs} which will restart things (yes the @kbd{_} -is important - it affects the snapshot process). - -Don't forget the @file{ChangeLog}. - -@subsubheading Merge into trunk - -The files committed to the branch may also need changes merged into the -trunk. - -@subsubheading Revise the release schedule - -Post a revised release schedule to @email{gdb@@sources.redhat.com, GDB -Discussion List} with an updated announcement. The schedule can be -generated by running: - -@smallexample -$ ~/ss/schedule `date +%s` schedule -@end smallexample - -@noindent -The first parameter is approximate date/time in seconds (from the epoch) -of the most recent release. - -Also update the schedule @code{cronjob}. - -@section Post release - -Remove any @code{OBSOLETE} code. - -@node Testsuite - -@chapter Testsuite -@cindex test suite - -The testsuite is an important component of the @value{GDBN} 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 @value{GDBN} testsuite uses the DejaGNU testing framework. -DejaGNU is built using @code{Tcl} and @code{expect}. The tests -themselves are calls to various @code{Tcl} procs; the framework runs all the -procs and summarizes the passes and fails. - -@section Using the Testsuite - -@cindex running the test suite -To run the testsuite, simply go to the @value{GDBN} object directory (or to the -testsuite's objdir) and type @code{make check}. This just sets up some -environment variables and invokes DejaGNU's @code{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: - -@smallexample - === 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 -@end smallexample - -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 @value{GDBN} 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 @value{GDBN}. -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 @value{GDBN}, 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 @value{GDBN}, please consider adding -tests for it as well; this way future @value{GDBN} 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. - -@section Testsuite Organization - -@cindex test suite organization -The testsuite is entirely contained in @file{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 @value{GDBN} will run. The file -@file{testsuite/lib/gdb.exp} contains common utility procs useful for -all @value{GDBN} tests, while the directory @file{testsuite/config} contains -configuration-specific files, typically used for special-purpose -definitions of procs like @code{gdb_load} and @code{gdb_start}. - -The tests themselves are to be found in @file{testsuite/gdb.*} and -subdirectories of those. The names of the test files must always end -with @file{.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. - -@table @file -@item gdb.base -This is the base testsuite. The tests in it should apply to all -configurations of @value{GDBN} (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@t{++} (@code{#ifdef}s are allowed if necessary, for instance -for prototypes). - -@item gdb.@var{lang} -Language-specific tests for any language @var{lang} besides C. Examples are -@file{gdb.cp} and @file{gdb.java}. - -@item gdb.@var{platform} -Non-portable tests. The tests are specific to a specific configuration -(host or target), such as HP-UX or eCos. Example is @file{gdb.hp}, for -HP-UX. - -@item gdb.@var{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 @file{gdb.gcc}, for tests of @value{GDBN}'s handling of GCC -extensions. - -@item gdb.@var{subsystem} -Tests that exercise a specific @value{GDBN} subsystem in more depth. For -instance, @file{gdb.disasm} exercises various disassemblers, while -@file{gdb.stabs} tests pathways through the stabs symbol reader. -@end table - -@section Writing Tests -@cindex writing tests - -In many areas, the @value{GDBN} tests are already quite comprehensive; you -should be able to copy existing tests to handle new cases. - -You should try to use @code{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, @file{gdb.base/exprs.exp} defines a @code{test_expr} that -calls @code{gdb_test} multiple times. - -Only use @code{send_gdb} and @code{gdb_expect} when absolutely -necessary, such as when @value{GDBN} has several valid responses to a command. - -The source language programs do @emph{not} need to be in a consistent -style. Since @value{GDBN} is used to debug programs written in many different -styles, it's worth having a mix of styles in the testsuite; for -instance, some @value{GDBN} bugs involving the display of source lines would -never manifest themselves if the programs used GNU coding style -uniformly. - -@node Hints - -@chapter Hints - -Check the @file{README} file, it often has useful information that does not -appear anywhere else in the directory. - -@menu -* Getting Started:: Getting started working on @value{GDBN} -* Debugging GDB:: Debugging @value{GDBN} with itself -@end menu - -@node Getting Started,,, Hints - -@section Getting Started - -@value{GDBN} 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 @value{GDBN} Internals manual, has information which applies -generally to many parts of @value{GDBN}. - -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 @value{GDBN}; 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. -@c (@pxref{Host Conditionals}, @pxref{Target -@c Conditionals}, @pxref{Native Conditionals}, and @pxref{Obsolete -@c Conditionals}) - -Start with the header files. Once you have some idea of how -@value{GDBN}'s internal symbol tables are stored (see @file{symtab.h}, -@file{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 @value{GDBN}, 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 @value{GDBN} to start with, you can find more -specifically the part you are looking for by stepping through each -function with the @code{next} command. Do not use @code{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. - -@cindex command implementation -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 @value{GDBN} user, you know that the -@code{step} command invokes single-stepping. The command is invoked -via command tables (see @file{command.h}); by convention the function -which actually performs the command is formed by taking the name of -the command and adding @samp{_command}, or in the case of an -@code{info} subcommand, @samp{_info}. For example, the @code{step} -command invokes the @code{step_command} function and the @code{info -display} command invokes @code{display_info}. When this convention is -not followed, you might have to use @code{grep} or @kbd{M-x -tags-search} in emacs, or run @value{GDBN} on itself and set a -breakpoint in @code{execute_command}. - -@cindex @code{bug-gdb} mailing list -If all of the above fail, it may be appropriate to ask for information -on @code{bug-gdb}. But @emph{never} post a generic question like ``I was -wondering if anyone could give me some tips about understanding -@value{GDBN}''---if we had some magic secret we would put it in this manual. -Suggestions for improving the manual are always welcome, of course. - -@node Debugging GDB,,,Hints - -@section Debugging @value{GDBN} with itself -@cindex debugging @value{GDBN} - -If @value{GDBN} 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 @kbd{@w{./gdb -./gdb}}, which works on Suns and such, you can copy @file{gdb} to -@file{gdb2} and then type @kbd{@w{./gdb ./gdb2}}. - -When you run @value{GDBN} in the @value{GDBN} source directory, it will read a -@file{.gdbinit} file that sets up some simple things to make debugging -gdb easier. The @code{info} command, when executed without a subcommand -in a @value{GDBN} being debugged by gdb, will pop you back up to the top level -gdb. See @file{.gdbinit} for details. - -If you use emacs, you will probably want to do a @code{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 -@kbd{M-.} - -Also, make sure that you've either compiled @value{GDBN} with your local cc, or -have run @code{fixincludes} if you are compiling with gcc. - -@section Submitting Patches - -@cindex submitting patches -Thanks for thinking of offering your changes back to the community of -@value{GDBN} 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 @value{GDBN} maintainers will only install ``cleanly designed'' patches. -This manual summarizes what we believe to be clean design for @value{GDBN}. - -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. - -@cindex legal papers for code contributions -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 @code{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 @value{GDBN}, 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 @code{patch}. -Each message sent to me should include the changes to C code and -header files for a single feature, plus @file{ChangeLog} entries for -each directory where files were modified, and diffs for any changes -needed to the manuals (@file{gdb/doc/gdb.texinfo} or -@file{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 @file{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 -@email{gdb-patches@@sources.redhat.com, the @value{GDBN} maintainers}. - -@section Obsolete Conditionals -@cindex obsolete code - -Fragments of old code in @value{GDBN} 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. - -@table @code -@item 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 @value{GDBN} -gets the info portably from there. The values in @value{GDBN}'s configuration -files should be moved into BFD configuration files (if needed there), -and deleted from all of @value{GDBN}'s config files. - -Any @file{@var{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! - -@end table - -@include observer.texi -@raisesections -@include fdl.texi -@lowersections - -@node Index -@unnumbered Index - -@printindex cp - -@bye diff --git a/contrib/gdb/gdb/doc/gpl.texi b/contrib/gdb/gdb/doc/gpl.texi deleted file mode 100644 index be7ddc2fc086..000000000000 --- a/contrib/gdb/gdb/doc/gpl.texi +++ /dev/null @@ -1,409 +0,0 @@ -@ignore -@c Set file name and title for man page. -@setfilename gpl -@settitle GNU General Public License -@c man begin SEEALSO -gfdl(7), fsf-funding(7). -@c man end -@c man begin COPYRIGHT -Copyright @copyright{} 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. -@c man end -@end ignore -@node Copying -@c man begin DESCRIPTION -@appendix GNU GENERAL PUBLIC LICENSE -@center Version 2, June 1991 - -@display -Copyright @copyright{} 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. -@end display - -@unnumberedsec 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. - -@iftex -@unnumberedsec TERMS AND CONDITIONS FOR COPYING,@*DISTRIBUTION AND MODIFICATION -@end iftex -@ifnottex -@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end ifnottex - -@enumerate 0 -@item -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. - -@item -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. - -@item -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: - -@enumerate a -@item -You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -@item -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. - -@item -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.) -@end enumerate - -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. - -@item -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: - -@enumerate a -@item -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, - -@item -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, - -@item -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.) -@end enumerate - -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. - -@item -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. - -@item -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. - -@item -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. - -@item -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. - -@item -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. - -@item -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. - -@item -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. - -@iftex -@heading NO WARRANTY -@end iftex -@ifnottex -@center NO WARRANTY -@end ifnottex - -@item -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. - -@item -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 enumerate - -@iftex -@heading END OF TERMS AND CONDITIONS -@end iftex -@ifnottex -@center END OF TERMS AND CONDITIONS -@end ifnottex - -@page -@unnumberedsec 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. - -@smallexample -@var{one line to give the program's name and a brief idea of what it does.} -Copyright (C) @var{year} @var{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. -@end smallexample - -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: - -@smallexample -Gnomovision version 69, Copyright (C) @var{year} @var{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. -@end smallexample - -The hypothetical commands @samp{show w} and @samp{show c} should show -the appropriate parts of the General Public License. Of course, the -commands you use may be called something other than @samp{show w} and -@samp{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: - -@smallexample -Yoyodyne, Inc., hereby disclaims all copyright interest in the program -`Gnomovision' (which makes passes at compilers) written by James Hacker. - -@var{signature of Ty Coon}, 1 April 1989 -Ty Coon, President of Vice -@end smallexample - -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. -@c man end diff --git a/contrib/gdb/gdb/doc/lpsrc.sed b/contrib/gdb/gdb/doc/lpsrc.sed deleted file mode 100644 index 1c7af4aaf48f..000000000000 --- a/contrib/gdb/gdb/doc/lpsrc.sed +++ /dev/null @@ -1,13 +0,0 @@ -/font defs: ---/,/end font defs ---/c\ -%-------------------- PostScript (long names) font defs: -----------------\ -\\font\\bbf=Times-Bold at 10pt\ -\\font\\vbbf=Times-Bold at 12pt\ -\\font\\smrm=Times-Roman at 6pt\ -\\font\\brm=Times-Roman at 10pt\ -\\font\\rm=Times-Roman at 8pt\ -\\font\\it=Times-Italic at 8pt\ -\\font\\tt=Courier at 8pt\ -% Used only for \copyright, replacing plain TeX macro.\ -\\font\\sym=Symbol at 7pt\ -\\def\\copyright{{\\sym\\char'323}}\ -%-------------------- end font defs --------------------------------- diff --git a/contrib/gdb/gdb/doc/observer.texi b/contrib/gdb/gdb/doc/observer.texi deleted file mode 100644 index de48a192a36f..000000000000 --- a/contrib/gdb/gdb/doc/observer.texi +++ /dev/null @@ -1,70 +0,0 @@ -@c -*-texinfo-*- -@node GDB Observers -@appendix @value{GDBN} Currently available observers - -@section Implementation rationale -@cindex observers implementation rationale - -An @dfn{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 @dfn{subject}. To receive -notifications, the observer attaches a callback to the subject. -One subject can have several observers. - -@file{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. - -@section @code{normal_stop} Notifications -@cindex @code{normal_stop} observer -@cindex notification about inferior execution stop - -@value{GDBN} notifies all @code{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 @code{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 @code{normal_stop} -observers: - -@deftypefun extern struct observer *observer_attach_normal_stop (observer_normal_stop_ftype *@var{f}) -Attach the given @code{normal_stop} callback function @var{f} and -return the associated observer. -@end deftypefun - -@deftypefun extern void observer_detach_normal_stop (struct observer *@var{observer}); -Remove @var{observer} from the list of observers to be notified when -a @code{normal_stop} event occurs. -@end deftypefun - -@deftypefun extern void observer_notify_normal_stop (void); -Send a notification to all @code{normal_stop} observers. -@end deftypefun - - diff --git a/contrib/gdb/gdb/doc/psrc.sed b/contrib/gdb/gdb/doc/psrc.sed deleted file mode 100644 index 9bb557eae21e..000000000000 --- a/contrib/gdb/gdb/doc/psrc.sed +++ /dev/null @@ -1,13 +0,0 @@ -/font defs: ---/,/end font defs ---/c\ -%-------------------- PostScript (K Berry names) font defs: --------------\ -\\font\\bbf=ptmb at 10pt\ -\\font\\vbbf=ptmb at 12pt\ -\\font\\smrm=ptmr at 6pt\ -\\font\\brm=ptmr at 10pt\ -\\font\\rm=ptmr at 8pt\ -\\font\\it=ptmri at 8pt\ -\\font\\tt=pcrr at 8pt\ -% Used only for \copyright, replacing plain TeX macro.\ -\\font\\sym=psyr at 7pt\ -\\def\\copyright{{\\sym\\char'323}}\ -%-------------------- end font defs --------------------------------- diff --git a/contrib/gdb/gdb/doc/refcard.tex b/contrib/gdb/gdb/doc/refcard.tex deleted file mode 100644 index a8de9005d9d4..000000000000 --- a/contrib/gdb/gdb/doc/refcard.tex +++ /dev/null @@ -1,647 +0,0 @@ -%%%%%%%%%%%%%%%% gdb-refcard.tex %%%%%%%%%%%%%%%% - -%This file is TeX source for a reference card describing GDB, the GNU debugger. -%Copyright 1991, 1992, 1993, 1996, 1998, 1999, 2000 -%Free Software Foundation, Inc. -%Permission is granted to make and distribute verbatim copies of -%this reference provided the copyright notices and permission notices -%are preserved on all copies. -% -%TeX markup is a programming language; accordingly this file is source -%for a program to generate a reference. -% -%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, 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 can find a copy of the GNU General Public License at the URL -%http://www.gnu.org/copyleft/gpl.html; or write to the Free Software -%Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -% -%You can contact the maintainer at: doc@cygnus.com -% -% Documentation Department -% Cygnus Solutions -% 1325 Chesapeake Terrace -% Sunnyvale, CA 94089 USA -% -% +1 800 CYGNUS-1 -% -% -% -% 22-AUG-1993 Andreas Vogel -% -% Modifications made in order to handle different papersizes correctly. -% You only have to set the total width and height of the paper, the -% horizontal and vertical margin space measured from *paper edge* -% and the interline and interspec spacing. -% In order to support a new papersize, you have to fiddle with the -% latter four dimensions. Just try out a few values. -% All other values will be computed at process time so it should be -% quite easy to support different paper sizes - only four values to -% guess :-) -% -% To find the configuration places, just search for the string -% "CONFIGURATION". -% -% Andreas Vogel (av@ssw.de) -% -% -% -% Uncomment the following `magnification' command if you want to print -% out in a larger font. Caution! You may need larger paper. You had -% best avoid using 3-column output if you try this. See the ``Three -% column format'' section below if you want to print in three column -% format. -% -%\magnification=\magstep 1 -% -% NOTE ON INTENTIONAL OMISSIONS: This reference card includes most GDB -% commands, but due to space constraints there are some things I chose -% to omit. In general, not all synonyms for commands are covered, nor -% all variations of a command. -% The GDB-under-Emacs section omits gdb-mode functions without default -% keybindings. GDB startup options are not described. -% set print sevenbit-strings, set symbol-reloading omitted. -% printsyms, printpsyms, omitted since they're for GDB maintenance primarily -% share omitted due to obsolescence -% set check range/type omitted at least til code is in GDB. -% -%-------------------- Three column format ----------------------- - -%%%% --- To disable three column format, comment out this entire section - -% Three-column format for landscape printing - -%-------- Papersize defs: - -\newdimen\totalwidth \newdimen\totalheight -\newdimen\hmargin \newdimen\vmargin -\newdimen\secskip \newdimen\lskip -\newdimen\barwidth \newdimen\barheight -\newdimen\intersecwidth - -%% -%% START CONFIGURATION - PAPERSIZE DEFINITIONS -%------- Papersize params: -%% US letter paper (8.5x11in) -%% -\totalwidth=11in % total width of paper -\totalheight=8.5in % total height of paper -\hmargin=.25in % horizontal margin width -\vmargin=.25in % vertical margin width -\secskip=1pc % space between refcard secs -\lskip=2pt % extra skip between \sec entries -%------- end papersize params -%% -%% change according to personal taste, not papersize dependent -%% -\barwidth=.1pt % width of the cropmark bar -\barheight=2pt % height of the cropmark bar -\intersecwidth=0.5em % width between \itmwid and \dfnwid -%% -%% END CONFIGURATION - PAPERSIZE DEFINITIONS -%% - -%% -%% values to be computed - nothing to configure -%% -\newdimen\fullhsize % width of area without margins -\newdimen\itmwid % width of item column -\newdimen\dfnwid % width of definition column -\newdimen\temp % only for temporary use - -%% -%% adjust the offsets so the margins are measured *from paper edge* -%% -\hoffset=-1in \advance \hoffset by \hmargin -\voffset=-1in \advance \voffset by \vmargin - -%% -%% fullhsize = totalwidth - (2 * hmargin) -%% -\fullhsize=\totalwidth -\temp=\hmargin \multiply \temp by 2 \advance \fullhsize by -\temp - -%% -%% hsize = (fullhsize - (4 * hmargin) - (2 * barwidth)) / 3 -%% -\hsize=\fullhsize -\temp=\hmargin \multiply \temp by 4 \advance \hsize by -\temp -\temp=\barwidth \multiply \temp by 2 \advance \hsize by -\temp -\divide \hsize by 3 - -%% -%% vsize = totalheight - (2 * vmargin) -%% -\vsize=\totalheight -\temp=\vmargin \multiply \temp by 2 \advance \vsize by -\temp - -%% -%% itmwid = (hsize - intersecwidth) * 1/3 -%% dfnwid = (hsize - intersecwidth) * 2/3 -%% -\temp=\hsize \advance \temp by -\intersecwidth \divide \temp by 3 -\itmwid=\temp -\dfnwid=\hsize \advance \dfnwid by -\itmwid - -%-------- end papersize defs - - -\def\fulline{\hbox to \fullhsize} -\let\lcr=L \newbox\leftcolumn\newbox\centercolumn -\output={\if L\lcr - \global\setbox\leftcolumn=\columnbox \global\let\lcr=C - \else - \if C\lcr - \global\setbox\centercolumn=\columnbox \global\let\lcr=R - \else \tripleformat \global\let\lcr=L - \fi - \fi -% \ifnum\outputpenalty>-20000 \else\dosupereject\fi - } - -%% -%% START CONFIGURATION - ALTERNATIVE FOLDING GUIDES -%% -%% For NO printed folding guide, -%% comment out other \def\vdecor's and uncomment: - -%\def\vdecor{\hskip\hmargin plus1fil\hskip\barwidth plus1fil\hskip\hmargin plus1fil} - -%% For SOLID LINE folding guide, -%% comment out other \def\vdecor's and uncomment: - -%\def\vdecor{\hskip\hmargin plus1fil \vrule width \barwidth \hskip\hmargin plus1fil} - -%% For SMALL MARKS NEAR TOP AND BOTTOM as folding guide, -%% comment out other \def\vdecor's and uncomment: - -\def\vdecor{\hskip\hmargin plus1fil -\vbox to \vsize{\hbox to \barwidth{\vrule height\barheight width\barwidth}\vfill -\hbox to \barwidth{\vrule height\barheight width\barwidth}}%THIS PERCENT SIGN IS ESSENTIAL -\hskip\hmargin plus1fil} - -%% -%% END CONFIGURATION - ALTERNATIVES FOR FOLDING GUIDES -%% - -\def\tripleformat{\shipout\vbox{\fulline{\box\leftcolumn\vdecor - \box\centercolumn\vdecor - \columnbox} - } - \advancepageno} -\def\columnbox{\leftline{\pagebody}} -\def\bye{\par\vfill - \supereject - \if R\lcr \null\vfill\eject\fi - \end} - -%-------------------- end three column format ----------------------- - -%-------------------- Computer Modern font defs: -------------------- -\font\bbf=cmbx10 -\font\vbbf=cmbx12 -\font\smrm=cmr6 -\font\brm=cmr10 -\font\rm=cmr7 -\font\it=cmti7 -\font\tt=cmtt8 -%-------------------- end font defs --------------------------------- - -% -\hyphenpenalty=5000\tolerance=2000\raggedright\raggedbottom -\normalbaselineskip=9pt\baselineskip=9pt -% -\parindent=0pt -\parskip=0pt -\footline={\vbox to0pt{\hss}} -% -\def\ctl#1{{\tt C-#1}} -\def\opt#1{{\brm[{\rm #1}]}} -\def\xtra#1{\noalign{\smallskip{\tt#1}}} -% -\long\def\sec#1;#2\endsec{\vskip \secskip -\halign{% -%COL 1 (of halign): -\vtop{\hsize=\itmwid\tt -##\par\vskip \lskip }\hfil -%COL 2 (of halign): -&\vtop{\hsize=\dfnwid\hangafter=1\hangindent=\intersecwidth -\rm ##\par\vskip \lskip}\cr -%Tail of \long\def fills in halign body with \sec args: -\noalign{{\bbf #1}\vskip \lskip} -#2 -} -} - -{\vbbf GDB QUICK REFERENCE}\hfil{\smrm GDB Version 5}\qquad - -\sec Essential Commands; -gdb {\it program} \opt{{\it core}}&debug {\it program} \opt{using -coredump {\it core}}\cr -b \opt{\it file\tt:}{\it function}&set breakpoint at {\it function} \opt{in \it file}\cr -run \opt{{\it arglist}}&start your program \opt{with {\it arglist}}\cr -bt& backtrace: display program stack\cr -p {\it expr}&display the value of an expression\cr -c &continue running your program\cr -n &next line, stepping over function calls\cr -s &next line, stepping into function calls\cr -\endsec - -\sec Starting GDB; -gdb&start GDB, with no debugging files\cr -gdb {\it program}&begin debugging {\it program}\cr -gdb {\it program core}&debug coredump {\it core} produced by {\it -program}\cr -gdb --help&describe command line options\cr -\endsec - -\sec Stopping GDB; -quit&exit GDB; also {\tt q} or {\tt EOF} (eg \ctl{d})\cr -INTERRUPT&(eg \ctl{c}) terminate current command, or send to running process\cr -\endsec - -\sec Getting Help; -help&list classes of commands\cr -help {\it class}&one-line descriptions for commands in {\it class}\cr -help {\it command}&describe {\it command}\cr -\endsec - -\sec Executing your Program; -run {\it arglist}&start your program with {\it arglist}\cr -run&start your program with current argument list\cr -run $\ldots$ <{\it inf} >{\it outf}&start your program with input, output -redirected\cr -\cr -kill&kill running program\cr -\cr -tty {\it dev}&use {\it dev} as stdin and stdout for next {\tt run}\cr -set args {\it arglist}&specify {\it arglist} for next -{\tt run}\cr -set args&specify empty argument list\cr -show args&display argument list\cr -\cr -show env&show all environment variables\cr -show env {\it var}&show value of environment variable {\it var}\cr -set env {\it var} {\it string}&set environment variable {\it var}\cr -unset env {\it var}&remove {\it var} from environment\cr -\endsec - -\sec Shell Commands; -cd {\it dir}&change working directory to {\it dir}\cr -pwd&Print working directory\cr -make $\ldots$&call ``{\tt make}''\cr -shell {\it cmd}&execute arbitrary shell command string\cr -\endsec - -\vfill -\line{\smrm \opt{ } surround optional arguments \hfill $\ldots$ show -one or more arguments} -\vskip\baselineskip -\centerline{\smrm \copyright 1998,2000 Free Software Foundation, Inc.\qquad Permissions on back} -\eject -\sec Breakpoints and Watchpoints; -break \opt{\it file\tt:}{\it line}\par -b \opt{\it file\tt:}{\it line}&set breakpoint at {\it line} number \opt{in \it file}\par -eg:\quad{\tt break main.c:37}\quad\cr -break \opt{\it file\tt:}{\it func}&set breakpoint at {\it -func} \opt{in \it file}\cr -break +{\it offset}\par -break -{\it offset}&set break at {\it offset} lines from current stop\cr -break *{\it addr}&set breakpoint at address {\it addr}\cr -break&set breakpoint at next instruction\cr -break $\ldots$ if {\it expr}&break conditionally on nonzero {\it expr}\cr -cond {\it n} \opt{\it expr}&new conditional expression on breakpoint -{\it n}; make unconditional if no {\it expr}\cr -tbreak $\ldots$&temporary break; disable when reached\cr -rbreak {\it regex}&break on all functions matching {\it regex}\cr -watch {\it expr}&set a watchpoint for expression {\it expr}\cr -catch {\it event}&break at {\it event}, which may be {\tt catch}, {\tt throw}, -{\tt exec}, {\tt fork}, {\tt vfork}, {\tt load}, or {\tt unload}.\cr -\cr -info break&show defined breakpoints\cr -info watch&show defined watchpoints\cr -\cr -clear&delete breakpoints at next instruction\cr -clear \opt{\it file\tt:}{\it fun}&delete breakpoints at entry to {\it fun}()\cr -clear \opt{\it file\tt:}{\it line}&delete breakpoints on source line \cr -delete \opt{{\it n}}&delete breakpoints -\opt{or breakpoint {\it n}}\cr -\cr -disable \opt{{\it n}}&disable breakpoints -\opt{or breakpoint {\it n}} -\cr -enable \opt{{\it n}}&enable breakpoints -\opt{or breakpoint {\it n}} -\cr -enable once \opt{{\it n}}&enable breakpoints \opt{or breakpoint {\it n}}; -disable again when reached -\cr -enable del \opt{{\it n}}&enable breakpoints \opt{or breakpoint {\it n}}; -delete when reached -\cr -\cr -ignore {\it n} {\it count}&ignore breakpoint {\it n}, {\it count} -times\cr -\cr -commands {\it n}\par -\qquad \opt{\tt silent}\par -\qquad {\it command-list}&execute GDB {\it command-list} every time breakpoint {\it n} is reached. \opt{{\tt silent} suppresses default -display}\cr -end&end of {\it command-list}\cr -\endsec - -\sec Program Stack; -backtrace \opt{\it n}\par -bt \opt{\it n}&print trace of all frames in stack; or of {\it n} -frames---innermost if {\it n}{\tt >0}, outermost if {\it n}{\tt <0}\cr -frame \opt{\it n}&select frame number {\it n} or frame at address {\it -n}; if no {\it n}, display current frame\cr -up {\it n}&select frame {\it n} frames up\cr -down {\it n}&select frame {\it n} frames down\cr -info frame \opt{\it addr}&describe selected frame, or frame at -{\it addr}\cr -info args&arguments of selected frame\cr -info locals&local variables of selected frame\cr -info reg \opt{\it rn}$\ldots$\par -info all-reg \opt{\it rn}®ister values \opt{for regs {\it rn\/}} in -selected frame; {\tt all-reg} includes floating point\cr -\endsec - -\vfill\eject -\sec Execution Control; -continue \opt{\it count}\par -c \opt{\it count}&continue running; if {\it count} specified, ignore -this breakpoint next {\it count} times\cr -\cr -step \opt{\it count}\par -s \opt{\it count}&execute until another line reached; repeat {\it count} times if -specified\cr -stepi \opt{\it count}\par -si \opt{\it count}&step by machine instructions rather than source -lines\cr -\cr -next \opt{\it count}\par -n \opt{\it count}&execute next line, including any function calls\cr -nexti \opt{\it count}\par -ni \opt{\it count}&next machine instruction rather than source -line\cr -\cr -until \opt{\it location}&run until next instruction (or {\it -location})\cr -finish&run until selected stack frame returns\cr -return \opt{\it expr}&pop selected stack frame without executing -\opt{setting return value}\cr -signal {\it num}&resume execution with signal {\it s} (none if {\tt 0})\cr -jump {\it line}\par -jump *{\it address}&resume execution at specified {\it line} number or -{\it address}\cr -set var={\it expr}&evaluate {\it expr} without displaying it; use for -altering program variables\cr -\endsec - -\sec Display; -print \opt{\tt/{\it f}\/} \opt{\it expr}\par -p \opt{\tt/{\it f}\/} \opt{\it expr}&show value of {\it expr} \opt{or -last value \tt \$} according to format {\it f}:\cr -\qquad x&hexadecimal\cr -\qquad d&signed decimal\cr -\qquad u&unsigned decimal\cr -\qquad o&octal\cr -\qquad t&binary\cr -\qquad a&address, absolute and relative\cr -\qquad c&character\cr -\qquad f&floating point\cr -call \opt{\tt /{\it f}\/} {\it expr}&like {\tt print} but does not display -{\tt void}\cr -x \opt{\tt/{\it Nuf}\/} {\it expr}&examine memory at address {\it expr}; -optional format spec follows slash\cr -\quad {\it N}&count of how many units to display\cr -\quad {\it u}&unit size; one of\cr -&{\tt\qquad b}\ individual bytes\cr -&{\tt\qquad h}\ halfwords (two bytes)\cr -&{\tt\qquad w}\ words (four bytes)\cr -&{\tt\qquad g}\ giant words (eight bytes)\cr -\quad {\it f}&printing format. Any {\tt print} format, or\cr -&{\tt\qquad s}\ null-terminated string\cr -&{\tt\qquad i}\ machine instructions\cr -disassem \opt{\it addr}&display memory as machine instructions\cr -\endsec - -\sec Automatic Display; -display \opt{\tt/\it f\/} {\it expr}&show value of {\it expr} each time -program stops \opt{according to format {\it f}\/}\cr -display&display all enabled expressions on list\cr -undisplay {\it n}&remove number(s) {\it n} from list of -automatically displayed expressions\cr -disable disp {\it n}&disable display for expression(s) number {\it -n}\cr -enable disp {\it n}&enable display for expression(s) number {\it -n}\cr -info display&numbered list of display expressions\cr -\endsec - -\vfill\eject - -\sec Expressions; -{\it expr}&an expression in C, C++, or Modula-2 (including function calls), or:\cr -{\it addr\/}@{\it len}&an array of {\it len} elements beginning at {\it -addr}\cr -{\it file}::{\it nm}&a variable or function {\it nm} defined in {\it -file}\cr -$\tt\{${\it type}$\tt\}${\it addr}&read memory at {\it addr} as specified -{\it type}\cr -\$&most recent displayed value\cr -\${\it n}&{\it n}th displayed value\cr -\$\$&displayed value previous to \$\cr -\$\${\it n}&{\it n}th displayed value back from \$\cr -\$\_&last address examined with {\tt x}\cr -\$\_\_&value at address \$\_\cr -\${\it var}&convenience variable; assign any value\cr -\cr -show values \opt{{\it n}}&show last 10 values \opt{or surrounding -\${\it n}}\cr -show conv&display all convenience variables\cr -\endsec - -\sec Symbol Table; -info address {\it s}&show where symbol {\it s} is stored\cr -info func \opt{\it regex}&show names, types of defined functions -(all, or matching {\it regex})\cr -info var \opt{\it regex}&show names, types of global variables (all, -or matching {\it regex})\cr -whatis \opt{\it expr}\par -ptype \opt{\it expr}&show data type of {\it expr} \opt{or \tt \$} -without evaluating; {\tt ptype} gives more detail\cr -ptype {\it type}&describe type, struct, union, or enum\cr -\endsec - -\sec GDB Scripts; -source {\it script}&read, execute GDB commands from file {\it -script}\cr -\cr -define {\it cmd}\par -\qquad {\it command-list}&create new GDB command {\it cmd}; -execute script defined by {\it command-list}\cr -end&end of {\it command-list}\cr -document {\it cmd}\par -\qquad {\it help-text}&create online documentation -for new GDB command {\it cmd}\cr -end&end of {\it help-text}\cr -\endsec - -\sec Signals; -handle {\it signal} {\it act}&specify GDB actions for {\it signal}:\cr -\quad print&announce signal\cr -\quad noprint&be silent for signal\cr -\quad stop&halt execution on signal\cr -\quad nostop&do not halt execution\cr -\quad pass&allow your program to handle signal\cr -\quad nopass&do not allow your program to see signal\cr -info signals&show table of signals, GDB action for each\cr -\endsec - -\sec Debugging Targets; -target {\it type} {\it param}&connect to target machine, process, or file\cr -help target&display available targets\cr -attach {\it param}&connect to another process\cr -detach&release target from GDB control\cr -\endsec - -\vfill\eject -\sec Controlling GDB; -set {\it param} {\it value}&set one of GDB's internal parameters\cr -show {\it param}&display current setting of parameter\cr -\xtra{\rm Parameters understood by {\tt set} and {\tt show}:} -\quad complaint {\it limit}&number of messages on unusual symbols\cr -\quad confirm {\it on/off}&enable or disable cautionary queries\cr -\quad editing {\it on/off}&control {\tt readline} command-line editing\cr -\quad height {\it lpp}&number of lines before pause in display\cr -\quad language {\it lang}&Language for GDB expressions ({\tt auto}, {\tt c} or -{\tt modula-2})\cr -\quad listsize {\it n}&number of lines shown by {\tt list}\cr -\quad prompt {\it str}&use {\it str} as GDB prompt\cr -\quad radix {\it base}&octal, decimal, or hex number representation\cr -\quad verbose {\it on/off}&control messages when loading -symbols\cr -\quad width {\it cpl}&number of characters before line folded\cr -\quad write {\it on/off}&Allow or forbid patching binary, core files -(when reopened with {\tt exec} or {\tt core}) -\cr -\quad history $\ldots$\par -\quad h $\ldots$&groups with the following options:\cr -\quad h exp {\it off/on}&disable/enable {\tt readline} history expansion\cr -\quad h file {\it filename}&file for recording GDB command history\cr -\quad h size {\it size}&number of commands kept in history list\cr -\quad h save {\it off/on}&control use of external file for -command history\cr -\cr -\quad print $\ldots$\par -\quad p $\ldots$&groups with the following options:\cr -\quad p address {\it on/off}&print memory addresses in stacks, -values\cr -\quad p array {\it off/on}&compact or attractive format for -arrays\cr -\quad p demangl {\it on/off}&source (demangled) or internal form for C++ -symbols\cr -\quad p asm-dem {\it on/off}&demangle C++ symbols in -machine-instruction output\cr -\quad p elements {\it limit}&number of array elements to display\cr -\quad p object {\it on/off}&print C++ derived types for objects\cr -\quad p pretty {\it off/on}&struct display: compact or indented\cr -\quad p union {\it on/off}&display of union members\cr -\quad p vtbl {\it off/on}&display of C++ virtual function -tables\cr -\cr -show commands&show last 10 commands\cr -show commands {\it n}&show 10 commands around number {\it n}\cr -show commands +&show next 10 commands\cr -\endsec - -\sec Working Files; -file \opt{\it file}&use {\it file} for both symbols and executable; -with no arg, discard both\cr -core \opt{\it file}&read {\it file} as coredump; or discard\cr -exec \opt{\it file}&use {\it file} as executable only; or discard\cr -symbol \opt{\it file}&use symbol table from {\it file}; or discard\cr -load {\it file}&dynamically link {\it file\/} and add its symbols\cr -add-sym {\it file} {\it addr}&read additional symbols from {\it file}, -dynamically loaded at {\it addr}\cr -info files&display working files and targets in use\cr -path {\it dirs}&add {\it dirs} to front of path searched for -executable and symbol files\cr -show path&display executable and symbol file path\cr -info share&list names of shared libraries currently loaded\cr -\endsec - -\vfill\eject -\sec Source Files; -dir {\it names}&add directory {\it names} to front of source path\cr -dir&clear source path\cr -show dir&show current source path\cr -\cr -list&show next ten lines of source\cr -list -&show previous ten lines\cr -list {\it lines}&display source surrounding {\it lines}, -specified as:\cr -\quad{\opt{\it file\tt:}\it num}&line number \opt{in named file}\cr -\quad{\opt{\it file\tt:}\it function}&beginning of function \opt{in -named file}\cr -\quad{\tt +\it off}&{\it off} lines after last printed\cr -\quad{\tt -\it off}&{\it off} lines previous to last printed\cr -\quad{\tt*\it address}&line containing {\it address}\cr -list {\it f},{\it l}&from line {\it f} to line {\it l}\cr -info line {\it num}&show starting, ending addresses of compiled code for -source line {\it num}\cr -info source&show name of current source file\cr -info sources&list all source files in use\cr -forw {\it regex}&search following source lines for {\it regex}\cr -rev {\it regex}&search preceding source lines for {\it regex}\cr -\endsec - -\sec GDB under GNU Emacs; -M-x gdb&run GDB under Emacs\cr -\ctl{h} m&describe GDB mode\cr -M-s&step one line ({\tt step})\cr -M-n&next line ({\tt next})\cr -M-i&step one instruction ({\tt stepi})\cr -\ctl{c} \ctl{f}&finish current stack frame ({\tt finish})\cr -M-c&continue ({\tt cont})\cr -M-u&up {\it arg} frames ({\tt up})\cr -M-d&down {\it arg} frames ({\tt down})\cr -\ctl{x} \&© number from point, insert at end\cr -\ctl{x} SPC&(in source file) set break at point\cr -\endsec - -\sec GDB License; -show copying&Display GNU General Public License\cr -show warranty&There is NO WARRANTY for GDB. Display full no-warranty -statement.\cr -\endsec - - -\vfill -{\smrm\parskip=6pt -Copyright \copyright 1991,'92,'93,'98,2000 Free Software Foundation, Inc. -Author: Roland H. Pesch - -The author assumes no responsibility for any errors on this card. - -This card may be freely distributed under the terms of the GNU -General Public License. - -Please contribute to development of this card by -annotating it. Improvements can be sent to bug-gdb@gnu.org. - -GDB itself is free software; you are welcome to distribute copies of -it under the terms of the GNU General Public License. There is -absolutely no warranty for GDB. -} -\end diff --git a/contrib/gdb/gdb/doc/stabs.texinfo b/contrib/gdb/gdb/doc/stabs.texinfo deleted file mode 100644 index d43ef372c30d..000000000000 --- a/contrib/gdb/gdb/doc/stabs.texinfo +++ /dev/null @@ -1,4046 +0,0 @@ -\input texinfo -@setfilename stabs.info - -@c @finalout - -@c This is a dir.info fragment to support semi-automated addition of -@c manuals to an info tree. -@dircategory Software development -@direntry -* Stabs: (stabs). The "stabs" debugging information format. -@end direntry - -@ifinfo -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''. -@end ifinfo - -@setchapternewpage odd -@settitle STABS -@titlepage -@title The ``stabs'' debug format -@author Julia Menapace, Jim Kingdon, David MacKenzie -@author Cygnus Support -@page -@tex -\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$ -\xdef\manvers{\$Revision: 2.130 $} % For use in headers, footers too -{\parskip=0pt -\hfill Cygnus Support\par -\hfill \manvers\par -\hfill \TeX{}info \texinfoversion\par -} -@end tex - -@vskip 0pt plus 1filll -Copyright @copyright{} 1992,1993,1994,1995,1997,1998,2000,2001 Free Software Foundation, Inc. -Contributed by Cygnus Support. - -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''. -@end titlepage - -@ifinfo -@node Top -@top 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 -@end menu -@end ifinfo - -@c TeX can handle the contents at the start but makeinfo 3.12 can not -@iftex -@contents -@end iftex - -@node Overview -@chapter Overview of Stabs - -@dfn{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 @code{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 (@pxref{Symbol Descriptors}) and type -descriptors (@pxref{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. - -@c FIXME: Need to document all OS9000 stuff in GDB; see all references -@c to os9k_stabs in stabsread.c. - -Other sources of information on stabs are @cite{Dbx and Dbxtool -Interfaces}, 2nd edition, by Sun, 1988, and @cite{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 -@end menu - -@node Flow -@section Overview of Debugging Information Flow - -The GNU C compiler compiles C source in a @file{.c} file into assembly -language in a @file{.s} file, which the assembler translates into -a @file{.o} file, which the linker combines with other @file{.o} files and -libraries to produce an executable file. - -With the @samp{-g} option, GCC puts in the @file{.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 @dfn{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 -@file{.o} file it is building. The linker consolidates the @file{.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. - -@node Stabs Format -@section 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 @code{.stabs} (string), @code{.stabn} (number), or @code{.stabd} -(dot). IBM's XCOFF assembler uses @code{.stabx} (and some other -directives such as @code{.file} and @code{.bi}) instead of -@code{.stabs}, @code{.stabn} or @code{.stabd}. - -The overall format of each class of stab is: - -@example -.stabs "@var{string}",@var{type},@var{other},@var{desc},@var{value} -.stabn @var{type},@var{other},@var{desc},@var{value} -.stabd @var{type},@var{other},@var{desc} -.stabx "@var{string}",@var{value},@var{type},@var{sdb-type} -@end example - -@c what is the correct term for "current file location"? My AIX -@c assembler manual calls it "the value of the current location counter". -For @code{.stabn} and @code{.stabd}, there is no @var{string} (the -@code{n_strx} field is zero; see @ref{Symbol Tables}). For -@code{.stabd}, the @var{value} field is implicit and has the value of -the current file location. For @code{.stabx}, the @var{sdb-type} field -is unused for stabs and can always be set to zero. The @var{other} -field is almost always unused and can be set to zero. - -The number in the @var{type} field gives some basic information about -which type of stab this is (or whether it @emph{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 @var{string}, @var{desc}, or -@var{value} fields present in the stab. @xref{Stab Types}, for a list -in numeric order of the valid @var{type} field values for stab directives. - -@node String Field -@section 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: - -@example -"@var{name}:@var{symbol-descriptor} @var{type-information}" -@end example - -@var{name} is the name of the symbol represented by the stab; it can -contain a pair of colons (@pxref{Nested Symbols}). @var{name} can be -omitted, which means the stab represents an unnamed object. For -example, @samp{:t10=*2} defines type 10 as a pointer to type 2, but does -not give the type a name. Omitting the @var{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 @var{symbol-descriptor} following the @samp{:} is an alphabetic -character that tells more specifically what kind of symbol the stab -represents. If the @var{symbol-descriptor} is omitted, but type -information follows, then the stab represents a local variable. For a -list of symbol descriptors, see @ref{Symbol Descriptors}. The @samp{c} -symbol descriptor is an exception in that it is not followed by type -information. @xref{Constants}. - -@var{type-information} is either a @var{type-number}, or -@samp{@var{type-number}=}. A @var{type-number} alone is a type -reference, referring directly to a type that has already been defined. - -The @samp{@var{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 @samp{=} and nested definitions. Also, the Lucid -compiler will repeat @samp{@var{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 @var{type-descriptor}, and tells what kind of -type is about to be defined. Any other values following the -@var{type-descriptor} vary, depending on the @var{type-descriptor}. -@xref{Type Descriptors}, for a list of @var{type-descriptor} values. If -a number follows the @samp{=} then the number is a @var{type-reference}. -For a full description of types, @ref{Types}. - -A @var{type-number} is often a single number. The GNU and Sun tools -additionally permit a @var{type-number} to be a pair -(@var{file-number},@var{filetype-number}) (the parentheses appear in the -string, and serve to distinguish the two cases). The @var{file-number} -is 0 for the base source file, 1 for the first included file, 2 for the -next, and so on. The @var{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 -@code{N_BINCL} optimization to succeed more often; see @ref{Include -Files}). - -There is an AIX extension for type attributes. Following the @samp{=} -are any number of type attributes. Each one starts with @samp{@@} and -ends with @samp{;}. 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@t{++} -(@pxref{Cplusplus}), new attributes should not be defined which begin -with a digit, @samp{(}, or @samp{-}; GDB may be unable to distinguish -those from the C@t{++} type descriptor @samp{@@}. The attributes are: - -@table @code -@item a@var{boundary} -@var{boundary} is an integer specifying the alignment. I assume it -applies to all variables of this type. - -@item p@var{integer} -Pointer class (for checking). Not sure what this means, or how -@var{integer} is interpreted. - -@item 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. - -@item s@var{size} -Size in bits of a variable of this type. This is fully supported by GDB -4.11 and later. - -@item 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. - -@item 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). - -@end table - -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 @code{.stabs} directive -into several @code{.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 @samp{?} instead of backslash. - -@node C Example -@section 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: - -@example -main() -@{ - printf("Hello world"); -@} -@end example - -When compiled with @samp{-g}, the program above yields the following -@file{.s} file. Line numbers have been added to make it easier to refer -to parts of the @file{.s} file in the description of the stabs that -follows. - -@node Assembly Code -@section 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. - -@example -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 -@end example - -@node Program Structure -@chapter 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. -@end menu - -@node Main Program -@section Main Program - -@findex N_MAIN -Most languages allow the main program to have any name. The -@code{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 @code{main}), -but some C compilers emit an @code{N_MAIN} stab for the @code{main} -function. I'm not sure how XCOFF handles this. - -@node Source Files -@section Paths and Names of the Source Files - -@findex N_SO -Before any other stabs occur, there must be a stab specifying the source -file. This information is contained in a symbol of stab type -@code{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. -@c Do the debuggers use it? What are the codes? -djm - -Some compilers (for example, GCC2 and SunOS4 @file{/bin/cc}) also -include the directory in which the source was compiled, in a second -@code{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 @code{cfront} C@t{++} compiler can have additional @code{N_SO} symbols for -nonexistent source files after the @code{N_SO} for the real source file; -these are believed to contain no useful information. - -For example: - -@example -.stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0 # @r{100 is N_SO} -.stabs "hello.c",100,0,0,Ltext0 - .text -Ltext0: -@end example - -@findex C_FILE -Instead of @code{N_SO} symbols, XCOFF uses a @code{.file} assembler -directive which assembles to a @code{C_FILE} symbol; explaining this in -detail is outside the scope of this document. - -@c FIXME: Exactly when should the empty N_SO be used? Why? -If it is useful to indicate the end of a source file, this is done with -an @code{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 @code{N_SO} for a different -source file, or a symbol ending in @code{.o} (which at least some -linkers insert to mark the start of a new @code{.o} file). - -@node Include Files -@section Names of Include Files - -There are several schemes for dealing with include files: the -traditional @code{N_SOL} approach, Sun's @code{N_BINCL} approach, and the -XCOFF @code{C_BINCL} approach (which despite the similar name has little in -common with @code{N_BINCL}). - -@findex N_SOL -An @code{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 -@code{N_SOL} symbol with the name of the main source file. - -@findex N_BINCL -@findex N_EINCL -@findex N_EXCL -The @code{N_BINCL} approach works as follows. An @code{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 @code{N_EINCL} -symbol (which has no string field). In an object file, there is no -significant data in the @code{N_EINCL} symbol. @code{N_BINCL} and -@code{N_EINCL} can be nested. - -If the linker detects that two source files have identical stabs between -an @code{N_BINCL} and @code{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 @code{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 -@code{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 @code{N_EXCL} symbol is the same as the value of the -@code{N_BINCL} symbol it replaces. This information can be used to -match up @code{N_EXCL} and @code{N_BINCL} symbols which have the same -filename. The @code{N_EINCL} value, and the values of the other and -description fields for all three, appear to always be zero. - -@findex C_BINCL -@findex C_EINCL -For the start of an include file in XCOFF, use the @file{.bi} assembler -directive, which generates a @code{C_BINCL} symbol. A @file{.ei} -directive, which generates a @code{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. @code{C_BINCL} and @code{C_EINCL} do not nest. - -@node Line Numbers -@section Line Numbers - -@findex N_SLINE -An @code{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 (@pxref{Stab Sections}), it is -relative to the function in which the @code{N_SLINE} symbol occurs. - -@findex N_DSLINE -@findex N_BSLINE -GNU documents @code{N_DSLINE} and @code{N_BSLINE} symbols for line -numbers in the data or bss segments, respectively. They are identical -to @code{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 @code{C_BINCL} method of marking include files (@pxref{Include -Files}). - -@node Procedures -@section Procedures - -@findex N_FUN, for functions -@findex N_FNAME -@findex N_STSYM, for functions (Sun acc) -@findex N_GSYM, for functions (Sun acc) -All of the following stabs normally use the @code{N_FUN} symbol type. -However, Sun's @code{acc} compiler on SunOS4 uses @code{N_GSYM} and -@code{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 @code{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). - -@findex C_FUN -A function is represented by an @samp{F} symbol descriptor for a global -(extern) function, and @samp{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 @ref{ELF Linker -Relocation} for more information on linker relocation of stabs in ELF -files. For XCOFF, the stab uses the @code{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 @samp{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 -@code{N_SLINE} symbol. - -@c FIXME: verify whether the "I suspect" below is true or not. -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 @samp{;}. An argument type of 0 means that additional -arguments are being passed, whose types and number may vary (@samp{...} -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 -(@pxref{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 @code{float} -argument, the value is passed as a @code{double} but then converted to a -@code{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 @samp{P} followed by the return -type of the function, followed by the arguments, each preceded by -@samp{;}, as in a stab with symbol descriptor @samp{f} or @samp{F}. -This use of symbol descriptor @samp{P} can be distinguished from its use -for register parameters (@pxref{Register Parameters}) by the fact that it has -symbol type @code{N_FUN}. - -The AIX documentation also defines symbol descriptor @samp{J} as an -internal function. I assume this means a function nested within another -function. It also says symbol descriptor @samp{m} is a module in -Modula-2 or extended Pascal. - -Procedures (functions which do not return values) are represented as -functions returning the @code{void} type in C. I don't see why this couldn't -be used for all languages (inventing a @code{void} type for this purpose if -necessary), but the AIX documentation defines @samp{I}, @samp{P}, and -@samp{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 @code{main} which -returns type number @code{1}. The @code{_main} specified for the value -is a reference to an assembler label which is used to fill in the start -address of the function. - -@example -.stabs "main:F1",36,0,0,_main # @r{36 is N_FUN} -@end example - -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 @code{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. - -@node Nested Procedures -@section 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 @samp{:}). 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: - -@example -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); -@} -@end example - -@noindent -produces the stabs: - -@example -.stabs "baz:f1,baz,bar",36,0,0,_baz.15 # @r{36 is N_FUN} -.stabs "bar:f1,bar,foo",36,0,0,_bar.12 -.stabs "foo:F1",36,0,0,_foo -@end example - -@node Block Structure -@section Block Structure - -@findex N_LBRAC -@findex N_RBRAC -@c For GCC 2.5.8 or so stabs-in-coff, these are absolute instead of -@c function relative (as documented below). But GDB has never been able -@c to deal with that (it had wanted them to be relative to the file, but -@c I just fixed that (between GDB 4.12 and 4.13)), so it is function -@c relative just like ELF and SOM and the below documentation. -The program's block structure is represented by the @code{N_LBRAC} (left -brace) and the @code{N_RBRAC} (right brace) stab types. The variables -defined inside a block precede the @code{N_LBRAC} symbol for most -compilers, including GCC. Other compilers, such as the Convex, Acorn -RISC machine, and Sun @code{acc} compilers, put the variables after the -@code{N_LBRAC} symbol. The values of the @code{N_LBRAC} and -@code{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 (@pxref{Stab Sections}), they are -relative to the function in which they occur. - -The @code{N_LBRAC} and @code{N_RBRAC} stabs that describe the block -scope of a procedure are located after the @code{N_FUN} stab that -represents the procedure itself. - -Sun documents the desc field of @code{N_LBRAC} and -@code{N_RBRAC} symbols as containing the nesting level of the block. -However, dbx seems to not care, and GCC always sets desc to -zero. - -@findex .bb -@findex .be -@findex C_BLOCK -For XCOFF, block scope is indicated with @code{C_BLOCK} symbols. If the -name of the symbol is @samp{.bb}, then it is the beginning of the block; -if the name of the symbol is @samp{.be}; it is the end of the block. - -@node Alternate Entry Points -@section Alternate Entry Points - -@findex N_ENTRY -@findex C_ENTRY -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 @code{N_ENTRY} stab is for this; however, the Sun FORTRAN -compiler doesn't use it. According to AIX documentation, only the name -of a @code{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 @code{N_ENTRY} stab -was the address of the alternate entry point, but I don't know the -source for that information. - -@node Constants -@chapter Constants - -The @samp{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 @samp{=} and one of the following: - -@table @code -@item b @var{value} -Boolean constant. @var{value} is a numeric value; I assume it is 0 for -false or 1 for true. - -@item c @var{value} -Character constant. @var{value} is the numeric value of the constant. - -@item e @var{type-information} , @var{value} -Constant whose value can be represented as integral. -@var{type-information} is the type of the constant, as it would appear -after a symbol descriptor (@pxref{String Field}). @var{value} is the -numeric value of the constant. GDB 4.9 does not actually get the right -value if @var{value} does not fit in a host @code{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. - -@item i @var{value} -Integer constant. @var{value} is the numeric value. The type is some -sort of generic integer type (for GDB, a host @code{int}); to specify -the type explicitly, use @samp{e} instead. - -@item r @var{value} -Real constant. @var{value} is the real value, which can be @samp{INF} -(optionally preceded by a sign) for infinity, @samp{QNAN} for a quiet -NaN (not-a-number), or @samp{SNAN} for a signalling NaN. If it is a -normal number the format is that accepted by the C library function -@code{atof}. - -@item s @var{string} -String constant. @var{string} is a string enclosed in either @samp{'} -(in which case @samp{'} characters within the string are represented as -@samp{\'} or @samp{"} (in which case @samp{"} characters within the -string are represented as @samp{\"}). - -@item S @var{type-information} , @var{elements} , @var{bits} , @var{pattern} -Set constant. @var{type-information} is the type of the constant, as it -would appear after a symbol descriptor (@pxref{String Field}). -@var{elements} is the number of elements in the set (does this means -how many bits of @var{pattern} are actually used, which would be -redundant with the type, or perhaps the number of bits set in -@var{pattern}? I don't get it), @var{bits} is the number of bits in the -constant (meaning it specifies the length of @var{pattern}, I think), -and @var{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 @var{pattern} should be -understood to be target, not host, byte order and format. -@end table - -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 @samp{;}. - -@node Variables -@chapter 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. -@end menu - -@node Stack Variables -@section 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 -@dfn{automatic}), it can be allocated in a register (@pxref{Register -Variables}) or on the stack. - -@findex N_LSYM, for stack variables -@findex C_LSYM -Each variable allocated on the stack has a stab with the symbol -descriptor omitted. Since type information should begin with a digit, -@samp{-}, or @samp{(}, 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 @samp{@var{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 @code{N_LSYM} stab type, or -@code{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 @ref{Block Structure}. - -For example, the following C code: - -@example -int -main () -@{ - int x; -@} -@end example - -produces the following stabs: - -@example -.stabs "main:F1",36,0,0,_main # @r{36 is N_FUN} -.stabs "x:1",128,0,0,-12 # @r{128 is N_LSYM} -.stabn 192,0,0,LBB2 # @r{192 is N_LBRAC} -.stabn 224,0,0,LBE2 # @r{224 is N_RBRAC} -@end example - -See @ref{Procedures} for more information on the @code{N_FUN} stab, and -@ref{Block Structure} for more information on the @code{N_LBRAC} and -@code{N_RBRAC} stabs. - -@node Global Variables -@section Global Variables - -@findex N_GSYM -@findex C_GSYM -@c FIXME: verify for sure that it really is C_GSYM on XCOFF -A variable whose scope is not specific to just one source file is -represented by the @samp{G} symbol descriptor. These stabs use the -@code{N_GSYM} stab type (C_GSYM for XCOFF). The type information for -the stab (@pxref{String Field}) gives the type of the variable. - -For example, the following source code: - -@example -char g_foo = 'c'; -@end example - -@noindent -yields the following assembly code: - -@example -.stabs "g_foo:G2",32,0,0,0 # @r{32 is N_GSYM} - .global _g_foo - .data -_g_foo: - .byte 99 -@end example - -The address of the variable represented by the @code{N_GSYM} is not -contained in the @code{N_GSYM} stab. The debugger gets this information -from the external symbol for the global variable. In the example above, -the @code{.global _g_foo} and @code{_g_foo:} lines tell the assembler to -produce an external symbol. - -Some compilers, like GCC, output @code{N_GSYM} stabs only once, where -the variable is defined. Other compilers, like SunOS4 /bin/cc, output a -@code{N_GSYM} stab for each compilation unit which references the -variable. - -@node Register Variables -@section Register Variables - -@findex N_RSYM -@findex C_RSYM -@c According to an old version of this manual, AIX uses C_RPSYM instead -@c of C_RSYM. I am skeptical; this should be verified. -Register variables have their own stab type, @code{N_RSYM} -(@code{C_RSYM} for XCOFF), and their own symbol descriptor, @samp{r}. -The stab's value is the number of the register where the variable data -will be stored. -@c .stabs "name:type",N_RSYM,0,RegSize,RegNumber (Sun doc) - -AIX defines a separate symbol descriptor @samp{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 @samp{d}. - -If the register is explicitly allocated to a global variable, but not -initialized, as in: - -@example -register int g_bar asm ("%g5"); -@end example - -@noindent -then the stab may be emitted at the end of the object file, with -the other bss symbols. - -@node Common Blocks -@section 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. - -@findex N_BCOMM -@findex N_ECOMM -@findex C_BCOMM -@findex C_ECOMM -A @code{N_BCOMM} stab begins a common block and an @code{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 -@code{N_BCOMM} has the name of the common block (even though their -compiler actually puts it both places). - -@findex N_ECOML -@findex C_ECOML -The stabs for the members of the common block are between the -@code{N_BCOMM} and the @code{N_ECOMM}; the value of each stab is the -offset within the common block of that variable. IBM uses the -@code{C_ECOML} stab type, and there is a corresponding @code{N_ECOML} -stab type, but Sun's Fortran compiler uses @code{N_GSYM} instead. The -variables within a common block use the @samp{V} symbol descriptor (I -believe this is true of all Fortran variables). Other stabs (at least -type declarations using @code{C_DECL}) can also be between the -@code{N_BCOMM} and the @code{N_ECOMM}. - -@node Statics -@section Static Variables - -Initialized static variables are represented by the @samp{S} and -@samp{V} symbol descriptors. @samp{S} means file scope static, and -@samp{V} means procedure scope static. One exception: in XCOFF, IBM's -xlc compiler always uses @samp{V}, and whether it is file scope or not -is distinguished by whether the stab is located within a function. - -@c This is probably not worth mentioning; it is only true on the sparc -@c for `double' variables which although declared const are actually in -@c the data segment (the text segment can't guarantee 8 byte alignment). -@c (although GCC -@c 2.4.5 has a bug in that it uses @code{N_FUN}, so neither dbx nor GDB can -@c find the variables) -@findex N_STSYM -@findex N_LCSYM -@findex N_FUN, for variables -@findex N_ROSYM -In a.out files, @code{N_STSYM} means the data section, @code{N_FUN} -means the text section, and @code{N_LCSYM} means the bss section. For -those systems with a read-only data section separate from the text -section (Solaris), @code{N_ROSYM} means the read-only data section. - -For example, the source lines: - -@example -static const int var_const = 5; -static int var_init = 2; -static int var_noinit; -@end example - -@noindent -yield the following stabs: - -@example -.stabs "var_const:S1",36,0,0,_var_const # @r{36 is N_FUN} -@dots{} -.stabs "var_init:S1",38,0,0,_var_init # @r{38 is N_STSYM} -@dots{} -.stabs "var_noinit:S1",40,0,0,_var_noinit # @r{40 is N_LCSYM} -@end example - -@findex C_STSYM -@findex C_BSTAT -@findex C_ESTAT -In XCOFF files, the stab type need not indicate the section; -@code{C_STSYM} can be used for all statics. Also, each static variable -is enclosed in a static block. A @code{C_BSTAT} (emitted with a -@samp{.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 @samp{.bs}. A @code{C_ESTAT} -(emitted with a @samp{.es} assembler directive) symbol ends the static -block; its name is @samp{.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 -@samp{S} means that the address is absolute (the linker relocates it) -and symbol descriptor @samp{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 @samp{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, -@xref{ELF Linker Relocation}. - -@node Based Variables -@section Fortran Based Variables - -Fortran (at least, the Sun and SGI dialects of FORTRAN-77) has a feature -which allows allocating arrays with @code{malloc}, but which avoids -blurring the line between arrays and pointers the way that C does. In -stabs such a variable uses the @samp{b} symbol descriptor. - -For example, the Fortran declarations - -@example -real foo, foo10(10), foo10_5(10,5) -pointer (foop, foo) -pointer (foo10p, foo10) -pointer (foo105p, foo10_5) -@end example - -produce the stabs - -@example -foo:b6 -foo10:bar3;1;10;6 -foo10_5:bar3;1;5;ar3;1;10;6 -@end example - -In this example, @code{real} is type 6 and type 3 is an integral type -which is the type of the subscripts of the array (probably -@code{integer}). - -The @samp{b} symbol descriptor is like @samp{V} in that it denotes a -statically allocated symbol whose scope is local to a function; see -@xref{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 @code{foo} stab is the address -of a pointer to a real, the value of the @code{foo10} stab is the -address of a pointer to a 10-element array of reals, and the value of -the @code{foo10_5} stab is the address of a pointer to a 5-element array -of 10-element arrays of reals. - -@node Parameters -@section 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. - -@findex N_PSYM -@findex C_PSYM -Parameters passed on the stack use the symbol descriptor @samp{p} and -the @code{N_PSYM} symbol type (or @code{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: - -@example -main (argc, argv) - int argc; - char **argv; -@end example - -produces the stabs: - -@example -.stabs "main:F1",36,0,0,_main # @r{36 is N_FUN} -.stabs "argc:p1",160,0,0,68 # @r{160 is N_PSYM} -.stabs "argv:p20=*21=*2",160,0,0,72 -@end example - -The type definition of @code{argv} is interesting because it contains -several type definitions. Type 21 is pointer to type 2 (char) and -@code{argv} (type 20) is pointer to type 21. - -@c FIXME: figure out what these mean and describe them coherently. -The following symbol descriptors are also said to go with @code{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). - -@example -pP (<<??>>) -pF Fortran function parameter -X (function result variable) -@end example - -@menu -* Register Parameters:: -* Local Variable Parameters:: -* Reference Parameters:: -* Conformant Arrays:: -@end menu - -@node Register Parameters -@subsection Passing Parameters in Registers - -If the parameter is passed in a register, then traditionally there are -two symbols for each argument: - -@example -.stabs "arg:p1" . . . ; N_PSYM -.stabs "arg:r1" . . . ; N_RSYM -@end example - -Debuggers use the second one to find the value, and the first one to -know that it is an argument. - -@findex C_RPSYM -@findex N_RSYM, for parameters -Because that approach is kind of ugly, some compilers use symbol -descriptor @samp{P} or @samp{R} to indicate an argument which is in a -register. Symbol type @code{C_RPSYM} is used in XCOFF and @code{N_RSYM} -is used otherwise. The symbol's value is the register number. @samp{P} -and @samp{R} mean the same thing; the difference is that @samp{P} is a -GNU invention and @samp{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 @samp{p} and @samp{r} pair -rather than @samp{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 @samp{D} is for a -parameter passed in a floating point register. This seems -unnecessary---why not just use @samp{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. - -@c FIXME: On the hppa this is for any type > 8 bytes, I think, and not -@c for small structures (investigate). -On the sparc and hppa, for a @samp{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 @samp{p} and @samp{r} pair (using Sun -@code{cc}) or a @samp{p} symbol. However, if a (small) structure is -really in a register, @samp{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 @samp{p} and @samp{r} pair! I -believe that symbol descriptor @samp{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 (@pxref{Reference Parameters}). - -@node Local Variable Parameters -@subsection 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 @code{float}, -but the calling conventions specify that it is passed as a -@code{double}), then GCC2 (sometimes) uses a pair of symbols. The first -symbol uses symbol descriptor @samp{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: - -@example -void -subr (f) - float f; -@{ -@end example - -if @code{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: - -@example -.stabs "f:p13",160,0,3,8 # @r{160 is @code{N_PSYM}, here 13 is @code{double}} -.stabs "f:r12",64,0,3,0 # @r{64 is @code{N_RSYM}, here 12 is @code{float}} -@end example - -In both stabs 3 is the line number where @code{f} is declared -(@pxref{Line Numbers}). - -@findex N_LSYM, for parameter -GCC, at least on the 960, has another solution to the same problem. It -uses a single @samp{p} symbol descriptor for an argument which is stored -as a local variable but uses @code{N_LSYM} instead of @code{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. - -@c This is mostly just background info; the part that logically belongs -@c here is the last sentence. -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 - -@example -extern int fprintf (FILE *stream, char *format, @dots{}); -@dots{} -fprintf (stdout, "%d\n", x); -@end example - -there are stabs for @code{stream} and @code{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 @samp{p}) (not necessarily -@samp{r} or symbol descriptor omitted symbols) needs to contain the -actual type as passed (for example, @code{double} not @code{float} if it -is passed as a double and converted to a float). - -@node Reference Parameters -@subsection Passing Parameters by Reference - -If the parameter is passed by reference (e.g., Pascal @code{VAR} -parameters), then the symbol descriptor is @samp{v} if it is in the -argument list, or @samp{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 @samp{p} and @samp{R}, -respectively. I believe @samp{a} is an AIX invention; @samp{v} is -supported by all stabs-using systems as far as I know. - -@node Conformant Arrays -@subsection Passing Conformant Array Parameters - -@c Is this paragraph correct? It is based on piecing together patchy -@c information and some guesswork -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 -@samp{x} for the array itself, and a @samp{C}, which represents the size -of the array. The value of the @samp{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 @samp{C} stab is the offset in the -argument list where the size of the array (in elements? in bytes?) is -stored. - -@node Types -@chapter 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 @samp{=} 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:: -@end menu - -@node Builtin Types -@section Builtin Types - -Certain types are built in (@code{int}, @code{short}, @code{void}, -@code{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 @code{acc} uses special -builtin type descriptors (@samp{b} and @samp{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 -@end menu - -@node Traditional Builtin Types -@subsection 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 @code{void}. - -@menu -* Traditional Integer Types:: -* Traditional Other Types:: -@end menu - -@node Traditional Integer Types -@subsubsection Traditional Integer Types - -Often types are defined as subranges of themselves. If the bounding values -fit within an @code{int}, then they are given normally. For example: - -@example -.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0 # @r{128 is N_LSYM} -.stabs "char:t2=r2;0;127;",128,0,0,0 -@end example - -Builtin types can also be described as subranges of @code{int}: - -@example -.stabs "unsigned short:t6=r1;0;65535;",128,0,0,0 -@end example - -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 @code{int}. Traditionally this is only used for -@code{unsigned int} and @code{unsigned long}: - -@example -.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0 -@end example - -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: - -@c .stabs directives, etc., omitted to make it fit on the page. -@example -long int:t3=r1;001000000000000000000000;000777777777777777777777; -long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777; -@end example - -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 @code{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 @code{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. - -@node Traditional Other Types -@subsubsection 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: - -@example -.stabs "float:t12=r1;4;0;",128,0,0,0 -.stabs "double:t13=r1;8;0;",128,0,0,0 -@end example - -However, GCC writes @code{long double} the same way it writes -@code{double}, so there is no way to distinguish. - -@example -.stabs "long double:t14=r1;8;0;",128,0,0,0 -@end example - -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 @code{void} type is defined as itself: - -@example -.stabs "void:t15=15",128,0,0,0 -@end example - -I'm not sure how a boolean type is represented. - -@node Builtin Type Descriptors -@subsection Defining Builtin Types Using Builtin Type Descriptors - -This is the method used by Sun's @code{acc} for defining builtin types. -These are the type descriptors to define builtin types: - -@table @code -@c FIXME: clean up description of width and offset, once we figure out -@c what they mean -@item b @var{signed} @var{char-flag} @var{width} ; @var{offset} ; @var{nbits} ; -Define an integral type. @var{signed} is @samp{u} for unsigned or -@samp{s} for signed. @var{char-flag} is @samp{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 @code{wchar_t} so the debugger -can print such variables differently (Solaris does not do this). Sun -sets it on the C types @code{signed char} and @code{unsigned char} which -arguably is wrong. @var{width} and @var{offset} appear to be for small -objects stored in larger ones, for example a @code{short} in an -@code{int} register. @var{width} is normally the number of bytes in the -type. @var{offset} seems to always be zero. @var{nbits} is the number -of bits in the type. - -Note that type descriptor @samp{b} used for builtin types conflicts with -its use for Pascal space types (@pxref{Miscellaneous Types}); they can -be distinguished because the character following the type descriptor -will be a digit, @samp{(}, or @samp{-} for a Pascal space type, or -@samp{u} or @samp{s} for a builtin type. - -@item w -Documented by AIX to define a wide character type, but their compiler -actually uses negative type numbers (@pxref{Negative Type Numbers}). - -@item R @var{fp-type} ; @var{bytes} ; -Define a floating point type. @var{fp-type} has one of the following values: - -@table @code -@item 1 (NF_SINGLE) -IEEE 32-bit (single precision) floating point format. - -@item 2 (NF_DOUBLE) -IEEE 64-bit (double precision) floating point format. - -@item 3 (NF_COMPLEX) -@item 4 (NF_COMPLEX16) -@item 5 (NF_COMPLEX32) -@c "GDB source" really means @file{include/aout/stab_gnu.h}, but trying -@c to put that here got an overfull hbox. -These are for complex numbers. A comment in the GDB source describes -them as Fortran @code{complex}, @code{double complex}, and -@code{complex*16}, respectively, but what does that mean? (i.e., Single -precision? Double precision?). - -@item 6 (NF_LDOUBLE) -Long double. This should probably only be used for Sun format -@code{long double}, and new codes should be used for other floating -point formats (@code{NF_DOUBLE} can be used if a @code{long double} is -really just an IEEE double, of course). -@end table - -@var{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 @var{fp-type}. - -@item g @var{type-information} ; @var{nbits} -Documented by AIX to define a floating type, but their compiler actually -uses negative type numbers (@pxref{Negative Type Numbers}). - -@item c @var{type-information} ; @var{nbits} -Documented by AIX to define a complex type, but their compiler actually -uses negative type numbers (@pxref{Negative Type Numbers}). -@end table - -The C @code{void} type is defined as a signed integral type 0 bits long: -@example -.stabs "void:t19=bs0;0;0",128,0,0,0 -@end example -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. - -@node Negative Type Numbers -@subsection 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 -@code{int} or @code{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 -(@pxref{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, - -@example -.stabs "boolean:t10=@@s8;-16",128,0,0,0 -@end example - -defines an 8-bit boolean type, and - -@example -.stabs "boolean:t10=@@s64;-16",128,0,0,0 -@end example - -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 @emph{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 @code{int} and @code{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: - -@example -.stabs "CARDINAL:t10=-8",128,0,0,0 -@end example - -Here is the list of negative type numbers. The phrase @dfn{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). - -@table @code -@item -1 -@code{int}, 32 bit signed integral type. - -@item -2 -@code{char}, 8 bit type holding a character. Both GDB and dbx on AIX -treat this as signed. GCC uses this type whether @code{char} is signed -or not, which seems like a bad idea. The AIX compiler (@code{xlc}) seems to -avoid this type; it uses -5 instead for @code{char}. - -@item -3 -@code{short}, 16 bit signed integral type. - -@item -4 -@code{long}, 32 bit signed integral type. - -@item -5 -@code{unsigned char}, 8 bit unsigned integral type. - -@item -6 -@code{signed char}, 8 bit signed integral type. - -@item -7 -@code{unsigned short}, 16 bit unsigned integral type. - -@item -8 -@code{unsigned int}, 32 bit unsigned integral type. - -@item -9 -@code{unsigned}, 32 bit unsigned integral type. - -@item -10 -@code{unsigned long}, 32 bit unsigned integral type. - -@item -11 -@code{void}, type indicating the lack of a value. - -@item -12 -@code{float}, IEEE single precision. - -@item -13 -@code{double}, IEEE double precision. - -@item -14 -@code{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 @code{long double}. I hope when they increase it they -use a new negative type number. - -@item -15 -@code{integer}. 32 bit signed integral type. - -@item -16 -@code{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. - -@item -17 -@code{short real}. IEEE single precision. - -@item -18 -@code{real}. IEEE double precision. - -@item -19 -@code{stringptr}. @xref{Strings}. - -@item -20 -@code{character}, 8 bit unsigned character type. - -@item -21 -@code{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. - -@item -22 -@code{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. - -@item -23 -@code{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. - -@item -24 -@code{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. - -@item -25 -@code{complex}. A complex type consisting of two IEEE single-precision -floating point values. - -@item -26 -@code{complex}. A complex type consisting of two IEEE double-precision -floating point values. - -@item -27 -@code{integer*1}, 8 bit signed integral type. - -@item -28 -@code{integer*2}, 16 bit signed integral type. - -@item -29 -@code{integer*4}, 32 bit signed integral type. - -@item -30 -@code{wchar}. Wide character, 16 bits wide, unsigned (what format? -Unicode?). - -@item -31 -@code{long long}, 64 bit signed integral type. - -@item -32 -@code{unsigned long long}, 64 bit unsigned integral type. - -@item -33 -@code{logical*8}, 64 bit unsigned integral type. - -@item -34 -@code{integer*8}, 64 bit signed integral type. -@end table - -@node Miscellaneous Types -@section Miscellaneous Types - -@table @code -@item b @var{type-information} ; @var{bytes} -Pascal space type. This is documented by IBM; what does it mean? - -This use of the @samp{b} type descriptor can be distinguished -from its use for builtin integral types (@pxref{Builtin Type -Descriptors}) because the character following the type descriptor is -always a digit, @samp{(}, or @samp{-}. - -@item B @var{type-information} -A volatile-qualified version of @var{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. - -@item d @var{type-information} -File of type @var{type-information}. As far as I know this is only used -by Pascal. - -@item k @var{type-information} -A const-qualified version of @var{type-information}. This is a Sun -extension. A variable with a const-qualified type cannot be modified. - -@item M @var{type-information} ; @var{length} -Multiple instance type. The type seems to composed of @var{length} -repetitions of @var{type-information}, for example @code{character*3} is -represented by @samp{M-2;3}, where @samp{-2} is a reference to a -character type (@pxref{Negative Type Numbers}). I'm not sure how this -differs from an array. This appears to be a Fortran feature. -@var{length} is a bound, like those in range types; see @ref{Subranges}. - -@item S @var{type-information} -Pascal set type. @var{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 @var{type-information}. - -In CHILL, if it is a bitstring instead of a set, also use the @samp{S} -type attribute (@pxref{String Field}). - -@item * @var{type-information} -Pointer to @var{type-information}. -@end table - -@node Cross-References -@section 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 @samp{x} type descriptor, which is followed by -@samp{s} for a structure tag, @samp{u} for a union tag, or @samp{e} for -a enumerator tag, followed by the name of the tag, followed by @samp{:}. -If the name contains @samp{::} between a @samp{<} and @samp{>} pair (for -C@t{++} templates), such a @samp{::} does not end the name---only a single -@samp{:} ends the name; see @ref{Nested Symbols}. - -For example, the following C declarations: - -@example -struct foo; -struct foo *bar; -@end example - -@noindent -produce: - -@example -.stabs "bar:G16=*17=xsfoo:",32,0,0,0 -@end example - -Not all debuggers support the @samp{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 @samp{i} type -descriptor, which is followed by the name of the module from which the -type is imported, followed by @samp{:}, 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 (@pxref{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 -(@pxref{String Field}), or what. The symbol ends with @samp{;}. - -@node Subranges -@section Subrange Types - -The @samp{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 (@pxref{Arrays}). - -Instead of an integer, either bound can be one of the following: - -@table @code -@item A @var{offset} -The bound is passed by reference on the stack at offset @var{offset} -from the argument list. @xref{Parameters}, for more information on such -offsets. - -@item T @var{offset} -The bound is passed by value on the stack at offset @var{offset} from -the argument list. - -@item a @var{register-number} -The bound is passed by reference in register number -@var{register-number}. - -@item t @var{register-number} -The bound is passed by value in register number @var{register-number}. - -@item J -There is no bound. -@end table - -Subranges are also used for builtin types; see @ref{Traditional Builtin Types}. - -@node Arrays -@section Array Types - -Arrays use the @samp{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, -@pxref{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 (@pxref{String Field}) (that is, it need not start with -@samp{@var{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 @samp{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 @samp{r} and some parameters. It defines the size of the -array. In the example below, the range @samp{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: - -@example -char char_vec[3] = @{'a','b','c'@}; -@end example - -@noindent -produces the output: - -@example -.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 -@end example - -If an array is @dfn{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 -(@pxref{String Field}). In the case of arrays, another is to use the -@samp{P} type descriptor instead of @samp{a}. Other than specifying a -packed array, @samp{P} is identical to @samp{a}. - -@c FIXME-what is it? A pointer? -An open array is represented by the @samp{A} type descriptor followed by -type information specifying the type of the array elements. - -@c FIXME: what is the format of this type? A pointer to a vector of pointers? -An N-dimensional dynamic array is represented by - -@example -D @var{dimensions} ; @var{type-information} -@end example - -@c Does dimensions really have this meaning? The AIX documentation -@c doesn't say. -@var{dimensions} is the number of dimensions; @var{type-information} -specifies the type of the array elements. - -@c FIXME: what is the format of this type? A pointer to some offsets in -@c another array? -A subarray of an N-dimensional array is represented by - -@example -E @var{dimensions} ; @var{type-information} -@end example - -@c Does dimensions really have this meaning? The AIX documentation -@c doesn't say. -@var{dimensions} is the number of dimensions; @var{type-information} -specifies the type of the array elements. - -@node Strings -@section 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: - -@table @code -@item n @var{type-information} ; @var{bytes} -@var{bytes} is the maximum length. I'm not sure what -@var{type-information} is; I suspect that it means that this is a string -of @var{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. - -@item z @var{type-information} ; @var{bytes} -Just like @samp{n} except that this is a gstring, not an ordinary -string. I don't know the difference. - -@item N -Pascal Stringptr. What is this? This is an AIX feature. -@end table - -Languages, such as CHILL which have a string type which is basically -just an array of characters use the @samp{S} type attribute -(@pxref{String Field}). - -@node Enumerations -@section Enumerations - -Enumerations are defined with the @samp{e} type descriptor. - -@c FIXME: Where does this information properly go? Perhaps it is -@c redundant with something we already explain. -The source line below declares an enumeration type at file scope. -The type definition is located after the @code{N_RBRAC} that marks the end of -the previous procedure's block scope, and before the @code{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: - -@example -enum e_places @{first,second=3,last@}; -@end example - -@noindent -generates the following stab: - -@example -.stabs "e_places:T22=efirst:0,second:3,last:4,;",128,0,0,0 -@end example - -The symbol descriptor (@samp{T}) says that the stab describes a -structure, enumeration, or union tag. The type descriptor @samp{e}, -following the @samp{22=} of the type definition narrows it down to an -enumeration type. Following the @samp{e} is a list of the elements of -the enumeration. The format is @samp{@var{name}:@var{value},}. The -list of elements ends with @samp{;}. The fact that @var{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 @ref{String Field}. - -Enumeration types are unusual in that they define symbols for the -enumeration values (@code{first}, @code{second}, and @code{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 @samp{T} or -@samp{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 (@pxref{String Field}); GCC does this. - -@node Structures -@section 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 @code{typedef} equates the -structure tag with a new type. Separate stabs are generated for the -structure tag, the structure @code{typedef}, and the structure instance. The -stabs for the tag and the @code{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. - -@example -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; -@end example - -The structure tag has an @code{N_LSYM} stab type because, like the -enumeration, the symbol has file scope. Like the enumeration, the -symbol descriptor is @samp{T}, for enumeration, structure, or tag type. -The type descriptor @samp{s} following the @samp{16=} of the type -definition narrows the symbol type to structure. - -Following the @samp{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 -@samp{@var{name}:@var{type}, @var{bit offset from the start of the -struct}, @var{number of bits in the element}}. - -@c FIXME: phony line break. Can probably be fixed by using an example -@c with fewer fields. -@example -# @r{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 -@end example - -In this example, the first two structure elements are previously defined -types. For these, the type following the @samp{@var{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 @samp{@var{name}:}. The type definition for the -array element looks just like a type definition for a stand-alone array. -The @code{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@t{++} 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@t{++} feature), they follow the non-method -fields; see @ref{Cplusplus}. - -@node Typedefs -@section Giving a Type a Name - -@findex N_LSYM, for types -@findex C_DECL, for types -To give a type a name, use the @samp{t} symbol descriptor. The type -is specified by the type information (@pxref{String Field}) for the stab. -For example, - -@example -.stabs "s_typedef:t16",128,0,0,0 # @r{128 is N_LSYM} -@end example - -specifies that @code{s_typedef} refers to type number 16. Such stabs -have symbol type @code{N_LSYM} (or @code{C_DECL} for XCOFF). (The Sun -documentation mentions using @code{N_GSYM} in some cases). - -If you are specifying the tag name for a structure, union, or -enumeration, use the @samp{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 -@samp{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 (@pxref{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. - -@node Unions -@section Unions - -@example -union u_tag @{ - int u_int; - float u_float; - char* u_char; -@} an_u; -@end example - -This code generates a stab for a union tag and a stab for a union -variable. Both use the @code{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 @code{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 @code{N_LSYM}. This -would seem to imply that the union type is file scope, like the struct -type @code{s_tag}. This is not true. The contents and position of the stab -for @code{u_type} do not convey any information about its procedure local -scope. - -@c FIXME: phony line break. Can probably be fixed by using an example -@c with fewer fields. -@smallexample -# @r{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 -@end smallexample - -The symbol descriptor @samp{T}, following the @samp{name:} means that -the stab describes an enumeration, structure, or union tag. The type -descriptor @samp{u}, following the @samp{23=} of the type definition, -narrows it down to a union type definition. Following the @samp{u} is -the number of bytes in the union. After that is a list of union element -descriptions. Their format is @samp{@var{name}:@var{type}, @var{bit -offset into the union}, @var{number of bytes for the element};}. - -The stab for the union variable is: - -@example -.stabs "an_u:23",128,0,0,-20 # @r{128 is N_LSYM} -@end example - -@samp{-20} specifies where the variable is stored (@pxref{Stack -Variables}). - -@node Function Types -@section Function Types - -Various types can be defined for function variables. These types are -not used in defining functions (@pxref{Procedures}); they are used for -things like pointers to functions. - -The simple, traditional, type is type descriptor @samp{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 @samp{f}, @samp{F}, @samp{p}, and -@samp{R} type descriptors. - -First comes the type descriptor. If it is @samp{f} or @samp{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 @samp{R} -and @samp{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: - -@example -int (*g_pf)(); -@end example - -@noindent -generates the following code: - -@example -.stabs "g_pf:G24=*25=f1",32,0,0,0 - .common _g_pf,4,"bss" -@end example - -The variable defines a new type, 24, which is a pointer to another new -type, 25, which is a function returning @code{int}. - -@node Symbol Tables -@chapter 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:: -@end menu - -@node Symbol Table Format -@section 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: - -@c FIXME: should refer to external, not internal. -@example -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 */ -@}; -@end example - -If the stab has a string, the @code{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 @code{.stabn} or @code{.stabd} directive), the -@code{n_strx} field is zero. - -Symbol table entries with @code{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. - -@node Transformations On Symbol Tables -@section 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 @samp{nm -ap}, which dumps the symbol table, including -debugging information, unsorted. For stab entries the columns are: -@var{value}, @var{other}, @var{desc}, @var{type}, @var{string}. For -assembler and linker symbols, the columns are: @var{value}, @var{type}, -@var{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 @code{N_RSYM} and -@code{N_LSYM}, where the value is an offset or a register number, the -low 5 bits are @code{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. -@end menu - -@node Transformations On Static Variables -@subsection Transformations on Static Variables - -This source line defines a static variable at file scope: - -@example -static int s_g_repeat -@end example - -@noindent -The following stab describes the symbol: - -@example -.stabs "s_g_repeat:S1",38,0,0,_s_g_repeat -@end example - -@noindent -The assembler transforms the stab into this symbol table entry in the -@file{.o} file. The location is expressed as a data segment offset. - -@example -00000084 - 00 0000 STSYM s_g_repeat:S1 -@end example - -@noindent -In the symbol table entry from the executable, the linker has made the -relocatable address absolute. - -@example -0000e00c - 00 0000 STSYM s_g_repeat:S1 -@end example - -@node Transformations On Global Variables -@subsection 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: - -@example -char g_foo = 'c'; -@end example - -@noindent -generates the stab: - -@example -.stabs "g_foo:G2",32,0,0,0 -@end example - -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 @samp{D} signifies that the -@code{n_type} field of the symbol table contains 7, @code{N_DATA} with -local linkage. The stab's value is zero since the value is not used for -@code{N_GSYM} stabs. The value of the linker symbol is the relocatable -address corresponding to the variable. - -@example -00000000 - 00 0000 GSYM g_foo:G2 -00000080 D _g_foo -@end example - -@noindent -These entries as transformed by the linker. The linker symbol table -entry now holds an absolute address: - -@example -00000000 - 00 0000 GSYM g_foo:G2 -@dots{} -0000e008 D _g_foo -@end example - -@node Stab Section Transformations -@subsection Transformations of Stabs in separate sections - -For object file formats using stabs in separate sections (@pxref{Stab -Sections}), use @code{objdump --stabs} instead of @code{nm} to show the -stabs in an object or executable file. @code{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 (@pxref{ELF Linker Relocation}). For -example, if the source line - -@example -static int ld = 5; -@end example - -appears within a function, then the assembly language output from the -compiler contains: - -@example -.Ddata.data: -@dots{} - .stabs "ld:V(0,3)",0x26,0,4,.L18-Ddata.data # @r{0x26 is N_STSYM} -@dots{} -.L18: - .align 4 - .word 0x5 -@end example - -Because the value is formed by subtracting one symbol from another, the -value is absolute, not relocatable, and so the object file contains - -@example -Symnum n_type n_othr n_desc n_value n_strx String -31 STSYM 0 4 00000004 680 ld:V(0,3) -@end example - -without any relocations, and the executable file also contains - -@example -Symnum n_type n_othr n_desc n_value n_strx String -31 STSYM 0 4 00000004 680 ld:V(0,3) -@end example - -@node Cplusplus -@chapter GNU C@t{++} 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 @samp{#} type descriptor -* Member Type Descriptor:: The @samp{@@} type descriptor -* Protections:: -* Method Modifiers:: -* Virtual Methods:: -* Inheritance:: -* Virtual Base Classes:: -* Static Members:: -@end menu - -@node Class Names -@section C@t{++} Class Names - -In C@t{++}, a class name which is declared with @code{class}, @code{struct}, -or @code{union}, is not only a tag, as in C, but also a type name. Thus -there should be stabs with both @samp{t} and @samp{T} symbol descriptors -(@pxref{Typedefs}). - -To save space, there is a special abbreviation for this case. If the -@samp{T} symbol descriptor is followed by @samp{t}, then the stab -defines both a type name and a tag. - -For example, the C@t{++} code - -@example -struct foo @{int x;@}; -@end example - -can be represented as either - -@example -.stabs "foo:T19=s4x:1,0,32;;",128,0,0,0 # @r{128 is N_LSYM} -.stabs "foo:t19",128,0,0,0 -@end example - -or - -@example -.stabs "foo:Tt19=s4x:1,0,32;;",128,0,0,0 -@end example - -@node Nested Symbols -@section Defining a Symbol Within Another Type - -In C@t{++}, a symbol (such as a type name) can be defined within another type. -@c FIXME: Needs example. - -In stabs, this is sometimes represented by making the name of a symbol -which contains @samp{::}. Such a pair of colons does not end the name -of the symbol, the way a single colon would (@pxref{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, -@samp{:} cannot be used as a symbol descriptor. - -For example, if the string for a stab is @samp{foo::bar::baz:t5=*6}, -then @code{foo::bar::baz} is the name of the symbol, @samp{t} is the -symbol descriptor, and @samp{5=*6} is the type information. - -@node Basic Cplusplus Types -@section Basic Types For C@t{++} - -<< the examples that follow are based on a01.C >> - - -C@t{++} 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@t{++} programs even if there are no -virtual methods defined. - -@display -.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 -@end display - -@smallexample -.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 -@end smallexample - -@display -.stabs "name:sym_dec(struct tag)type_ref($vtbl_ptr_type)",N_LSYM,NIL,NIL,NIL -@end display - -@example -.stabs "$vtbl_ptr_type:T17",128,0,0,0 -@end example - -@node Simple Classes -@section Simple Class Definition - -The stabs describing C@t{++} language features are an extension of the -stabs describing C. Stabs representing C@t{++} 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. - -@example -class baseA @{ -public: - int Adat; - int Ameth(int in, char other); -@}; -@end example - -The class @code{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 @code{N_LSYM}. Since the -stab is not located between an @code{N_FUN} and an @code{N_LBRAC} stab this indicates -that the class is defined at file scope. If it were, then the @code{N_LSYM} -would signify a local variable. - -A stab describing a C@t{++} 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@t{++} 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@t{++} 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@t{++} class stab representing a member function -differs substantially from the field part of a C struct stab. It -still begins with @samp{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 @samp{#} type -descriptor; see @ref{Method Type Descriptor}; static member functions -are declared using the @samp{f} type descriptor instead; see -@ref{Function Types}. - -The format of an overloaded operator method name differs from that of -other methods. It is @samp{op$::@var{operator-name}.} where -@var{operator-name} is the operator name such as @samp{+} or @samp{+=}. -The name ends with a period, and any characters except the period can -occur in the @var{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@t{++} name mangling. In this example an @code{int} and a @code{char} -map to @samp{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, @samp{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. - - -@display -.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 -@end display - -@smallexample -.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 -@end smallexample - -@node Class Instance -@section Class Instance - -As shown above, describing even a simple C@t{++} 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: - -@example -main () @{ - baseA AbaseA; -@} -@end example - -@noindent -yields the following stab describing the class instance. It looks no -different from a standard C stab describing a local variable. - -@display -.stabs "name:type_ref(baseA)", N_LSYM, NIL, NIL, frame_ptr_offset -@end display - -@example -.stabs "AbaseA:20",128,0,0,-20 -@end example - -@node Methods -@section Method Definition - -The class definition shown above declares Ameth. The C@t{++} source below -defines Ameth: - -@example -int -baseA::Ameth(int in, char other) -@{ - return in; -@}; -@end example - - -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 @code{this} pointer. The @code{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 @sc{arm} (@cite{The Annotated -C++ Reference Manual}, by Ellis and Stroustrup, @sc{isbn} -0-201-51459-1); @file{gpcompare.texi} in Cygnus GCC distributions -describes the differences between GNU mangling and @sc{arm} -mangling. -@c FIXME: Use @xref, especially if this is generally installed in the -@c info tree. -@c FIXME: This information should be in a net release, either of GCC or -@c GDB. But gpcompare.texi doesn't seem to be in the FSF GCC. - -@example -.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 -@end example - -Here is the stab for the @code{this} pointer implicit argument. The -name of the @code{this} pointer is always @code{this}. Type 19, the -@code{this} pointer is defined as a pointer to type 20, @code{baseA}, -but a stab defining @code{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 -@samp{xs}. - -@example -.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 -@end example - -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. - -@example -.stabs "name:sym_desc(value parameter)type_ref(int)", - N_PSYM,NIL,NIL,offset_from_arg_ptr - -.stabs "in:p1",160,0,0,72 -@end example - -<< The examples that follow are based on A1.C >> - -@node Method Type Descriptor -@section The @samp{#} 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 @code{this} pointer. - -If the @samp{#} is immediately followed by another @samp{#}, 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 @samp{#} 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 @code{void} -indicates a method which does not take a variable number of arguments. -If the final argument type of @code{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. - -@node Member Type Descriptor -@section The @samp{@@} Type Descriptor - -The @samp{@@} type descriptor is used together with the @samp{*} 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@t{++} source: - -@smallexample -typedef int A::*int_in_a; -@end smallexample - -generates the following stab: - -@smallexample -.stabs "int_in_a:t20=*21=@@19,1",128,0,0,0 -@end smallexample - -Note that there is a conflict between this and type attributes -(@pxref{String Field}); both use type descriptor @samp{@@}. -Fortunately, the @samp{@@} type descriptor used in this C@t{++} sense always -will be followed by a digit, @samp{(}, or @samp{-}, and type attributes -never start with those things. - -@node Protections -@section 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@t{++} stabs. - -If the character following the @samp{@var{field-name}:} part of the -string is @samp{/}, then the next character is the visibility. @samp{0} -means private, @samp{1} means protected, and @samp{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 @samp{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 @samp{9} is not supported by GDB 4.11; this should be fixed -in the next GDB release. - -The following C@t{++} source: - -@example -class vis @{ -private: - int priv; -protected: - char prot; -public: - float pub; -@}; -@end example - -@noindent -generates the following stab: - -@example -# @r{128 is N_LSYM} -.stabs "vis:T19=s12priv:/01,0,32;prot:/12,32,8;pub:12,64,32;;",128,0,0,0 -@end example - -@samp{vis:T19=s12} indicates that type number 19 is a 12 byte structure -named @code{vis} The @code{priv} field has public visibility -(@samp{/0}), type int (@samp{1}), and offset and size @samp{,0,32;}. -The @code{prot} field has protected visibility (@samp{/1}), type char -(@samp{2}) and offset and size @samp{,32,8;}. The @code{pub} field has -type float (@samp{12}), and offset and size @samp{,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@t{++} class -definition below: - -@example -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;@}; -@}; -@end example - -It generates the following stab. The digit in question is to the left -of an @samp{A} in each case. Notice also that in this case two symbol -descriptors apply to the class name struct tag and struct type. - -@display -.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 -@end display - -@smallexample -.stabs "all_methods:Tt21=s1priv_meth::22=##1;:i;0A.;protMeth::23=##2;:c;1A.; - pubMeth::24=##12;:f;2A.;;",128,0,0,0 -@end smallexample - -@node Method Modifiers -@section Method Modifiers (@code{const}, @code{volatile}, @code{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 @samp{A}, const methods use -@samp{B}, volatile methods use @samp{C}, and const volatile methods use -@samp{D}. Consider the class definition below: - -@example -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; @}; -@}; -@end example - -This class is described by the following stab: - -@display -.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);;", @dots{} -@end display - -@example -.stabs "A:T20=s1ConstMeth::21=##1;:i;2B.;VolatileMeth::22=##2;:c;2C.; - ConstVolMeth::23=##12;:f;2D.;;",128,0,0,0 -@end example - -@node Virtual Methods -@section 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: - -@example -class A @{ -public: - int Adat; - virtual int A_virt (int arg) @{ return arg; @}; -@}; -@end example - -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 @samp{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@t{++} 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 @samp{$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 -@samp{$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@t{++} -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 @code{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 -@samp{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 @samp{~%} and followed by a final semi-colon. - -@display -.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 -@end display - -@c FIXME: bogus line break. -@example -.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 -@end example - -@node Inheritance -@section Inheritance - -Stabs describing C@t{++} 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 @samp{1} if the base class is virtual and -@samp{0} if not. The visibility character is @samp{2} if the derivation -is public, @samp{1} if it is protected, and @samp{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 @code{A}, @code{B}, and -@code{C} and the derived class @code{D}. - - -@example -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; @}; -@}; -@end example - -Class stabs similar to the ones described earlier are generated for -each base class. - -@c FIXME!!! the linebreaks in the following example probably make the -@c examples literally unusable, but I don't know any other way to get -@c them on the page. -@c One solution would be to put some of the type definitions into -@c separate stabs, even if that's not exactly what the compiler actually -@c emits. -@smallexample -.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 -@end smallexample - -In the stab describing derived class @code{D} below, the information about -the derivation of this class is encoded as follows. - -@display -.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); @dots{} -@end display - -@c FIXME! fake linebreaks. -@smallexample -.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 -@end smallexample - -@node Virtual Base Classes -@section 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 @code{D} -inherits virtually from base class @code{B}. This means that an -instance of a @code{D} object will not contain its own @code{B} part but -merely a pointer to a @code{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 @code{B} is given as 0 even though -@code{B} is not the first base class. The first base class @code{A} -starts at offset 0. - -The field information part of the stab for class @code{D} describes the field -which is the pointer to the virtual base class @code{B}. The vbase pointer -name is @samp{$vb} followed by a type reference to the virtual base class. -Since the type id for @code{B} in this example is 25, the vbase pointer name -is @samp{$vb25}. - -@c FIXME!! fake linebreaks below -@smallexample -.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 -@end smallexample - -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 @code{B} class @code{this} pointer. The -@code{this} pointer for a class is a pointer to the class type. - -@example -.stabs "this:P24=*25=xsB:",64,0,0,8 -@end example - -Finally the field offset part of the vbase pointer field description -shows that the vbase pointer is the first field in the @code{D} object, -before any data fields defined by the class. The layout of a @code{D} -class object is a follows, @code{Adat} at 0, the vtable pointer for -@code{A} at 32, @code{Cdat} at 64, the vtable pointer for C at 96, the -virtual base pointer for @code{B} at 128, and @code{Ddat} at 160. - - -@node Static Members -@section 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. >> - -@node Stab Types -@appendix 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 (@pxref{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 @file{include/aout/stabs.def}. - -@menu -* Non-Stab Symbol Types:: Types from 0 to 0x1f -* Stab Symbol Types:: Types from 0x20 to 0xff -@end menu - -@node Non-Stab Symbol Types -@appendixsec 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. - -@c Try to get most of these to fit on a single line. -@iftex -@tableindent=1.5in -@end iftex - -@table @code -@item 0x0 N_UNDF -Undefined symbol - -@item 0x2 N_ABS -File scope absolute symbol - -@item 0x3 N_ABS | N_EXT -External absolute symbol - -@item 0x4 N_TEXT -File scope text symbol - -@item 0x5 N_TEXT | N_EXT -External text symbol - -@item 0x6 N_DATA -File scope data symbol - -@item 0x7 N_DATA | N_EXT -External data symbol - -@item 0x8 N_BSS -File scope BSS symbol - -@item 0x9 N_BSS | N_EXT -External BSS symbol - -@item 0x0c N_FN_SEQ -Same as @code{N_FN}, for Sequent compilers - -@item 0x0a N_INDR -Symbol is indirected to another symbol - -@item 0x12 N_COMM -Common---visible after shared library dynamic link - -@item 0x14 N_SETA -@itemx 0x15 N_SETA | N_EXT -Absolute set element - -@item 0x16 N_SETT -@itemx 0x17 N_SETT | N_EXT -Text segment set element - -@item 0x18 N_SETD -@itemx 0x19 N_SETD | N_EXT -Data segment set element - -@item 0x1a N_SETB -@itemx 0x1b N_SETB | N_EXT -BSS segment set element - -@item 0x1c N_SETV -@itemx 0x1d N_SETV | N_EXT -Pointer to set vector - -@item 0x1e N_WARNING -Print a warning message during linking - -@item 0x1f N_FN -File name of a @file{.o} file -@end table - -@node Stab Symbol Types -@appendixsec 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. - -@table @code -@item 0x20 N_GSYM -Global symbol; see @ref{Global Variables}. - -@item 0x22 N_FNAME -Function name (for BSD Fortran); see @ref{Procedures}. - -@item 0x24 N_FUN -Function name (@pxref{Procedures}) or text segment variable -(@pxref{Statics}). - -@item 0x26 N_STSYM -Data segment file-scope variable; see @ref{Statics}. - -@item 0x28 N_LCSYM -BSS segment file-scope variable; see @ref{Statics}. - -@item 0x2a N_MAIN -Name of main routine; see @ref{Main Program}. - -@item 0x2c N_ROSYM -Variable in @code{.rodata} section; see @ref{Statics}. - -@item 0x30 N_PC -Global symbol (for Pascal); see @ref{N_PC}. - -@item 0x32 N_NSYMS -Number of symbols (according to Ultrix V4.0); see @ref{N_NSYMS}. - -@item 0x34 N_NOMAP -No DST map; see @ref{N_NOMAP}. - -@c FIXME: describe this solaris feature in the body of the text (see -@c comments in include/aout/stab.def). -@item 0x38 N_OBJ -Object file (Solaris2). - -@c See include/aout/stab.def for (a little) more info. -@item 0x3c N_OPT -Debugger options (Solaris2). - -@item 0x40 N_RSYM -Register variable; see @ref{Register Variables}. - -@item 0x42 N_M2C -Modula-2 compilation unit; see @ref{N_M2C}. - -@item 0x44 N_SLINE -Line number in text segment; see @ref{Line Numbers}. - -@item 0x46 N_DSLINE -Line number in data segment; see @ref{Line Numbers}. - -@item 0x48 N_BSLINE -Line number in bss segment; see @ref{Line Numbers}. - -@item 0x48 N_BROWS -Sun source code browser, path to @file{.cb} file; see @ref{N_BROWS}. - -@item 0x4a N_DEFD -GNU Modula2 definition module dependency; see @ref{N_DEFD}. - -@item 0x4c N_FLINE -Function start/body/end line numbers (Solaris2). - -@item 0x50 N_EHDECL -GNU C@t{++} exception variable; see @ref{N_EHDECL}. - -@item 0x50 N_MOD2 -Modula2 info "for imc" (according to Ultrix V4.0); see @ref{N_MOD2}. - -@item 0x54 N_CATCH -GNU C@t{++} @code{catch} clause; see @ref{N_CATCH}. - -@item 0x60 N_SSYM -Structure of union element; see @ref{N_SSYM}. - -@item 0x62 N_ENDM -Last stab for module (Solaris2). - -@item 0x64 N_SO -Path and name of source file; see @ref{Source Files}. - -@item 0x80 N_LSYM -Stack variable (@pxref{Stack Variables}) or type (@pxref{Typedefs}). - -@item 0x82 N_BINCL -Beginning of an include file (Sun only); see @ref{Include Files}. - -@item 0x84 N_SOL -Name of include file; see @ref{Include Files}. - -@item 0xa0 N_PSYM -Parameter variable; see @ref{Parameters}. - -@item 0xa2 N_EINCL -End of an include file; see @ref{Include Files}. - -@item 0xa4 N_ENTRY -Alternate entry point; see @ref{Alternate Entry Points}. - -@item 0xc0 N_LBRAC -Beginning of a lexical block; see @ref{Block Structure}. - -@item 0xc2 N_EXCL -Place holder for a deleted include file; see @ref{Include Files}. - -@item 0xc4 N_SCOPE -Modula2 scope information (Sun linker); see @ref{N_SCOPE}. - -@item 0xe0 N_RBRAC -End of a lexical block; see @ref{Block Structure}. - -@item 0xe2 N_BCOMM -Begin named common block; see @ref{Common Blocks}. - -@item 0xe4 N_ECOMM -End named common block; see @ref{Common Blocks}. - -@item 0xe8 N_ECOML -Member of a common block; see @ref{Common Blocks}. - -@c FIXME: How does this really work? Move it to main body of document. -@item 0xea N_WITH -Pascal @code{with} statement: type,,0,0,offset (Solaris2). - -@item 0xf0 N_NBTEXT -Gould non-base registers; see @ref{Gould}. - -@item 0xf2 N_NBDATA -Gould non-base registers; see @ref{Gould}. - -@item 0xf4 N_NBBSS -Gould non-base registers; see @ref{Gould}. - -@item 0xf6 N_NBSTS -Gould non-base registers; see @ref{Gould}. - -@item 0xf8 N_NBLCS -Gould non-base registers; see @ref{Gould}. -@end table - -@c Restore the default table indent -@iftex -@tableindent=.8in -@end iftex - -@node Symbol Descriptors -@appendix 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. @xref{String Field}, -for more information about their use. - -@c Please keep this alphabetical -@table @code -@c In TeX, this looks great, digit is in italics. But makeinfo insists -@c on putting it in `', not realizing that @var should override @code. -@c I don't know of any way to make makeinfo do the right thing. Seems -@c like a makeinfo bug to me. -@item @var{digit} -@itemx ( -@itemx - -Variable on the stack; see @ref{Stack Variables}. - -@item : -C@t{++} nested symbol; see @xref{Nested Symbols}. - -@item a -Parameter passed by reference in register; see @ref{Reference Parameters}. - -@item b -Based variable; see @ref{Based Variables}. - -@item c -Constant; see @ref{Constants}. - -@item C -Conformant array bound (Pascal, maybe other languages); @ref{Conformant -Arrays}. Name of a caught exception (GNU C@t{++}). These can be -distinguished because the latter uses @code{N_CATCH} and the former uses -another symbol type. - -@item d -Floating point register variable; see @ref{Register Variables}. - -@item D -Parameter in floating point register; see @ref{Register Parameters}. - -@item f -File scope function; see @ref{Procedures}. - -@item F -Global function; see @ref{Procedures}. - -@item G -Global variable; see @ref{Global Variables}. - -@item i -@xref{Register Parameters}. - -@item I -Internal (nested) procedure; see @ref{Nested Procedures}. - -@item J -Internal (nested) function; see @ref{Nested Procedures}. - -@item L -Label name (documented by AIX, no further information known). - -@item m -Module; see @ref{Procedures}. - -@item p -Argument list parameter; see @ref{Parameters}. - -@item pP -@xref{Parameters}. - -@item pF -Fortran Function parameter; see @ref{Parameters}. - -@item 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 @ref{Procedures}. Register parameter (GNU) (symbol -type @code{N_PSYM}); see @ref{Parameters}. Prototype of function -referenced by this file (Sun @code{acc}) (symbol type @code{N_FUN}). - -@item Q -Static Procedure; see @ref{Procedures}. - -@item R -Register parameter; see @ref{Register Parameters}. - -@item r -Register variable; see @ref{Register Variables}. - -@item S -File scope variable; see @ref{Statics}. - -@item s -Local variable (OS9000). - -@item t -Type name; see @ref{Typedefs}. - -@item T -Enumeration, structure, or union tag; see @ref{Typedefs}. - -@item v -Parameter passed by reference; see @ref{Reference Parameters}. - -@item V -Procedure scope static variable; see @ref{Statics}. - -@item x -Conformant array; see @ref{Conformant Arrays}. - -@item X -Function return variable; see @ref{Parameters}. -@end table - -@node Type Descriptors -@appendix 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. -@xref{String Field}, for more information about their use. - -@table @code -@item @var{digit} -@itemx ( -Type reference; see @ref{String Field}. - -@item - -Reference to builtin type; see @ref{Negative Type Numbers}. - -@item # -Method (C@t{++}); see @ref{Method Type Descriptor}. - -@item * -Pointer; see @ref{Miscellaneous Types}. - -@item & -Reference (C@t{++}). - -@item @@ -Type Attributes (AIX); see @ref{String Field}. Member (class and variable) -type (GNU C@t{++}); see @ref{Member Type Descriptor}. - -@item a -Array; see @ref{Arrays}. - -@item A -Open array; see @ref{Arrays}. - -@item b -Pascal space type (AIX); see @ref{Miscellaneous Types}. Builtin integer -type (Sun); see @ref{Builtin Type Descriptors}. Const and volatile -qualified type (OS9000). - -@item B -Volatile-qualified type; see @ref{Miscellaneous Types}. - -@item c -Complex builtin type (AIX); see @ref{Builtin Type Descriptors}. -Const-qualified type (OS9000). - -@item C -COBOL Picture type. See AIX documentation for details. - -@item d -File type; see @ref{Miscellaneous Types}. - -@item D -N-dimensional dynamic array; see @ref{Arrays}. - -@item e -Enumeration type; see @ref{Enumerations}. - -@item E -N-dimensional subarray; see @ref{Arrays}. - -@item f -Function type; see @ref{Function Types}. - -@item F -Pascal function parameter; see @ref{Function Types} - -@item g -Builtin floating point type; see @ref{Builtin Type Descriptors}. - -@item G -COBOL Group. See AIX documentation for details. - -@item i -Imported type (AIX); see @ref{Cross-References}. Volatile-qualified -type (OS9000). - -@item k -Const-qualified type; see @ref{Miscellaneous Types}. - -@item K -COBOL File Descriptor. See AIX documentation for details. - -@item M -Multiple instance type; see @ref{Miscellaneous Types}. - -@item n -String type; see @ref{Strings}. - -@item N -Stringptr; see @ref{Strings}. - -@item o -Opaque type; see @ref{Typedefs}. - -@item p -Procedure; see @ref{Function Types}. - -@item P -Packed array; see @ref{Arrays}. - -@item r -Range type; see @ref{Subranges}. - -@item R -Builtin floating type; see @ref{Builtin Type Descriptors} (Sun). Pascal -subroutine parameter; see @ref{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). - -@item s -Structure type; see @ref{Structures}. - -@item S -Set type; see @ref{Miscellaneous Types}. - -@item u -Union; see @ref{Unions}. - -@item 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. - -@item w -Wide character; see @ref{Builtin Type Descriptors}. - -@item x -Cross-reference; see @ref{Cross-References}. - -@item Y -Used by IBM's xlC C@t{++} compiler (for structures, I think). - -@item z -gstring; see @ref{Strings}. -@end table - -@node Expanded Reference -@appendix Expanded Reference by Stab Type - -@c FIXME: This appendix should go away; see N_PSYM or N_SO for an example. - -For a full list of stab types, and cross-references to where they are -described, see @ref{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 @file{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 -@end menu - -@node N_PC -@section N_PC - -@deffn @code{.stabs} N_PC -@findex N_PC -Global symbol (for Pascal). - -@example -"name" -> "symbol_name" <<?>> -value -> supposedly the line number (stab.def is skeptical) -@end example - -@display -@file{stabdump.c} says: - -global pascal symbol: name,,0,subtype,line -<< subtype? >> -@end display -@end deffn - -@node N_NSYMS -@section N_NSYMS - -@deffn @code{.stabn} N_NSYMS -@findex N_NSYMS -Number of symbols (according to Ultrix V4.0). - -@display - 0, files,,funcs,lines (stab.def) -@end display -@end deffn - -@node N_NOMAP -@section N_NOMAP - -@deffn @code{.stabs} N_NOMAP -@findex N_NOMAP -No DST map for symbol (according to Ultrix V4.0). I think this means a -variable has been optimized out. - -@display - name, ,0,type,ignored (stab.def) -@end display -@end deffn - -@node N_M2C -@section N_M2C - -@deffn @code{.stabs} N_M2C -@findex N_M2C -Modula-2 compilation unit. - -@example -"string" -> "unit_name,unit_time_stamp[,code_time_stamp]" -desc -> unit_number -value -> 0 (main unit) - 1 (any other unit) -@end example - -See @cite{Dbx and Dbxtool Interfaces}, 2nd edition, by Sun, 1988, for -more information. - -@end deffn - -@node N_BROWS -@section N_BROWS - -@deffn @code{.stabs} N_BROWS -@findex N_BROWS -Sun source code browser, path to @file{.cb} file - -<<?>> -"path to associated @file{.cb} file" - -Note: N_BROWS has the same value as N_BSLINE. -@end deffn - -@node N_DEFD -@section N_DEFD - -@deffn @code{.stabn} N_DEFD -@findex 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 @code{%INITIALIZE}. Perhaps -@code{N_M2C} can be used if there are enough empty fields? -@end deffn - -@node N_EHDECL -@section N_EHDECL - -@deffn @code{.stabs} N_EHDECL -@findex N_EHDECL -GNU C@t{++} exception variable <<?>>. - -"@var{string} is variable name" - -Note: conflicts with @code{N_MOD2}. -@end deffn - -@node N_MOD2 -@section N_MOD2 - -@deffn @code{.stab?} N_MOD2 -@findex N_MOD2 -Modula2 info "for imc" (according to Ultrix V4.0) - -Note: conflicts with @code{N_EHDECL} <<?>> -@end deffn - -@node N_CATCH -@section N_CATCH - -@deffn @code{.stabn} N_CATCH -@findex N_CATCH -GNU C@t{++} @code{catch} clause - -GNU C@t{++} @code{catch} clause. The value is its address. The desc field -is nonzero if this entry is immediately followed by a @code{CAUGHT} stab -saying what exception was caught. Multiple @code{CAUGHT} stabs means -that multiple exceptions can be caught here. If desc is 0, it means all -exceptions are caught here. -@end deffn - -@node N_SSYM -@section N_SSYM - -@deffn @code{.stabn} N_SSYM -@findex 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>> -@end deffn - -@node N_SCOPE -@section N_SCOPE - -@deffn @code{.stab?} N_SCOPE -@findex N_SCOPE -Modula2 scope information (Sun linker) -<<?>> -@end deffn - -@node Gould -@section Non-base registers on Gould systems - -@deffn @code{.stab?} N_NBTEXT -@deffnx @code{.stab?} N_NBDATA -@deffnx @code{.stab?} N_NBBSS -@deffnx @code{.stab?} N_NBSTS -@deffnx @code{.stab?} N_NBLCS -@findex N_NBTEXT -@findex N_NBDATA -@findex N_NBBSS -@findex N_NBSTS -@findex 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). - -@example -240 0xf0 N_NBTEXT ?? -242 0xf2 N_NBDATA ?? -244 0xf4 N_NBBSS ?? -246 0xf6 N_NBSTS ?? -248 0xf8 N_NBLCS ?? -@end example -@end deffn - -@node N_LENG -@section N_LENG - -@deffn @code{.stabn} N_LENG -@findex N_LENG -Second symbol entry containing a length-value for the preceding entry. -The value is the length. -@end deffn - -@node Questions -@appendix Questions and Anomalies - -@itemize @bullet -@item -@c I think this is changed in GCC 2.4.5 to put the line number there. -For GNU C stabs defining local and global variables (@code{N_LSYM} and -@code{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 @file{dbxout.c} and -putting a line number in desc is controlled by @samp{#ifdef -WINNING_GDB}, which defaults to false). GDB supposedly uses this -information if you say @samp{list @var{var}}. In reality, @var{var} can -be a variable defined in the program and GDB says @samp{function -@var{var} not defined}. - -@item -In GNU C stabs, there seems to be no way to differentiate tag types: -structures, unions, and enums (symbol descriptor @samp{T}) and typedefs -(symbol descriptor @samp{t}) defined at file scope from types defined locally -to a procedure or other more local scope. They all use the @code{N_LSYM} -stab type. Types defined at procedure scope are emitted after the -@code{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, @samp{-ansi} and -@samp{-traditional} compiler options. (Bugs gcc/1063, gdb/1066.) - -@item -What ends the procedure scope? Is it the proc block's @code{N_RBRAC} or the -next @code{N_FUN}? (I believe its the first.) -@end itemize - -@node Stab Sections -@appendix 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 -@end menu - -@node Stab Section Basics -@appendixsec How to Embed Stabs in Sections - -The assembler creates two custom sections, a section named @code{.stab} -which contains an array of fixed length structures, one struct per stab, -and a section named @code{.stabstr} containing all the variable length -strings that are referenced by stabs in the @code{.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 @code{EI_DATA} field in the @code{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 (@pxref{Symbol Table Format}), except -that the @code{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 @code{.stab} section for each compilation unit is -synthetic, generated entirely by the assembler, with no corresponding -@code{.stab} directive as input to the assembler. This stab contains -the following fields: - -@table @code -@item n_strx -Offset in the @code{.stabstr} section to the source filename. - -@item n_type -@code{N_UNDF}. - -@item n_other -Unused field, always zero. -This may eventually be used to hold overflows from the count in -the @code{n_desc} field. - -@item n_desc -Count of upcoming symbols, i.e., the number of remaining stabs for this -source file. - -@item n_value -Size of the string table fragment associated with this source file, in -bytes. -@end table - -The @code{.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 @code{.stab} section has its -@code{sh_link} member set to the section number of the @code{.stabstr} -section, and the @code{.stabstr} section has its ELF section -header @code{sh_type} member set to @code{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 @code{.stab} and @code{.stabstr} sections may be simply -concatenated by the linker. GDB then uses the @code{n_desc} fields to -figure out the extent of the original sections. Similarly, the -@code{n_value} fields of the header symbols are added together in order -to get the actual position of the strings in a desired @code{.stabstr} -section. Although this design obviates any need for the linker to -relocate or otherwise manipulate @code{.stab} and @code{.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 @code{.stabstr} sections before concatenating, then the -offsets to strings in the middle of the executable's @code{.stabstr} -section would be wrong. - -The GNU linker is able to optimize stabs information by merging -duplicate strings and removing duplicate header file information -(@pxref{Include Files}). When some versions of the GNU linker optimize -stabs in sections, they remove the leading @code{N_UNDF} symbol and -arranges for all the @code{n_strx} fields to be relative to the start of -the @code{.stabstr} section. - -@node ELF Linker Relocation -@appendixsec 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 @code{N_SLINE}, -@code{N_RBRAC}, and @code{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 -@code{n_value} field (functions and static variables) relative to the -source file. For the @code{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 @code{Bbss.bss} for the bss section, -@code{Ddata.data} for the data section, and @code{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, -@xref{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 @code{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 @samp{S} symbol descriptor stabs -(@pxref{Statics}) and functions (@pxref{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 -@code{Ttext.text} symbol, analogous to the @code{Bbss.bss}, etc., -symbols. I recommend this rather than using a zero value and getting -the address from the ELF symbols. - -Finding the correct @code{Bbss.bss}, etc., symbol is difficult, because -the linker simply concatenates the @code{.stab} sections from each -@file{.o} file without including any information about which part of a -@code{.stab} section comes from which @file{.o} file. The way GDB does -this is to look for an ELF @code{STT_FILE} symbol which has the same -name as the last component of the file name from the @code{N_SO} symbol -in the stabs (for example, if the file name is @file{../../gdb/main.c}, -it looks for an ELF @code{STT_FILE} symbol named @code{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 @code{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. - -@raisesections -@include fdl.texi -@lowersections - -@node Symbol Types Index -@unnumbered Symbol Types Index - -@printindex fn - -@c TeX can handle the contents at the start but makeinfo 3.12 can not -@ifinfo -@contents -@end ifinfo -@ifhtml -@contents -@end ifhtml - -@bye |