Skip to content

GNU coreutils 9.9: Detailed Test report 12/19 #9729

@ChrisDryden

Description

@ChrisDryden

GNU coreutils Test Coverage Tracking

Failing GNU tests as of 2025-12-19 | Test Coverage Dashboard

Overview

With the number of failing tests now small enough to track individually, this document provides detailed descriptions of each remaining test failure and the next steps needed to achieve full GNU compatibility. Theres a bunch of duplicate PR's for the same tests in the PR queue now and I'm hoping this will allow us to consolidate our efforts.

I am also hoping to separate the tests that are incompatible because they either intercept glibc calls or call gdb on specific lines of source code since we are unable to fix those tests and it wouldn't be good to track compatibility of those tests.


FAILED

[ ] cp/cp-a-selinux.sh

GNU Test | SELinux context preservation with cp -a

[ ] cp/link-heap.sh - PR #9805

GNU Test | Reduce memory usage for cp -al by skipping unnecessary tracking

[ ] cp/preserve-gid.sh - PR #9803

GNU Test | Fix preserve-gid when canonicalize fails due to inaccessible parent dirs

[ ] date/date-debug.sh

GNU Test | Debug output for date parsing

[ ] date/date-ethiopia.sh

GNU Test | Ethiopian calendar translation support

Note: PR #9661 was an attempt but has been closed.

[ ] date/date-iran.sh

GNU Test | Iranian/Persian calendar translation support

Note: PR #9661 was an attempt but has been closed.

[x] date/date-locale-hour.sh - PR #9654

GNU Test | Locale-aware 12h vs 24h format detection via nl_langinfo() - MERGED

[ ] date/date-thailand.sh

GNU Test | Thai calendar translation support

Note: PR #9661 was an attempt but has been closed.

[ ] date/date.pl

GNU Test | Comprehensive date parsing tests

[ ] dd/no-allocate.sh - PR #9806

GNU Test | Use ibs/obs-sized buffer for skip/seek on non-seekable files (ulimit -v tests)

[ ] dd/nocache_eof.sh - PR #9818

GNU Test | Fix nocache flag handling at EOF (use len=0 for posix_fadvise)

[x] dd/nocache_fail.sh - PR #9820

GNU Test | Use actual filename in nocache error messages - MERGED

[ ] dd/skip-seek-past-file.sh - PR #9821

GNU Test | Use seek for stdin skip when possible

[ ] dd/stderr.sh - PR #9664

GNU Test | Detect closed stdin before Rust sanitizes to /dev/null

[x] env/env-signal-handler.sh - PR #9465

GNU Test | --default-signal, --block-signal, --list-signal-handling flags - MERGED

[ ] fmt/non-space.sh - PR #9329

GNU Test | Handle invalid UTF-8 input by replacing malformed sequences

[ ] fold/fold-zero-width.sh - PR #9274

GNU Test | Zero-width character handling in fold

[ ] ls/ls-misc.pl - PR #9262

GNU Test | Align symlink coloring with GNU semantics (or=, mi=, ln=target)

[ ] ls/stat-free-symlinks.sh - PR #8728

GNU Test | Iterative loop for ls recursive directory search (prevents stack overflow)

[ ] misc/close-stdout.sh

GNU Test | Proper handling of closed stdout

[ ] misc/stdbuf.sh

GNU Test | Line/block buffering with fifos

[x] misc/tsort.pl - PR #9289

GNU Test | Topological sort tests - MERGED

[ ] misc/unexpand.pl - PR #9265

GNU Test | Tab unexpansion edge cases

[ ] misc/write-errors.sh

GNU Test | Write error handling and reporting

[ ] mv/i-3.sh - PR #9599

GNU Test | TTY prompting for non-writable destination files (last failing mv test!)

[ ] numfmt/numfmt.pl

GNU Test | Number formatting comprehensive tests

[ ] ptx/ptx-overrun.sh

GNU Test | Buffer overrun prevention in ptx

[ ] ptx/ptx.pl - PR #9681, PR #9682

GNU Test | Permuted index generation tests

[ ] rm/one-file-system.sh - PR #7569

GNU Test | --one-file-system and --preserve-root=all implementation

[ ] rm/rm1.sh - PR #9011

GNU Test | Fix error reporting for rm -r on Linux

[ ] runcon/runcon-no-reorder.sh

GNU Test | SELinux context argument ordering

[ ] seq/seq-epipe.sh - PR #9657

GNU Test | SIGPIPE handling macro for proper exit codes

[x] shred/shred-passes.sh - PR #9317

GNU Test | Deterministic pass sequence + stop on write errors - MERGED

[x] sort/sort-continue.sh - PR #9107

GNU Test | Respect soft fd limit for merge batch sizes - MERGED

[x] sort/sort-debug-keys.sh - PR #9468

GNU Test | Debug key annotation alignment - MERGED

[ ] sort/sort-debug-warn.sh

GNU Test | Debug warning message formatting

[ ] sort/sort-float.sh - PR #9839

GNU Test | Floating point number sorting

[ ] sort/sort-h-thousands-sep.sh - PR #9848

GNU Test | Human-readable sort with thousands separators

[ ] sort/sort-merge-fdlimit.sh - PR #9849

