]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/vl/l.h
exec(2): fix prototypes
[plan9front.git] / sys / src / cmd / vl / l.h
1 #include        <u.h>
2 #include        <libc.h>
3 #include        <bio.h>
4 #include        "../vc/v.out.h"
5
6 #ifndef EXTERN
7 #define EXTERN  extern
8 #endif
9
10 typedef struct  Adr     Adr;
11 typedef struct  Sym     Sym;
12 typedef struct  Autom   Auto;
13 typedef struct  Prog    Prog;
14 typedef struct  Optab   Optab;
15 typedef struct  Oprang  Oprang;
16 typedef uchar   Opcross[32][2][32];
17 typedef struct  Count   Count;
18
19 #define P               ((Prog*)0)
20 #define S               ((Sym*)0)
21 #define TNAME           (curtext&&curtext->from.sym?curtext->from.sym->name:noname)
22
23 struct  Adr
24 {
25         union
26         {
27                 long    u0offset;
28                 char*   u0sval;
29                 Ieee*   u0ieee;
30         } u0;
31         union
32         {
33                 Auto*   u1autom;
34                 Sym*    u1sym;
35         } u1;
36         char    type;
37         char    reg;
38         char    name;
39         char    class;
40 };
41
42 #define offset  u0.u0offset
43 #define sval    u0.u0sval
44 #define ieee    u0.u0ieee
45
46 #define autom   u1.u1autom
47 #define sym     u1.u1sym
48
49 struct  Prog
50 {
51         Adr     from;
52         Adr     to;
53         union
54         {
55                 long    u0regused;
56                 Prog*   u0forwd;
57         } u0;
58         Prog*   cond;
59         Prog*   link;
60         long    pc;
61         long    line;
62         uchar   mark;
63         uchar   optab;
64         char    as;
65         char    reg;
66 };
67 #define regused u0.u0regused
68 #define forwd   u0.u0forwd
69
70 struct  Sym
71 {
72         char    *name;
73         short   type;
74         short   version;
75         short   become;
76         short   frame;
77         long    value;
78         Sym*    link;
79 };
80 struct  Autom
81 {
82         Sym*    asym;
83         Auto*   link;
84         long    aoffset;
85         short   type;
86 };
87 struct  Optab
88 {
89         char    as;
90         char    a1;
91         char    a2;
92         char    a3;
93         char    type;
94         char    size;
95         char    param;
96 };
97 struct  Oprang
98 {
99         Optab*  start;
100         Optab*  stop;
101 };
102 struct  Count
103 {
104         long    count;
105         long    outof;
106 };
107
108 enum
109 {
110         STEXT           = 1,
111         SDATA,
112         SBSS,
113         SDATA1,
114         SXREF,
115         SLEAF,
116         SFILE,
117         SCONST,
118         SSTRING,
119
120         C_NONE          = 0,
121         C_REG,
122         C_FREG,
123         C_FCREG,
124         C_MREG,
125         C_HI,
126         C_LO,
127         C_ZCON,
128         C_SCON,
129         C_ADD0CON,
130         C_AND0CON,
131         C_ADDCON,
132         C_ANDCON,
133         C_UCON,
134         C_LCON,
135         C_SACON,
136         C_SECON,
137         C_LACON,
138         C_LECON,
139         C_SBRA,
140         C_LBRA,
141         C_SAUTO,
142         C_SEXT,
143         C_LAUTO,
144         C_LEXT,
145         C_ZOREG,
146         C_SOREG,
147         C_LOREG,
148         C_GOK,
149
150         NSCHED          = 20,
151
152 /* mark flags */
153         FOLL            = 1<<0,
154         LABEL           = 1<<1,
155         LEAF            = 1<<2,
156         SYNC            = 1<<3,
157         BRANCH          = 1<<4,
158         LOAD            = 1<<5,
159         FCMP            = 1<<6,
160         NOSCHED         = 1<<7,
161
162         BIG             = 32766,
163         STRINGSZ        = 200,
164         NHASH           = 10007,
165         NHUNK           = 100000,
166         MINSIZ          = 64,
167         NENT            = 100,
168         MAXIO           = 8192,
169         MAXHIST         = 20,                           /* limit of path elements for history symbols */
170 };
171
172 EXTERN union
173 {
174         struct
175         {
176                 uchar   obuf[MAXIO];                    /* output buffer */
177                 uchar   ibuf[MAXIO];                    /* input buffer */
178         } u;
179         char    dbuf[1];
180 } buf;
181
182 #define cbuf    u.obuf
183 #define xbuf    u.ibuf
184
185 EXTERN  long    HEADR;                  /* length of header */
186 EXTERN  int     HEADTYPE;               /* type of header */
187 EXTERN  long    INITDAT;                /* data location */
188 EXTERN  long    INITRND;                /* data round above text location */
189 EXTERN  long    INITTEXT;               /* text location */
190 EXTERN  char*   INITENTRY;              /* entry point */
191 EXTERN  long    autosize;
192 EXTERN  Biobuf  bso;
193 EXTERN  long    bsssize;
194 EXTERN  int     cbc;
195 EXTERN  uchar*  cbp;
196 EXTERN  int     cout;
197 EXTERN  Auto*   curauto;
198 EXTERN  Auto*   curhist;
199 EXTERN  Prog*   curp;
200 EXTERN  Prog*   curtext;
201 EXTERN  Prog*   datap;
202 EXTERN  long    datsize;
203 EXTERN  char    debug[128];
204 EXTERN  Prog*   etextp;
205 EXTERN  Prog*   firstp;
206 EXTERN  char    fnuxi4[4];      /* for 3l [sic] */
207 EXTERN  char    fnuxi8[8];
208 EXTERN  char*   noname;
209 EXTERN  Sym*    hash[NHASH];
210 EXTERN  Sym*    histfrog[MAXHIST];
211 EXTERN  int     histfrogp;
212 EXTERN  int     histgen;
213 EXTERN  char*   library[50];
214 EXTERN  char*   libraryobj[50];
215 EXTERN  int     libraryp;
216 EXTERN  int     xrefresolv;
217 EXTERN  char*   hunk;
218 EXTERN  char    inuxi1[1];
219 EXTERN  char    inuxi2[2];
220 EXTERN  char    inuxi4[4];
221 EXTERN  Prog*   lastp;
222 EXTERN  long    lcsize;
223 EXTERN  char    literal[32];
224 EXTERN  int     nerrors;
225 EXTERN  long    nhunk;
226 EXTERN  long    instoffset;
227 EXTERN  Opcross opcross[10];
228 EXTERN  Oprang  oprange[ALAST];
229 EXTERN  char*   outfile;
230 EXTERN  long    pc;
231 EXTERN  uchar   repop[ALAST];
232 EXTERN  long    symsize;
233 EXTERN  Prog*   textp;
234 EXTERN  long    textsize;
235 EXTERN  long    thunk;
236 EXTERN  int     version;
237 EXTERN  char    xcmp[32][32];
238 EXTERN  Prog    zprg;
239 EXTERN  int     dtype;
240 EXTERN  int     little;
241
242 EXTERN  struct
243 {
244         Count   branch;
245         Count   fcmp;
246         Count   load;
247         Count   mfrom;
248         Count   page;
249         Count   jump;
250 } nop;
251
252 extern  char*   anames[];
253 extern  Optab   optab[];
254
255 #pragma varargck        type    "A"     int
256 #pragma varargck        type    "D"     Adr*
257 #pragma varargck        type    "N"     Adr*
258 #pragma varargck        type    "P"     Prog*
259 #pragma varargck        type    "S"     char*
260
261 #pragma varargck        argpos  diag 1
262
263 int     Aconv(Fmt*);
264 int     Dconv(Fmt*);
265 int     Nconv(Fmt*);
266 int     Pconv(Fmt*);
267 int     Sconv(Fmt*);
268 int     aclass(Adr*);
269 void    addhist(long, int);
270 void    addnop(Prog*);
271 void    append(Prog*, Prog*);
272 void    asmb(void);
273 void    asmlc(void);
274 int     asmout(Prog*, Optab*, int);
275 void    asmsym(void);
276 long    atolwhex(char*);
277 Prog*   brloop(Prog*);
278 void    buildop(void);
279 void    buildrep(int, int);
280 void    cflush(void);
281 int     cmp(int, int);
282 int     compound(Prog*);
283 double  cputime(void);
284 void    datblk(long, long, int);
285 void    diag(char*, ...);
286 void    dodata(void);
287 void    doprof1(void);
288 void    doprof2(void);
289 long    entryvalue(void);
290 void    errorexit(void);
291 void    exchange(Prog*);
292 int     find1(long, int);
293 void    follow(void);
294 void    gethunk(void);
295 void    histtoauto(void);
296 double  ieeedtod(Ieee*);
297 long    ieeedtof(Ieee*);
298 int     isnop(Prog*);
299 void    ldobj(int, long, char*);
300 void    loadlib(void);
301 void    listinit(void);
302 Sym*    lookup(char*, int);
303 void    lput(long);
304 void    bput(long);
305 void    mkfwd(void);
306 void*   mysbrk(ulong);
307 void    names(void);
308 void    nocache(Prog*);
309 void    noops(void);
310 void    nuxiinit(void);
311 void    objfile(char*);
312 int     ocmp(const void*, const void*);
313 long    opirr(int);
314 Optab*  oplook(Prog*);
315 long    oprrr(int);
316 void    patch(void);
317 void    prasm(Prog*);
318 void    prepend(Prog*, Prog*);
319 Prog*   prg(void);
320 int     pseudo(Prog*);
321 void    putsymb(char*, int, long, int);
322 long    regoff(Adr*);
323 int     relinv(int);
324 long    rnd(long, long);
325 void    sched(Prog*, Prog*);
326 void    span(void);
327 void    strnput(char*, int);
328 void    undef(void);
329 void    xdefine(char*, int, long);
330 void    xfol(Prog*);
331 void    xfol(Prog*);
332 void    nopstat(char*, Count*);