Package: coreutils Version: 8.32-3 Severity: serious Tags: patch ftbfs Hi,
The current coreutils version FTBFS on arm64: src/ls.c: In function 'print_dir': src/ls.c:3026:24: error: 'SYS_getdents' undeclared (first use in this function); did you mean 'SYS_getdents64'? 3026 | if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1 | ^~~~~~~~~~~~ | SYS_getdents64 src/ls.c:3026:24: note: each undeclared identifier is reported only once for each function it appears in This has been reported upstream in <https://lists.gnu.org/archive/html/bug-coreutils/2020-03/msg00005.html>. The fix upstream adopted is to restore the behaviour of ls on removed directories back to what it was on 8.31. I've backported the patches needed to fix the issue, so I'm proposing them here. Ubuntu coreutils is already carrying these patches and the ARM64 build passes there. Thanks! -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible https://sergiodj.net/
diff -Nru coreutils-8.32/debian/changelog coreutils-8.32/debian/changelog --- coreutils-8.32/debian/changelog 2020-07-20 14:09:06.000000000 -0400 +++ coreutils-8.32/debian/changelog 2020-07-28 10:50:52.000000000 -0400 @@ -1,3 +1,16 @@ +coreutils (8.32-3.1) unstable; urgency=medium + + * Non-maintainer upload. + * Fix FTBFS on ARM64. + - d/p/restore-ls-behavior-8.31.patch: Upstream patch to restore + coreutils ls' 8.31 behavior on removed directories, which is + necessary to prevent using SYS_getdents that doesn't exist on + ARM64. + - d/p/improve-removed-directory-test.patch: Upstream patch to + improve ls' removed-directory test. + + -- Sergio Durigan Junior <sergi...@debian.org> Tue, 28 Jul 2020 10:50:52 -0400 + coreutils (8.32-3) unstable; urgency=low * build with libgmp now that apt pulls it in anyway (Closes: #64527) diff -Nru coreutils-8.32/debian/patches/improve-removed-directory-test.patch coreutils-8.32/debian/patches/improve-removed-directory-test.patch --- coreutils-8.32/debian/patches/improve-removed-directory-test.patch 1969-12-31 19:00:00.000000000 -0500 +++ coreutils-8.32/debian/patches/improve-removed-directory-test.patch 2020-07-28 10:50:23.000000000 -0400 @@ -0,0 +1,49 @@ +From: Paul Eggert <egg...@cs.ucla.edu> +Date: Sat, 7 Mar 2020 10:29:51 -0800 +Subject: ls: improve removed-directory test + +* tests/ls/removed-directory.sh: Remove host_triplet test. +Skip this test if one cannot remove the working directory. +From a suggestion by Bernhard Voelker (Bug#39929). + +Author: Paul Eggert <egg...@cs.ucla.edu> +Origin: upstream, https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=672819c73f2e94e61386dc0584bddf9da860cc26 +Bug: https://lists.gnu.org/archive/html/bug-coreutils/2020-03/msg00005.html +Last-Updated: 2020-07-24 +Reviewed-By: Sergio Durigan Junior <sergio.duri...@canonical.com> +--- + tests/ls/removed-directory.sh | 13 ++++--------- + 1 file changed, 4 insertions(+), 9 deletions(-) + +diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh +index fe8f929..63b209d 100755 +--- a/tests/ls/removed-directory.sh ++++ b/tests/ls/removed-directory.sh +@@ -1,7 +1,7 @@ + #!/bin/sh +-# If ls is asked to list a removed directory (e.g. the parent process's +-# current working directory that has been removed by another process), it +-# emits an error message. ++# If ls is asked to list a removed directory (e.g., the parent process's ++# current working directory has been removed by another process), it ++# should not emit an error message merely because the directory is removed. + + # Copyright (C) 2020 Free Software Foundation, Inc. + +@@ -21,15 +21,10 @@ + . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src + print_ver_ ls + +-case $host_triplet in +- *linux*) ;; +- *) skip_ 'non linux kernel' ;; +-esac +- + cwd=$(pwd) + mkdir d || framework_failure_ + cd d || framework_failure_ +-rmdir ../d || framework_failure_ ++rmdir ../d || skip_ "can't remove working directory on this platform" + + ls >../out 2>../err || fail=1 + cd "$cwd" || framework_failure_ diff -Nru coreutils-8.32/debian/patches/restore-ls-behavior-8.31.patch coreutils-8.32/debian/patches/restore-ls-behavior-8.31.patch --- coreutils-8.32/debian/patches/restore-ls-behavior-8.31.patch 1969-12-31 19:00:00.000000000 -0500 +++ coreutils-8.32/debian/patches/restore-ls-behavior-8.31.patch 2020-07-28 10:50:23.000000000 -0400 @@ -0,0 +1,126 @@ +From: Paul Eggert <egg...@cs.ucla.edu> +Date: Thu, 5 Mar 2020 17:25:29 -0800 +Subject: ls: restore 8.31 behavior on removed directories + +* NEWS: Mention this. +* src/ls.c: Do not include <sys/sycall.h> +(print_dir): Don't worry about whether the directory is removed. +* tests/ls/removed-directory.sh: Adjust to match new (i.e., old) +behavior. + +This patch is needed because coreutils 8.32 fails to build on ARM64 +with: + +src/ls.c: In function 'print_dir': +src/ls.c:3026:24: error: 'SYS_getdents' undeclared (first use in this function); did you mean 'SYS_getdents64'? + 3026 | if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1 + | ^~~~~~~~~~~~ + | SYS_getdents64 + +Author: Paul Eggert <egg...@cs.ucla.edu> +Origin: upstream, https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=10fcb97bd728f09d4a027eddf8ad2900f0819b0a +Bug: https://lists.gnu.org/archive/html/bug-coreutils/2020-03/msg00005.html +Last-Updated: 2020-07-24 +Reviewed-By: Sergio Durigan Junior <sergio.duri...@canonical.com> +--- + NEWS | 4 ---- + src/ls.c | 22 ---------------------- + tests/ls/removed-directory.sh | 10 ++-------- + 3 files changed, 2 insertions(+), 34 deletions(-) + +diff --git a/NEWS b/NEWS +index 3e44c0c..3b419cb 100644 +--- a/NEWS ++++ b/NEWS +@@ -65,10 +65,6 @@ GNU coreutils NEWS -*- outline -*- + [The old behavior was introduced in sh-utils 2.0.15 ca. 1999, predating + coreutils package.] + +- ls issues an error message on a removed directory, on GNU/Linux systems. +- Previously no error and no entries were output, and so indistinguishable +- from an empty directory, with default ls options. +- + uniq no longer uses strcoll() to determine string equivalence, + and so will operate more efficiently and consistently. + +diff --git a/src/ls.c b/src/ls.c +index 24b9832..4acf5f4 100644 +--- a/src/ls.c ++++ b/src/ls.c +@@ -49,10 +49,6 @@ + # include <sys/ptem.h> + #endif + +-#ifdef __linux__ +-# include <sys/syscall.h> +-#endif +- + #include <stdio.h> + #include <assert.h> + #include <setjmp.h> +@@ -2896,7 +2892,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg) + struct dirent *next; + uintmax_t total_blocks = 0; + static bool first = true; +- bool found_any_entries = false; + + errno = 0; + dirp = opendir (name); +@@ -2972,7 +2967,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg) + next = readdir (dirp); + if (next) + { +- found_any_entries = true; + if (! file_ignored (next->d_name)) + { + enum filetype type = unknown; +@@ -3018,22 +3012,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg) + if (errno != EOVERFLOW) + break; + } +-#ifdef __linux__ +- else if (! found_any_entries) +- { +- /* If readdir finds no directory entries at all, not even "." or +- "..", then double check that the directory exists. */ +- if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1 +- && errno != EINVAL) +- { +- /* We exclude EINVAL as that pertains to buffer handling, +- and we've passed NULL as the buffer for simplicity. +- ENOENT is returned if appropriate before buffer handling. */ +- file_failure (command_line_arg, _("reading directory %s"), name); +- } +- break; +- } +-#endif + else + break; + +diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh +index e8c835d..fe8f929 100755 +--- a/tests/ls/removed-directory.sh ++++ b/tests/ls/removed-directory.sh +@@ -26,20 +26,14 @@ case $host_triplet in + *) skip_ 'non linux kernel' ;; + esac + +-LS_FAILURE=2 +- +-cat <<\EOF >exp-err || framework_failure_ +-ls: reading directory '.': No such file or directory +-EOF +- + cwd=$(pwd) + mkdir d || framework_failure_ + cd d || framework_failure_ + rmdir ../d || framework_failure_ + +-returns_ $LS_FAILURE ls >../out 2>../err || fail=1 ++ls >../out 2>../err || fail=1 + cd "$cwd" || framework_failure_ + compare /dev/null out || fail=1 +-compare exp-err err || fail=1 ++compare /dev/null err || fail=1 + + Exit $fail diff -Nru coreutils-8.32/debian/patches/series coreutils-8.32/debian/patches/series --- coreutils-8.32/debian/patches/series 2020-06-22 14:41:01.000000000 -0400 +++ coreutils-8.32/debian/patches/series 2020-07-28 10:50:29.000000000 -0400 @@ -3,3 +3,5 @@ 72_id_checkngroups.patch 85_timer_settime.patch 99_kfbsd_fstat_patch.patch +restore-ls-behavior-8.31.patch +improve-removed-directory-test.patch
signature.asc
Description: PGP signature