Linux Kernel Architecture

(Jacob Rumans) #1
Mauerer runapp01.tex V1 - 09/04/2008 6:08pm Page 1132

Appendix A: Architecture Specifics


unsigned long cp0_status;
unsigned long hi;
unsigned long lo;
unsigned long cp0_badvaddr;
unsigned long cp0_cause;
unsigned long cp0_epc;
};

Because Mips processors do not necessarily have a numeric coprocessor, no floating-point registers may
need to be saved — just the status of the software emulation, as shown here:

include/asm-mips/processor.h
struct thread_struct {
/* Saved main processor registers. */
unsigned long reg16;
unsigned long reg17, reg18, reg19, reg20, reg21, reg22, reg23;
unsigned long reg29, reg30, reg31;

/* Saved cp0 stuff. */
unsigned long cp0_status;

/* Saved fpu/fpu emulator stuff. */
union mips_fpu_union fpu;

/* Saved state of the DSP ASE, if available. */
struct mips_dsp_state dsp;

/* Other stuff associated with the thread. */
unsigned long cp0_badvaddr; /* Last user fault */
unsigned long cp0_baduaddr; /* Last kernel fault accessing USEG */
unsigned long error_code;
unsigned long trap_no;
unsigned long mflags;
unsigned long irix_trampoline; /* Wheee... */
unsigned long irix_oldctx;
struct mips_abi *abi;
};

A.7.7 PowerPC


PowerPCs save most registers in an array held inpt_regs:

include/asm-powerpc/ptrace.h
struct pt_regs {
unsigned long gpr[32];
unsigned long nip;
unsigned long msr;
unsigned long orig_gpr3; /* Used for restarting system calls */
unsigned long ctr;
unsigned long link;
unsigned long xer;
unsigned long ccr;
#ifdef __powerpc64__
unsigned long softe; /* Soft enabled/disabled */
Free download pdf