Paul Eggert wrote, On 01/22/2013 02:01 AM:
> Thanks, to help debug that can you please try the following
> shell commands? The idea is to run the newly-built "rm" in
> a directory that is not readable.
>
> cd coreutils-8.20/src
> D=$(pwd)
> mkdir -p a/1 b c d/2 e/3
> cd c
> chmod u=x,go= .
> ktrace -o /tmp/tr $D/rm -r $D/a $D/b
> kdump /tmp/tr
>
> The "ktrace" should get a trace of the system calls executed
> by the failing "rm", and the "kdump" should generate a printable
> output of that.
ktrace/kdump are not available any more on Mac OS X (since 10.5).
I found "dtruss" - but got into a catch-22:
1. Running 'rm' as-is gives error:
$ $D/rm -r $D/a $D/b
/Users/admin/Projects/coreutils-8.20.90-e27bfd/src/rm: unable to record
current working directory: Too many open files
2. Running with 'dtruss' requires root:
$ dtruss $D/rm -r $D/a $D/b
dtrace: failed to initialize dtrace: DTrace requires additional privileges
3. Running with 'sudo', 'rm' doesn't fail:
$ sudo dtruss $D/rm -r $D/a $D/b 2>/tmp/rm_trace.txt
[ $D/a and $D/b are deleted ]
Attached is the "rm_trace.txt" file, but it won't show failure...
I'm not familiar with MacOS, so any suggestions are welcomed.
Pádraig:
running "make check" in gnulib-test directory failed 8 tests (attached).
I can try instrumentations and other tests, but please tell me how to run them.
-gordon
SYSCALL(args) = return
madvise(0x7FFF8AC18000, 0x2000, 0x5) = 0 0
open("/dev/dtracehelper\0", 0x2, 0x7FFF5FC45200) = 3 0
ioctl(0x3, 0x80086804, 0x7FFF5FBFD4F0) = 0 0
close(0x3) = 0 0
stat64("/usr/lib/libstdc++.6.dylib\0", 0x7FFF5FBFC900, 0x7FFF5FBFCF40)
= 0 0
open("/dev/dtracehelper\0", 0x2, 0x7FFF5FC452C8) = 3 0
ioctl(0x3, 0x80086804, 0x7FFF5FBFD4F0) = 0 0
close(0x3) = 0 0
__sysctl(0x7FFF5FBFD3E0, 0x2, 0x7FFF5FBFD3D0) = 0 0
bsdthread_register(0x7FFF805E8E7C, 0x7FFF805C9A98, 0x2000) = 0 0
thread_selfid(0x7FFF805E8E7C, 0x7FFF805C9A98, 0x0) = 629779 0
open_nocancel("/dev/urandom\0", 0x0, 0x7FFF700F8C00) = 3 0
read_nocancel(0x3,
"\25422\365p\2578e\222\374~\241\020\001\215\265?\036JM\377\357\276\263\346^J\272\303\250\343\211\247\325VdZ\320F\373\346\326\364\356?\374\315\366\313\376\035-\025\332\271g\210\272\2551!&\271\305\0",
0x40) = 64 0
close_nocancel(0x3) = 0 0
mmap(0x0, 0x3000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001) =
0x25000 0
__sysctl(0x7FFF5FBFD260, 0x2, 0x7FFF5FBFD220) = 0 0
__sysctl(0x7FFF5FBFD220, 0x2, 0x7FFF5FBFD2B8) = 0 0
getpid(0x7FFF5FBFD1B0, 0x7FFFFFE00050, 0x0) = 36891 0
open_nocancel("/dev/urandom\0", 0x0, 0x0) = 3 0
read_nocancel(0x3, ".^\3241ql^\322\331\246d\243\361/S
\200/\223\006\204\254g\357AZ\326|\246\236Ui\031\273\203\220;\204|\344\367mO`e\213\245^\335\240\251yEh$\264\247\335P\325G\264Q\364\340\207\330S-\226g\363\223@S\213\310v\306>\251I\265\030\361\2540\331V\264\374\254\333b\315d\241\277\236\271\240m\267\336+\016\314n\0",
0x6C) = 108 0
close_nocancel(0x3) = 0 0
__sysctl(0x7FFF5FBFD260, 0x2, 0x7FFF5FBFD28C) = 0 0
mmap(0x0, 0x17000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001) =
0x28000 0
mmap(0x0, 0x17000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001) =
0x3F000 0
mmap(0x0, 0x1000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001) =
0x56000 0
mmap(0x0, 0x200000, 0x3, 0x1002, 0x7000000, 0x7FFF00000001) =
0x57000 0
munmap(0x100057000, 0xA9000) = 0 0
munmap(0x100200000, 0x57000) = 0 0
__sysctl(0x7FFF5FBFD3C0, 0x2, 0x7FFF5FBFD380) = 0 0
__sysctl(0x7FFF5FBFD380, 0x2, 0x7FFF701057A0) = 0 0
__sysctl(0x7FFF5FBFD3C0, 0x2, 0x7FFF5FBFD380) = 0 0
__sysctl(0x7FFF5FBFD380, 0x2, 0x7FFF701057A4) = 0 0
__sysctl(0x7FFF5FBFD3C0, 0x2, 0x7FFF5FBFD380) = 0 0
__sysctl(0x7FFF5FBFD380, 0x2, 0x7FFF701057A8) = 0 0
mmap(0x0, 0x3000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001) =
0x57000 0
__sysctl(0x7FFF5FBFD390, 0x2, 0x7FFF5FBFD350) = 0 0
__sysctl(0x7FFF5FBFD350, 0x2, 0x7FFF5FBFD3E8) = 0 0
__sysctl(0x7FFF5FBFD390, 0x2, 0x7FFF5FBFD3BC) = 0 0
mmap(0x0, 0x17000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001) =
0x5A000 0
mmap(0x0, 0x17000, 0x3, 0x1002, 0x1000000, 0x7FFF00000001) =
0x71000 0
mmap(0x0, 0x200000, 0x3, 0x1002, 0x7000000, 0x7FFF00000001) =
0x200000 0
munmap(0x100300000, 0x100000) = 0 0
ioctl(0x0, 0x4004667A, 0x7FFF5FBFF6FC) = 0 0
lstat64("/\0", 0x7FFF5FBFF6C8, 0x0) = 0 0
open(".\0", 0x0, 0x0) = 3 0
close(0x3) = 0 0
mmap(0x0, 0x1000000, 0x3, 0x1002, 0x2000000, 0x7FFF00000000) =
0x300000 0
munmap(0x100300000, 0x500000) = 0 0
munmap(0x101000000, 0x300000) = 0 0
lstat64("/Users/admin/Projects/coreutils-8.20.90-e27bfd/src/a\0", 0x100100280,
0x100100280) = 0 0
open("/Users/admin/Projects/coreutils-8.20.90-e27bfd/src/a\0", 0x120104, 0x0)
= 3 0
dup(0x3, 0xFFFFFFFF, 0x0) = 4 0
close(0x3) = 0 0
open("/proc/self/fd\0", 0x120004, 0x10001060F) = -1 Err#2
dup(0x4, 0x120004, 0xFFFFFFFFFFFFFFFF) = 3 0
close(0x4) = 0 0
open(".\0", 0x0, 0x0) = 4 0
fcntl(0x4, 0x1, 0x0) = 0 0
fcntl(0x4, 0x2, 0x1) = 0 0
dup(0x3, 0xFFFFFFFF, 0x7FFF5FBFF5C8) = 5 0
close(0x3) = 0 0
fchdir(0x5, 0xFFFFFFFF, 0x0) = 0 0
open_nocancel(".\0", 0x100004, 0x0) = 3 0
fcntl_nocancel(0x3, 0x2, 0x1) = 0 0
__sysctl(0x7FFF5FBFE7E0, 0x2, 0x7FFF700FD738) = 0 0
fstatfs64(0x3, 0x7FFF5FBFE830, 0x0) = 0 0
fchdir(0x4, 0x10010053, 0x0) = 0 0
close(0x5) = 0 0
close(0x4) = 0 0
getdirentries64(0x3, 0x100800600, 0x1000) = 76 0
close_nocancel(0x3) = 0 0
geteuid(0x3, 0x100100000, 0x0) = 0 0
open("/Users/admin/Projects/coreutils-8.20.90-e27bfd/src/a\0", 0x120104, 0x0)
= 3 0
fcntl(0x3, 0x1, 0x0) = 0 0
fcntl(0x3, 0x2, 0x1) = 0 0
dup(0x3, 0xFFFFFFFF, 0x0) = 4 0
close(0x3) = 0 0
dup(0x4, 0x4, 0x10001060F) = 3 0
close(0x4) = 0 0
open(".\0", 0x0, 0x0) = 4 0
fcntl(0x4, 0x1, 0x0) = 0 0
fcntl(0x4, 0x2, 0x1) = 0 0
dup(0x3, 0xFFFFFFFF, 0x7FFF5FBFF5D8) = 5 0
close(0x3) = 0 0
fchdir(0x5, 0xFFFFFFFF, 0x0) = 0 0
open_nocancel(".\0", 0x100004, 0x0) = 3 0
fcntl_nocancel(0x3, 0x2, 0x1) = 0 0
fstatfs64(0x3, 0x7FFF5FBFE840, 0xA) = 0 0
fchdir(0x4, 0x10010053, 0x0) = 0 0
close(0x5) = 0 0
close(0x4) = 0 0
fcntl(0x3, 0x0, 0x3) = 4 0
fcntl(0x4, 0x1, 0x0) = 0 0
fcntl(0x4, 0x2, 0x1) = 0 0
getdirentries64(0x3, 0x100800600, 0x1000) = 76 0
getdirentries64(0x3, 0x100800600, 0x1000) = 0 0
close_nocancel(0x3) = 0 0
open(".\0", 0x0, 0x0) = 3 0
fcntl(0x3, 0x1, 0x0) = 0 0
fcntl(0x3, 0x2, 0x1) = 0 0
fchdir(0x4, 0x2, 0x0) = 0 0
lstat64("1\0", 0x100100630, 0x0) = 0 0
fchdir(0x3, 0x100100630, 0x1001006C0) = 0 0
close(0x3) = 0 0
open(".\0", 0x0, 0x0) = 3 0
fcntl(0x3, 0x1, 0x0) = 0 0
fcntl(0x3, 0x2, 0x1) = 0 0
fchdir(0x4, 0x2, 0x0) = 0 0
open("1\0", 0x120104, 0x0) = 5 0
fchdir(0x3, 0x120104, 0x1001006C0) = 0 0
close(0x3) = 0 0
dup(0x5, 0xFFFFFFFF, 0x0) = 3 0
dup(0x5, 0x3, 0x0) = 6 0
close(0x5) = 0 0
dup(0x6, 0x6, 0x10001060F) = 5 0
close(0x6) = 0 0
close(0x3) = 0 0
open(".\0", 0x0, 0x0) = 3 0
fcntl(0x3, 0x1, 0x0) = 0 0
fcntl(0x3, 0x2, 0x1) = 0 0
dup(0x5, 0xFFFFFFFF, 0x7FFF5FBFF5C8) = 6 0
close(0x5) = 0 0
fchdir(0x6, 0xFFFFFFFF, 0x0) = 0 0
open_nocancel(".\0", 0x100004, 0x0) = 5 0
fcntl_nocancel(0x5, 0x2, 0x1) = 0 0
fstatfs64(0x5, 0x7FFF5FBFE830, 0xA) = 0 0
fchdir(0x3, 0x10010053, 0x0) = 0 0
close(0x6) = 0 0
close(0x3) = 0 0
getdirentries64(0x5, 0x100800600, 0x1000) = 48 0
getdirentries64(0x5, 0x100800600, 0x1000) = 0 0
close_nocancel(0x5) = 0 0
open(".\0", 0x0, 0x0) = 3 0
fcntl(0x3, 0x1, 0x0) = 0 0
fcntl(0x3, 0x2, 0x1) = 0 0
fchdir(0x4, 0x2, 0x0) = 0 0
rmdir(0x1001006C0, 0x2, 0x0) = 0 0
fchdir(0x3, 0x7FFF700FD730, 0x0) = 0 0
close(0x3) = 0 0
close(0x4) = 0 0
rmdir(0x100800000, 0x100800000, 0x1) = 0 0
lstat64("/Users/admin/Projects/coreutils-8.20.90-e27bfd/src/b\0", 0x1001003C0,
0x1001003C0) = 0 0
open("/Users/admin/Projects/coreutils-8.20.90-e27bfd/src/b\0", 0x120104, 0x0)
= 3 0
dup(0x3, 0xFFFFFFFF, 0x0) = 4 0
close(0x3) = 0 0
dup(0x4, 0x4, 0x10001060F) = 3 0
close(0x4) = 0 0
open(".\0", 0x0, 0x0) = 4 0
fcntl(0x4, 0x1, 0x0) = 0 0
fcntl(0x4, 0x2, 0x1) = 0 0
dup(0x3, 0xFFFFFFFF, 0x7FFF5FBFF5C8) = 5 0
close(0x3) = 0 0
fchdir(0x5, 0xFFFFFFFF, 0x0) = 0 0
open_nocancel(".\0", 0x100004, 0x0) = 3 0
fcntl_nocancel(0x3, 0x2, 0x1) = 0 0
fstatfs64(0x3, 0x7FFF5FBFE830, 0x7FFF700EF650) = 0 0
fchdir(0x4, 0x10010053, 0x0) = 0 0
close(0x5) = 0 0
close(0x4) = 0 0
getdirentries64(0x3, 0x100800600, 0x1000) = 48 0
getdirentries64(0x3, 0x100800600, 0x1000) = 0 0
close_nocancel(0x3) = 0 0
rmdir(0x100800000, 0x100800000, 0x1) = 0 0
lseek(0x0, 0x0, 0x1) = 182110 0
lseek(0x0, 0x0, 0x1) = 182110 0
lseek(0x0, 0x2C75E, 0x0) = 182110 0
getrlimit(0x1008, 0x7FFF5FBFF5F0, 0x7FFF805B32EC) = 0 0
close_nocancel(0x0) = 0 0
close_nocancel(0x1) = 0 0
close_nocancel(0x2) = 0 0
getpid(0x7FFF5FBFF6A0, 0x7FFFFFE00050, 0x0) = 36891 0
open_nocancel("/dev/urandom\0", 0x0, 0x0) = 3 0
read_nocancel(0x3,
"m\344\025P\340Y)\334\036\344D\202O\264\303\003)Y\334H\371\\n\345\362N<i\273+\243h\220NZ\374G\v\346\"\311\177\022\035q\2122\222J\347J\272R6\2149\276\017o\324}n\251eY\354\3344@'\242\341P\t$I\361\371\205*\215;\336v|v)S\220\264&a\230\270\356%\215\254|!\320\335\265\031p%q\035\0",
0x6C) = 108 0
close_nocancel(0x3) = 0 0
issetugid(0x100000000, 0x7FFF5FBFF9CB, 0x7FFF5FC40530) = 0 0
geteuid(0x100000000, 0x7FFF5FBFF9CB, 0x0) = 0 0
__sysctl(0x7FFF5FBFD590, 0x2, 0x7FFF5FBFD550) = 0 0
__sysctl(0x7FFF5FBFD550, 0x2, 0x7FFF5FBFD5EC) = 0 0
shared_region_check_np(0x7FFF5FBFD758, 0x0, 0x7FFF5FC1DC86) = 0 0
stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF5FBFCB60,
0x7FFF5FBFD1A0) = 0 0
open("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x0, 0x0) = 3 0
pread(0x3, "\312\376\272\276\0", 0x1000, 0x0) = 4096 0
pread(0x3, "\317\372\355\376\a\0", 0x1000, 0x1000) = 4096 0
mmap(0x100020000, 0x2000, 0x5, 0x12, 0x3, 0x7FFF00000001) =
0x20000 0
mmap(0x100022000, 0x1000, 0x3, 0x12, 0x3, 0x7FFF00000001) =
0x22000 0
mmap(0x100023000, 0x1F10, 0x1, 0x12, 0x3, 0x7FFF00000001) =
0x23000 0
close(0x3) = 0 0
stat64("/usr/lib/libSystem.B.dylib\0", 0x7FFF5FBFC910, 0x7FFF5FBFCF50)
= 0 0
stat64("/usr/lib/system/libmathCommon.A.dylib\0", 0x7FFF5FBFC7C0,
0x7FFF5FBFCE00) = 0 0
===============================================================
GNU coreutils 8.20.90-e27bfd: gnulib-tests/test-suite.log
===============================================================
# TOTAL: 315
# PASS: 295
# SKIP: 12
# XFAIL: 0
# FAIL: 8
# XPASS: 0
# ERROR: 0
.. contents:: :depth: 2
FAIL: test-cloexec
==================
test-cloexec.c:96: assertion failed
FAIL: test-dup2
===============
test-dup2.c:172: assertion failed
FAIL: test-fchdir
=================
test-fchdir.c:92: assertion failed
FAIL: test-fcntl
================
test-fcntl.c:263: assertion failed
FAIL: test-fdutimensat
======================
./test-utimens.h:87: assertion failed
FAIL: test-lock
===============
Starting test_lock ... OK
Starting test_rwlock ... OK
Starting test_recursive_lock ...
SKIP: test-mbrtowc-w32-1.sh
===========================
Skipping test: not a native Windows system
SKIP: test-mbrtowc-w32-2.sh
===========================
Skipping test: not a native Windows system
SKIP: test-mbrtowc-w32-3.sh
===========================
Skipping test: not a native Windows system
SKIP: test-mbrtowc-w32-4.sh
===========================
Skipping test: not a native Windows system
SKIP: test-mbrtowc-w32-5.sh
===========================
Skipping test: not a native Windows system
SKIP: test-mbscasecmp.sh
========================
Skipping test: no turkish Unicode locale is installed
FAIL: test-posixtm
==================
000001010000.00 mismatch (-: actual; +:expected)
--62167132800
+-62167219200
000012312359.59 return value mismatch: got 0, expected 1
FAIL: test-dup-safer
====================
test-dup-safer.c:155: assertion failed
SKIP: test-vc-list-files-cvs.sh
===============================
./test-vc-list-files-cvs.sh: line 26: 36188 Trace/BPT trap ( cvs -Q -d "$repo" init ) > /dev/null 2>&1
test-vc-list-files-cvs.sh: skipped test: cvs not found in PATH
SKIP: test-wcrtomb-w32-1.sh
===========================
Skipping test: not a native Windows system
SKIP: test-wcrtomb-w32-2.sh
===========================
Skipping test: not a native Windows system
SKIP: test-wcrtomb-w32-3.sh
===========================
Skipping test: not a native Windows system
SKIP: test-wcrtomb-w32-4.sh
===========================
Skipping test: not a native Windows system
SKIP: test-wcrtomb-w32-5.sh
===========================
Skipping test: not a native Windows system