summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-11-06 13:20:01 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-11-18 14:42:13 +0000
commitbf363493fec990eaf7577769f1862d439404bd10 (patch)
treec8c3dee01608e96d04b80c39b19515e398205411
parent9ee90898161f079e012c40753f415d1debed5bb6 (diff)
downloadpoky-bf363493fec990eaf7577769f1862d439404bd10.tar.gz
pseudo: Add statx support to fix fedora30 issues
Modern distros (e.g. fedora30) are starting to use the new statx() syscall through the newly exposed glibc wrapper function in software like coreutils (e.g. the ls command). Add support to intercept this to pseudo. (From OE-Core rev: 1c09e45f966d553f1fea3795ef9122dd9957be67) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> [Fixup for warrior context] Signed-off-by: Armin Kuster <akuster808@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/pseudo/files/0001-Add-statx.patch106
-rw-r--r--meta/recipes-devtools/pseudo/pseudo_git.bb1
2 files changed, 107 insertions, 0 deletions
diff --git a/meta/recipes-devtools/pseudo/files/0001-Add-statx.patch b/meta/recipes-devtools/pseudo/files/0001-Add-statx.patch
new file mode 100644
index 0000000000..f01e699de7
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/0001-Add-statx.patch
@@ -0,0 +1,106 @@
1From 4e41a05de1f34ba00a68ca4f20fb49c4d1cbd2d0 Mon Sep 17 00:00:00 2001
2From: Richard Purdie <richard.purdie@linuxfoundation.org>
3Date: Wed, 6 Nov 2019 12:17:46 +0000
4Subject: [PATCH] Add statx glibc/syscall support
5
6Modern distros (e.g. fedora30) are starting to use the new statx() syscall through
7the newly exposed glibc wrapper function in software like coreutils (e.g. the ls
8command). Add support to intercept this to pseudo.
9
10Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
11Upstream-Status: Submitted [Emailed to seebs]
12---
13 ports/linux/guts/statx.c | 48 ++++++++++++++++++++++++++++++++++++++++
14 ports/linux/portdefs.h | 1 +
15 ports/linux/wrapfuncs.in | 1 +
16 3 files changed, 50 insertions(+)
17 create mode 100644 ports/linux/guts/statx.c
18
19diff --git a/ports/linux/statx/guts/statx.c b/ports/linux/statx/guts/statx.c
20new file mode 100644
21index 0000000..a3259c4
22--- /dev/null
23+++ b/ports/linux/statx/guts/statx.c
24@@ -0,0 +1,42 @@
25+/*
26+ * Copyright (c) 2019 Linux Foundation
27+ * Author: Richard Purdie
28+ *
29+ * SPDX-License-Identifier: LGPL-2.1-only
30+ *
31+ * int
32+ * statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf) {
33+ * int rc = -1;
34+ */
35+ pseudo_msg_t *msg;
36+ PSEUDO_STATBUF buf;
37+ int save_errno;
38+
39+ rc = real_statx(dirfd, pathname, flags, mask, statxbuf);
40+ save_errno = errno;
41+ if (rc == -1) {
42+ return rc;
43+ }
44+
45+ buf.st_uid = statxbuf->stx_uid;
46+ buf.st_gid = statxbuf->stx_gid;
47+ buf.st_dev = makedev(statxbuf->stx_dev_major, statxbuf->stx_dev_minor);
48+ buf.st_ino = statxbuf->stx_ino;
49+ buf.st_mode = statxbuf->stx_mode;
50+ buf.st_rdev = makedev(statxbuf->stx_rdev_major, statxbuf->stx_rdev_minor);
51+ buf.st_nlink = statxbuf->stx_nlink;
52+ msg = pseudo_client_op(OP_STAT, 0, -1, dirfd, pathname, &buf);
53+ if (msg && msg->result == RESULT_SUCCEED) {
54+ pseudo_debug(PDBGF_FILE, "statx(path %s), flags %o, stat rc %d, stat uid %o\n", pathname, flags, rc, statxbuf->stx_uid);
55+ statxbuf->stx_uid = msg->uid;
56+ statxbuf->stx_gid = msg->gid;
57+ statxbuf->stx_mode = msg->mode;
58+ statxbuf->stx_rdev_major = major(msg->rdev);
59+ statxbuf->stx_rdev_minor = minor(msg->rdev);
60+ } else {
61+ pseudo_debug(PDBGF_FILE, "statx(path %s) failed, flags %o, stat rc %d, stat uid %o\n", pathname, flags, rc, statxbuf->stx_uid);
62+ }
63+ errno = save_errno;
64+/* return rc;
65+ * }
66+ */
67diff --git a/ports/linux/statx/portdefs.h b/ports/linux/statx/portdefs.h
68new file mode 100644
69index 0000000..bf934dc
70--- /dev/null
71+++ b/ports/linux/statx/portdefs.h
72@@ -0,0 +1,6 @@
73+/*
74+ * SPDX-License-Identifier: LGPL-2.1-only
75+ *
76+ */
77+#include <sys/stat.h>
78+#include <sys/sysmacros.h>
79diff --git a/ports/linux/statx/wrapfuncs.in b/ports/linux/statx/wrapfuncs.in
80new file mode 100644
81index 0000000..c9cd4c3
82--- /dev/null
83+++ b/ports/linux/statx/wrapfuncs.in
84@@ -0,0 +1 @@
85+int statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf);
86diff --git a/ports/linux/subports b/ports/linux/subports
87index a29044a..49081bf 100755
88--- a/ports/linux/subports
89+++ b/ports/linux/subports
90@@ -54,3 +54,13 @@ else
91 fi
92 rm -f dummy.c dummy.o
93
94+cat > dummy.c <<EOF
95+#define _GNU_SOURCE
96+#include <sys/stat.h>
97+struct statx x;
98+EOF
99+if ${CC} -c -o dummy.o dummy.c >/dev/null 2>&1; then
100+ echo "linux/statx"
101+fi
102+rm -f dummy.c dummy.o
103+
104--
1052.17.1
106
diff --git a/meta/recipes-devtools/pseudo/pseudo_git.bb b/meta/recipes-devtools/pseudo/pseudo_git.bb
index 6cf711e4c2..7db5bafd17 100644
--- a/meta/recipes-devtools/pseudo/pseudo_git.bb
+++ b/meta/recipes-devtools/pseudo/pseudo_git.bb
@@ -6,6 +6,7 @@ SRC_URI = "git://git.yoctoproject.org/pseudo \
6 file://fallback-group \ 6 file://fallback-group \
7 file://moreretries.patch \ 7 file://moreretries.patch \
8 file://toomanyfiles.patch \ 8 file://toomanyfiles.patch \
9 file://0001-Add-statx.patch \
9 " 10 "
10 11
11SRCREV = "060058bb29f70b244e685b3c704eb0641b736f73" 12SRCREV = "060058bb29f70b244e685b3c704eb0641b736f73"