summaryrefslogtreecommitdiff
path: root/crt/powerpc
diff options
context:
space:
mode:
authorrofl0r <retnyg@gmx.net>2012-11-09 23:36:55 +0100
committerrofl0r <retnyg@gmx.net>2012-11-13 19:12:25 +0100
commit1c8eb8bad791fe9d01d0d4ab77882db634fa933d (patch)
treed3faf83663c1383f7ea16a0e6c68b3e2f4cc968a /crt/powerpc
parent7669d1e334e6b96455eece78da43bf830b93d697 (diff)
downloadmusl-1c8eb8bad791fe9d01d0d4ab77882db634fa933d.tar.gz
PPC port cleaned up, static linking works well now.
Diffstat (limited to 'crt/powerpc')
-rw-r--r--crt/powerpc/crt1.s26
1 files changed, 26 insertions, 0 deletions
diff --git a/crt/powerpc/crt1.s b/crt/powerpc/crt1.s
new file mode 100644
index 00000000..7025430c
--- /dev/null
+++ b/crt/powerpc/crt1.s
@@ -0,0 +1,26 @@
+ .weak _init
+ .weak _fini
+ .global _start
+ .type _start, %function
+_start:
+ mr 9, 1 # Save the original stack pointer.
+ clrrwi 1, 1, 4 # Align the stack to 16 bytes.
+ lis 13, _SDA_BASE_@ha # r13 points to the small data area.
+ addi 13, 13, _SDA_BASE_@l
+ li 0, 0 # Zero the frame pointer.
+ stwu 1, -16(1) # The initial stack frame.
+ mtlr 0 # Clear the link register.
+ stw 0, 0(1) # And save it.
+ lis 3, main@ha # Get main() ...
+ addi 3, 3, main@l
+ lwz 4, 0(9) # and argc...
+ addi 5, 9, 4 # and argv ...
+ lis 6, _init@ha # and _init() ...
+ addi 6, 6, _init@l
+ lis 7, _fini@ha # and _fini() ...
+ addi 7, 7, _fini@l
+ li 8, 0 # ldso_fini == NULL
+ bl __libc_start_main # Let's go!
+ b . # Never gets here.
+ .end _start
+ .size _start, .-_start