On 04/17/16 23:14, Andy Lutomirski wrote: >> >> It's not "weird", it is the ABI as defined. We have to do this for all >> the system call arguments, too; you just don't notice it because the >> compiler does it for us. Some other architectures, e.g. s390, has the >> opposite convention where the caller is responsible for normalizing the >> result; in that case we have to do it *again* in the kernel, which is >> one of the major reasons for the SYSCALL_*() macros. > > What ABI? >
The C ABI for int. I hadn't seen the below, because I think syscall(3) is just braindamaged, but the odds are that if we'd ever use the upper 32 bits for anything we'd be in a world of hurt, so that would be highly theoretical IMO. Bit 31 might be possible, but I wouldn't really want to brave it unless we really have no choice. > Also, the behavior in which fail the syscall if any high bits are set > is faster -- it's one fewer instruction. Admittedly, the CPU can > probably do that instruction for free, but still... Yes, it can; at least on any remotely modern hardware. -hpa