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