# 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
-
+ 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
- .global _longjmp
- .global longjmp
- .type _longjmp,@function
- .type longjmp,@function
+ .global _longjmp
+ .global longjmp
+ .type _longjmp,@function
+ .type longjmp,@function
_longjmp:
longjmp:
# void longjmp(jmp_buf env, int val);
- .global __restore
- .type __restore,%function
+ .global __restore
+ .type __restore,%function
__restore:
- li 0, 119 #__NR_sigreturn
- sc
+ li 0, 119 #__NR_sigreturn
+ sc
- .global __restore_rt
- .type __restore_rt,%function
+ .global __restore_rt
+ .type __restore_rt,%function
__restore_rt:
- li 0, 172 # __NR_rt_sigreturn
- sc
+ li 0, 172 # __NR_rt_sigreturn
+ sc