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
_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
http://lists.centos.org/mailman/listinfo/centos