summaryrefslogtreecommitdiff
path: root/include/dynld.h
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
commit37da2899f40661e3e9631e497da8dc59b971cbd0 (patch)
treecbc6d4680e347d906f5fa7fca73214418741df72 /include/dynld.h
parent54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff)
20060303a
Diffstat (limited to 'include/dynld.h')
-rw-r--r--include/dynld.h44
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) */