about summary refs log tree commit diff
path: root/src/ldso/i386
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-06-18 19:48:42 -0400
committerRich Felker <dalias@aerifal.cx>2011-06-18 19:48:42 -0400
commit51e2d8310222ddd4d4e895f55c627100d863aa95 (patch)
treed64c18bacc3fc0609abc2d88d6d336f84d3e4e74 /src/ldso/i386
parentd43ff110bcb258df61448d21da3b1a89088388f6 (diff)
downloadmusl-51e2d8310222ddd4d4e895f55c627100d863aa95.tar.gz
musl-51e2d8310222ddd4d4e895f55c627100d863aa95.tar.xz
musl-51e2d8310222ddd4d4e895f55c627100d863aa95.zip
experimental dynamic linker!
some notes:
- library search path is hard coded
- x86_64 code is untested and may not work
- dlopen/dlsym is not yet implemented
- relocations in read-only memory won't work
Diffstat (limited to 'src/ldso/i386')
-rw-r--r--src/ldso/i386/start.s19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/ldso/i386/start.s b/src/ldso/i386/start.s
new file mode 100644
index 00000000..47c2748b
--- /dev/null
+++ b/src/ldso/i386/start.s
@@ -0,0 +1,19 @@
+.text
+.global _start
+_start:
+	xorl %ebp,%ebp
+	popl %ecx
+	movl %esp,%eax
+	andl $-16,%esp
+	movl %eax,%esi
+	movl %ecx,%edi
+	pushl %ebp
+	call 1f
+1:	addl $_GLOBAL_OFFSET_TABLE_,(%esp)
+	pushl %eax
+	pushl %ecx
+	call __dynlink
+	movl %esi,%esp
+	pushl %edi
+	xorl %edx,%edx
+	jmp *%eax