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

📄 arm.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
/* * arm.h */#ifndef	EXTERN#define	EXTERN	extern#endiftypedef	struct	Registers	Registers;typedef	struct	Segment		Segment;typedef	struct	Memory		Memory;typedef	struct	Mul		Mul;typedef	struct	Mulu		Mulu;typedef	struct	Inst		Inst;typedef	struct	Icache		Icache;typedef	struct	Tlb		Tlb;typedef	struct	Breakpoint	Breakpoint;enum{	Instruction	= 1,	Read		= 2,	Write		= 4,	Access		= 2|4,	Equal		= 4|8,};struct Breakpoint{	int		type;		/* Instruction/Read/Access/Write/Equal */	ulong		addr;		/* Place at address */	int		count;		/* To execute count times or value */	int		done;		/* How many times passed through */	Breakpoint*	next;		/* Link to next one */};enum{	Imem,	Iarith,	Ibranch,	Isyscall,};enum{	Nmaxtlb = 64,	REGARG	= 0,	REGRET	= 0,	REGPC	= 15,	REGLINK	= 14,	REGSP	= 13,};struct Tlb{	int	on;			/* Being updated */	int	tlbsize;		/* Number of entries */	ulong	tlbent[Nmaxtlb];	/* Virtual address tags */	int	hit;			/* Number of successful tag matches */	int	miss;			/* Number of failed tag matches */};		struct Icache{	int	on;			/* Turned on */	int	linesize;		/* Line size in bytes */	int	stall;			/* Cache stalls */	int*	lines;			/* Tag array */	int*	(*hash)(ulong);		/* Hash function */	char*	hashtext;		/* What the function looks like */};struct Inst{	void 	(*func)(ulong);	char*	name;	int	type;	int	count;	int	taken;	int	useddelay;};struct Registers{	ulong	ar;	ulong	ir;	Inst*	ip;	long	r[16];	long	cc1;	long	cc2;	int	class;	int	cond;	int	compare_op;	int	cbit;	int	cout;};enum{	FPd	= 0,	FPs,	FPmemory,};enum{	MemRead,	MemReadstring,	MemWrite,};enum{	CCcmp, 	CCtst,	CCteq,};enum{	Stack,	Text,	Data,	Bss,	Nseg,};struct Segment{	short	type;	ulong	base;	ulong	end;	ulong	fileoff;	ulong	fileend;	int	rss;	int	refs;	uchar**	table;};struct Memory{	Segment	seg[Nseg];};void		Ssyscall(ulong);int		armclass(long);void		breakpoint(char*, char*);void		brkchk(ulong, int);void		cmd(void);void		delbpt(char*);void		dobplist(void);void		dumpdreg(void);void		dumpfreg(void);void		dumpreg(void);void*		emalloc(ulong);void*		erealloc(void*, ulong, ulong);ulong		expr(char*);void		fatal(int, char*, ...);ulong		getmem_2(ulong);ulong		getmem_4(ulong);uchar		getmem_b(ulong);ushort		getmem_h(ulong);ulong		getmem_w(ulong);ulong		ifetch(ulong);void		inithdr(int);void		initicache(void);void		initmap(void);void		initstk(int, char**);void		iprofile(void);void		isum(void);void		itrace(char*, ...);long		lnrand(long);char*		memio(char*, ulong, int, int);int		_mipscoinst(Map*, ulong, char*, int);Mul		mul(long, long);Mulu		mulu(ulong, ulong);char*		nextc(char*);void		printlocals(Symbol*, ulong);void		printparams(Symbol*, ulong);void		printsource(long);void		procinit(int);void		putmem_b(ulong, uchar);void		putmem_h(ulong, ushort);void		putmem_w(ulong, ulong);void		randseed(long, long);void		reset(void);void		run(void);void		segsum(void);void		stktrace(int);void		tlbsum(void);void		undef(ulong);void		updateicache(ulong addr);void*		vaddr(ulong);/* Globals */EXTERN	Registers	reg;EXTERN	Memory		memory;EXTERN	int		text;EXTERN	int		trace;EXTERN	int		sysdbg;EXTERN	int		calltree;EXTERN	Inst		itab[];EXTERN	Inst		ispec[];EXTERN	Icache		icache;EXTERN	Tlb		tlb;EXTERN	int		count;EXTERN	jmp_buf		errjmp;EXTERN	Breakpoint*	bplist;EXTERN	int		atbpt;EXTERN	int		membpt;EXTERN	int		cmdcount;EXTERN	int		nopcount;EXTERN	ulong		dot;EXTERN	char*		file;EXTERN	Biobuf*		bioout;EXTERN	Biobuf*		bin;EXTERN	ulong*		iprof;EXTERN	int		datasize;EXTERN	Map*		symmap;	/* Plan9 Kernel constants */enum{	BY2PG		= 4096,	BY2WD		= 4,	UTZERO		= 0x1000,	STACKTOP	= 0x80000000,	STACKSIZE	= 0x10000,	PROFGRAN	= 4,	Sbit		= 1<<20,	SIGNBIT		= 0x80000000,	FP_U		= 3,	FP_L		= 1,	FP_G		= 2,	FP_E		= 0,	FP_CBIT		= 1<<23,};

⌨️ 快捷键说明

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