Contents|Index|Previous|Next
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 registers (in the selected stack
frame).
info all-registers
Print the names and values
of all registers, including floating-point registers.
info registersregname...
Print the relativized
value of each specified register, regname.
As discussed in the following, 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 with
set
$sp += 4. 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 the Return
key; see Returning
from a function.
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.
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 (see 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 ‘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.
set rstack_high_addressaddress
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.
Top|Contents|Index|Previous|Next