summaryrefslogtreecommitdiff
path: root/utils/include
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 21:39:35 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 21:39:35 +0000
commit74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a (patch)
treec6e220ba61db3a6ea4052e6841296d829654e664 /utils/include
parent46439007cf417cbd9ac8049bb4122c890097a0fa (diff)
20060303
Diffstat (limited to 'utils/include')
-rw-r--r--utils/include/a.out.h45
-rw-r--r--utils/include/ar.h17
-rw-r--r--utils/include/mach.h295
-rw-r--r--utils/include/regexp.h66
4 files changed, 423 insertions, 0 deletions
diff --git a/utils/include/a.out.h b/utils/include/a.out.h
new file mode 100644
index 00000000..8c0b7137
--- /dev/null
+++ b/utils/include/a.out.h
@@ -0,0 +1,45 @@
+typedef struct Exec Exec;
+struct Exec
+{
+ long magic; /* magic number */
+ long text; /* size of text segment */
+ long data; /* size of initialized data */
+ long bss; /* size of uninitialized data */
+ long syms; /* size of symbol table */
+ long entry; /* entry point */
+ long spsz; /* size of pc/sp offset table */
+ long pcsz; /* size of pc/line number table */
+};
+
+
+#define HDR_MAGIC 0x00008000 /* header expansion */
+
+#define _MAGIC(f, b) ((f)|((((4*(b))+0)*(b))+7))
+#define A_MAGIC _MAGIC(0, 8) /* 68020 */
+#define I_MAGIC _MAGIC(0, 11) /* intel 386 */
+#define J_MAGIC _MAGIC(0, 12) /* intel 960 (retired) */
+#define K_MAGIC _MAGIC(0, 13) /* sparc */
+#define V_MAGIC _MAGIC(0, 16) /* mips 3000 BE */
+#define X_MAGIC _MAGIC(0, 17) /* att dsp 3210 (retired) */
+#define M_MAGIC _MAGIC(0, 18) /* mips 4000 BE */
+#define D_MAGIC _MAGIC(0, 19) /* amd 29000 (retired) */
+#define E_MAGIC _MAGIC(0, 20) /* arm */
+#define Q_MAGIC _MAGIC(0, 21) /* powerpc */
+#define N_MAGIC _MAGIC(0, 22) /* mips 4000 LE */
+#define L_MAGIC _MAGIC(0, 23) /* dec alpha */
+#define P_MAGIC _MAGIC(0, 24) /* mips 3000 LE */
+#define U_MAGIC _MAGIC(0, 25) /* sparc64 */
+#define S_MAGIC _MAGIC(HDR_MAGIC, 26) /* amd64 */
+
+#define MIN_MAGIC 8
+#define MAX_MAGIC 26 /* <= 90 */
+
+#define DYN_MAGIC 0x80000000 /* or'd in for dynamically loaded modules */
+
+typedef struct Sym Sym;
+struct Sym
+{
+ long value;
+ char type;
+ char *name;
+};
diff --git a/utils/include/ar.h b/utils/include/ar.h
new file mode 100644
index 00000000..cd538fab
--- /dev/null
+++ b/utils/include/ar.h
@@ -0,0 +1,17 @@
+#define ARMAG "!<arch>\n"
+#define SARMAG 8
+
+#define ARFMAG "`\n"
+#define SARNAME 16
+
+struct ar_hdr
+{
+ char name[SARNAME];
+ char date[12];
+ char uid[6];
+ char gid[6];
+ char mode[8];
+ char size[10];
+ char fmag[2];
+};
+#define SAR_HDR (SARNAME+44)
diff --git a/utils/include/mach.h b/utils/include/mach.h
new file mode 100644
index 00000000..f809aa2d
--- /dev/null
+++ b/utils/include/mach.h
@@ -0,0 +1,295 @@
+/*
+ * Architecture-dependent application data
+ */
+#include "a.out.h"
+/*
+ * Supported architectures:
+ * mips,
+ * 68020,
+ * i386,
+ * sparc,
+ * i960 (limited)
+ * 3210DSP (limited)
+ * mips2 (R4000)
+ * arm (limited)
+ */
+enum
+{
+ MMIPS, /* machine types */
+ MSPARC,
+ M68020,
+ MI386,
+ MI960,
+ M3210,
+ MMIPS2,
+ NMIPS2,
+ M29000,
+ MARM,
+ MPOWER,
+ /* types of exectables */
+ FNONE = 0, /* unidentified */
+ FMIPS, /* v.out */
+ FMIPSB, /* mips bootable */
+ FSPARC, /* k.out */
+ FSPARCB, /* Sparc bootable */
+ F68020, /* 2.out */
+ F68020B, /* 68020 bootable */
+ FNEXTB, /* Next bootable */
+ FI386, /* 8.out */
+ FI386B, /* I386 bootable */
+ FI960, /* 6.out */
+ FI960B, /* I960 bootable */
+ F3210, /* x.out */
+ FMIPS2BE, /* 4.out */
+ F29000, /* 9.out */
+ FARM, /* 5.out */
+ FARMB, /* ARM bootable */
+ FPOWER, /* q.out */
+ FPOWERB, /* power pc bootable */
+ FMIPS2LE, /* 4k little endian */
+
+ ANONE = 0, /* dissembler types */
+ AMIPS,
+ AMIPSCO, /* native mips */
+ ASPARC,
+ ASUNSPARC, /* native sun */
+ A68020,
+ AI386,
+ AI8086, /* oh god */
+ AI960,
+ A29000,
+ AARM,
+ APOWER,
+ /* object file types */
+ Obj68020 = 0, /* .2 */
+ ObjSparc, /* .k */
+ ObjMips, /* .v */
+ Obj386, /* .8 */
+ Obj960, /* .6 */
+ Obj3210, /* .x */
+ ObjMips2, /* .4 */
+ Obj29000, /* .9 */
+ ObjArm, /* .5 */
+ ObjPower, /* .q */
+ ObjMips2le, /* .0 */
+ Maxobjtype,
+
+ CNONE = 0, /* symbol table classes */
+ CAUTO,
+ CPARAM,
+ CSTAB,
+ CTEXT,
+ CDATA,
+ CANY /* to look for any class */
+};
+
+typedef struct Map Map;
+typedef struct Symbol Symbol;
+typedef struct Reglist Reglist;
+typedef struct Mach Mach;
+typedef struct Machdata Machdata;
+typedef struct segment segment;
+
+typedef int (*Rsegio)(segment*, ulong, long, char*, int);
+
+/*
+ * Structure to map a segment to a position in a file
+ */
+struct Map {
+ int nsegs; /* number of segments */
+ struct segment { /* per-segment map */
+ char *name; /* the segment name */
+ int fd; /* file descriptor */
+ int inuse; /* in use - not in use */
+ ulong b; /* base */
+ ulong e; /* end */
+ ulong f; /* offset within file */
+ Rsegio mget; /* special get if not 0 */
+ Rsegio mput; /* special put if not 0 */
+ } seg[1]; /* actually n of these */
+};
+
+
+
+/*
+ * Internal structure describing a symbol table entry
+ */
+struct Symbol {
+ void *handle; /* used internally - owning func */
+ /*struct {*/
+ char *name;
+ long value; /* address or stack offset */
+ char type; /* as in a.out.h */
+ char class; /* as above */
+ /*};*/
+};
+
+/*
+ * machine register description
+ */
+struct Reglist {
+ char *rname; /* register name */
+ short roffs; /* offset in u-block */
+ char rflags; /* INTEGER/FLOAT, WRITABLE */
+ char rformat; /* print format: 'x', 'X', 'f', '8' */
+};
+
+enum { /* bits in rflags field */
+ RINT = (0<<0),
+ RFLT = (1<<0),
+ RRDONLY = (1<<1)
+};
+/*
+ * Machine-dependent data is stored in two structures:
+ * Mach - miscellaneous general parameters
+ * Machdata - jump vector of service functions used by debuggers
+ *
+ * Mach is defined in 2.c, 4.c, v.c, k.c, 8.c, 6.c and set in executable.c
+ *
+ * Machdata is defined in 2db.c, 4db.c, vdb.c, kdb.c, 8db.c, and 6db.c
+ * and set in the debugger startup.
+ */
+
+
+struct Mach{
+ char *name;
+ int mtype; /* machine type code */
+ Reglist *reglist; /* register set */
+ ulong regsize; /* sizeof registers in bytes*/
+ ulong fpregsize; /* sizeof fp registers in bytes*/
+ char *pc; /* pc name */
+ char *sp; /* sp name */
+ char *link; /* link register name */
+ char *sbreg; /* static base register name */
+ ulong sb; /* static base register value */
+ int pgsize; /* page size */
+ ulong kbase; /* kernel base address */
+ ulong ktmask; /* ktzero = kbase & ~ktmask */
+ int pcquant; /* quantization of pc */
+ int szaddr; /* sizeof(void*) */
+ int szreg; /* sizeof(register) */
+ int szfloat; /* sizeof(float) */
+ int szdouble; /* sizeof(double) */
+};
+
+extern Mach *mach; /* Current machine */
+
+typedef vlong (*Rgetter)(Map*, char*);
+typedef void (*Tracer)(Map*, ulong, ulong, Symbol*);
+
+struct Machdata { /* Machine-dependent debugger support */
+ uchar bpinst[4]; /* break point instr. */
+ short bpsize; /* size of break point instr. */
+
+ ushort (*swab)(ushort); /* short to local byte order */
+ long (*swal)(long); /* long to local byte order */
+ vlong (*swav)(vlong); /* vlong to local byte order */
+ int (*ctrace)(Map*, ulong, ulong, ulong, Tracer); /* C traceback */
+ ulong (*findframe)(Map*, ulong, ulong, ulong, ulong);/* frame finder */
+ char* (*excep)(Map*, Rgetter); /* last exception */
+ ulong (*bpfix)(ulong); /* breakpoint fixup */
+ int (*sftos)(char*, int, void*); /* single precision float */
+ int (*dftos)(char*, int, void*); /* double precision float */
+ int (*foll)(Map*, ulong, Rgetter, ulong*); /* follow set */
+ int (*das)(Map*, ulong, char, char*, int); /* symbolic disassembly */
+ int (*hexinst)(Map*, ulong, char*, int); /* hex disassembly */
+ int (*instsize)(Map*, ulong); /* instruction size */
+};
+
+/*
+ * Common a.out header describing all architectures
+ */
+typedef struct Fhdr
+{
+ char *name; /* identifier of executable */
+ short type; /* file type - see codes above*/
+ short hdrsz; /* size of this header */
+ long magic; /* magic number */
+ long txtaddr; /* text address */
+ long entry; /* entry point */
+ long txtsz; /* text size */
+ long txtoff; /* start of text in file */
+ long dataddr; /* start of data segment */
+ long datsz; /* size of data seg */
+ long datoff; /* offset to data seg in file */
+ long bsssz; /* size of bss */
+ long symsz; /* size of symbol table */
+ long symoff; /* offset of symbol table in file */
+ long sppcsz; /* size of sp-pc table */
+ long sppcoff; /* offset of sp-pc table in file */
+ long lnpcsz; /* size of line number-pc table */
+ long lnpcoff; /* size of line number-pc table */
+} Fhdr;
+
+extern int asstype; /* dissembler type - machdata.c */
+extern Machdata *machdata; /* jump vector - machdata.c */
+
+Map* attachproc(int, int, int, Fhdr*);
+Map* attachremt(int, Fhdr*);
+int beieee80ftos(char*, int, void*);
+int beieeesftos(char*, int, void*);
+int beieeedftos(char*, int, void*);
+ushort beswab(ushort);
+long beswal(long);
+vlong beswav(vlong);
+int cisctrace(Map*, ulong, ulong, ulong, Tracer);
+ulong ciscframe(Map*, ulong, ulong, ulong, ulong);
+int crackhdr(int fd, Fhdr*);
+long file2pc(char*, ulong);
+int fileelem(Sym**, uchar *, char*, int);
+int fileline(char*, int, ulong);
+int filesym(int, char*, int);
+int findlocal(Symbol*, char*, Symbol*);
+int findseg(Map*, char*);
+int findsym(long, int, Symbol *);
+int fnbound(long, ulong*);
+int fpformat(Map*, Reglist*, char*, int, int);
+int get1(Map*, ulong, uchar*, int);
+int get2(Map*, ulong, ushort*);
+int get4(Map*, ulong, long*);
+int get8(Map*, ulong, vlong*);
+int getauto(Symbol*, int, int, Symbol*);
+Sym* getsym(int);
+int globalsym(Symbol *, int);
+int gsymoff(char*, int, long, int);
+char* _hexify(char*, ulong, int);
+int ieeesftos(char*, int, ulong);
+int ieeedftos(char*, int, ulong, ulong);
+int isar(Biobuf*);
+int leieee80ftos(char*, int, void*);
+int leieeesftos(char*, int, void*);
+int leieeedftos(char*, int, void*);
+ushort leswab(ushort);
+long leswal(long);
+vlong leswav(vlong);
+long line2addr(ulong, ulong, ulong);
+Map* loadmap(Map*, int, Fhdr*);
+int localaddr(Map*, char*, char*, long*, Rgetter);
+int localsym(Symbol*, int);
+int lookup(char*, char*, Symbol*);
+void machbytype(int);
+int machbyname(char*);
+int nextar(Biobuf*, int, char*);
+Map* newmap(Map*, int);
+void objtraverse(void(*)(Sym*, void*), void*);
+int objtype(Biobuf*, char**);
+long pc2sp(ulong);
+long pc2line(ulong);
+int put1(Map*, ulong, uchar*, int);
+int put2(Map*, ulong, ushort);
+int put4(Map*, ulong, long);
+int put8(Map*, ulong, vlong);
+int readar(Biobuf*, int, int, int);
+int readobj(Biobuf*, int);
+struct segment* reloc(Map*, ulong, long*);
+ulong riscframe(Map*, ulong, ulong, ulong, ulong);
+int risctrace(Map*, ulong, ulong, ulong, Tracer);
+int setmap(Map*, int, ulong, ulong, ulong, char*);
+void setmapio(Map*, int, Rsegio, Rsegio);
+Sym* symbase(long*);
+int syminit(int, Fhdr*);
+int symoff(char*, int, long, int);
+void textseg(ulong, Fhdr*);
+int textsym(Symbol*, int);
+void unusemap(Map*, int);
+
diff --git a/utils/include/regexp.h b/utils/include/regexp.h
new file mode 100644
index 00000000..bcd06f3e
--- /dev/null
+++ b/utils/include/regexp.h
@@ -0,0 +1,66 @@
+#pragma src "/usr/inferno/libregexp"
+#pragma lib "libregexp.a"
+
+typedef struct Resub Resub;
+typedef struct Reclass Reclass;
+typedef struct Reinst Reinst;
+typedef struct Reprog Reprog;
+
+/*
+ * Sub expression matches
+ */
+struct Resub{
+ union
+ {
+ char *sp;
+ Rune *rsp;
+ }s;
+ union
+ {
+ char *ep;
+ Rune *rep;
+ }e;
+};
+
+/*
+ * character class, each pair of rune's defines a range
+ */
+struct Reclass{
+ Rune *end;
+ Rune spans[64];
+};
+
+/*
+ * Machine instructions
+ */
+struct Reinst{
+ int type;
+ union {
+ Reclass *cp; /* class pointer */
+ Rune r; /* character */
+ int subid; /* sub-expression id for RBRA and LBRA */
+ Reinst *right; /* right child of OR */
+ }u1;
+ union { /* regexp relies on these two being in the same union */
+ Reinst *left; /* left child of OR */
+ Reinst *next; /* next instruction for CAT & LBRA */
+ }u2;
+};
+
+/*
+ * Reprogram definition
+ */
+struct Reprog{
+ Reinst *startinst; /* start pc */
+ Reclass class[16]; /* .data */
+ Reinst firstinst[5]; /* .text */
+};
+
+extern Reprog *regcomp(char*);
+extern Reprog *regcomplit(char*);
+extern Reprog *regcompnl(char*);
+extern void regerror(char*);
+extern int regexec(Reprog*, char*, Resub*, int);
+extern void regsub(char*, char*, Resub*, int);
+extern int rregexec(Reprog*, Rune*, Resub*, int);
+extern void rregsub(Rune*, Rune*, Resub*, int);