Hi Zhangjin,
On Tue, Jul 25, 2023 at 07:02:55PM +0800, Zhangjin Wu wrote:
Btw, have checked "=r" instead of "=a" works on i386 too for we already bind the _ret variable with "RET" register, but still need to check if "=a" is necessary?
I need to tell you that syscall6() for i386 can't use "r" and "=r" because there was a historical bug that made GCC stuck in a loop forever when compiling the nolibc code. It's already fixed in the latest version of GCC, but we should still support older compilers.
Ref: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105032
I discovered that bug in 2022 in the latest version of GCC at that time, so it's pretty new, and those buggy versions are very likely still in the wild today.