diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-05-27 14:49:55 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-05-27 14:49:55 -0400 |
commit | b94608ca10051e7911250aaa53f1435b0512018c (patch) | |
tree | fdd14adf3025dbd0929551706f3ed516bee85515 /src/ldso/i386 | |
parent | 054ba185999d29f6ae9a8e19549da95f783655b6 (diff) | |
download | musl-b94608ca10051e7911250aaa53f1435b0512018c.tar.gz musl-b94608ca10051e7911250aaa53f1435b0512018c.tar.bz2 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.s | 13 |
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 |