From Olaf Hering:

I should have looked earlier at this spec. This patch is required to
not overwrite the argv[0].

The stack is linked and a new function will write its address into the
previous frame. If _start doesnt adjust the stack, __libc_init will
write its address to elfdata+4 which is argv[0].
This patch allocates just one frame to avoid this corruption.

diff --git a/klibc/arch/ppc/crt0.S b/klibc/arch/ppc/crt0.S
index 861c8e7..8577682 100644
--- a/klibc/arch/ppc/crt0.S
+++ b/klibc/arch/ppc/crt0.S
@@ -7,7 +7,8 @@
 	.type _start,@function
 	.globl _start
 _start:
-	mr	3,1
+	stwu	1,-16(1)
+	addi	3,1,16
 	li	4,0
 	bl	__libc_init