1e887ea33SDavid du Colombier #include <u.h> 2e887ea33SDavid du Colombier #include <libc.h> 3e887ea33SDavid du Colombier #include <bio.h> 4e887ea33SDavid du Colombier #include "../6c/6.out.h" 5e887ea33SDavid du Colombier 6e887ea33SDavid du Colombier 7e887ea33SDavid du Colombier #ifndef EXTERN 8e887ea33SDavid du Colombier #define EXTERN extern 9e887ea33SDavid du Colombier #endif 10e887ea33SDavid du Colombier 11e887ea33SDavid du Colombier typedef struct Sym Sym; 12e887ea33SDavid du Colombier typedef struct Ref Ref; 13e887ea33SDavid du Colombier typedef struct Gen Gen; 14e887ea33SDavid du Colombier typedef struct Io Io; 15e887ea33SDavid du Colombier typedef struct Hist Hist; 16e887ea33SDavid du Colombier typedef struct Gen2 Gen2; 17e887ea33SDavid du Colombier 18e887ea33SDavid du Colombier #define MAXALIGN 7 19e887ea33SDavid du Colombier #define FPCHIP 1 20e887ea33SDavid du Colombier #define NSYMB 500 21*2ec6491fSDavid du Colombier #define BUFSIZ (16*1024) 22e887ea33SDavid du Colombier #define HISTSZ 20 23e887ea33SDavid du Colombier #define NINCLUDE 10 24e887ea33SDavid du Colombier #define NHUNK 10000 25e887ea33SDavid du Colombier #define EOF (-1) 26e887ea33SDavid du Colombier #define IGN (-2) 27e887ea33SDavid du Colombier #define GETC() ((--fi.c < 0)? filbuf(): *fi.p++ & 0xff) 28e887ea33SDavid du Colombier #define NHASH 503 29e887ea33SDavid du Colombier #define STRINGSZ 200 30e887ea33SDavid du Colombier #define NMACRO 10 31e887ea33SDavid du Colombier 32e887ea33SDavid du Colombier struct Sym 33e887ea33SDavid du Colombier { 34e887ea33SDavid du Colombier Sym* link; 35e887ea33SDavid du Colombier Ref* ref; 36e887ea33SDavid du Colombier char* macro; 37e887ea33SDavid du Colombier vlong value; 38e887ea33SDavid du Colombier ushort type; 39e887ea33SDavid du Colombier char *name; 40e887ea33SDavid du Colombier char sym; 41e887ea33SDavid du Colombier }; 42e887ea33SDavid du Colombier #define S ((Sym*)0) 43e887ea33SDavid du Colombier 44e887ea33SDavid du Colombier struct Ref 45e887ea33SDavid du Colombier { 46e887ea33SDavid du Colombier int class; 47e887ea33SDavid du Colombier }; 48e887ea33SDavid du Colombier 49e887ea33SDavid du Colombier EXTERN struct 50e887ea33SDavid du Colombier { 51e887ea33SDavid du Colombier char* p; 52e887ea33SDavid du Colombier int c; 53e887ea33SDavid du Colombier } fi; 54e887ea33SDavid du Colombier 55e887ea33SDavid du Colombier struct Io 56e887ea33SDavid du Colombier { 57e887ea33SDavid du Colombier Io* link; 58e887ea33SDavid du Colombier char b[BUFSIZ]; 59e887ea33SDavid du Colombier char* p; 60e887ea33SDavid du Colombier short c; 61e887ea33SDavid du Colombier short f; 62e887ea33SDavid du Colombier }; 63e887ea33SDavid du Colombier #define I ((Io*)0) 64e887ea33SDavid du Colombier 65e887ea33SDavid du Colombier EXTERN struct 66e887ea33SDavid du Colombier { 67e887ea33SDavid du Colombier Sym* sym; 68e887ea33SDavid du Colombier short type; 69e887ea33SDavid du Colombier } h[NSYM]; 70e887ea33SDavid du Colombier 71e887ea33SDavid du Colombier struct Gen 72e887ea33SDavid du Colombier { 73e887ea33SDavid du Colombier double dval; 74e887ea33SDavid du Colombier char sval[8]; 75e887ea33SDavid du Colombier vlong offset; 76e887ea33SDavid du Colombier Sym* sym; 77e887ea33SDavid du Colombier short type; 78e887ea33SDavid du Colombier short index; 79e887ea33SDavid du Colombier short scale; 80e887ea33SDavid du Colombier }; 81e887ea33SDavid du Colombier struct Gen2 82e887ea33SDavid du Colombier { 83e887ea33SDavid du Colombier Gen from; 84e887ea33SDavid du Colombier Gen to; 85e887ea33SDavid du Colombier }; 86e887ea33SDavid du Colombier 87e887ea33SDavid du Colombier struct Hist 88e887ea33SDavid du Colombier { 89e887ea33SDavid du Colombier Hist* link; 90e887ea33SDavid du Colombier char* name; 91e887ea33SDavid du Colombier long line; 92e887ea33SDavid du Colombier vlong offset; 93e887ea33SDavid du Colombier }; 94e887ea33SDavid du Colombier #define H ((Hist*)0) 95e887ea33SDavid du Colombier 96e887ea33SDavid du Colombier enum 97e887ea33SDavid du Colombier { 98e887ea33SDavid du Colombier CLAST, 99e887ea33SDavid du Colombier CMACARG, 100e887ea33SDavid du Colombier CMACRO, 101e887ea33SDavid du Colombier CPREPROC, 102e887ea33SDavid du Colombier }; 103e887ea33SDavid du Colombier 104e887ea33SDavid du Colombier 105e887ea33SDavid du Colombier EXTERN char debug[256]; 106e887ea33SDavid du Colombier EXTERN Sym* hash[NHASH]; 107e887ea33SDavid du Colombier EXTERN char* Dlist[30]; 108e887ea33SDavid du Colombier EXTERN int nDlist; 109e887ea33SDavid du Colombier EXTERN Hist* ehist; 110e887ea33SDavid du Colombier EXTERN int newflag; 111e887ea33SDavid du Colombier EXTERN Hist* hist; 112e887ea33SDavid du Colombier EXTERN char* hunk; 113e887ea33SDavid du Colombier EXTERN char* include[NINCLUDE]; 114e887ea33SDavid du Colombier EXTERN Io* iofree; 115e887ea33SDavid du Colombier EXTERN Io* ionext; 116e887ea33SDavid du Colombier EXTERN Io* iostack; 117e887ea33SDavid du Colombier EXTERN long lineno; 118e887ea33SDavid du Colombier EXTERN int nerrors; 119e887ea33SDavid du Colombier EXTERN long nhunk; 120e887ea33SDavid du Colombier EXTERN int ninclude; 121e887ea33SDavid du Colombier EXTERN Gen nullgen; 122e887ea33SDavid du Colombier EXTERN char* outfile; 123e887ea33SDavid du Colombier EXTERN int pass; 124e887ea33SDavid du Colombier EXTERN char* pathname; 125e887ea33SDavid du Colombier EXTERN long pc; 126e887ea33SDavid du Colombier EXTERN int peekc; 127e887ea33SDavid du Colombier EXTERN int sym; 128e887ea33SDavid du Colombier EXTERN char symb[NSYMB]; 129e887ea33SDavid du Colombier EXTERN int thechar; 130e887ea33SDavid du Colombier EXTERN char* thestring; 131e887ea33SDavid du Colombier EXTERN long thunk; 132e887ea33SDavid du Colombier EXTERN Biobuf obuf; 133e887ea33SDavid du Colombier 134e887ea33SDavid du Colombier void* allocn(void*, long, long); 135e887ea33SDavid du Colombier void errorexit(void); 136e887ea33SDavid du Colombier void pushio(void); 137e887ea33SDavid du Colombier void newio(void); 138e887ea33SDavid du Colombier void newfile(char*, int); 139e887ea33SDavid du Colombier Sym* slookup(char*); 140e887ea33SDavid du Colombier Sym* lookup(void); 141e887ea33SDavid du Colombier void syminit(Sym*); 142e887ea33SDavid du Colombier long yylex(void); 143e887ea33SDavid du Colombier int getc(void); 144e887ea33SDavid du Colombier int getnsc(void); 145e887ea33SDavid du Colombier void unget(int); 146e887ea33SDavid du Colombier int escchar(int); 147e887ea33SDavid du Colombier void cinit(void); 148e887ea33SDavid du Colombier void checkscale(int); 149e887ea33SDavid du Colombier void pinit(char*); 150e887ea33SDavid du Colombier void cclean(void); 151e887ea33SDavid du Colombier int isreg(Gen*); 152e887ea33SDavid du Colombier void outcode(int, Gen2*); 153e887ea33SDavid du Colombier void outhist(void); 154e887ea33SDavid du Colombier void zaddr(Gen*, int); 155e887ea33SDavid du Colombier void zname(char*, int, int); 156e887ea33SDavid du Colombier void ieeedtod(Ieee*, double); 157e887ea33SDavid du Colombier int filbuf(void); 158e887ea33SDavid du Colombier Sym* getsym(void); 15940d01547SDavid du Colombier int isxyreg(int); 160e887ea33SDavid du Colombier void domacro(void); 161e887ea33SDavid du Colombier void macund(void); 162e887ea33SDavid du Colombier void macdef(void); 163e887ea33SDavid du Colombier void macexpand(Sym*, char*); 164e887ea33SDavid du Colombier void macinc(void); 165e887ea33SDavid du Colombier void macprag(void); 166e887ea33SDavid du Colombier void maclin(void); 167e887ea33SDavid du Colombier void macif(int); 168e887ea33SDavid du Colombier void macend(void); 169e887ea33SDavid du Colombier void dodefine(char*); 170e887ea33SDavid du Colombier void prfile(long); 171e887ea33SDavid du Colombier void linehist(char*, int); 172e887ea33SDavid du Colombier void gethunk(void); 173e887ea33SDavid du Colombier void yyerror(char*, ...); 174e887ea33SDavid du Colombier int yyparse(void); 175e887ea33SDavid du Colombier void setinclude(char*); 176e887ea33SDavid du Colombier int assemble(char*); 177e887ea33SDavid du Colombier 178e887ea33SDavid du Colombier /* 179e887ea33SDavid du Colombier * Posix.c/Inferno.c/Nt.c 180e887ea33SDavid du Colombier */ 181e887ea33SDavid du Colombier enum /* keep in synch with ../cc/cc.h */ 182e887ea33SDavid du Colombier { 183e887ea33SDavid du Colombier Plan9 = 1<<0, 184e887ea33SDavid du Colombier Unix = 1<<1, 185e887ea33SDavid du Colombier Windows = 1<<2 186e887ea33SDavid du Colombier }; 187e887ea33SDavid du Colombier int mywait(int*); 188e887ea33SDavid du Colombier int mycreat(char*, int); 189e887ea33SDavid du Colombier int systemtype(int); 190e887ea33SDavid du Colombier int pathchar(void); 191e887ea33SDavid du Colombier char* mygetwd(char*, int); 192e887ea33SDavid du Colombier int myexec(char*, char*[]); 193e887ea33SDavid du Colombier int mydup(int, int); 194e887ea33SDavid du Colombier int myfork(void); 195e887ea33SDavid du Colombier int mypipe(int*); 196e887ea33SDavid du Colombier void* mysbrk(ulong); 197