xref: /inferno-os/include/dynld.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /* uncomment these lines when installed in /sys/include */
2*37da2899SCharles.Forsyth /*
3*37da2899SCharles.Forsyth #pragma src "/sys/src/libdynld"
4*37da2899SCharles.Forsyth #pragma	lib	"libdynld.a"
5*37da2899SCharles.Forsyth */
6*37da2899SCharles.Forsyth 
7*37da2899SCharles.Forsyth typedef struct Dynobj Dynobj;
8*37da2899SCharles.Forsyth typedef struct Dynsym Dynsym;
9*37da2899SCharles.Forsyth 
10*37da2899SCharles.Forsyth struct Dynobj
11*37da2899SCharles.Forsyth {
12*37da2899SCharles.Forsyth 	ulong	size;		/* total size in bytes */
13*37da2899SCharles.Forsyth 	ulong	text;		/* bytes of text */
14*37da2899SCharles.Forsyth 	ulong	data;		/* bytes of data */
15*37da2899SCharles.Forsyth 	ulong	bss;		/* bytes of bss */
16*37da2899SCharles.Forsyth 	uchar*	base;	/* start of text, data, bss */
17*37da2899SCharles.Forsyth 	int	nexport;
18*37da2899SCharles.Forsyth 	Dynsym*	export;	/* export table */
19*37da2899SCharles.Forsyth 	int	nimport;
20*37da2899SCharles.Forsyth 	Dynsym**	import;	/* import table */
21*37da2899SCharles.Forsyth };
22*37da2899SCharles.Forsyth 
23*37da2899SCharles.Forsyth /*
24*37da2899SCharles.Forsyth  * this structure is known to the linkers
25*37da2899SCharles.Forsyth  */
26*37da2899SCharles.Forsyth struct Dynsym
27*37da2899SCharles.Forsyth {
28*37da2899SCharles.Forsyth 	ulong	sig;
29*37da2899SCharles.Forsyth 	ulong	addr;
30*37da2899SCharles.Forsyth 	char	*name;
31*37da2899SCharles.Forsyth };
32*37da2899SCharles.Forsyth 
33*37da2899SCharles.Forsyth extern Dynsym*	dynfindsym(char*, Dynsym*, int);
34*37da2899SCharles.Forsyth extern void	dynfreeimport(Dynobj*);
35*37da2899SCharles.Forsyth extern void*	dynimport(Dynobj*, char*, ulong);
36*37da2899SCharles.Forsyth extern int	dynloadable(void*, long (*r)(void*,void*,long), vlong(*sk)(void*,vlong,int));
37*37da2899SCharles.Forsyth extern Dynobj*	dynloadfd(int, Dynsym*, int, ulong);
38*37da2899SCharles.Forsyth extern Dynobj*	dynloadgen(void*, long (*r)(void*,void*,long), vlong (*s)(void*,vlong,int), void (*e)(char*), Dynsym*, int, ulong);
39*37da2899SCharles.Forsyth extern long	dynmagic(void);
40*37da2899SCharles.Forsyth extern void	dynobjfree(Dynobj*);
41*37da2899SCharles.Forsyth extern char*	dynreloc(uchar*, ulong, int, Dynsym**, int);
42*37da2899SCharles.Forsyth extern int	dyntabsize(Dynsym*);
43*37da2899SCharles.Forsyth 
44*37da2899SCharles.Forsyth extern Dynsym	_exporttab[];	/* created by linker -x (when desired) */
45