about summary refs log tree commit diff
path: root/src/ldso/ppc/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/ldso/ppc/start.S')
-rw-r--r--src/ldso/ppc/start.S22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/ldso/ppc/start.S b/src/ldso/ppc/start.S
new file mode 100644
index 00000000..f3419824
--- /dev/null
+++ b/src/ldso/ppc/start.S
@@ -0,0 +1,22 @@
+#include <bits/asm.h>
+        .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.
+        lwz     r3, 0(r9)               // and argc...
+        addi    r4, r9, 4               // and argv ...
+        mtlr    r0                      // Clear the link register.
+        // Go to the musl dynamic linker entry point.
+        bl      __dynlink
+        cmpi    r4, 0, r3, 1            // Check for a 1.
+        bne     r4, .                   // Stay here
+        mtlr    r3                      // Set the link address...
+        li      r3, 0
+        blr                             // and go.
+        .end    _start
+        .size   _start, .-_start
+