diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ldso/powerpc/start.s | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/src/ldso/powerpc/start.s b/src/ldso/powerpc/start.s index ac2c20c8..08b5979a 100644 --- a/src/ldso/powerpc/start.s +++ b/src/ldso/powerpc/start.s @@ -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 |