Rick, could you, please, provide me with the test program you used for the syscall check ?
I don't really know anything about this, but it looks fine to me.
The only change is uint32_t replaces size_t, which makes sense to 32bits.
(I'm guessing this is only used for amd64, where "int" and "unsigned int"
Hopefully brooks can review this, but if not, I'll click reviewed in a few days.
Why is a shim required? All arguments are extended to 64-bits as part of the combat layer. There would be an issue if len were an off_t, but it's a size_t. The only pointers point to off_t's which are always 64-bit and thus require no special handling.