On 03/24/2015 05:55 PM, Brian Gerst wrote: >>> Might be nice to place a more generic description there, which >>> registers are expected to be saved by user-space calling in here, etc. >> >> __kernel_vsyscall entry point has the same ABI in any 32-bit vDSO, >> the good old int 0x80 calling convention: >> >> syscall# in eax, >> params in ebx/ecx/edx/esi/edi/ebp, >> all registers are preserved by the syscall. >> >> (I think we don't guarantee that all flags are preserved: >> I have a testcase where DF gets cleared). > > DF should always be clear on any function call per the C ABI. But, > eflags should be preserved, at least the non-privileged bits. I'd > like to see that testcase. The testcase is a simplistic example of how to find and use 32-bit vDSO to perform system calls. It also sets flags.DF before syscall, and checks whether registers are preserved, including flags.DF. On 32-bit kernel (on Intel CPU, where vDSO uses SYSENTER), I see this: $ ./test32_syscall_vdso Result:1 whereas on 64-bit it is ./test32_syscall_vdso Result:0 "Result:1" means that DF was cleared. See attached source.