diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/5i/arm.h |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/5i/arm.h')
-rwxr-xr-x | sys/src/cmd/5i/arm.h | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/sys/src/cmd/5i/arm.h b/sys/src/cmd/5i/arm.h new file mode 100755 index 000000000..322bcb2be --- /dev/null +++ b/sys/src/cmd/5i/arm.h @@ -0,0 +1,240 @@ +/* + * arm.h + */ +#ifndef EXTERN +#define EXTERN extern +#endif + +typedef 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); +uvlong getmem_v(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_v(ulong, uvlong); +void putmem_w(ulong, ulong); +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, +}; |