GNU Test | Merge sort file descriptor limits

[ ] sort/sort-month.sh - PR #9722

GNU Test | Locale-aware month parsing (ICU), handles "janv." and Latin-1

[ ] sort/sort.pl - PR #9862

GNU Test | GNU coreutils compatibility for comprehensive sort tests

[x] stty/stty-row-col.sh - PR #9516

GNU Test | Hex/octal parsing for rows and columns - MERGED

[x] stty/stty.sh - PR #9490

GNU Test | COLUMNS env support - MERGED

[ ] tac/tac-2-non-seekable.sh - PR #9664

GNU Test | Detect closed stdin before Rust sanitizes to /dev/null

[ ] tail/follow-name.sh

GNU Test | Follow renamed/recreated files

[ ] tail/follow-stdin.sh - PR #9664

GNU Test | Detect closed stdin before Rust sanitizes to /dev/null

[ ] tail/inotify-rotate-resources.sh

GNU Test | Inotify resource handling during log rotation

[ ] tail/pid-pipe.sh - PR #9663

GNU Test | --pid with FIFO using non-blocking open

[ ] tail/pipe-f.sh

GNU Test | Following pipes

[ ] tail/symlink.sh

GNU Test | Symlink following behavior

[ ] tail/tail.pl

GNU Test | Comprehensive tail tests

[x] wc/wc-cpu.sh - PR #9144

GNU Test | Respect GLIBC_TUNABLES to disable AVX/AVX512 SIMD - MERGED

SKIPPED

[x] cp/cp-mv-enotsup-xattr.sh - PR #9530

GNU Test | xattr ENOTSUP handling - TEST ENABLED

[ ] df/skip-rootfs.sh

GNU Test | Skip rootfs in output

[ ] id/gnu-zero-uids.sh

GNU Test | Handling of UID 0

[ ] id/smack.sh - PR #9866

GNU Test | SMACK security labels - adds --context flag and SMACK label display

[ ] mkdir/smack-no-root.sh - PR #9866

GNU Test | SMACK labels without root - adds --context flag for setting SMACK labels

[ ] mkdir/smack-root.sh - PR #9866

GNU Test | SMACK labels with root - adds --context flag for setting SMACK labels

[x] mkdir/writable-under-readonly.sh - PR #9530

GNU Test | Creating writable dir under readonly parent - TEST ENABLED

[ ] numfmt/mb-non-utf8.sh - PR #9807 (moves to FAIL)

GNU Test | Multibyte non-UTF8 handling - adds non-UTF8 locale to CI

[ ] pr/pr-tests.pl

GNU Test | Page formatting tests

[x] rm/fail-eperm.xpl - PR #9525, PR #9531

GNU Test | EPERM error on files not owned by user - MERGED/FIXED

[ ] tac/tac-continue.sh

GNU Test | Detect closed stdin before Rust sanitizes to /dev/null

[ ] tail/inotify-dir-recreate.sh

GNU Test | Directory recreation with inotify

[ ] timeout/timeout-group.sh

GNU Test | sigtimedwait() instead of 100ms polling (100ms → 1ms)

INCOMPATIBLE

Tests that use LD_PRELOAD to intercept glibc calls or gdb breakpoints. If we don't use the same internal calls, we will have to patch these tests.

cp/nfs-removal-race.sh (LD_PRELOAD)

GNU Test | Intercepts glibc to simulate NFS race condition

csplit/csplit-io-err.sh (LD_PRELOAD) - PR #9855, GNU PR #148

GNU Test | Intercepts glibc to simulate I/O errors

PR #9855 detects and reports write errors. GNU PR #148 removes LD_PRELOAD from test.

df/no-mtab-status.sh (LD_PRELOAD) - PR #9759 (test enabled)

GNU Test | Intercepts glibc to simulate missing mtab

PR #9759 enabled this test (detects #9760).

df/skip-duplicates.sh (LD_PRELOAD)

GNU Test | Intercepts glibc to inject duplicate mount entries

nproc/nproc-quota.sh (LD_PRELOAD)

GNU Test | Intercepts glibc to simulate CPU quota

rm/r-root.sh (LD_PRELOAD + gdb)

GNU Test | Uses gdb breakpoints and LD_PRELOAD for safety net

rm/rm-readdir-fail.sh (LD_PRELOAD) - PR #9604

GNU Test | Intercepts readdir to simulate failures

PR #9604 wraps libc calls to handle LD_PRELOAD tests.

stty/bad-speed.sh (LD_PRELOAD) - PR #9517

GNU Test | Intercepts cfsetispeed to simulate failures

PR #9517 implements input/output baud rate setting so cfsetispeed is called.

tail/inotify-race.sh (gdb)

GNU Test | Uses gdb breakpoints to trigger race conditions

tail/inotify-race2.sh (gdb)

GNU Test | Uses gdb breakpoints to trigger race conditions

ERROR

[ ] misc/usage_vs_getopt.sh - PR #9869

GNU Test | Usage message consistency with getopt

The coreutils multicall binary doesn't use clap for argument parsing, so unrecognized options like --unknown were outputting "function/utility not found" instead of "unrecognized option". PR #9869 fixes this by detecting option-like arguments.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions