-
Ammar Faizi authored
On i386, the 6th argument of syscall goes in %ebp. However, both Clang and GCC cannot use %ebp in the clobber list and in the "r" constraint without using -fomit-frame-pointer. To make it always available for any kind of compilation, the below workaround is implemented. 1) Push the 6-th argument. 2) Push %ebp. 3) Load the 6-th argument from 4(%esp) to %ebp. 4) Do the syscall (int $0x80). 5) Pop %ebp (restore the old value of %ebp). 6) Add %esp by 4 (undo the stack pointer). Cc: x86@kernel.org Cc: llvm@lists.linux.dev Link: https://lore.kernel.org/lkml/2e335ac54db44f1d8496583d97f9dab0@AcuMS.aculab.comSuggested-by:
David Laight <David.Laight@ACULAB.COM> Acked-by:
Willy Tarreau <w@1wt.eu> Signed-off-by:
Ammar Faizi <ammarfaizi2@gnuweeb.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
f4738ff7