Seebs <se...@seebs.net> writes: >> >> Since the man page gave the ia64 example, I went and checked, and >> >> it is indeed the case that calls other than syscall(2) will >> >> clobber r10 after system calls, >> >> I think you are misinterpreting the man-page. In "Architecture >> calling conventions" it documents the calling convention into the >> kernel. syscall(2) itself is an ordinary function which has to >> follow the userspace ABI; after jumping into the kernel and setting >> 'errno' in error case, it restores registers as needed. > > I don't think this is what it's talking about.
Perhaps we have different man pages but e.g. [1] mentions only registers in the context of the kernel interface but not when entering/leaving syscall(2) itself. >> Some ABIs allow functions to clobber registers (they are not restored >> after leaving the function and do not carry a return value); e.g. on >> ARM, these are r0-r3 and r12. That's probably the case for r10 in >> ia64 too. > > Maybe you missed the previous message where I pointed out that this > behavior is, at least on MIPS, an explicit step taken by glibc's > syscall implementation (and many other system calls). When, then this is completely undocumented and a glibc-only thing. Other implementations[2] follow the behavior described in the man page and do not set some magic registers on return. I did not found the glibc syscall implementation for MIPS atm. Enrico Footnotes: [1] http://man7.org/linux/man-pages/man2/syscall.2.html [2] https://android.googlesource.com/platform/bionic/+/ae5c3dd73844e6a9e1a14dbf893eab5142902f18/libc/arch-mips/syscalls/syscall.S https://github.com/ops-class/os161/blob/master/userland/lib/libc/arch/mips/syscalls-mips.S https://github.com/m-labs/uclibc-lm32/blob/master/libc/sysdeps/linux/mips/syscall.S -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core