summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-aout/md-prologue.c
diff options
context:
space:
mode:
authorpaul <paul@FreeBSD.org>1993-11-03 23:41:59 +0000
committerpaul <paul@FreeBSD.org>1993-11-03 23:41:59 +0000
commit66fdbc00cfad3be604d07da78b916f4c04f96dbc (patch)
treeae9c655d7f7352058dd703d580c1f70430c1e5f7 /libexec/rtld-aout/md-prologue.c
parent7f9e326f196003559252a070bd773ee08a76b244 (diff)
downloadFreeBSD-src-66fdbc00cfad3be604d07da78b916f4c04f96dbc.zip
FreeBSD-src-66fdbc00cfad3be604d07da78b916f4c04f96dbc.tar.gz
Imported NetBSD's ld for shared libs.
Diffstat (limited to 'libexec/rtld-aout/md-prologue.c')
-rw-r--r--libexec/rtld-aout/md-prologue.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/libexec/rtld-aout/md-prologue.c b/libexec/rtld-aout/md-prologue.c
new file mode 100644
index 0000000..dae455e
--- /dev/null
+++ b/libexec/rtld-aout/md-prologue.c
@@ -0,0 +1,39 @@
+/*
+ * rtld entry pseudo code - turn into assembler and tweak it
+ */
+
+#include <sys/types.h>
+#include <sys/types.h>
+#include <a.out.h>
+#include "link.h"
+#include "md.h"
+
+extern long _GOT_[];
+extern void (*rtld)();
+extern void (*binder())();
+
+void
+rtld_entry(version, crtp)
+int version;
+struct crt *crtp;
+{
+ register struct link_dynamic *dp;
+ register void (*f)();
+
+ /* __DYNAMIC is first entry in GOT */
+ dp = (struct link_dynamic *) (_GOT_[0]+crtp->crt_ba);
+
+ f = (void (*)())((long)rtld + crtp->crt_ba);
+ (*f)(version, crtp, dp);
+}
+
+void
+binder_entry()
+{
+ extern int PC;
+ struct jmpslot *sp;
+ void (*func)();
+
+ func = binder(PC, sp->reloc_index & 0x003fffff);
+ (*func)();
+}
OpenPOWER on IntegriCloud