By accident I noticed that the configure script for one of the gentoo
packages (I think maybe it was coreutils but I can't remember) gives
different results on ~x86 and ~amd64.
The script uses a "test for working nanosleep" that I've included below.
Could someone else compile the test and confirm that it returns 119 on
~amd64 instead of 0?
Here are the steps if you don't already know them:
1. Copy and paste the c code below into a new file named conftest.c
2. # gcc conftest.c
3. # ./a.out (don't forget that leading dot)
4. # echo $? (this should print either 0 or 119)
I get 119 on ~amd64, which implies the test for nanosleep fails.
Thanks!
Here are the contents of conftest.c:
#include <errno.h>
#include <limits.h>
#include <signal.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
#define TYPE_MAXIMUM(t) ((t) (! TYPE_SIGNED (t) ? (t) -1 : ~ (~ (t) 0
<< (sizeof (t) * CHAR_BIT - 1))))
static void
check_for_SIGALRM (int sig)
{
if (sig != SIGALRM)
_exit (1);
}
int
main ()
{
static struct timespec ts_sleep;
static struct timespec ts_remaining;
static struct sigaction act;
if (! nanosleep)
return 1;
act.sa_handler = check_for_SIGALRM;
sigemptyset (&act.sa_mask);
sigaction (SIGALRM, &act, NULL);
ts_sleep.tv_sec = 0;
ts_sleep.tv_nsec = 1;
alarm (1);
if (nanosleep (&ts_sleep, NULL) != 0)
return 1;
ts_sleep.tv_sec = TYPE_MAXIMUM (time_t);
ts_sleep.tv_nsec = 999999999;
alarm (1);
if (nanosleep (&ts_sleep, &ts_remaining) == -1 && errno == EINTR
&& TYPE_MAXIMUM (time_t) - 10 < ts_remaining.tv_sec)
return 0;
return 119;
}