summaryrefslogtreecommitdiff
path: root/sys/src/cmd/5i/arm.h
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /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-xsys/src/cmd/5i/arm.h240
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,
+};