On Apr 4, 2007, at 3:49, Luciano Miguel Ferreira Rocha wrote: > _syscall* is deprecated, syscall(2) is the real thing now. Yes, I saw that. But I don't think this is documented well enough. > My man gettid: > _syscall0(pid_t, gettid) > /* Using syscall(2) may be preferable; see intro(2) */ > > So they do reference syscall(2). The intro(2) man page talks mostly about the _syscall macros. Near the end of the man page, in the NOTES section, we find the following paragraphs: The preferred way to invoke system calls that glibc does not know about yet is via syscall(2). However, this mechanism can only be used if using a libc (such as glibc) that supports syscall(2), and if the <sys/syscall.h> header file contains the required SYS_foo definition. Otherwise, the use of a _syscall macro is required. Some architectures, notably ia64, do not provide the _syscall macros. On these architectures, syscall(2) must be used. So it boils down to this: On CentOS 4, to use gettid() you do this: _syscall0(pid_t, gettid) mytid = gettid() and on CentOS 5, you have to do this: pid_t gettid(void) { return syscall(__NR_gettid); } mytid = gettid(); or this: mytid = (pid_t)syscall(__NR_gettid); My only gripe is that the gettid man page should not refer to _sycall0 at all since it is not defined and just show the syscall() syntax directly. I realize this is not a CentOS issue, but rather an upstream issue. I still think they dropped the ball on this one, and if I had a support contract I would file a bug. Alfred