⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 registers.h

📁 linux 内核源代码
💻 H
字号:
/* registers.h: register frame declarations * * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) * * 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. *//* * notes: * * (1) that the members of all these structures are carefully aligned to permit *     usage of STD/STDF instructions * * (2) if you change these structures, you must change the code in *     arch/frvnommu/kernel/{break.S,entry.S,switch_to.S,gdb-stub.c} * * * the kernel stack space block looks like this: * *	+0x2000	+---------------------- *		| union { *		|	struct frv_frame0 { *		|		struct user_context { *		|			struct user_int_regs *		|			struct user_fpmedia_regs *		|		} *		|		struct frv_debug_regs *		|	} *		|	struct pt_regs [user exception] *		| } *		+---------------------- <-- __kernel_frame0_ptr (maybe GR28) *		| *		| kernel stack *		| *		|...................... *		| struct pt_regs [kernel exception] *		|...................... <-- __kernel_frame0_ptr (maybe GR28) *		| *		| kernel stack *		| *		|...................... <-- stack pointer (GR1) *		| *		| unused stack space *		| *		+---------------------- *		| struct thread_info *	+0x0000	+---------------------- <-- __current_thread_info (GR15); * * note that GR28 points to the current exception frame */#ifndef _ASM_REGISTERS_H#define _ASM_REGISTERS_H#ifndef __ASSEMBLY__#define __OFFSET(X,N)	((X)+(N)*4)#define __OFFSETC(X,N)	xxxxxxxxxxxxxxxxxxxxxxxx#else#define __OFFSET(X,N)	((X)+(N)*4)#define __OFFSETC(X,N)	((X)+(N))#endif/*****************************************************************************//* * Exception/Interrupt frame * - held on kernel stack * - 8-byte aligned on stack (old SP is saved in frame) * - GR0 is fixed 0, so we don't save it */#ifndef __ASSEMBLY__struct pt_regs {	unsigned long		psr;		/* Processor Status Register */	unsigned long		isr;		/* Integer Status Register */	unsigned long		ccr;		/* Condition Code Register */	unsigned long		cccr;		/* Condition Code for Conditional Insns Register */	unsigned long		lr;		/* Link Register */	unsigned long		lcr;		/* Loop Count Register */	unsigned long		pc;		/* Program Counter Register */	unsigned long		__status;	/* exception status */	unsigned long		syscallno;	/* syscall number or -1 */	unsigned long		orig_gr8;	/* original syscall arg #1 */	unsigned long		gner0;	unsigned long		gner1;	unsigned long long	iacc0;	unsigned long		tbr;		/* GR0 is fixed zero, so we use this for TBR */	unsigned long		sp;		/* GR1: USP/KSP */	unsigned long		fp;		/* GR2: FP */	unsigned long		gr3;	unsigned long		gr4;	unsigned long		gr5;	unsigned long		gr6;	unsigned long		gr7;		/* syscall number */	unsigned long		gr8;		/* 1st syscall param; syscall return */	unsigned long		gr9;		/* 2nd syscall param */	unsigned long		gr10;		/* 3rd syscall param */	unsigned long		gr11;		/* 4th syscall param */	unsigned long		gr12;		/* 5th syscall param */	unsigned long		gr13;		/* 6th syscall param */	unsigned long		gr14;	unsigned long		gr15;	unsigned long		gr16;		/* GP pointer */	unsigned long		gr17;		/* small data */	unsigned long		gr18;		/* PIC/PID */	unsigned long		gr19;	unsigned long		gr20;	unsigned long		gr21;	unsigned long		gr22;	unsigned long		gr23;	unsigned long		gr24;	unsigned long		gr25;	unsigned long		gr26;	unsigned long		gr27;	struct pt_regs		*next_frame;	/* GR28 - next exception frame */	unsigned long		gr29;		/* GR29 - OS reserved */	unsigned long		gr30;		/* GR30 - OS reserved */	unsigned long		gr31;		/* GR31 - OS reserved */} __attribute__((aligned(8)));#endif#define REG__STATUS_STEP	0x00000001	/* - reenable single stepping on return */#define REG__STATUS_STEPPED	0x00000002	/* - single step caused exception */#define REG__STATUS_BROKE	0x00000004	/* - BREAK insn caused exception */#define REG__STATUS_SYSC_ENTRY	0x40000000	/* - T on syscall entry (ptrace.c only) */#define REG__STATUS_SYSC_EXIT	0x80000000	/* - T on syscall exit (ptrace.c only) */#define REG_GR(R)	__OFFSET(REG_GR0, (R))#define REG_SP		REG_GR(1)#define REG_FP		REG_GR(2)#define REG_PREV_FRAME	REG_GR(28)	/* previous exception frame pointer (old gr28 value) */#define REG_CURR_TASK	REG_GR(29)	/* current task *//*****************************************************************************//* * debugging registers */#ifndef __ASSEMBLY__struct frv_debug_regs{	unsigned long		dcr;	unsigned long		ibar[4] __attribute__((aligned(8)));	unsigned long		dbar[4] __attribute__((aligned(8)));	unsigned long		dbdr[4][4] __attribute__((aligned(8)));	unsigned long		dbmr[4][4] __attribute__((aligned(8)));} __attribute__((aligned(8)));#endif/*****************************************************************************//* * userspace registers */#ifndef __ASSEMBLY__struct user_int_regs{	/* integer registers	 * - up to gr[31] mirror pt_regs	 * - total size must be multiple of 8 bytes	 */	unsigned long		psr;		/* Processor Status Register */	unsigned long		isr;		/* Integer Status Register */	unsigned long		ccr;		/* Condition Code Register */	unsigned long		cccr;		/* Condition Code for Conditional Insns Register */	unsigned long		lr;		/* Link Register */	unsigned long		lcr;		/* Loop Count Register */	unsigned long		pc;		/* Program Counter Register */	unsigned long		__status;	/* exception status */	unsigned long		syscallno;	/* syscall number or -1 */	unsigned long		orig_gr8;	/* original syscall arg #1 */	unsigned long		gner[2];	unsigned long long	iacc[1];	union {		unsigned long	tbr;		unsigned long	gr[64];	};};struct user_fpmedia_regs{	/* FP/Media registers */	unsigned long	fr[64];	unsigned long	fner[2];	unsigned long	msr[2];	unsigned long	acc[8];	unsigned char	accg[8];	unsigned long	fsr[1];};struct user_context{	struct user_int_regs		i;	struct user_fpmedia_regs	f;	/* we provide a context extension so that we can save the regs for CPUs that	 * implement many more of Fujitsu's lavish register spec	 */	void *extension;} __attribute__((aligned(8)));struct frv_frame0 {	union {		struct pt_regs		regs;		struct user_context	uc;	};	struct frv_debug_regs		debug;} __attribute__((aligned(32)));#endif#define __INT_GR(R)		__OFFSET(__INT_GR0,		(R))#define __FPMEDIA_FR(R)		__OFFSET(__FPMEDIA_FR0,		(R))#define __FPMEDIA_FNER(R)	__OFFSET(__FPMEDIA_FNER0,	(R))#define __FPMEDIA_MSR(R)	__OFFSET(__FPMEDIA_MSR0,	(R))#define __FPMEDIA_ACC(R)	__OFFSET(__FPMEDIA_ACC0,	(R))#define __FPMEDIA_ACCG(R)	__OFFSETC(__FPMEDIA_ACCG0,	(R))#define __FPMEDIA_FSR(R)	__OFFSET(__FPMEDIA_FSR0,	(R))#define __THREAD_GR(R)		__OFFSET(__THREAD_GR16,		(R) - 16)#endif /* _ASM_REGISTERS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -