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