about summary refs log tree commit diff
path: root/src/ldso/i386
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-05-27 14:49:55 -0400
committerRich Felker <dalias@aerifal.cx>2012-05-27 14:49:55 -0400
commitb94608ca10051e7911250aaa53f1435b0512018c (patch)
treefdd14adf3025dbd0929551706f3ed516bee85515 /src/ldso/i386
parent054ba185999d29f6ae9a8e19549da95f783655b6 (diff)
downloadmusl-b94608ca10051e7911250aaa53f1435b0512018c.tar.gz
musl-b94608ca10051e7911250aaa53f1435b0512018c.tar.xz
musl-b94608ca10051e7911250aaa53f1435b0512018c.zip
cleanup dynamic linker start code cruft
two actual issues: one is that __dynlink no longer wants/needs a GOT
pointer argument, so the code to generate that argument can be
removed. the other issue was that in the i386 code, argc/argv were
being loaded into registers that would be call-clobbered, then copied
to preserved registers, rather than just being loaded into the proper
call-preserved registers to begin with.

this cleanup is in preparation for adding new dynamic linker
functionality (ability to explicitly invoke the dynamic linker to run
a program).
Diffstat (limited to 'src/ldso/i386')
-rw-r--r--src/ldso/i386/start.s13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/ldso/i386/start.s b/src/ldso/i386/start.s
index 8e6a777d..f6d49291 100644
--- a/src/ldso/i386/start.s
+++ b/src/ldso/i386/start.s
@@ -2,16 +2,13 @@
 .global _start
 _start:
 	xor %ebp,%ebp
-	pop %ecx
-	mov %esp,%eax
+	pop %edi
+	mov %esp,%esi
 	and $-16,%esp
-	mov %eax,%esi
-	mov %ecx,%edi
 	push %ebp
-	call 1f
-1:	addl $_GLOBAL_OFFSET_TABLE_,(%esp)
-	push %eax
-	push %ecx
+	push %ebp
+	push %esi
+	push %edi
 	call __dynlink
 	mov %esi,%esp
 	push %edi