summaryrefslogtreecommitdiff
path: root/src/ldso/powerpc/start.s
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-11-14 14:01:39 -0500
committerRich Felker <dalias@aerifal.cx>2012-11-14 14:01:39 -0500
commitc6d441e3a246370d9c459396ec22b096db93850e (patch)
treefa3d4a4ca03531ceab9e60abb50e37780fce60ed /src/ldso/powerpc/start.s
parentc4a35f8c2a4b1a7e62a4b9e5b2748fb4fbcace79 (diff)
parent1c8eb8bad791fe9d01d0d4ab77882db634fa933d (diff)
downloadmusl-c6d441e3a246370d9c459396ec22b096db93850e.tar.gz
Merge remote-tracking branch 'ppc-port/ppc-squashed'
Diffstat (limited to 'src/ldso/powerpc/start.s')
-rw-r--r--src/ldso/powerpc/start.s23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/ldso/powerpc/start.s b/src/ldso/powerpc/start.s
new file mode 100644
index 00000000..d2060e3d
--- /dev/null
+++ b/src/ldso/powerpc/start.s
@@ -0,0 +1,23 @@
+# FIXME : does not work, the small data array needs to be relocated.
+# see elfspec_ppc.pdf, page 76-84
+ .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.
+ lwz 3, 0(9) # and argc...
+ addi 4, 9, 4 # and argv ...
+ mtlr 0 # Clear the link register.
+ # Go to the musl dynamic linker entry point.
+ bl __dynlink
+ cmpi 4, 0, 3, 1 # Check for a 1.
+ bne 4, . # Stay here
+ mtlr 3 # Set the link address...
+ li 3, 0
+ blr # and go.
+ .end _start
+ .size _start, .-_start
+