diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
| commit | 37da2899f40661e3e9631e497da8dc59b971cbd0 (patch) | |
| tree | cbc6d4680e347d906f5fa7fca73214418741df72 /include/dynld.h | |
| parent | 54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff) | |
20060303a
Diffstat (limited to 'include/dynld.h')
| -rw-r--r-- | include/dynld.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/include/dynld.h b/include/dynld.h new file mode 100644 index 00000000..de02cb02 --- /dev/null +++ b/include/dynld.h @@ -0,0 +1,44 @@ +/* uncomment these lines when installed in /sys/include */ +/* +#pragma src "/sys/src/libdynld" +#pragma lib "libdynld.a" +*/ + +typedef struct Dynobj Dynobj; +typedef struct Dynsym Dynsym; + +struct Dynobj +{ + ulong size; /* total size in bytes */ + ulong text; /* bytes of text */ + ulong data; /* bytes of data */ + ulong bss; /* bytes of bss */ + uchar* base; /* start of text, data, bss */ + int nexport; + Dynsym* export; /* export table */ + int nimport; + Dynsym** import; /* import table */ +}; + +/* + * this structure is known to the linkers + */ +struct Dynsym +{ + ulong sig; + ulong addr; + char *name; +}; + +extern Dynsym* dynfindsym(char*, Dynsym*, int); +extern void dynfreeimport(Dynobj*); +extern void* dynimport(Dynobj*, char*, ulong); +extern int dynloadable(void*, long (*r)(void*,void*,long), vlong(*sk)(void*,vlong,int)); +extern Dynobj* dynloadfd(int, Dynsym*, int, ulong); +extern Dynobj* dynloadgen(void*, long (*r)(void*,void*,long), vlong (*s)(void*,vlong,int), void (*e)(char*), Dynsym*, int, ulong); +extern long dynmagic(void); +extern void dynobjfree(Dynobj*); +extern char* dynreloc(uchar*, ulong, int, Dynsym**, int); +extern int dyntabsize(Dynsym*); + +extern Dynsym _exporttab[]; /* created by linker -x (when desired) */ |
