The mips clone3 (sysdeps/unix/sysv/linux/mips/clone3.S) does not take in consideration that the cprestore might generate the gp save on the stack (so clone3 must allocate some space before issuing the syscall) and $8 is not guarantee by the kABI to be preserved after the syscall.
commit bbd248ac0d75efdef8fe61ea69b1fb25fb95b6e7 Author: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Thu Feb 1 14:29:53 2024 -0300 mips: FIx clone3 implementation (BZ 31325) For o32 we need to setup a minimal stack frame to allow cprestore on __thread_start_clone3 (which instruct the linker to save the gp for PIC). Also, there is no guarantee by kABI that $8 will be preserved after syscall execution, so we need to save it on the provided stack. Checked on mipsel-linux-gnu. Reported-by: Khem Raj <raj.khem@gmail.com> Tested-by: Khem Raj <raj.khem@gmail.com>