Remix.run Logo
▲ bkallus 8 hours ago

On x86_64 and x32, the syscall number goes in eax, not rax. The upper 32 bits of rax are ignored and can be anything.

▲guitmz 7 hours ago | parent [-]

Good catch, thanks! Since 5.14 (I think?) the kernel only reads eax (before that it used all of rax and returned ENOSYS if the upper half wasn't zero), so I'm adding a note about it to the x64 and x32 conventions

▲bkallus 7 hours ago | parent [-]

According to [1], the kernel has flip-flopped a few times on this, but the original behavior was to ignore the upper 32 bits.

[1] https://lore.kernel.org/all/20210518191303.4135296-5-hpa@zyt...