I just spent 5 hours debugging my program and trying to figure out why the kernel overwrote my stack. I had to read the source code to realize that the real syscall took an additional 5th argument. Wrong signature: int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); Correct signature: int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options, struct rusage* rusage); The kernel man pages should not assume that the user is using glibc, or at least give enough information for developers to write their own, correct wrappers.
(In reply to Hannes Landeholm from comment #0) > I just spent 5 hours debugging my program and trying to figure out why the > kernel overwrote my stack. I had to read the source code to realize that the > real syscall took an additional 5th argument. > > Wrong signature: > int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options); > > Correct signature: > int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options, struct > rusage* rusage); > > The kernel man pages should not assume that the user is using glibc, or at > least give enough information for developers to write their own, correct > wrappers. To be precise, the page is documenting the POSIX waitid() interface (rather than glibc), but you are of course right that the page should make mention of the fifth argument. I've added some text on this. http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/?id=d8b13fb4d939978f02db3d49697cbccff2881a30 Cheers, Michael