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