xref: /plan9-contrib/sys/src/cmd/ld/ld.h (revision 2ec6491f4460014c01f3ea5c06b30b1a392b0bb2)
1 #include	<u.h>
2 #include	<libc.h>
3 #include	<bio.h>
4 #include	"../ld/elf.h"
5 
6 typedef vlong int64;
7 
8 /*
9  * basic types in all loaders
10  */
11 
12 typedef	struct	Adr	Adr;
13 typedef	struct	Auto	Auto;
14 typedef	struct	Count	Count;
15 typedef	struct	Ieee	Ieee;
16 typedef	struct	Prog	Prog;
17 typedef	struct	Sym	Sym;
18 
19 #ifndef	EXTERN
20 #define	EXTERN	extern
21 #endif
22 
23 #define	LIBNAMELEN	300
24 
25 #define	P		((Prog*)0)
26 #define	S		((Sym*)0)
27 #define	TNAME		(curtext&&curtext->from.sym?curtext->from.sym->name:noname)
28 
29 struct	Auto
30 {
31 	Sym*	asym;
32 	Auto*	link;
33 	vlong	aoffset;
34 	short	type;
35 };
36 
37 struct	Count
38 {
39 	long	count;
40 	long	outof;
41 };
42 
43 enum
44 {
45 
46 	STRINGSZ	= 200,
47 	NHASH		= 10007,
48 	NHUNK		= 100000,
49 	MAXIO		= 16*1024,
50 	MAXHIST		= 20,	/* limit of path elements for history symbols */
51 };
52 
53 #define SIGNINTERN	(1729*325*1729)	/* signature of internal functions such as _div */
54 
55 EXTERN union
56 {
57 	struct
58 	{
59 		uchar	obuf[MAXIO];			/* output buffer */
60 		uchar	ibuf[MAXIO];			/* input buffer */
61 	} u;
62 	char	dbuf[1];
63 } buf;
64 
65 #define	cbuf	u.obuf
66 #define	xbuf	u.ibuf
67 
68 EXTERN	int	cbc;
69 EXTERN	uchar*	cbp;
70 EXTERN	int	cout;
71 EXTERN	char	debug[128];
72 EXTERN	char	fnuxi4[4];
73 EXTERN	char	fnuxi8[8];
74 EXTERN	Sym*	hash[NHASH];
75 EXTERN	Sym*	histfrog[MAXHIST];
76 EXTERN	int	histfrogp;
77 EXTERN	int	histgen;
78 EXTERN	char*	library[50];
79 EXTERN	char*	libraryobj[50];
80 EXTERN	int	libraryp;
81 EXTERN	int	xrefresolv;
82 EXTERN	char	inuxi1[1];
83 EXTERN	char	inuxi2[2];
84 EXTERN	char	inuxi4[4];
85 EXTERN	uchar	inuxi8[8];
86 EXTERN	char*	thestring;
87 EXTERN	char	thechar;
88 
89 EXTERN	int	doexp, dlm;
90 EXTERN	int	imports, nimports;
91 EXTERN	int	exports, nexports;
92 EXTERN	char*	EXPTAB;
93 EXTERN	Prog	undefp;
94 
95 #define	UP	(&undefp)
96 
97 int	Sconv(Fmt*);
98 void	addhist(long, int);
99 void	addlib(char*);
100 void	addlibpath(char*);
101 void	addlibroot(void);
102 vlong	atolwhex(char*);
103 Prog*	brchain(Prog*);
104 Prog*	brloop(Prog*);
105 void	cflush(void);
106 void	ckoff(Sym*, long);
107 void	collapsefrog(Sym*);
108 void	cput(int);
109 void	diag(char*, ...);
110 void	errorexit(void);
111 double	cputime(void);
112 void	dodata(void);
113 void	export(void);
114 int	fileexists(char*);
115 int	find1(long, int);
116 char*	findlib(char*);
117 char*	findlib(char*);
118 void	follow(void);
119 void	gethunk(void);
120 long	hunkspace(void);
121 uchar*	readsome(int, uchar*, uchar*, uchar*, int);
122 void* halloc(usize);
123 void	histtoauto(void);
124 double	ieeedtod(Ieee*);
125 long	ieeedtof(Ieee*);
126 void	import(void);
127 int	isobjfile(char*);
128 void	loadlib(void);
129 Sym*	lookup(char*, int);
130 void	mkfwd(void);
131 void*	mysbrk(ulong);
132 void	nopstat(char*, Count*);
133 void	objfile(char*);
134 void	patch(void);
135 void	prasm(Prog*);
136 Prog*	prg(void);
137 void	readundefs(char*, int);
138 uchar*	readsome(int, uchar*, uchar*, uchar*, int);
139 void	readundefs(char*, int);
140 vlong	rnd(vlong, long);
141 void	strnput(char*, int);
142 void	undef(void);
143 void	undefsym(Sym*);
144 void	xdefine(char*, int, vlong);
145 void	xfol(Prog*);
146 void	zerosig(char*);
147 
148 #pragma	varargck	type	"A"	int
149 #pragma	varargck	type	"A"	uint
150 #pragma	varargck	type	"C"	int
151 #pragma	varargck	type	"D"	Adr*
152 #pragma	varargck	type	"N"	Adr*
153 #pragma	varargck	type	"P"	Prog*
154 #pragma	varargck	type	"S"	char*
155 
156 #pragma	varargck	argpos	diag 1
157