📄 arm.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 + -