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