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