RD(1)

NAME
rd, rm- Register manipulation commands

SYNOPSIS
rd [[c [n]]|d|u]

rm register-name new-contents

ef <address>

DESCRIPTION
The rd command is used to display the contents of processor and coprocessor registers. Without any arguments, the rd command displays the contents of the general register set at the point at which the kernel debugger was entered. 'n' argumnet is only used for XScale platform to identify the want coprocessor number, while 'd' option is not valid for XScale platform.

On IA32 and IA64, with the 'c' argument, the processor control registers %cr0, %cr1, %cr2 and %cr4 are displayed, while with the 'd' argument the processor debug registers are displayed. If the 'u' argument is supplied, the registers for the current task as of the last time the current task entered the kernel are displayed.

On XScale, 'c' argument is used to display the all coprocessor control registers or specified coprocessor registers by argumnet 'n'. Argument 'u' is used to display the registers for the current task as of the last time the current task entered the kernel. Argument 'd' is not supported.

On ix86, the rm command allows modification of a register. The following register names are valid: %eax, %ebx, %ecx, %edx, %esi, %edi, %esp, %eip, and %ebp. Note that if two '%' symbols are used consecutively, the register set displayed by the 'u' argument to the rd command is modified.

The debug registers, dr0 through dr3 and both dr6 and dr7 can also be modified with the rm command.

On sparc64, the valid registers are named %g0 through %g7, %l0 through %l7, %o0 through %o7, and %i0 through %i7, with the exceptions that %o6 is called %sp and that %i6 is called %fp. The registers %tstate, %tpc, %tnpc, %y, and %fprs provide state information at the time the system entered kdb. Additionally, when viewing registers, two convenience names are provided: %&regs shows the address on the stack of the current registers, and %csp shows the current stack pointer within kdb itself.

While on XScale, both the cpu registers and most coprocessor registers can be be modified. register-name can be followings like r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, cpsr to address cpu registers. For the coprocessor registers in XSacle, either alias name or Cpcc[CRndd[CRmbb[Opaa]]] can be used to address the register in coprocessor cc with CRn=dd, CRm=bb and opcode2=aa. All aa, bb, cc, dd can be 1 or 2 decimal digitals, the default value is 0 when any of them is omitted. Name acc0_h and acc0_l are used to identify the high byte and low word of accumulator in coprocessor 0.

The ef command displays an exception frame at the specified address.

LIMITATIONS
Currently the rm command will not allow modification of the control registers.

Currently neither the rd command nor the rm command will display or modify the model specific registers on the Pentium and Pentium Pro families.

ENVIRONMENT
None.

SMP CONSIDERATIONS
None.

EXAMPLES

rd  Display general register set.

rd c 0
    Display coprocessor 0 registers.

rm %eax 0
    Set the contents of %eax to zero. This will be the value of %eax when kdb returns from the condition which invoked it.

rm %%eax 0
    Set the value of the %eax register to zero. This will be the value the user-mode application will see upon returning from the kernel.

rm %acc0_h 0
    Set the contents of high byte of accumulator to zero.

rm dr0 0xc1287220
    Set the value of the dr0 register to 0xc1287220.

rm %InVLD_BTB 0
    Write 0 to coprocessor 15 register with CRn=7, CRm=5, opcode2=6.

rm %CP15CRn7CRm5Op6 0
    Same with above.