xref: /plan9-contrib/sys/src/cmd/ld/ld.h (revision 2ec6491f4460014c01f3ea5c06b30b1a392b0bb2)
140d01547SDavid du Colombier #include	<u.h>
240d01547SDavid du Colombier #include	<libc.h>
340d01547SDavid du Colombier #include	<bio.h>
440d01547SDavid du Colombier #include	"../ld/elf.h"
540d01547SDavid du Colombier 
640d01547SDavid du Colombier typedef vlong int64;
740d01547SDavid du Colombier 
840d01547SDavid du Colombier /*
940d01547SDavid du Colombier  * basic types in all loaders
1040d01547SDavid du Colombier  */
1140d01547SDavid du Colombier 
1240d01547SDavid du Colombier typedef	struct	Adr	Adr;
1340d01547SDavid du Colombier typedef	struct	Auto	Auto;
1440d01547SDavid du Colombier typedef	struct	Count	Count;
1540d01547SDavid du Colombier typedef	struct	Ieee	Ieee;
1640d01547SDavid du Colombier typedef	struct	Prog	Prog;
1740d01547SDavid du Colombier typedef	struct	Sym	Sym;
1840d01547SDavid du Colombier 
1940d01547SDavid du Colombier #ifndef	EXTERN
2040d01547SDavid du Colombier #define	EXTERN	extern
2140d01547SDavid du Colombier #endif
2240d01547SDavid du Colombier 
2340d01547SDavid du Colombier #define	LIBNAMELEN	300
2440d01547SDavid du Colombier 
2540d01547SDavid du Colombier #define	P		((Prog*)0)
2640d01547SDavid du Colombier #define	S		((Sym*)0)
2740d01547SDavid du Colombier #define	TNAME		(curtext&&curtext->from.sym?curtext->from.sym->name:noname)
2840d01547SDavid du Colombier 
2940d01547SDavid du Colombier struct	Auto
3040d01547SDavid du Colombier {
3140d01547SDavid du Colombier 	Sym*	asym;
3240d01547SDavid du Colombier 	Auto*	link;
3340d01547SDavid du Colombier 	vlong	aoffset;
3440d01547SDavid du Colombier 	short	type;
3540d01547SDavid du Colombier };
3640d01547SDavid du Colombier 
3740d01547SDavid du Colombier struct	Count
3840d01547SDavid du Colombier {
3940d01547SDavid du Colombier 	long	count;
4040d01547SDavid du Colombier 	long	outof;
4140d01547SDavid du Colombier };
4240d01547SDavid du Colombier 
4340d01547SDavid du Colombier enum
4440d01547SDavid du Colombier {
4540d01547SDavid du Colombier 
4640d01547SDavid du Colombier 	STRINGSZ	= 200,
4740d01547SDavid du Colombier 	NHASH		= 10007,
4840d01547SDavid du Colombier 	NHUNK		= 100000,
49*2ec6491fSDavid du Colombier 	MAXIO		= 16*1024,
5040d01547SDavid du Colombier 	MAXHIST		= 20,	/* limit of path elements for history symbols */
5140d01547SDavid du Colombier };
5240d01547SDavid du Colombier 
5340d01547SDavid du Colombier #define SIGNINTERN	(1729*325*1729)	/* signature of internal functions such as _div */
5440d01547SDavid du Colombier 
5540d01547SDavid du Colombier EXTERN union
5640d01547SDavid du Colombier {
5740d01547SDavid du Colombier 	struct
5840d01547SDavid du Colombier 	{
5940d01547SDavid du Colombier 		uchar	obuf[MAXIO];			/* output buffer */
6040d01547SDavid du Colombier 		uchar	ibuf[MAXIO];			/* input buffer */
6140d01547SDavid du Colombier 	} u;
6240d01547SDavid du Colombier 	char	dbuf[1];
6340d01547SDavid du Colombier } buf;
6440d01547SDavid du Colombier 
6540d01547SDavid du Colombier #define	cbuf	u.obuf
6640d01547SDavid du Colombier #define	xbuf	u.ibuf
6740d01547SDavid du Colombier 
6840d01547SDavid du Colombier EXTERN	int	cbc;
6940d01547SDavid du Colombier EXTERN	uchar*	cbp;
7040d01547SDavid du Colombier EXTERN	int	cout;
7140d01547SDavid du Colombier EXTERN	char	debug[128];
7240d01547SDavid du Colombier EXTERN	char	fnuxi4[4];
7340d01547SDavid du Colombier EXTERN	char	fnuxi8[8];
7440d01547SDavid du Colombier EXTERN	Sym*	hash[NHASH];
7540d01547SDavid du Colombier EXTERN	Sym*	histfrog[MAXHIST];
7640d01547SDavid du Colombier EXTERN	int	histfrogp;
7740d01547SDavid du Colombier EXTERN	int	histgen;
7840d01547SDavid du Colombier EXTERN	char*	library[50];
7940d01547SDavid du Colombier EXTERN	char*	libraryobj[50];
8040d01547SDavid du Colombier EXTERN	int	libraryp;
8140d01547SDavid du Colombier EXTERN	int	xrefresolv;
8240d01547SDavid du Colombier EXTERN	char	inuxi1[1];
8340d01547SDavid du Colombier EXTERN	char	inuxi2[2];
8440d01547SDavid du Colombier EXTERN	char	inuxi4[4];
8540d01547SDavid du Colombier EXTERN	uchar	inuxi8[8];
8640d01547SDavid du Colombier EXTERN	char*	thestring;
8740d01547SDavid du Colombier EXTERN	char	thechar;
8840d01547SDavid du Colombier 
8940d01547SDavid du Colombier EXTERN	int	doexp, dlm;
9040d01547SDavid du Colombier EXTERN	int	imports, nimports;
9140d01547SDavid du Colombier EXTERN	int	exports, nexports;
9240d01547SDavid du Colombier EXTERN	char*	EXPTAB;
9340d01547SDavid du Colombier EXTERN	Prog	undefp;
9440d01547SDavid du Colombier 
9540d01547SDavid du Colombier #define	UP	(&undefp)
9640d01547SDavid du Colombier 
9740d01547SDavid du Colombier int	Sconv(Fmt*);
9840d01547SDavid du Colombier void	addhist(long, int);
9940d01547SDavid du Colombier void	addlib(char*);
10040d01547SDavid du Colombier void	addlibpath(char*);
10140d01547SDavid du Colombier void	addlibroot(void);
10240d01547SDavid du Colombier vlong	atolwhex(char*);
10340d01547SDavid du Colombier Prog*	brchain(Prog*);
10440d01547SDavid du Colombier Prog*	brloop(Prog*);
10540d01547SDavid du Colombier void	cflush(void);
10640d01547SDavid du Colombier void	ckoff(Sym*, long);
10740d01547SDavid du Colombier void	collapsefrog(Sym*);
10840d01547SDavid du Colombier void	cput(int);
10940d01547SDavid du Colombier void	diag(char*, ...);
11040d01547SDavid du Colombier void	errorexit(void);
11140d01547SDavid du Colombier double	cputime(void);
11240d01547SDavid du Colombier void	dodata(void);
11340d01547SDavid du Colombier void	export(void);
11440d01547SDavid du Colombier int	fileexists(char*);
11540d01547SDavid du Colombier int	find1(long, int);
11640d01547SDavid du Colombier char*	findlib(char*);
11740d01547SDavid du Colombier char*	findlib(char*);
11840d01547SDavid du Colombier void	follow(void);
11940d01547SDavid du Colombier void	gethunk(void);
12040d01547SDavid du Colombier long	hunkspace(void);
12140d01547SDavid du Colombier uchar*	readsome(int, uchar*, uchar*, uchar*, int);
12240d01547SDavid du Colombier void* halloc(usize);
12340d01547SDavid du Colombier void	histtoauto(void);
12440d01547SDavid du Colombier double	ieeedtod(Ieee*);
12540d01547SDavid du Colombier long	ieeedtof(Ieee*);
12640d01547SDavid du Colombier void	import(void);
12740d01547SDavid du Colombier int	isobjfile(char*);
12840d01547SDavid du Colombier void	loadlib(void);
12940d01547SDavid du Colombier Sym*	lookup(char*, int);
13040d01547SDavid du Colombier void	mkfwd(void);
13140d01547SDavid du Colombier void*	mysbrk(ulong);
13240d01547SDavid du Colombier void	nopstat(char*, Count*);
13340d01547SDavid du Colombier void	objfile(char*);
13440d01547SDavid du Colombier void	patch(void);
13540d01547SDavid du Colombier void	prasm(Prog*);
13640d01547SDavid du Colombier Prog*	prg(void);
13740d01547SDavid du Colombier void	readundefs(char*, int);
13840d01547SDavid du Colombier uchar*	readsome(int, uchar*, uchar*, uchar*, int);
13940d01547SDavid du Colombier void	readundefs(char*, int);
14040d01547SDavid du Colombier vlong	rnd(vlong, long);
14140d01547SDavid du Colombier void	strnput(char*, int);
14240d01547SDavid du Colombier void	undef(void);
14340d01547SDavid du Colombier void	undefsym(Sym*);
14440d01547SDavid du Colombier void	xdefine(char*, int, vlong);
14540d01547SDavid du Colombier void	xfol(Prog*);
14640d01547SDavid du Colombier void	zerosig(char*);
14740d01547SDavid du Colombier 
14840d01547SDavid du Colombier #pragma	varargck	type	"A"	int
14940d01547SDavid du Colombier #pragma	varargck	type	"A"	uint
15040d01547SDavid du Colombier #pragma	varargck	type	"C"	int
15140d01547SDavid du Colombier #pragma	varargck	type	"D"	Adr*
15240d01547SDavid du Colombier #pragma	varargck	type	"N"	Adr*
15340d01547SDavid du Colombier #pragma	varargck	type	"P"	Prog*
15440d01547SDavid du Colombier #pragma	varargck	type	"S"	char*
15540d01547SDavid du Colombier 
15640d01547SDavid du Colombier #pragma	varargck	argpos	diag 1
157