crt1 must align stack pointer on mips
authorRich Felker <dalias@aerifal.cx>
Sat, 18 Aug 2012 01:23:10 +0000 (21:23 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 18 Aug 2012 01:23:10 +0000 (21:23 -0400)
it's naturally aligned when entered with the kernel argv array, but if
ld.so has been invoked explicitly to run a program, the stack will not
be aligned due to having thrown away argv[0].

crt/mips/crt1.s

index bdb7c1a759288756f69621e8ac239437d7b60878..093d7d562afe7a06d723116d97ffa08235384e56 100644 (file)
@@ -14,6 +14,7 @@ _start:
        lw      $5, ($sp)                # Get argc...
        addu    $6, $sp, 4               # and argv ...
        lw      $7, %call16(_init)($gp)  # and _init() ...
+       and     $sp, $sp, -8             # Align the stack pointer to 8 bytes
        addi    $sp, $sp, -4*6           # Leave space for arguments 0..3, arg4, and arg5.
        lw      $12, %call16(_fini)($gp) # and _fini() ...
        sw      $12, 4*4($sp)            # Save arg4.