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