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