Package: eglibc
Version: 2.10.2-6
Severity: normal

While trying to debug bug #570689, I noticed some inconsistencies how functions epoll_create1 and epoll_create2 are handled on sparc and alpha architectures:


1. In contrast to all other architectures, <sys/epoll.h> declares epoll_create2() rather epoll_create1(). However, this function is not defined anywhere:

$ cat tmp.c #include <sys/epoll.h>
int main(int argc, char **argv)
{
  epoll_create2(42, EPOLL_CLOEXEC);
  return 0;
}

$ gcc -Wall tmp.c /tmp/ccymThnY.o: In function `main':
tmp.c:(.text+0x14): undefined reference to `epoll_create2'
collect2: ld returned 1 exit status


2. Conversely, the epoll_create1 symbol is defined, but not declared anywhere within headers:

$ cat tmp.c #include <sys/epoll.h>
int main(int argc, char **argv)
{
  epoll_create1(EPOLL_CLOEXEC);
  return 0;
}

$ gcc -Wall tmp.c tmp.c: In function ‘main’:
tmp.c:4: warning: implicit declaration of function ‘epoll_create1’

$ nm -D a.out | grep epoll
         U epoll_create1


3. epoll_create1() always fails with errno=ENOSYS (which is fine per se), but on sparc __stub_epoll_create1 is not defined. (It *is* defined on alpha, however.)

--
Jakub Wilk

Attachment: signature.asc
Description: Digital signature

Reply via email to