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