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