dynamic linking support for powerpc
[musl] / src / ldso / powerpc / start.s
index d2060e3..08b5979 100644 (file)
@@ -1,23 +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
+       .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
+       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
+       addi    1, 1, 16
+
+       mtlr    3
+       li      3, 0
+       blr