]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/8l/l.h
sshfs: usage
[plan9front.git] / sys / src / cmd / 8l / l.h
1 #include        <u.h>
2 #include        <libc.h>
3 #include        <bio.h>
4 #include        "../8c/8.out.h"
5
6 #ifndef EXTERN
7 #define EXTERN  extern
8 #endif
9
10 #define P               ((Prog*)0)
11 #define S               ((Sym*)0)
12 #define TNAME           (curtext?curtext->from.sym->name:noname)
13
14 #define cput(c)\
15         { *cbp++ = c;\
16         if(--cbc <= 0)\
17                 cflush(); }
18
19 typedef struct  Adr     Adr;
20 typedef struct  Prog    Prog;
21 typedef struct  Sym     Sym;
22 typedef struct  Auto    Auto;
23 typedef struct  Optab   Optab;
24
25 struct  Adr
26 {
27         union
28         {
29                 long    u0offset;
30                 char    u0scon[8];
31                 Prog    *u0cond;        /* not used, but should be D_BRANCH */
32                 Ieee    u0ieee;
33         } u0;
34         union
35         {
36                 Auto*   u1autom;
37                 Sym*    u1sym;
38         } u1;
39         short   type;
40         uchar   index;
41         char    scale;
42 };
43
44 #define offset  u0.u0offset
45 #define scon    u0.u0scon
46 #define cond    u0.u0cond
47 #define ieee    u0.u0ieee
48
49 #define autom   u1.u1autom
50 #define sym     u1.u1sym
51
52 struct  Prog
53 {
54         Adr     from;
55         Adr     to;
56         Prog    *forwd;
57         Prog*   link;
58         Prog*   pcond;  /* work on this */
59         long    pc;
60         long    line;
61         short   as;
62         char    width;          /* fake for DATA */
63         char    ft;             /* oclass cache */
64         char    tt;
65         uchar   mark;   /* work on these */
66         uchar   back;
67 };
68 struct  Auto
69 {
70         Sym*    asym;
71         Auto*   link;
72         long    aoffset;
73         short   type;
74 };
75 struct  Sym
76 {
77         char    *name;
78         short   type;
79         short   version;
80         short   become;
81         short   frame;
82         uchar   subtype;
83         char    dupok;
84         ushort  file;
85         long    value;
86         long    sig;
87         Sym*    link;
88 };
89 struct  Optab
90 {
91         short   as;
92         uchar*  ytab;
93         uchar   prefix;
94         uchar   op[20];
95 };
96
97 enum
98 {
99         STEXT           = 1,
100         SDATA,
101         SBSS,
102         SDATA1,
103         SXREF,
104         SFILE,
105         SCONST,
106         SUNDEF,
107
108         SIMPORT,
109         SEXPORT,
110
111         NHASH           = 10007,
112         NHUNK           = 100000,
113         MINSIZ          = 4,
114         STRINGSZ        = 200,
115         MINLC           = 1,
116         MAXIO           = 8192,
117         MAXHIST         = 20,                           /* limit of path elements for history symbols */
118
119         Yxxx            = 0,
120         Ynone,
121         Yi0,
122         Yi1,
123         Yi8,
124         Yi32,
125         Yiauto,
126         Yal,
127         Ycl,
128         Yax,
129         Ycx,
130         Yrb,
131         Yrl,
132         Yrf,
133         Yf0,
134         Yrx,
135         Ymb,
136         Yml,
137         Ym,
138         Ybr,
139         Ycol,
140
141         Ycs,    Yss,    Yds,    Yes,    Yfs,    Ygs,
142         Ygdtr,  Yidtr,  Yldtr,  Ymsw,   Ytask,
143         Ycr0,   Ycr1,   Ycr2,   Ycr3,   Ycr4,   Ycr5,   Ycr6,   Ycr7,
144         Ydr0,   Ydr1,   Ydr2,   Ydr3,   Ydr4,   Ydr5,   Ydr6,   Ydr7,
145         Ytr0,   Ytr1,   Ytr2,   Ytr3,   Ytr4,   Ytr5,   Ytr6,   Ytr7,
146         Ymr, Ymm,
147         Yxr, Yxm,
148         Ymax,
149
150         Zxxx            = 0,
151
152         Zlit,
153         Z_rp,
154         Zbr,
155         Zcall,
156         Zib_,
157         Zib_rp,
158         Zibo_m,
159         Zibo_m_xm,
160         Zil_,
161         Zil_rp,
162         Zilo_m,
163         Zjmp,
164         Zloop,
165         Zm_o,
166         Zm_r,
167         Zm_r_xm,
168         Zm_r_i_xm,
169         Zm_r_3d,
170         Zibm_r, /* mmx1,mmx2/mem64,imm8 */
171         Zaut_r,
172         Zo_m,
173         Zpseudo,
174         Zr_m,
175         Zr_m_xm,
176         Zr_m_i_xm,
177         Zrp_,
178         Z_ib,
179         Z_il,
180         Zm_ibo,
181         Zm_ilo,
182         Zib_rr,
183         Zil_rr,
184         Zclr,
185         Zbyte,
186         Zmov,
187         Zmax,
188
189         Px              = 0,
190         Pe              = 0x66, /* operand escape */
191         Pm              = 0x0f, /* 2byte opcode escape */
192         Pq              = 0xff, /* both escape */
193         Pb              = 0xfe, /* byte operands */
194         Pf2             = 0xf2, /* xmm escape 1 */
195         Pf3             = 0xf3, /* xmm escape 2 */
196
197         Roffset = 22,           /* no. bits for offset in relocation address */
198         Rindex  = 10,           /* no. bits for index in relocation address */
199 };
200
201 EXTERN union
202 {
203         struct
204         {
205                 char    obuf[MAXIO];                    /* output buffer */
206                 uchar   ibuf[MAXIO];                    /* input buffer */
207         } u;
208         char    dbuf[1];
209 } buf;
210
211 #define cbuf    u.obuf
212 #define xbuf    u.ibuf
213
214 #pragma varargck        type    "A"     int
215 #pragma varargck        type    "A"     uint
216 #pragma varargck        type    "D"     Adr*
217 #pragma varargck        type    "P"     Prog*
218 #pragma varargck        type    "R"     int
219 #pragma varargck        type    "R"     uint
220 #pragma varargck        type    "S"     char*
221
222 #pragma varargck        argpos  diag 1
223
224 EXTERN  long    HEADR;
225 EXTERN  long    HEADTYPE;
226 EXTERN  long    INITDAT;
227 EXTERN  long    INITRND;
228 EXTERN  long    INITTEXT;
229 EXTERN  char*   INITENTRY;              /* entry point */
230 EXTERN  Biobuf  bso;
231 EXTERN  long    bsssize;
232 EXTERN  long    casepc;
233 EXTERN  int     cbc;
234 EXTERN  char*   cbp;
235 EXTERN  char*   pcstr;
236 EXTERN  int     cout;
237 EXTERN  Auto*   curauto;
238 EXTERN  Auto*   curhist;
239 EXTERN  Prog*   curp;
240 EXTERN  Prog*   curtext;
241 EXTERN  Prog*   datap;
242 EXTERN  Prog*   edatap;
243 EXTERN  long    datsize;
244 EXTERN  char    debug[128];
245 EXTERN  char    literal[32];
246 EXTERN  Prog*   etextp;
247 EXTERN  Prog*   firstp;
248 EXTERN  char    fnuxi8[8];
249 EXTERN  char    fnuxi4[4];
250 EXTERN  Sym*    hash[NHASH];
251 EXTERN  Sym*    histfrog[MAXHIST];
252 EXTERN  int     histfrogp;
253 EXTERN  int     histgen;
254 EXTERN  char*   library[50];
255 EXTERN  char*   libraryobj[50];
256 EXTERN  int     libraryp;
257 EXTERN  int     xrefresolv;
258 EXTERN  char*   hunk;
259 EXTERN  char    inuxi1[1];
260 EXTERN  char    inuxi2[2];
261 EXTERN  char    inuxi4[4];
262 EXTERN  char    ycover[Ymax*Ymax];
263 EXTERN  uchar*  andptr;
264 EXTERN  uchar   and[30];
265 EXTERN  char    reg[D_XNONE];
266 EXTERN  Prog*   lastp;
267 EXTERN  long    lcsize;
268 EXTERN  int     nerrors;
269 EXTERN  long    nhunk;
270 EXTERN  long    nsymbol;
271 EXTERN  char*   noname;
272 EXTERN  char*   outfile;
273 EXTERN  long    pc;
274 EXTERN  long    spsize;
275 EXTERN  Sym*    symlist;
276 EXTERN  long    symsize;
277 EXTERN  Prog*   textp;
278 EXTERN  long    textsize;
279 EXTERN  long    thunk;
280 EXTERN  int     version;
281 EXTERN  Prog    zprg;
282 EXTERN  int     dtype;
283
284 EXTERN  Adr*    reloca;
285 EXTERN  int     doexp, dlm;
286 EXTERN  int     imports, nimports;
287 EXTERN  int     exports, nexports, allexport;
288 EXTERN  char*   EXPTAB;
289 EXTERN  Prog    undefp;
290
291 #define UP      (&undefp)
292
293 extern  Optab   optab[];
294 extern  Optab*  opindex[];
295 extern  char*   anames[];
296
297 int     Aconv(Fmt*);
298 int     Dconv(Fmt*);
299 int     Pconv(Fmt*);
300 int     Rconv(Fmt*);
301 int     Sconv(Fmt*);
302 void    addhist(long, int);
303 Prog*   appendp(Prog*);
304 void    asmb(void);
305 void    asmdyn(void);
306 void    asmins(Prog*);
307 void    asmlc(void);
308 void    asmsp(void);
309 void    asmsym(void);
310 long    atolwhex(char*);
311 Prog*   brchain(Prog*);
312 Prog*   brloop(Prog*);
313 void    cflush(void);
314 void    ckoff(Sym*, long);
315 Prog*   copyp(Prog*);
316 double  cputime(void);
317 void    datblk(long, long);
318 void    diag(char*, ...);
319 void    dodata(void);
320 void    doinit(void);
321 void    doprof1(void);
322 void    doprof2(void);
323 void    dostkoff(void);
324 void    dynreloc(Sym*, ulong, int);
325 long    entryvalue(void);
326 void    errorexit(void);
327 void    export(void);
328 int     find1(long, int);
329 int     find2(long, int);
330 void    follow(void);
331 void    gethunk(void);
332 void    histtoauto(void);
333 double  ieeedtod(Ieee*);
334 long    ieeedtof(Ieee*);
335 void    import(void);
336 void    ldobj(int, long, char*);
337 void    loadlib(void);
338 void    listinit(void);
339 Sym*    lookup(char*, int);
340 void    lput(long);
341 void    lputl(long);
342 void    main(int, char*[]);
343 void    mkfwd(void);
344 void*   mysbrk(ulong);
345 void    nuxiinit(void);
346 void    objfile(char*);
347 int     opsize(Prog*);
348 void    patch(void);
349 Prog*   prg(void);
350 void    readundefs(char*, int);
351 int     relinv(int);
352 long    reuse(Prog*, Sym*);
353 long    rnd(long, long);
354 void    span(void);
355 void    undef(void);
356 void    undefsym(Sym*);
357 long    vaddr(Adr*);
358 void    wput(ushort);
359 void    xdefine(char*, int, long);
360 void    xfol(Prog*);
361 int     zaddr(uchar*, Adr*, Sym*[]);
362 void    zerosig(char*);
363
364 #pragma varargck        type    "D"     Adr*
365 #pragma varargck        type    "P"     Prog*
366 #pragma varargck        type    "R"     int
367 #pragma varargck        type    "A"     int