xref: /plan9-contrib/sys/src/cmd/6l/l.h (revision 2ec6491f4460014c01f3ea5c06b30b1a392b0bb2)
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"
540d01547SDavid du Colombier #include	"../ld/elf.h"
6e887ea33SDavid du Colombier 
7e887ea33SDavid du Colombier #ifndef	EXTERN
8e887ea33SDavid du Colombier #define	EXTERN	extern
9e887ea33SDavid du Colombier #endif
10e887ea33SDavid du Colombier 
11e887ea33SDavid du Colombier #define	P		((Prog*)0)
12e887ea33SDavid du Colombier #define	S		((Sym*)0)
13e887ea33SDavid du Colombier #define	TNAME		(curtext?curtext->from.sym->name:noname)
14e887ea33SDavid du Colombier #define	cput(c)\
15e887ea33SDavid du Colombier 	{ *cbp++ = c;\
16e887ea33SDavid du Colombier 	if(--cbc <= 0)\
17e887ea33SDavid du Colombier 		cflush(); }
18e887ea33SDavid du Colombier 
19b87cd620SDavid du Colombier #define	LIBNAMELEN	300
20e887ea33SDavid du Colombier typedef	struct	Adr	Adr;
21e887ea33SDavid du Colombier typedef	struct	Prog	Prog;
22e887ea33SDavid du Colombier typedef	struct	Sym	Sym;
23e887ea33SDavid du Colombier typedef	struct	Auto	Auto;
24e887ea33SDavid du Colombier typedef	struct	Optab	Optab;
25e887ea33SDavid du Colombier typedef	struct	Movtab	Movtab;
26e887ea33SDavid du Colombier 
27e887ea33SDavid du Colombier struct	Adr
28e887ea33SDavid du Colombier {
29e887ea33SDavid du Colombier 	union
30e887ea33SDavid du Colombier 	{
31e887ea33SDavid du Colombier 		vlong	u0offset;
32e887ea33SDavid du Colombier 		char	u0scon[8];
33e887ea33SDavid du Colombier 		Prog	*u0cond;	/* not used, but should be D_BRANCH */
34e887ea33SDavid du Colombier 		Ieee	u0ieee;
35e887ea33SDavid du Colombier 	} u0;
36e887ea33SDavid du Colombier 	union
37e887ea33SDavid du Colombier 	{
38e887ea33SDavid du Colombier 		Auto*	u1autom;
39e887ea33SDavid du Colombier 		Sym*	u1sym;
40e887ea33SDavid du Colombier 	} u1;
41e887ea33SDavid du Colombier 	short	type;
42e887ea33SDavid du Colombier 	char	index;
43e887ea33SDavid du Colombier 	char	scale;
44e887ea33SDavid du Colombier };
45e887ea33SDavid du Colombier 
46e887ea33SDavid du Colombier #define	offset	u0.u0offset
47e887ea33SDavid du Colombier #define	scon	u0.u0scon
48e887ea33SDavid du Colombier #define	cond	u0.u0cond
49e887ea33SDavid du Colombier #define	ieee	u0.u0ieee
50e887ea33SDavid du Colombier 
51e887ea33SDavid du Colombier #define	autom	u1.u1autom
52e887ea33SDavid du Colombier #define	sym	u1.u1sym
53e887ea33SDavid du Colombier 
54e887ea33SDavid du Colombier struct	Prog
55e887ea33SDavid du Colombier {
56e887ea33SDavid du Colombier 	Adr	from;
57e887ea33SDavid du Colombier 	Adr	to;
58e887ea33SDavid du Colombier 	Prog	*forwd;
59e887ea33SDavid du Colombier 	Prog*	link;
60e887ea33SDavid du Colombier 	Prog*	pcond;	/* work on this */
61e887ea33SDavid du Colombier 	vlong	pc;
62e887ea33SDavid du Colombier 	long	line;
63e887ea33SDavid du Colombier 	uchar	mark;	/* work on these */
64e887ea33SDavid du Colombier 	uchar	back;
65e887ea33SDavid du Colombier 
66e887ea33SDavid du Colombier 	short	as;
67e887ea33SDavid du Colombier 	char	width;		/* fake for DATA */
68e887ea33SDavid du Colombier 	char	mode;	/* 16, 32, or 64 */
69e887ea33SDavid du Colombier };
70e887ea33SDavid du Colombier struct	Auto
71e887ea33SDavid du Colombier {
72e887ea33SDavid du Colombier 	Sym*	asym;
73e887ea33SDavid du Colombier 	Auto*	link;
74e887ea33SDavid du Colombier 	long	aoffset;
75e887ea33SDavid du Colombier 	short	type;
76e887ea33SDavid du Colombier };
77e887ea33SDavid du Colombier struct	Sym
78e887ea33SDavid du Colombier {
79e887ea33SDavid du Colombier 	char	*name;
80e887ea33SDavid du Colombier 	short	type;
81e887ea33SDavid du Colombier 	short	version;
82e887ea33SDavid du Colombier 	short	become;
83e887ea33SDavid du Colombier 	short	frame;
84e887ea33SDavid du Colombier 	uchar	subtype;
85e887ea33SDavid du Colombier 	ushort	file;
86e887ea33SDavid du Colombier 	vlong	value;
87e887ea33SDavid du Colombier 	long	sig;
88e887ea33SDavid du Colombier 	Sym*	link;
89e887ea33SDavid du Colombier };
90e887ea33SDavid du Colombier struct	Optab
91e887ea33SDavid du Colombier {
92e887ea33SDavid du Colombier 	short	as;
93e887ea33SDavid du Colombier 	uchar*	ytab;
9440d01547SDavid du Colombier 	ushort	prefix;
95e887ea33SDavid du Colombier 	uchar	op[20];
96e887ea33SDavid du Colombier };
97e887ea33SDavid du Colombier struct	Movtab
98e887ea33SDavid du Colombier {
99e887ea33SDavid du Colombier 	short	as;
100e887ea33SDavid du Colombier 	uchar	ft;
101e887ea33SDavid du Colombier 	uchar	tt;
102e887ea33SDavid du Colombier 	uchar	code;
103e887ea33SDavid du Colombier 	uchar	op[4];
104e887ea33SDavid du Colombier };
105e887ea33SDavid du Colombier 
106e887ea33SDavid du Colombier enum
107e887ea33SDavid du Colombier {
108e887ea33SDavid du Colombier 	STEXT		= 1,
109e887ea33SDavid du Colombier 	SDATA,
110e887ea33SDavid du Colombier 	SBSS,
111e887ea33SDavid du Colombier 	SDATA1,
112e887ea33SDavid du Colombier 	SXREF,
113e887ea33SDavid du Colombier 	SFILE,
114e887ea33SDavid du Colombier 	SCONST,
115e887ea33SDavid du Colombier 	SUNDEF,
116e887ea33SDavid du Colombier 
117e887ea33SDavid du Colombier 	SIMPORT,
118e887ea33SDavid du Colombier 	SEXPORT,
119e887ea33SDavid du Colombier 
120e887ea33SDavid du Colombier 	NHASH		= 10007,
121e887ea33SDavid du Colombier 	NHUNK		= 100000,
122e887ea33SDavid du Colombier 	MINSIZ		= 8,
123e887ea33SDavid du Colombier 	STRINGSZ	= 200,
124e887ea33SDavid du Colombier 	MINLC		= 1,
125*2ec6491fSDavid du Colombier 	MAXIO		= (16*1024),
126e887ea33SDavid du Colombier 	MAXHIST		= 20,				/* limit of path elements for history symbols */
127e887ea33SDavid du Colombier 
128e887ea33SDavid du Colombier 	Yxxx		= 0,
129e887ea33SDavid du Colombier 	Ynone,
130e887ea33SDavid du Colombier 	Yi0,
131e887ea33SDavid du Colombier 	Yi1,
132e887ea33SDavid du Colombier 	Yi8,
133e887ea33SDavid du Colombier 	Ys32,
134e887ea33SDavid du Colombier 	Yi32,
135e887ea33SDavid du Colombier 	Yi64,
136e887ea33SDavid du Colombier 	Yiauto,
137e887ea33SDavid du Colombier 	Yal,
138e887ea33SDavid du Colombier 	Ycl,
139e887ea33SDavid du Colombier 	Yax,
140e887ea33SDavid du Colombier 	Ycx,
141e887ea33SDavid du Colombier 	Yrb,
142e887ea33SDavid du Colombier 	Yrl,
143e887ea33SDavid du Colombier 	Yrf,
144e887ea33SDavid du Colombier 	Yf0,
145e887ea33SDavid du Colombier 	Yrx,
146e887ea33SDavid du Colombier 	Ymb,
147e887ea33SDavid du Colombier 	Yml,
148e887ea33SDavid du Colombier 	Ym,
149e887ea33SDavid du Colombier 	Ybr,
150e887ea33SDavid du Colombier 	Ycol,
151e887ea33SDavid du Colombier 
152e887ea33SDavid du Colombier 	Ycs,	Yss,	Yds,	Yes,	Yfs,	Ygs,
153e887ea33SDavid du Colombier 	Ygdtr,	Yidtr,	Yldtr,	Ymsw,	Ytask,
154e887ea33SDavid du Colombier 	Ycr0,	Ycr1,	Ycr2,	Ycr3,	Ycr4,	Ycr5,	Ycr6,	Ycr7,	Ycr8,
155e887ea33SDavid du Colombier 	Ydr0,	Ydr1,	Ydr2,	Ydr3,	Ydr4,	Ydr5,	Ydr6,	Ydr7,
156e887ea33SDavid du Colombier 	Ytr0,	Ytr1,	Ytr2,	Ytr3,	Ytr4,	Ytr5,	Ytr6,	Ytr7,	Yrl32,	Yrl64,
157e887ea33SDavid du Colombier 	Ymr, 	Ymm,
15840d01547SDavid du Colombier 	Yxr,	Yxm,	Yyr,	Yxyr,
159e887ea33SDavid du Colombier 	Ymax,
160e887ea33SDavid du Colombier 
161e887ea33SDavid du Colombier 	Zxxx		= 0,
162e887ea33SDavid du Colombier 
163e887ea33SDavid du Colombier 	Zlit,
164e887ea33SDavid du Colombier 	Z_rp,
165e887ea33SDavid du Colombier 	Zbr,
166e887ea33SDavid du Colombier 	Zcall,
167e887ea33SDavid du Colombier 	Zib_,
168e887ea33SDavid du Colombier 	Zib_rp,
169e887ea33SDavid du Colombier 	Zibo_m,
170e887ea33SDavid du Colombier 	Zibo_m_xm,
171e887ea33SDavid du Colombier 	Zil_,
172e887ea33SDavid du Colombier 	Zil_rp,
173e887ea33SDavid du Colombier 	Ziq_rp,
174e887ea33SDavid du Colombier 	Zilo_m,
175e887ea33SDavid du Colombier 	Ziqo_m,
176e887ea33SDavid du Colombier 	Zjmp,
177e887ea33SDavid du Colombier 	Zloop,
178e887ea33SDavid du Colombier 	Zo_iw,
179e887ea33SDavid du Colombier 	Zm_o,
180e887ea33SDavid du Colombier 	Zm_r,
181e887ea33SDavid du Colombier 	Zm_r_xm,
182e887ea33SDavid du Colombier 	Zm_r_i_xm,
183e887ea33SDavid du Colombier 	Zm_r_3d,
184e887ea33SDavid du Colombier 	Zm_r_xm_nr,
185e887ea33SDavid du Colombier 	Zr_m_xm_nr,
186e887ea33SDavid du Colombier 	Zibm_r,	/* mmx1,mmx2/mem64,imm8 */
187e887ea33SDavid du Colombier 	Zmb_r,
188e887ea33SDavid du Colombier 	Zaut_r,
189e887ea33SDavid du Colombier 	Zo_m,
190e887ea33SDavid du Colombier 	Zo_m64,
191e887ea33SDavid du Colombier 	Zpseudo,
192e887ea33SDavid du Colombier 	Zr_m,
193e887ea33SDavid du Colombier 	Zr_m_xm,
194e887ea33SDavid du Colombier 	Zr_m_i_xm,
195e887ea33SDavid du Colombier 	Zrp_,
196e887ea33SDavid du Colombier 	Z_ib,
197e887ea33SDavid du Colombier 	Z_il,
198e887ea33SDavid du Colombier 	Zm_ibo,
199e887ea33SDavid du Colombier 	Zm_ilo,
200e887ea33SDavid du Colombier 	Zib_rr,
201e887ea33SDavid du Colombier 	Zil_rr,
202e887ea33SDavid du Colombier 	Zclr,
203e887ea33SDavid du Colombier 	Zbyte,
204e887ea33SDavid du Colombier 	Zmax,
205e887ea33SDavid du Colombier 
206e887ea33SDavid du Colombier 	Px		= 0,
207e887ea33SDavid du Colombier 	P32		= 0x32,	/* 32-bit only */
208e887ea33SDavid du Colombier 	Pe		= 0x66,	/* operand escape */
209e887ea33SDavid du Colombier 	Pm		= 0x0f,	/* 2byte opcode escape */
210e887ea33SDavid du Colombier 	Pq		= 0xff,	/* both escape */
211e887ea33SDavid du Colombier 	Pb		= 0xfe,	/* byte operands */
212e887ea33SDavid du Colombier 	Pf2		= 0xf2,	/* xmm escape 1 */
213e887ea33SDavid du Colombier 	Pf3		= 0xf3,	/* xmm escape 2 */
21440d01547SDavid du Colombier 	Pm38	= 0x38,	/* 0f.38 opcode */
21540d01547SDavid du Colombier 	Pm3a	= 0x3a,	/* 0f.3a opcode */
216e887ea33SDavid du Colombier 	Pw		= 0x48,	/* Rex.w */
217e887ea33SDavid du Colombier 	Py		= 0x80,	/* defaults to 64-bit mode */
218e887ea33SDavid du Colombier 
21940d01547SDavid du Colombier 	P2		=	1<<9,	/* flag: two operand (avx only) */
22040d01547SDavid du Colombier 
221e887ea33SDavid du Colombier 	Rxf		= 1<<9,	/* internal flag for Rxr on from */
222e887ea33SDavid du Colombier 	Rxt		= 1<<8,	/* internal flag for Rxr on to */
223e887ea33SDavid du Colombier 	Rxw		= 1<<3,	/* =1, 64-bit operand size */
224e887ea33SDavid du Colombier 	Rxr		= 1<<2,	/* extend modrm reg */
225e887ea33SDavid du Colombier 	Rxx		= 1<<1,	/* extend sib index */
226e887ea33SDavid du Colombier 	Rxb		= 1<<0,	/* extend modrm r/m, sib base, or opcode reg */
227e887ea33SDavid du Colombier 
22840d01547SDavid du Colombier 	Vex2	= 0xc5,	/* 2-byte vex prefix */
22940d01547SDavid du Colombier 	Vex3	= 0xc4,	/* 3-byte vex prefix */
23040d01547SDavid du Colombier 
23140d01547SDavid du Colombier 	/* vex flags */
23240d01547SDavid du Colombier 	Vexr	= 1<<7,		/* byte 1, both */
23340d01547SDavid du Colombier 	Vexx	= 1<<6,		/* byte 1, 3-byte */
23440d01547SDavid du Colombier 	Vexb	= 1<<5,		/* byte 1, 3-byte */
23540d01547SDavid du Colombier 	Vexw	= 1<<7,		/* byte 2, 3-byte */
23640d01547SDavid du Colombier 	Vexl	= 1<<2,		/* 256-bit vector */
23740d01547SDavid du Colombier 
23840d01547SDavid du Colombier 	Vexnr	= 0xF<<3,	/* no reg */
23940d01547SDavid du Colombier 	Vexp0	= 0,		/* no SIMD prefix */
24040d01547SDavid du Colombier 	Vexp66	= 1,		/* prefix 66 */
24140d01547SDavid du Colombier 	Vexpf3	= 2,		/* prefix f3 */
24240d01547SDavid du Colombier 	Vexpf2	= 3,		/* prefix f2 */
24340d01547SDavid du Colombier 
24440d01547SDavid du Colombier 	Vex0f	= 1,		/* 0F opcode byte */
24540d01547SDavid du Colombier 	Vex0f38	= 2,		/* 0F 38 opcode bytes */
24640d01547SDavid du Colombier 	Vex0f3a	= 3,		/* 0F 3A opcode bytes */
24740d01547SDavid du Colombier 
248e887ea33SDavid du Colombier 	Roffset	= 22,		/* no. bits for offset in relocation address */
249e887ea33SDavid du Colombier 	Rindex	= 10,		/* no. bits for index in relocation address */
250e887ea33SDavid du Colombier };
251e887ea33SDavid du Colombier 
252e887ea33SDavid du Colombier EXTERN union
253e887ea33SDavid du Colombier {
254e887ea33SDavid du Colombier 	struct
255e887ea33SDavid du Colombier 	{
256e887ea33SDavid du Colombier 		char	obuf[MAXIO];			/* output buffer */
257e887ea33SDavid du Colombier 		uchar	ibuf[MAXIO];			/* input buffer */
258e887ea33SDavid du Colombier 	} u;
259e887ea33SDavid du Colombier 	char	dbuf[1];
260e887ea33SDavid du Colombier } buf;
261e887ea33SDavid du Colombier 
262e887ea33SDavid du Colombier #define	cbuf	u.obuf
263e887ea33SDavid du Colombier #define	xbuf	u.ibuf
264e887ea33SDavid du Colombier 
265e887ea33SDavid du Colombier #pragma	varargck	type	"A"	int
266e887ea33SDavid du Colombier #pragma	varargck	type	"A"	uint
267e887ea33SDavid du Colombier #pragma	varargck	type	"D"	Adr*
268e887ea33SDavid du Colombier #pragma	varargck	type	"P"	Prog*
269e887ea33SDavid du Colombier #pragma	varargck	type	"R"	int
27040d01547SDavid du Colombier #pragma	varargck	type	"R"	uint
271e887ea33SDavid du Colombier #pragma	varargck	type	"S"	char*
272e887ea33SDavid du Colombier 
273e887ea33SDavid du Colombier #pragma	varargck	argpos	diag 1
274e887ea33SDavid du Colombier 
275e887ea33SDavid du Colombier EXTERN	long	HEADR;
276e887ea33SDavid du Colombier EXTERN	long	HEADTYPE;
277e887ea33SDavid du Colombier EXTERN	vlong	INITDAT;
278e887ea33SDavid du Colombier EXTERN	long	INITRND;
279e887ea33SDavid du Colombier EXTERN	vlong	INITTEXT;
2808153b942SDavid du Colombier EXTERN	vlong	INITTEXTP;
281e887ea33SDavid du Colombier EXTERN	char*	INITENTRY;		/* entry point */
282e887ea33SDavid du Colombier EXTERN	Biobuf	bso;
283e887ea33SDavid du Colombier EXTERN	long	bsssize;
284e887ea33SDavid du Colombier EXTERN	int	cbc;
285e887ea33SDavid du Colombier EXTERN	char*	cbp;
286e887ea33SDavid du Colombier EXTERN	char*	pcstr;
287e887ea33SDavid du Colombier EXTERN	int	cout;
288e887ea33SDavid du Colombier EXTERN	Auto*	curauto;
289e887ea33SDavid du Colombier EXTERN	Auto*	curhist;
290e887ea33SDavid du Colombier EXTERN	Prog*	curp;
291e887ea33SDavid du Colombier EXTERN	Prog*	curtext;
292e887ea33SDavid du Colombier EXTERN	Prog*	datap;
293e887ea33SDavid du Colombier EXTERN	Prog*	edatap;
294e887ea33SDavid du Colombier EXTERN	vlong	datsize;
295e887ea33SDavid du Colombier EXTERN	char	debug[128];
296e887ea33SDavid du Colombier EXTERN	char	literal[32];
297e887ea33SDavid du Colombier EXTERN	Prog*	etextp;
298e887ea33SDavid du Colombier EXTERN	Prog*	firstp;
299e887ea33SDavid du Colombier EXTERN	uchar	fnuxi8[8];
300e887ea33SDavid du Colombier EXTERN	uchar	fnuxi4[4];
301e887ea33SDavid du Colombier EXTERN	Sym*	hash[NHASH];
302e887ea33SDavid du Colombier EXTERN	Sym*	histfrog[MAXHIST];
303e887ea33SDavid du Colombier EXTERN	int	histfrogp;
304e887ea33SDavid du Colombier EXTERN	int	histgen;
305e887ea33SDavid du Colombier EXTERN	char*	library[50];
306e887ea33SDavid du Colombier EXTERN	char*	libraryobj[50];
307e887ea33SDavid du Colombier EXTERN	int	libraryp;
308e887ea33SDavid du Colombier EXTERN	int	xrefresolv;
309e887ea33SDavid du Colombier EXTERN	char*	hunk;
310e887ea33SDavid du Colombier EXTERN	uchar	inuxi1[1];
311e887ea33SDavid du Colombier EXTERN	uchar	inuxi2[2];
312e887ea33SDavid du Colombier EXTERN	uchar	inuxi4[4];
313e887ea33SDavid du Colombier EXTERN	uchar	inuxi8[8];
314e887ea33SDavid du Colombier EXTERN	char	ycover[Ymax*Ymax];
315e887ea33SDavid du Colombier EXTERN	uchar*	andptr;
316e887ea33SDavid du Colombier EXTERN	uchar*	rexptr;
317e887ea33SDavid du Colombier EXTERN	uchar	and[30];
31840d01547SDavid du Colombier EXTERN	int	reg[D_XREG];
31940d01547SDavid du Colombier EXTERN	int	regrex[D_XREG+1];
320e887ea33SDavid du Colombier EXTERN	Prog*	lastp;
321e887ea33SDavid du Colombier EXTERN	long	lcsize;
322e887ea33SDavid du Colombier EXTERN	int	nerrors;
323e887ea33SDavid du Colombier EXTERN	long	nhunk;
324e887ea33SDavid du Colombier EXTERN	long	nsymbol;
325e887ea33SDavid du Colombier EXTERN	char*	noname;
326e887ea33SDavid du Colombier EXTERN	char*	outfile;
327e887ea33SDavid du Colombier EXTERN	vlong	pc;
328e887ea33SDavid du Colombier EXTERN	long	spsize;
329e887ea33SDavid du Colombier EXTERN	Sym*	symlist;
330e887ea33SDavid du Colombier EXTERN	long	symsize;
331e887ea33SDavid du Colombier EXTERN	Prog*	textp;
332e887ea33SDavid du Colombier EXTERN	vlong	textsize;
333e887ea33SDavid du Colombier EXTERN	long	thunk;
334e887ea33SDavid du Colombier EXTERN	int	version;
33540d01547SDavid du Colombier EXTERN	int	vexed;
336e887ea33SDavid du Colombier EXTERN	Prog	zprg;
337e887ea33SDavid du Colombier EXTERN	int	dtype;
338e887ea33SDavid du Colombier EXTERN	char*	paramspace;
339e887ea33SDavid du Colombier 
340e887ea33SDavid du Colombier EXTERN	Adr*	reloca;
341e887ea33SDavid du Colombier EXTERN	int	doexp, dlm;
342e887ea33SDavid du Colombier EXTERN	int	imports, nimports;
34340d01547SDavid du Colombier EXTERN	int	exports, nexports, allexport;
344e887ea33SDavid du Colombier EXTERN	char*	EXPTAB;
345e887ea33SDavid du Colombier EXTERN	Prog	undefp;
346e887ea33SDavid du Colombier 
347e887ea33SDavid du Colombier #define	UP	(&undefp)
348e887ea33SDavid du Colombier 
349e887ea33SDavid du Colombier extern	Optab	optab[];
350e887ea33SDavid du Colombier extern	Optab*	opindex[];
351e887ea33SDavid du Colombier extern	char*	anames[];
352e887ea33SDavid du Colombier 
353e887ea33SDavid du Colombier int	Aconv(Fmt*);
354e887ea33SDavid du Colombier int	Dconv(Fmt*);
355e887ea33SDavid du Colombier int	Pconv(Fmt*);
356e887ea33SDavid du Colombier int	Rconv(Fmt*);
357e887ea33SDavid du Colombier int	Sconv(Fmt*);
358e887ea33SDavid du Colombier void	addhist(long, int);
359b87cd620SDavid du Colombier void	addlibpath(char*);
360e887ea33SDavid du Colombier Prog*	appendp(Prog*);
361e887ea33SDavid du Colombier void	asmb(void);
362e887ea33SDavid du Colombier void	asmdyn(void);
363e887ea33SDavid du Colombier void	asmins(Prog*);
364e887ea33SDavid du Colombier void	asmlc(void);
365e887ea33SDavid du Colombier void	asmsp(void);
366e887ea33SDavid du Colombier void	asmsym(void);
367e887ea33SDavid du Colombier vlong	atolwhex(char*);
368e887ea33SDavid du Colombier Prog*	brchain(Prog*);
369e887ea33SDavid du Colombier Prog*	brloop(Prog*);
370e887ea33SDavid du Colombier void	buildop(void);
371e887ea33SDavid du Colombier void	cflush(void);
372e887ea33SDavid du Colombier void	ckoff(Sym*, long);
373e887ea33SDavid du Colombier Prog*	copyp(Prog*);
374e887ea33SDavid du Colombier double	cputime(void);
375e887ea33SDavid du Colombier void	datblk(long, long);
376e887ea33SDavid du Colombier void	diag(char*, ...);
377e887ea33SDavid du Colombier void	dodata(void);
378e887ea33SDavid du Colombier void	doinit(void);
379e887ea33SDavid du Colombier void	doprof1(void);
380e887ea33SDavid du Colombier void	doprof2(void);
381e887ea33SDavid du Colombier void	dostkoff(void);
382e887ea33SDavid du Colombier void	dynreloc(Sym*, ulong, int);
383e887ea33SDavid du Colombier vlong	entryvalue(void);
384e887ea33SDavid du Colombier void	errorexit(void);
385e887ea33SDavid du Colombier void	export(void);
386b87cd620SDavid du Colombier int	fileexists(char*);
387e887ea33SDavid du Colombier int	find1(long, int);
388e887ea33SDavid du Colombier int	find2(long, int);
389b87cd620SDavid du Colombier char*	findlib(char*);
390e887ea33SDavid du Colombier void	follow(void);
391e887ea33SDavid du Colombier void	gethunk(void);
392e887ea33SDavid du Colombier void	histtoauto(void);
393e887ea33SDavid du Colombier double	ieeedtod(Ieee*);
394e887ea33SDavid du Colombier long	ieeedtof(Ieee*);
395e887ea33SDavid du Colombier void	import(void);
39640d01547SDavid du Colombier int	isxyreg(int);
397e887ea33SDavid du Colombier void	ldobj(int, long, char*);
398e887ea33SDavid du Colombier void	loadlib(void);
399e887ea33SDavid du Colombier void	listinit(void);
4008153b942SDavid du Colombier void	llput(vlong v);
4018153b942SDavid du Colombier void	llputl(vlong v);
40240d01547SDavid du Colombier Sym*	lookup(char*, int);
403e887ea33SDavid du Colombier void	lput(long);
404e887ea33SDavid du Colombier void	lputl(long);
405e887ea33SDavid du Colombier void	main(int, char*[]);
406e887ea33SDavid du Colombier void	mkfwd(void);
407e887ea33SDavid du Colombier void*	mysbrk(ulong);
408e887ea33SDavid du Colombier void	nuxiinit(void);
409e887ea33SDavid du Colombier void	objfile(char*);
410e887ea33SDavid du Colombier int	opsize(Prog*);
411e887ea33SDavid du Colombier void	patch(void);
412e887ea33SDavid du Colombier Prog*	prg(void);
413e887ea33SDavid du Colombier void	readundefs(char*, int);
414e887ea33SDavid du Colombier int	relinv(int);
415e887ea33SDavid du Colombier long	reuse(Prog*, Sym*);
416e887ea33SDavid du Colombier vlong	rnd(vlong, vlong);
417e887ea33SDavid du Colombier void	span(void);
4188153b942SDavid du Colombier void	strnput(char*, int);
419e887ea33SDavid du Colombier void	undef(void);
420e887ea33SDavid du Colombier void	undefsym(Sym*);
421e887ea33SDavid du Colombier vlong	vaddr(Adr*);
4228153b942SDavid du Colombier void	wput(long);
4238153b942SDavid du Colombier void	wputl(long);
424e887ea33SDavid du Colombier void	xdefine(char*, int, vlong);
425e887ea33SDavid du Colombier void	xfol(Prog*);
426e887ea33SDavid du Colombier int	zaddr(uchar*, Adr*, Sym*[]);
427e887ea33SDavid du Colombier void	zerosig(char*);
428