提交 b94608ca 编写于 作者: R Rich Felker

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).
上级 054ba185
......@@ -3,12 +3,9 @@
_start:
ldr r0,[sp]
add r1,sp,#4
ldr r2,2f
add r2,pc,r2
1: bl __dynlink
bl __dynlink
mov r1,r0
mov r0,#0
tst r1,#1
moveq pc,r1
bx r1
2: .word _GLOBAL_OFFSET_TABLE_ - 1b - 4
......@@ -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
......
......@@ -3,7 +3,6 @@
_start:
mov (%rsp),%rdi
lea 8(%rsp),%rsi
lea _GLOBAL_OFFSET_TABLE_(%rip),%rdx
call __dynlink
xor %edx,%edx
jmp *%rax
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册