[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: coreutils-6.0: numerous test failures on MacOS X
From: |
Bruno Haible |
Subject: |
Re: coreutils-6.0: numerous test failures on MacOS X |
Date: |
Mon, 28 Aug 2006 15:02:28 +0200 |
User-agent: |
KMail/1.9.1 |
> > + dd iflag=nofollow if=dd-sym.20477 count=0
> > + fail=1
> > ...
> > It seems that the nofollow test doesn't work?
>
> What does ktrace tell you about the system calls that were executed?
> I assume MacOS X has ktrace?
>
> cd src
> ln -s dd.c sym
> ktrace ./dd iflag=nofollow if=sym count=0
> kdump
Mine says:
8552 dd CALL open(0xbffffb57,0x100,0)
8552 dd NAMI "sym"
8552 dd RET open 0
and 0x100 is indeed the value of O_NOFOLLOW in <sys/fcntl.h>. So it appears
that O_NOFOLLOW exists but has no effect.
Shouldn't be too hard to write a configure against it.
> Your email didn't mention tail/tail-tests after that
$ VERBOSE=yes make check
...
passed obs-plus-c1(_POSIX2_VERSION=199209:F)
passed obs-plus-c1(_POSIX2_VERSION=199209:|)
passed obs-plus-c1(_POSIX2_VERSION=199209:<)
passed obs-plus-c2(_POSIX2_VERSION=199209:F)
passed obs-plus-c2(_POSIX2_VERSION=199209:|)
passed obs-plus-c2(_POSIX2_VERSION=199209:<)
passed obs-c3(F)
passed obs-c3(|)
passed obs-c3(<)
passed obs-c4(F)
passed obs-c4(|)
passed obs-c4(<)
passed obs-c5(F)
passed obs-c5(|)
passed obs-c5(<)
passed obs-l1(F)
passed obs-l1(|)
passed obs-l1(<)
passed obs-l2(F)
passed obs-l2(|)
passed obs-l2(<)
passed obs-l3(F)
passed obs-l3(|)
passed obs-l3(<)
passed obs-plus-l4(_POSIX2_VERSION=199209:F)
passed obs-plus-l4(_POSIX2_VERSION=199209:|)
passed obs-plus-l4(_POSIX2_VERSION=199209:<)
passed obs-plus-l5(_POSIX2_VERSION=199209:F)
passed obs-plus-l5(_POSIX2_VERSION=199209:|)
passed obs-plus-l5(_POSIX2_VERSION=199209:<)
passed obs-1(F)
passed obs-1(|)
passed obs-1(<)
passed obs-2(F)
passed obs-2(|)
passed obs-2(<)
passed obs-3(F)
passed obs-3(|)
passed obs-3(<)
passed obs-plus-4(_POSIX2_VERSION=199209:F)
passed obs-plus-4(_POSIX2_VERSION=199209:|)
passed obs-plus-4(_POSIX2_VERSION=199209:<)
passed obs-plus-5(_POSIX2_VERSION=199209:F)
passed obs-plus-5(_POSIX2_VERSION=199209:|)
passed obs-plus-5(_POSIX2_VERSION=199209:<)
passed obs-plus-x1(_POSIX2_VERSION=199209:F)
passed obs-plus-x1(_POSIX2_VERSION=199209:|)
passed obs-plus-x1(_POSIX2_VERSION=199209:<)
passed obs-plus-x2(_POSIX2_VERSION=199209:F)
passed obs-plus-x2(_POSIX2_VERSION=199209:|)
passed obs-plus-x2(_POSIX2_VERSION=199209:<)
passed obs-l(F)
passed obs-l(|)
passed obs-l(<)
passed obs-b(F)
passed obs-b(|)
passed obs-b(<)
passed err-1(|)
passed err-1(<)
passed err-2(F)
passed err-2(|)
passed err-2(<)
passed err-3(|)
passed err-3(<)
passed err-4(F)
passed err-4(|)
passed err-4(<)
passed err-5(F)
passed err-5(|)
passed err-5(<)
passed err-6(_POSIX2_VERSION=200112:F)
passed err-6(_POSIX2_VERSION=200112:|)
passed err-6(_POSIX2_VERSION=200112:<)
passed minus-1(_POSIX2_VERSION=199209:|)
passed minus-1(_POSIX2_VERSION=199209:<)
passed minus-2(_POSIX2_VERSION=199209:|)
passed minus-2(_POSIX2_VERSION=199209:<)
passed c-2(_POSIX2_VERSION=200112:F)
passed c-2(_POSIX2_VERSION=200112:|)
passed c-2(_POSIX2_VERSION=200112:<)
passed c-2-minus(F)
passed c-2-minus(|)
passed c-2-minus(<)
passed c2(F)
passed c2(|)
passed c2(<)
passed c2-minus(F)
passed c2-minus(|)
passed c2-minus(<)
passed n-1(F)
passed n-1(|)
passed n-1(<)
passed n-2(F)
passed n-2(|)
passed n-2(<)
passed n-3(F)
passed n-3(|)
passed n-3(<)
passed n-4(F)
passed n-4(|)
passed n-4(<)
passed n-4a(F)
passed n-4a(|)
passed n-4a(<)
passed n-5(F)
passed n-5(|)
passed n-5(<)
passed n-5a(F)
passed n-5a(|)
passed n-5a(<)
passed n-5b(F)
passed n-5b(|)
passed n-5b(<)
The process that hangs has the command line "tail -f -n 1". The debugger
backtrace is:
#0 0x9647f808 in clock_sleep_trap ()
#1 0x9647a9f8 in nanosleep ()
#2 0x00008dc8 in xnanosleep (seconds=0) at xnanosleep.c:101
#3 0x000046b0 in tail_forever (f=0x300930, nfiles=1, sleep_interval=1) at
tail.c:1105
#4 0x0000595c in main (argc=999999999, argv=0x1) at tail.c:1689
In frame #2:
(gdb) print ts_sleep
$1 = {
tv_sec = 1,
tv_nsec = 0
}
Single-stepping with "next" yields a loop in tail.c:
988 bool any_input = false;
(gdb)
990 for (i = 0; i < nfiles; i++)
(gdb)
998 if (f[i].ignore)
(gdb)
1001 if (f[i].fd < 0)
(gdb)
1008 name = pretty_name (&f[i]);
(gdb)
1011 if (f[i].blocking != blocking)
(gdb)
1008 name = pretty_name (&f[i]);
(gdb)
1009 mode = f[i].mode;
(gdb)
1011 if (f[i].blocking != blocking)
(gdb)
1033 if (!f[i].blocking)
(gdb)
1083 bytes_read = dump_remainder (name, fd,
(gdb)
1086 any_input |= (bytes_read != 0);
(gdb)
1087 f[i].size += bytes_read;
(gdb)
990 for (i = 0; i < nfiles; i++)
(gdb)
1090 if (! any_live_files (f, nfiles) && ! reopen_inaccessible_files)
(gdb)
1096 if ((!any_input | blocking) && fflush (stdout) != 0)
(gdb)
1100 if (!any_input)
(gdb)
1102 if (writer_is_dead)
(gdb)
1105 if (xnanosleep (sleep_interval))
(gdb)
1110 writer_is_dead = (pid != 0
(gdb)
988 bool any_input = false;
(gdb)
990 for (i = 0; i < nfiles; i++)
(gdb)
998 if (f[i].ignore)
(gdb)
1001 if (f[i].fd < 0)
(gdb)
1008 name = pretty_name (&f[i]);
(gdb)
1011 if (f[i].blocking != blocking)
(gdb)
1008 name = pretty_name (&f[i]);
(gdb)
1009 mode = f[i].mode;
(gdb)
1011 if (f[i].blocking != blocking)
(gdb)
1033 if (!f[i].blocking)
(gdb)
1083 bytes_read = dump_remainder (name, fd,
(gdb)
1086 any_input |= (bytes_read != 0);
(gdb)
1087 f[i].size += bytes_read;
(gdb)
990 for (i = 0; i < nfiles; i++)
(gdb)
1090 if (! any_live_files (f, nfiles) && ! reopen_inaccessible_files)
(gdb)
1096 if ((!any_input | blocking) && fflush (stdout) != 0)
(gdb)
1100 if (!any_input)
(gdb)
1102 if (writer_is_dead)
(gdb)
1105 if (xnanosleep (sleep_interval))
(gdb)
1110 writer_is_dead = (pid != 0
Bruno