Messages in this thread | | | From | Ammar Faizi <> | Date | Wed, 13 Oct 2021 10:34:39 +0700 | Subject | Re: [PATCH] tools/nolibc: x86: Remove `r8`, `r9` and `r10` from the clobber list |
| |
On Wed, Oct 13, 2021 at 10:32 AM Ammar Faizi <ammar.faizi@students.amikom.ac.id> wrote: > > On Wed, Oct 13, 2021 at 10:01 AM Willy Tarreau <w@1wt.eu> wrote: > > > > On Wed, Oct 13, 2021 at 05:23:11AM +0700, Ammar Faizi wrote: > > > According to x86-64 ABI about syscall section A.2 AMD64 Linux Kernel > > > Conventions, A.2.1 Calling Conventions [1]: > > > > > > 1) User-level applications use as integer registers for passing the > > > sequence %rdi, %rsi, %rdx, %rcx, %r8 and %r9. The kernel interface > > > uses %rdi, %rsi, %rdx, %r10, %r8 and %r9. > > > > > > 2) A system-call is done via the syscall instruction. The kernel > > > destroys registers %rcx and %r11. > > > > > > 3) The number of the syscall has to be passed in register %rax. > > > > > > 4) System-calls are limited to six arguments, no argument is passed > > > directly on the stack. > > > > > > 5) Returning from the syscall, register %rax contains the result of > > > the system-call. A value in the range between -4095 and -1 > > > indicates an error, it is -errno. > > > > > > 6) Only values of class INTEGER or class MEMORY are passed to the > > > kernel. > > > > > > From (2), (5) and (6), we can conclude that Linux x86-64 syscall only > > > clobbers rax, rcx and r11 (and "memory"). > > > > > > - rax for the return value. > > > - rcx to save the return address. > > > - r11 to save the rflags. > > > > > > Other registers are preserved. Right? > > > > I totally agree, and this doc is perfectly clear on this. I think it > > would be worth updating the comments in calling.h to reference this > > document and remind these rules, given that they're not trivial to > > figure from the code itself. > > > > Alright, I will wire up patch v2 for this :-) >
Not for calling.h, nolibc.h I mean.
| |