1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <bits/asm.h>
.weak _init
.weak _fini
.global _start
.type _start, %function
_start:
mr r9, r1 // Save the original stack pointer.
clrrwi r1, r1, 4 // Align the stack to 16 bytes.
lis r13, _SDA_BASE_@ha // r13 points to the small data area.
addi r13, r13, _SDA_BASE_@l //
li r0, 0 // Zero the frame pointer.
stwu r1, -16(r1) // The initial stack frame.
mtlr r0 // Clear the link register.
stw r0, 0(r1) // And save it.
lis r3, main@ha // Get main() ...
addi r3, r3, main@l
lwz r4, 0(r9) // and argc...
addi r5, r9, 4 // and argv ...
lis r6, _init@ha // and _init() ...
addi r6, r6, _init@l
lis r7, _fini@ha // and _fini() ...
addi r7, r7, _fini@l
li r8, 0 // ldso_fini == NULL
bl __libc_start_main // Let's go!
b . // Never gets here.
.end _start
.size _start, .-_start
|