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