dynamic linking support for powerpc
[musl] / src / ldso / powerpc / start.s
index ac2c20c..08b5979 100644 (file)
@@ -1,22 +1,21 @@
-# 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      1f
+2:     .long   _DYNAMIC-2b
+1:     mflr    5
+       lwz     0, 0(5)
+       add     5, 0, 5
+       lwz     3, 0(1)
+       addi    4, 1, 4
+       addi    1, 1, -16
+       bl      __reloc_self
+
+       lwz     3, 16(1)
+       addi    4, 1, 20
        bl      __dynlink
-       cmpi    4, 0, 3, 1            # Check for a 1.
-       bne     4, .                   # Stay here
-       mtlr    3                      # Set the link address...
+       addi    1, 1, 16
+
+       mtlr    3
        li      3, 0
-       blr                             # and go.
-       .end    _start
-       .size   _start, .-_start
+       blr