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