On Wed, Jun 14, 2023 at 11:32 PM 张家岭 <[email protected]> wrote: > > Hi Khem, > > I noticed the issue you mentioned, I want to fix it , but I'm not > sure how to reproduce it on my build machine .Please how can I debug > this issue use the autobuilder.yoctoproject.org builders . >
add meta-clang to your layers and then bitbake libcxx > > > > 在 2023/6/11 01:03, Khem Raj 写道: > > I see another issue with libcxx when using meta-clang > > > > The error is here > > > > http://sprunge.us/SoBHMo > > > > On Thu, Jun 1, 2023 at 9:55 AM Alexandre Belloni via > > lists.openembedded.org > > <[email protected]> wrote: > >> On 01/06/2023 12:43:42+0200, Alexandre Belloni via lists.openembedded.org > >> wrote: > >>> Hello Mark, > >>> > >>> This causes failures on opensuse154 and debian11 workers. I've tried to > >>> get pseudo.log for the failures but they are not present on debian11 and > >>> are not interesting for opensuse154. > >>> > >>> debian11 failures look like that: > >>> > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/42/builds/7184/steps/12/logs/stdio > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/42/builds/7184/steps/13/logs/stdio > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/74/builds/7152/steps/12/logs/stdio > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/74/builds/7152/steps/13/logs/stdio > >>> > >>> opensuse: > >>> > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/120/builds/2819/steps/14/logs/stdio > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/20/builds/7597/steps/13/logs/stdio > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/53/builds/7211/steps/13/logs/stdio > >>> > >>> stream8 is similar: > >>> > >>> https://autobuilder.yoctoproject.org/typhoon/#/builders/117/builds/2939/steps/13/logs/stdio > >>> > >>> > >>> I also suspect this causes: > >>> > >>> ERROR: cmdline-shebang-wrapper-test-1.0-r0 do_install: Wrapper > >>> permissions for > >>> /home/pokybuild/yocto-worker/oe-selftest-fedora/build/build-st-1782300/tmp/work/core2-64-poky-linux/cmdline-shebang-wrapper-test/1.0-r0/image/usr/bin/test.real > >>> not preserved. Found 600 but expected 400 > >>> ERROR: cmdline-shebang-wrapper-test-1.0-r0 do_install: > >>> ExecutionError('/home/pokybuild/yocto-worker/oe-selftest-fedora/build/build-st-1782300/tmp/work/core2-64-poky-linux/cmdline-shebang-wrapper-test/1.0-r0/temp/run.do_install.322689', > >>> 1, None, None) > >>> ERROR: Logfile of failure stored in: > >>> /home/pokybuild/yocto-worker/oe-selftest-fedora/build/build-st-1782300/tmp/work/core2-64-poky-linux/cmdline-shebang-wrapper-test/1.0-r0/temp/log.do_install.322689 > >>> NOTE: recipe cmdline-shebang-wrapper-test-1.0-r0: task do_install: Failed > >>> ERROR: Task > >>> (/home/pokybuild/yocto-worker/oe-selftest-fedora/build/build-st-1782300/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb:do_install) > >>> failed with exit code '1' > >>> > >> For the record, it also broke systemd on the target with ubuntu or > >> fedora workers: > >> > >> https://autobuilder.yoctoproject.org/typhoon/#/builders/131/builds/2576/steps/13/logs/stdio > >> https://autobuilder.yoctoproject.org/typhoon/#/builders/110/builds/6085/steps/13/logs/stdio > >> https://autobuilder.yoctoproject.org/typhoon/#/builders/102/builds/4661/steps/13/logs/stdio > >> > >> > >>> > >>> On 30/05/2023 20:01:26-0700, Mark Hatle via lists.openembedded.org wrote: > >>>> Changes to eliminate __*.c function usage were based on the patch: > >>>> > >>>> From: JiaLing Zhang <[email protected]> > >>>> Subject: [OE-core] [PATCH v4] Fixes pseudo build in loongarch64 > >>>> > >>>> Fixes [YOCTO #15110] > >>>> > >>>> Some functions used in the project have been removed from glibc. > >>>> After the removal of these functions, > >>>> the architecture in glibc will not include the removed functions. > >>>> This patch resolves the usage and compilation issues on the > >>>> loongarch64 architecture > >>>> > >>>> Signed-off-by: JiaLing Zhang <[email protected]> > >>>> > >>>> This code is NOT loongarch64 specific, but implements support for newer > >>>> glibc where the __*x*stat and __xmknod* functions are no longer present > >>>> in headers as of roughly glibc 2.33. > >>>> > >>>> The functions, on x86, x86_64 and aarch64 may still be present for > >>>> compatibility but new software should no longer be using it. Pseudo > >>>> can likely change it's default behavior unless support for really old > >>>> hosts is still desired. > >>>> > >>>> Signed-off-by: Mark Hatle <[email protected]> > >>>> --- > >>>> ports/linux/guts/fopen64.c | 4 +- > >>>> ports/linux/guts/freopen64.c | 4 +- > >>>> ports/linux/guts/fstat.c | 8 ++- > >>>> ports/linux/guts/fstat64.c | 14 +++- > >>>> ports/linux/guts/fstatat.c | 9 ++- > >>>> ports/linux/guts/fstatat64.c | 42 +++++++++++- > >>>> ports/linux/guts/lstat.c | 2 +- > >>>> ports/linux/guts/lstat64.c | 2 +- > >>>> ports/linux/guts/mknod.c | 2 +- > >>>> ports/linux/guts/mknodat.c | 71 +++++++++++++++++++- > >>>> ports/linux/guts/mkostemp64.c | 2 +- > >>>> ports/linux/guts/openat.c | 18 ++--- > >>>> ports/linux/guts/stat.c | 2 +- > >>>> ports/linux/guts/stat64.c | 2 +- > >>>> ports/linux/old__x/README | 28 ++++++++ > >>>> ports/linux/{ => old__x}/guts/__fxstat.c | 0 > >>>> ports/linux/{ => old__x}/guts/__fxstat64.c | 0 > >>>> ports/linux/{ => old__x}/guts/__fxstatat.c | 0 > >>>> ports/linux/{ => old__x}/guts/__fxstatat64.c | 0 > >>>> ports/linux/{ => old__x}/guts/__lxstat.c | 0 > >>>> ports/linux/{ => old__x}/guts/__lxstat64.c | 0 > >>>> ports/linux/{ => old__x}/guts/__xmknod.c | 0 > >>>> ports/linux/{ => old__x}/guts/__xmknodat.c | 0 > >>>> ports/linux/{ => old__x}/guts/__xstat.c | 0 > >>>> ports/linux/{ => old__x}/guts/__xstat64.c | 0 > >>>> ports/linux/old__x/guts/fstat.c | 15 +++++ > >>>> ports/linux/old__x/guts/fstat64.c | 15 +++++ > >>>> ports/linux/old__x/guts/fstatat.c | 15 +++++ > >>>> ports/linux/old__x/guts/fstatat64.c | 15 +++++ > >>>> ports/linux/old__x/guts/lstat.c | 15 +++++ > >>>> ports/linux/old__x/guts/lstat64.c | 15 +++++ > >>>> ports/linux/old__x/guts/mknod.c | 15 +++++ > >>>> ports/linux/old__x/guts/mknodat.c | 15 +++++ > >>>> ports/linux/old__x/guts/mkostemp64.c | 53 +++++++++++++++ > >>>> ports/linux/old__x/portdefs.h | 40 +++++++++++ > >>>> ports/linux/old__x/pseudo_wrappers.c | 48 +++++++++++++ > >>>> ports/linux/old__x/wrapfuncs.in | 18 +++++ > >>>> ports/linux/portdefs.h | 19 ------ > >>>> ports/linux/pseudo_wrappers.c | 43 ------------ > >>>> ports/linux/subports | 15 +++++ > >>>> ports/linux/wrapfuncs.in | 26 +++---- > >>>> pseudo_client.h | 38 +++++++++-- > >>>> 42 files changed, 520 insertions(+), 110 deletions(-) > >>>> create mode 100644 ports/linux/old__x/README > >>>> rename ports/linux/{ => old__x}/guts/__fxstat.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__fxstat64.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__fxstatat.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__fxstatat64.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__lxstat.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__lxstat64.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__xmknod.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__xmknodat.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__xstat.c (100%) > >>>> rename ports/linux/{ => old__x}/guts/__xstat64.c (100%) > >>>> create mode 100644 ports/linux/old__x/guts/fstat.c > >>>> create mode 100644 ports/linux/old__x/guts/fstat64.c > >>>> create mode 100644 ports/linux/old__x/guts/fstatat.c > >>>> create mode 100644 ports/linux/old__x/guts/fstatat64.c > >>>> create mode 100644 ports/linux/old__x/guts/lstat.c > >>>> create mode 100644 ports/linux/old__x/guts/lstat64.c > >>>> create mode 100644 ports/linux/old__x/guts/mknod.c > >>>> create mode 100644 ports/linux/old__x/guts/mknodat.c > >>>> create mode 100644 ports/linux/old__x/guts/mkostemp64.c > >>>> create mode 100644 ports/linux/old__x/portdefs.h > >>>> create mode 100644 ports/linux/old__x/pseudo_wrappers.c > >>>> create mode 100644 ports/linux/old__x/wrapfuncs.in > >>>> > >>>> diff --git a/ports/linux/guts/fopen64.c b/ports/linux/guts/fopen64.c > >>>> index e76da69..33ccd3a 100644 > >>>> --- a/ports/linux/guts/fopen64.c > >>>> +++ b/ports/linux/guts/fopen64.c > >>>> @@ -11,7 +11,7 @@ > >>>> struct stat64 buf; > >>>> int save_errno; > >>>> > >>>> - int existed = (real___xstat64(_STAT_VER, path, &buf) != -1); > >>>> + int existed = (base_stat64(path, &buf) != -1); > >>>> > >>>> rc = real_fopen64(path, mode); > >>>> save_errno = errno; > >>>> @@ -20,7 +20,7 @@ > >>>> int fd = fileno(rc); > >>>> > >>>> pseudo_debug(PDBGF_FILE, "fopen64 '%s': fd %d <FILE %p>\n", > >>>> path, fd, (void *) rc); > >>>> - if (real___fxstat64(_STAT_VER, fd, &buf) != -1) { > >>>> + if (base_fstat64(fd, &buf) != -1) { > >>>> if (!existed) { > >>>> real_fchmod(fd, PSEUDO_FS_MODE(0666 & > >>>> ~pseudo_umask, 0)); > >>>> pseudo_client_op(OP_CREAT, 0, -1, -1, path, > >>>> &buf); > >>>> diff --git a/ports/linux/guts/freopen64.c b/ports/linux/guts/freopen64.c > >>>> index 5fc9073..9bcc06a 100644 > >>>> --- a/ports/linux/guts/freopen64.c > >>>> +++ b/ports/linux/guts/freopen64.c > >>>> @@ -10,7 +10,7 @@ > >>>> */ > >>>> struct stat64 buf; > >>>> int save_errno; > >>>> - int existed = (real___xstat64(_STAT_VER, path, &buf) != -1); > >>>> + int existed = (base_stat64(path, &buf) != -1); > >>>> > >>>> rc = real_freopen64(path, mode, stream); > >>>> save_errno = errno; > >>>> @@ -19,7 +19,7 @@ > >>>> int fd = fileno(rc); > >>>> > >>>> pseudo_debug(PDBGF_FILE, "freopen64 '%s': fd %d\n", path, > >>>> fd); > >>>> - if (real___fxstat64(_STAT_VER, fd, &buf) != -1) { > >>>> + if (base_fstat64(fd, &buf) != -1) { > >>>> if (!existed) { > >>>> real_fchmod(fd, PSEUDO_FS_MODE(0666 & > >>>> ~pseudo_umask, 0)); > >>>> pseudo_client_op(OP_CREAT, 0, -1, -1, path, > >>>> &buf); > >>>> diff --git a/ports/linux/guts/fstat.c b/ports/linux/guts/fstat.c > >>>> index b089b15..80933e2 100644 > >>>> --- a/ports/linux/guts/fstat.c > >>>> +++ b/ports/linux/guts/fstat.c > >>>> @@ -8,7 +8,13 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstat(_STAT_VER, fd, buf); > >>>> + struct stat64 buf64; > >>>> + /* populate buffer with complete data */ > >>>> + real_fstat(fd, buf); > >>>> + /* obtain fake data */ > >>>> + rc = wrap_fstat64(fd, &buf64); > >>>> + /* overwrite */ > >>>> + pseudo_stat32_from64(buf, &buf64); > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/fstat64.c b/ports/linux/guts/fstat64.c > >>>> index 6dd97da..22d46a9 100644 > >>>> --- a/ports/linux/guts/fstat64.c > >>>> +++ b/ports/linux/guts/fstat64.c > >>>> @@ -8,8 +8,20 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstat64(_STAT_VER, fd, buf); > >>>> + pseudo_msg_t *msg; > >>>> + int save_errno; > >>>> > >>>> + rc = real_fstat64(fd, buf); > >>>> + save_errno = errno; > >>>> + if (rc == -1) { > >>>> + return rc; > >>>> + } > >>>> + msg = pseudo_client_op(OP_FSTAT, 0, fd, -1, 0, buf); > >>>> + if (msg && msg->result == RESULT_SUCCEED) { > >>>> + pseudo_stat_msg(buf, msg); > >>>> + } > >>>> + > >>>> + errno = save_errno; > >>>> /* return rc; > >>>> * } > >>>> */ > >>>> diff --git a/ports/linux/guts/fstatat.c b/ports/linux/guts/fstatat.c > >>>> index 3267641..7b9652d 100644 > >>>> --- a/ports/linux/guts/fstatat.c > >>>> +++ b/ports/linux/guts/fstatat.c > >>>> @@ -1,4 +1,5 @@ > >>>> /* > >>>> + * Copyright (c) 2008-2010 Wind River Systems; see > >>>> * Copyright (c) 2021 Linux Foundation; see > >>>> * guts/COPYRIGHT for information. > >>>> * > >>>> @@ -8,7 +9,13 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstatat(_STAT_VER, dirfd, path, buf, flags); > >>>> + struct stat64 buf64; > >>>> + /* populate buffer with complete data */ > >>>> + real_fstatat(dirfd, path, buf, flags); > >>>> + /* obtain fake data */ > >>>> + rc = wrap_fstatat64(dirfd, path, &buf64, flags); > >>>> + /* overwrite */ > >>>> + pseudo_stat32_from64(buf, &buf64); > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/fstatat64.c b/ports/linux/guts/fstatat64.c > >>>> index c981e14..13c1143 100644 > >>>> --- a/ports/linux/guts/fstatat64.c > >>>> +++ b/ports/linux/guts/fstatat64.c > >>>> @@ -1,4 +1,5 @@ > >>>> /* > >>>> + * Copyright (c) 2008-2010 Wind River Systems; > >>>> * Copyright (c) 2021 Linux Foundation; see > >>>> * guts/COPYRIGHT for information. > >>>> * > >>>> @@ -8,7 +9,46 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstatat64(_STAT_VER, dirfd, path, buf, flags); > >>>> + pseudo_msg_t *msg; > >>>> + int save_errno; > >>>> + > >>>> +#ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> + if (dirfd != AT_FDCWD) { > >>>> + errno = ENOSYS; > >>>> + return -1; > >>>> + } > >>>> +#endif > >>>> + if (flags & AT_SYMLINK_NOFOLLOW) { > >>>> +#ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> + rc = real_lstat64(path, buf); > >>>> +#else > >>>> + rc = real_fstatat64(dirfd, path, buf, flags); > >>>> +#endif > >>>> + if (rc == -1) { > >>>> + return rc; > >>>> + } > >>>> + } else { > >>>> +#ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> + rc = real_stat64(path, buf); > >>>> +#else > >>>> + rc = real_fstatat64(dirfd, path, buf, flags); > >>>> +#endif > >>>> + if (rc == -1) { > >>>> + return rc; > >>>> + } > >>>> + } > >>>> + save_errno = errno; > >>>> + > >>>> + /* query database > >>>> + * note that symlink canonicalizing is now automatic, so we > >>>> + * don't need to check for a symlink on this end > >>>> + */ > >>>> + msg = pseudo_client_op(OP_STAT, 0, -1, dirfd, path, buf); > >>>> + if (msg && msg->result == RESULT_SUCCEED) { > >>>> + pseudo_stat_msg(buf, msg); > >>>> + } > >>>> + > >>>> + errno = save_errno; > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/lstat.c b/ports/linux/guts/lstat.c > >>>> index d2c4d50..0bc9362 100644 > >>>> --- a/ports/linux/guts/lstat.c > >>>> +++ b/ports/linux/guts/lstat.c > >>>> @@ -8,7 +8,7 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstatat(_STAT_VER, AT_FDCWD, path, buf, > >>>> AT_SYMLINK_NOFOLLOW); > >>>> + rc = wrap_fstatat(AT_FDCWD, path, buf, AT_SYMLINK_NOFOLLOW); > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/lstat64.c b/ports/linux/guts/lstat64.c > >>>> index 43d0ce1..9e0ff19 100644 > >>>> --- a/ports/linux/guts/lstat64.c > >>>> +++ b/ports/linux/guts/lstat64.c > >>>> @@ -8,7 +8,7 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstatat64(_STAT_VER, AT_FDCWD, path, buf, > >>>> AT_SYMLINK_NOFOLLOW); > >>>> + rc = wrap_fstatat64(AT_FDCWD, path, buf, AT_SYMLINK_NOFOLLOW); > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/mknod.c b/ports/linux/guts/mknod.c > >>>> index 61fd320..66787c0 100644 > >>>> --- a/ports/linux/guts/mknod.c > >>>> +++ b/ports/linux/guts/mknod.c > >>>> @@ -8,7 +8,7 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___xmknod(_MKNOD_VER, path, mode, &dev); > >>>> + rc = wrap_mknodat(AT_FDCWD, path, mode, dev); > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/mknodat.c b/ports/linux/guts/mknodat.c > >>>> index a7e4293..c51a82d 100644 > >>>> --- a/ports/linux/guts/mknodat.c > >>>> +++ b/ports/linux/guts/mknodat.c > >>>> @@ -1,4 +1,5 @@ > >>>> /* > >>>> + * Copyright (c) 2008-2010 Wind River Systems; see > >>>> * Copyright (c) 2016 Wind River Systems; see > >>>> * guts/COPYRIGHT for information. > >>>> * > >>>> @@ -8,7 +9,75 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___xmknodat(_MKNOD_VER, dirfd, path, mode, &dev); > >>>> + pseudo_msg_t *msg; > >>>> + struct stat64 buf; > >>>> + > >>>> + /* mask out mode bits appropriately */ > >>>> + mode = mode & ~pseudo_umask; > >>>> + /* if you don't specify a type, assume regular file */ > >>>> + if (!(mode & S_IFMT)) { > >>>> + mode |= S_IFREG; > >>>> + } > >>>> + pseudo_debug(PDBGF_FILE, "mknodat creating '%s', mode 0%o\n", > >>>> + path ? path : "<no name>", (int) mode); > >>>> + > >>>> +#ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> + if (dirfd != AT_FDCWD) { > >>>> + errno = ENOSYS; > >>>> + return -1; > >>>> + } > >>>> + rc = real_stat64(path, &buf); > >>>> +#else > >>>> + rc = real_fstatat64(dirfd, path, &buf, AT_SYMLINK_NOFOLLOW); > >>>> +#endif > >>>> + if (rc != -1) { > >>>> + /* if we can stat the file, you can't mknod it */ > >>>> + errno = EEXIST; > >>>> + return -1; > >>>> + } > >>>> + if (!dev) { > >>>> + errno = EINVAL; > >>>> + return -1; > >>>> + } > >>>> +#ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> + rc = real_open(path, O_CREAT | O_WRONLY | O_EXCL, > >>>> + PSEUDO_FS_MODE(mode, 0)); > >>>> +#else > >>>> + rc = real_openat(dirfd, path, O_CREAT | O_WRONLY | O_EXCL, > >>>> + PSEUDO_FS_MODE(mode, 0)); > >>>> +#endif > >>>> + if (rc == -1) { > >>>> + return -1; > >>>> + } > >>>> + real_fchmod(rc, PSEUDO_FS_MODE(mode, 0)); > >>>> + real_fstat64(rc, &buf); > >>>> + /* mknod does not really open the file. We don't have > >>>> + * to use wrap_close because we've never exposed this file > >>>> + * descriptor to the client code. > >>>> + */ > >>>> + real_close(rc); > >>>> + > >>>> + /* mask in the mode type bits again */ > >>>> + buf.st_mode = (PSEUDO_DB_MODE(buf.st_mode, mode) & 07777) | > >>>> + (mode & ~07777); > >>>> + buf.st_rdev = dev; > >>>> + msg = pseudo_client_op(OP_MKNOD, 0, -1, dirfd, path, &buf); > >>>> + if (msg && msg->result != RESULT_SUCCEED) { > >>>> + errno = EPERM; > >>>> + rc = -1; > >>>> + } else { > >>>> + /* just pretend we worked */ > >>>> + rc = 0; > >>>> + } > >>>> + if (rc == -1) { > >>>> + int save_errno = errno; > >>>> +#ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> + real_unlink(path); > >>>> +#else > >>>> + real_unlinkat(dirfd, path, AT_SYMLINK_NOFOLLOW); > >>>> +#endif > >>>> + errno = save_errno; > >>>> + } > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/mkostemp64.c > >>>> b/ports/linux/guts/mkostemp64.c > >>>> index 502211b..694070b 100644 > >>>> --- a/ports/linux/guts/mkostemp64.c > >>>> +++ b/ports/linux/guts/mkostemp64.c > >>>> @@ -35,7 +35,7 @@ > >>>> if (rc != -1) { > >>>> save_errno = errno; > >>>> > >>>> - if (real___fxstat64(_STAT_VER, rc, &buf) != -1) { > >>>> + if (base_fstat64(rc, &buf) != -1) { > >>>> real_fchmod(rc, PSEUDO_FS_MODE(0600, 0)); > >>>> pseudo_client_op(OP_CREAT, 0, -1, -1, tmp_template, > >>>> &buf); > >>>> pseudo_client_op(OP_OPEN, PSA_READ | PSA_WRITE, rc, > >>>> -1, tmp_template, &buf); > >>>> diff --git a/ports/linux/guts/openat.c b/ports/linux/guts/openat.c > >>>> index 656ac2b..d027154 100644 > >>>> --- a/ports/linux/guts/openat.c > >>>> +++ b/ports/linux/guts/openat.c > >>>> @@ -56,12 +56,12 @@ > >>>> save_errno = errno; > >>>> #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> if (flags & O_NOFOLLOW) { > >>>> - rc = real___lxstat64(_STAT_VER, path, &buf); > >>>> + rc = base_lstat64(path, &buf); > >>>> } else { > >>>> - rc = real___xstat64(_STAT_VER, path, &buf); > >>>> + rc = base_stat64(path, &buf); > >>>> } > >>>> #else > >>>> - rc = real___fxstatat64(_STAT_VER, dirfd, path, &buf, (flags > >>>> & O_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0); > >>>> + rc = base_fstatat64(dirfd, path, &buf, (flags & O_NOFOLLOW) > >>>> ? AT_SYMLINK_NOFOLLOW : 0); > >>>> #endif > >>>> existed = (rc != -1); > >>>> if (!existed) > >>>> @@ -77,12 +77,12 @@ > >>>> save_errno = errno; > >>>> #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> if (flags & O_NOFOLLOW) { > >>>> - rc = real___lxstat64(_STAT_VER, path, &buf); > >>>> + rc = base_lstat64(path, &buf); > >>>> } else { > >>>> - rc = real___xstat64(_STAT_VER, path, &buf); > >>>> + rc = base_stat64(path, &buf); > >>>> } > >>>> #else > >>>> - rc = real___fxstatat64(_STAT_VER, dirfd, path, &buf, (flags > >>>> & O_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0); > >>>> + rc = base_fstatat64(dirfd, path, &buf, (flags & O_NOFOLLOW) > >>>> ? AT_SYMLINK_NOFOLLOW : 0); > >>>> #endif > >>>> if (rc != -1 && S_ISFIFO(buf.st_mode)) { > >>>> overly_magic_nonblocking = 1; > >>>> @@ -135,12 +135,12 @@ > >>>> #endif > >>>> #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS > >>>> if (flags & O_NOFOLLOW) { > >>>> - stat_rc = real___lxstat64(_STAT_VER, path, &buf); > >>>> + stat_rc = base_lstat64(path, &buf); > >>>> } else { > >>>> - stat_rc = real___xstat64(_STAT_VER, path, &buf); > >>>> + stat_rc = base_xstat64(path, &buf); > >>>> } > >>>> #else > >>>> - stat_rc = real___fxstatat64(_STAT_VER, dirfd, path, &buf, > >>>> (flags & O_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0); > >>>> + stat_rc = base_fstatat64(dirfd, path, &buf, (flags & > >>>> O_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0); > >>>> #endif > >>>> > >>>> pseudo_debug(PDBGF_FILE, "openat(path %s), flags %o, stat > >>>> rc %d, stat mode %o\n", > >>>> diff --git a/ports/linux/guts/stat.c b/ports/linux/guts/stat.c > >>>> index f8c73f7..ccd00db 100644 > >>>> --- a/ports/linux/guts/stat.c > >>>> +++ b/ports/linux/guts/stat.c > >>>> @@ -8,7 +8,7 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstatat(_STAT_VER, AT_FDCWD, path, buf, 0); > >>>> + rc = wrap_fstatat(AT_FDCWD, path, buf, 0); > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/guts/stat64.c b/ports/linux/guts/stat64.c > >>>> index d8b3f36..391a73f 100644 > >>>> --- a/ports/linux/guts/stat64.c > >>>> +++ b/ports/linux/guts/stat64.c > >>>> @@ -8,7 +8,7 @@ > >>>> * int rc = -1; > >>>> */ > >>>> > >>>> - rc = wrap___fxstatat64(_STAT_VER, AT_FDCWD, path, buf, 0); > >>>> + rc = wrap_fstatat64(AT_FDCWD, path, buf, 0); > >>>> > >>>> /* return rc; > >>>> * } > >>>> diff --git a/ports/linux/old__x/README b/ports/linux/old__x/README > >>>> new file mode 100644 > >>>> index 0000000..c94413f > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/README > >>>> @@ -0,0 +1,28 @@ > >>>> +Older glibcs contain stat functions such as: > >>>> + > >>>> +__fxstat > >>>> +__fxstatat > >>>> +__lxstat > >>>> +__xstat > >>>> + > >>>> +__fxstat64 > >>>> +__fxstatat64 > >>>> +__lxstat64 > >>>> +__xstat64 > >>>> + > >>>> +The format of these functions use the _STAT_VER defintion. New glibc no > >>>> +longer define or utilize these functions, so neither can we. > >>>> + > >>>> +We only use this subport when the functions are present, this is checked > >>>> +by with the existence of _STAT_VER. > >>>> + > >>>> +Older glibcs also contain mknod functions such as: > >>>> + > >>>> +__xmknod > >>>> +__xmknodat > >>>> + > >>>> +The format of these functions use the _MKNOD_VER defintion. New glibc > >>>> no > >>>> +longer define or utilize these functions, so neither can we. > >>>> + > >>>> +We only use this subport when the functions are present, this is checked > >>>> +by with the existence of _MKNOD_VER. > >>>> diff --git a/ports/linux/guts/__fxstat.c > >>>> b/ports/linux/old__x/guts/__fxstat.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__fxstat.c > >>>> rename to ports/linux/old__x/guts/__fxstat.c > >>>> diff --git a/ports/linux/guts/__fxstat64.c > >>>> b/ports/linux/old__x/guts/__fxstat64.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__fxstat64.c > >>>> rename to ports/linux/old__x/guts/__fxstat64.c > >>>> diff --git a/ports/linux/guts/__fxstatat.c > >>>> b/ports/linux/old__x/guts/__fxstatat.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__fxstatat.c > >>>> rename to ports/linux/old__x/guts/__fxstatat.c > >>>> diff --git a/ports/linux/guts/__fxstatat64.c > >>>> b/ports/linux/old__x/guts/__fxstatat64.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__fxstatat64.c > >>>> rename to ports/linux/old__x/guts/__fxstatat64.c > >>>> diff --git a/ports/linux/guts/__lxstat.c > >>>> b/ports/linux/old__x/guts/__lxstat.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__lxstat.c > >>>> rename to ports/linux/old__x/guts/__lxstat.c > >>>> diff --git a/ports/linux/guts/__lxstat64.c > >>>> b/ports/linux/old__x/guts/__lxstat64.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__lxstat64.c > >>>> rename to ports/linux/old__x/guts/__lxstat64.c > >>>> diff --git a/ports/linux/guts/__xmknod.c > >>>> b/ports/linux/old__x/guts/__xmknod.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__xmknod.c > >>>> rename to ports/linux/old__x/guts/__xmknod.c > >>>> diff --git a/ports/linux/guts/__xmknodat.c > >>>> b/ports/linux/old__x/guts/__xmknodat.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__xmknodat.c > >>>> rename to ports/linux/old__x/guts/__xmknodat.c > >>>> diff --git a/ports/linux/guts/__xstat.c > >>>> b/ports/linux/old__x/guts/__xstat.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__xstat.c > >>>> rename to ports/linux/old__x/guts/__xstat.c > >>>> diff --git a/ports/linux/guts/__xstat64.c > >>>> b/ports/linux/old__x/guts/__xstat64.c > >>>> similarity index 100% > >>>> rename from ports/linux/guts/__xstat64.c > >>>> rename to ports/linux/old__x/guts/__xstat64.c > >>>> diff --git a/ports/linux/old__x/guts/fstat.c > >>>> b/ports/linux/old__x/guts/fstat.c > >>>> new file mode 100644 > >>>> index 0000000..b089b15 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/fstat.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2011 Wind River Systems; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int fstat(int fd, struct stat *buf) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___fxstat(_STAT_VER, fd, buf); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/fstat64.c > >>>> b/ports/linux/old__x/guts/fstat64.c > >>>> new file mode 100644 > >>>> index 0000000..6dd97da > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/fstat64.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2012 Wind River Systems; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int fstat64(int fd, struct stat *buf) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___fxstat64(_STAT_VER, fd, buf); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/fstatat.c > >>>> b/ports/linux/old__x/guts/fstatat.c > >>>> new file mode 100644 > >>>> index 0000000..3267641 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/fstatat.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2021 Linux Foundation; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int fstatat(int dirfd, const char *path, struct stat *buf, int flags) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___fxstatat(_STAT_VER, dirfd, path, buf, flags); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/fstatat64.c > >>>> b/ports/linux/old__x/guts/fstatat64.c > >>>> new file mode 100644 > >>>> index 0000000..c981e14 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/fstatat64.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2021 Linux Foundation; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int fstatat64(int dirfd, const char *path, struct stat64 *buf, int > >>>> flags) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___fxstatat64(_STAT_VER, dirfd, path, buf, flags); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/lstat.c > >>>> b/ports/linux/old__x/guts/lstat.c > >>>> new file mode 100644 > >>>> index 0000000..d2c4d50 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/lstat.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2011 Wind River Systems; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int lstat(const char *path, struct stat *buf) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___fxstatat(_STAT_VER, AT_FDCWD, path, buf, > >>>> AT_SYMLINK_NOFOLLOW); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/lstat64.c > >>>> b/ports/linux/old__x/guts/lstat64.c > >>>> new file mode 100644 > >>>> index 0000000..43d0ce1 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/lstat64.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2012 Wind River Systems; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int lstat64(const char *path, struct stat *buf) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___fxstatat64(_STAT_VER, AT_FDCWD, path, buf, > >>>> AT_SYMLINK_NOFOLLOW); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/mknod.c > >>>> b/ports/linux/old__x/guts/mknod.c > >>>> new file mode 100644 > >>>> index 0000000..61fd320 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/mknod.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2016 Wind River Systems; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int mknod(const char *path, mode_t mode, dev_t dev) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___xmknod(_MKNOD_VER, path, mode, &dev); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/mknodat.c > >>>> b/ports/linux/old__x/guts/mknodat.c > >>>> new file mode 100644 > >>>> index 0000000..a7e4293 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/mknodat.c > >>>> @@ -0,0 +1,15 @@ > >>>> +/* > >>>> + * Copyright (c) 2016 Wind River Systems; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev) > >>>> + * int rc = -1; > >>>> + */ > >>>> + > >>>> + rc = wrap___xmknodat(_MKNOD_VER, dirfd, path, mode, &dev); > >>>> + > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/guts/mkostemp64.c > >>>> b/ports/linux/old__x/guts/mkostemp64.c > >>>> new file mode 100644 > >>>> index 0000000..502211b > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/guts/mkostemp64.c > >>>> @@ -0,0 +1,53 @@ > >>>> +/* > >>>> + * Copyright (c) 2010 Wind River Systems; see > >>>> + * guts/COPYRIGHT for information. > >>>> + * > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + * static int > >>>> + * wrap_mkstemp64(char *template, int oflags) { > >>>> + * int rc = -1; > >>>> + */ > >>>> + struct stat64 buf; > >>>> + int save_errno; > >>>> + size_t len; > >>>> + char *tmp_template; > >>>> + > >>>> + if (!template) { > >>>> + errno = EFAULT; > >>>> + return 0; > >>>> + } > >>>> + > >>>> + len = strlen(template); > >>>> + tmp_template = PSEUDO_ROOT_PATH(AT_FDCWD, template, > >>>> AT_SYMLINK_NOFOLLOW); > >>>> + > >>>> + if (!tmp_template) { > >>>> + errno = ENOENT; > >>>> + return -1; > >>>> + } > >>>> + > >>>> + /* mkstemp64 wrapper uses this code and mkostemp64 not present in > >>>> some glibc versions */ > >>>> + if (oflags == 0) > >>>> + rc = real_mkstemp64(tmp_template); > >>>> + else > >>>> + rc = real_mkostemp64(tmp_template, oflags); > >>>> + > >>>> + if (rc != -1) { > >>>> + save_errno = errno; > >>>> + > >>>> + if (real___fxstat64(_STAT_VER, rc, &buf) != -1) { > >>>> + real_fchmod(rc, PSEUDO_FS_MODE(0600, 0)); > >>>> + pseudo_client_op(OP_CREAT, 0, -1, -1, tmp_template, > >>>> &buf); > >>>> + pseudo_client_op(OP_OPEN, PSA_READ | PSA_WRITE, rc, > >>>> -1, tmp_template, &buf); > >>>> + } else { > >>>> + pseudo_debug(PDBGF_CONSISTENCY, "mkstemp (fd %d) > >>>> succeeded, but fstat failed (%s).\n", > >>>> + rc, strerror(errno)); > >>>> + pseudo_client_op(OP_OPEN, PSA_READ | PSA_WRITE, rc, > >>>> -1, tmp_template, 0); > >>>> + } > >>>> + errno = save_errno; > >>>> + } > >>>> + /* mkstemp only changes the XXXXXX at the end. */ > >>>> + memcpy(template + len - 6, tmp_template + strlen(tmp_template) - 6, > >>>> 6); > >>>> +/* return rc; > >>>> + * } > >>>> + */ > >>>> diff --git a/ports/linux/old__x/portdefs.h > >>>> b/ports/linux/old__x/portdefs.h > >>>> new file mode 100644 > >>>> index 0000000..f2bdc22 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/portdefs.h > >>>> @@ -0,0 +1,40 @@ > >>>> +/* > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + */ > >>>> + > >>>> +/* If the subport was enabled, and these are not defined provide a > >>>> default */ > >>>> +#ifndef _STAT_VER > >>>> +#if defined (__aarch64__) > >>>> +#define _STAT_VER 0 > >>>> +#elif defined (__x86_64__) > >>>> +#define _STAT_VER 1 > >>>> +#else > >>>> +#define _STAT_VER 3 > >>>> +#endif > >>>> +#endif > >>>> + > >>>> +#if PSEUDO_STATBUF_64 > >>>> +#define base_fstat(fd, buf) real___fxstat64(_STAT_VER, fd, buf) > >>>> +#define base_stat(path, buf) real___xstat64(_STAT_VER, path, buf) > >>>> +#define base_fstatat(dirfd, path, buf, flags) > >>>> real___fxstatat64(_STAT_VER, dirfd, path, buf, flags) > >>>> +#else > >>>> +#define base_fstat(fd, buf) real___fxstat(_STAT_VER, fd, buf) > >>>> +#define base_stat(path, buf) real___xstat(_STAT_VER, path, buf) > >>>> +#define base_fstatat(dirfd, path, buf, flags) > >>>> real___fxstatat(_STAT_VER, dirfd, path, buf, flags) > >>>> +#endif > >>>> + > >>>> +#define base_fstat64(path, buf) real___fxstat64(_STAT_VER, path, buf) > >>>> +#define base_stat64(path, buf) real___xstat64(_STAT_VER, path, buf) > >>>> +#define base_fstatat64(dirfd, path, buf, flags) > >>>> real___fxstatat64(_STAT_VER, dirfd, path, buf, flags) > >>>> + > >>>> +/* If the subport was enabled, and these are not defined provide a > >>>> default */ > >>>> +#ifndef _MKNOD_VER > >>>> +#if defined (__aarch64__) > >>>> +#define _MKNOD_VER 0 > >>>> +#elif defined (__x86_64__) > >>>> +#define _MKNOD_VER 0 > >>>> +#else > >>>> +#define _MKNOD_VER 1 > >>>> +#endif > >>>> +#endif > >>>> diff --git a/ports/linux/old__x/pseudo_wrappers.c > >>>> b/ports/linux/old__x/pseudo_wrappers.c > >>>> new file mode 100644 > >>>> index 0000000..455bc09 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/pseudo_wrappers.c > >>>> @@ -0,0 +1,48 @@ > >>>> +/* > >>>> + * SPDX-License-Identifier: LGPL-2.1-only > >>>> + * > >>>> + */ > >>>> +/* the unix port wants to know that real_stat() and > >>>> + * friends exist. So they do. And because the Linux > >>>> + * port really uses stat64 for those... > >>>> + */ > >>>> +int > >>>> +pseudo_stat(const char *path, struct stat *buf) { > >>>> + return real___xstat(_STAT_VER, path, buf); > >>>> +} > >>>> + > >>>> +int > >>>> +pseudo_lstat(const char *path, struct stat *buf) { > >>>> + return real___lxstat(_STAT_VER, path, buf); > >>>> +} > >>>> + > >>>> +int > >>>> +pseudo_fstat(int fd, struct stat *buf) { > >>>> + return real___fxstat(_STAT_VER, fd, buf); > >>>> +} > >>>> + > >>>> +int > >>>> +pseudo_stat64(const char *path, struct stat64 *buf) { > >>>> + return real___xstat64(_STAT_VER, path, buf); > >>>> +} > >>>> + > >>>> +int > >>>> +pseudo_lstat64(const char *path, struct stat64 *buf) { > >>>> + return real___lxstat64(_STAT_VER, path, buf); > >>>> +} > >>>> + > >>>> +int > >>>> +pseudo_fstat64(int fd, struct stat64 *buf) { > >>>> + return real___fxstat64(_STAT_VER, fd, buf); > >>>> +} > >>>> + > >>>> +/* similar thing happens with mknod */ > >>>> +int > >>>> +pseudo_mknod(const char *path, mode_t mode, dev_t dev) { > >>>> + return real___xmknod(_MKNOD_VER, path, mode, &dev); > >>>> +} > >>>> + > >>>> +int > >>>> +pseudo_mknodat(int dirfd, const char *path, mode_t mode, dev_t dev) { > >>>> + return real___xmknodat(_MKNOD_VER, dirfd, path, mode, &dev); > >>>> +} > >>>> diff --git a/ports/linux/old__x/wrapfuncs.in > >>>> b/ports/linux/old__x/wrapfuncs.in > >>>> new file mode 100644 > >>>> index 0000000..de24e63 > >>>> --- /dev/null > >>>> +++ b/ports/linux/old__x/wrapfuncs.in > >>>> @@ -0,0 +1,18 @@ > >>>> +int __xstat(int ver, const char *path, struct stat *buf); > >>>> +int __lxstat(int ver, const char *path, struct stat *buf); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int __fxstat(int ver, int fd, struct stat *buf); > >>>> +int __fxstatat(int ver, int dirfd, const char *path, struct stat *buf, > >>>> int flags); > >>>> +int __xstat64(int ver, const char *path, struct stat64 *buf); > >>>> +int __lxstat64(int ver, const char *path, struct stat64 *buf); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int __fxstat64(int ver, int fd, struct stat64 *buf); > >>>> +int __fxstatat64(int ver, int dirfd, const char *path, struct stat64 > >>>> *buf, int flags); > >>>> + > >>>> +int stat(const char *path, struct stat *buf); /* real_func=pseudo_stat > >>>> */ > >>>> +int lstat(const char *path, struct stat *buf); /* > >>>> real_func=pseudo_lstat, flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int lstat64(const char *path, struct stat64 *buf); /* > >>>> real_func=pseudo_lstat64, flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int fstat64(int fd, struct stat64 *buf); /* real_func=pseudo_fstat64 */ > >>>> + > >>>> +int __xmknod(int ver, const char *path, mode_t mode, dev_t *dev); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int __xmknodat(int ver, int dirfd, const char *path, mode_t mode, dev_t > >>>> *dev); /* flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int mknod(const char *path, mode_t mode, dev_t dev); /* > >>>> real_func=pseudo_mknod */ > >>>> +int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); /* > >>>> real_func=pseudo_mknodat */ > >>>> diff --git a/ports/linux/portdefs.h b/ports/linux/portdefs.h > >>>> index 9545550..a92e969 100644 > >>>> --- a/ports/linux/portdefs.h > >>>> +++ b/ports/linux/portdefs.h > >>>> @@ -34,22 +34,3 @@ GLIBC_COMPAT_SYMBOL(memcpy,2.0); > >>>> #include <sys/syscall.h> > >>>> #include <sys/prctl.h> > >>>> #include <linux/seccomp.h> > >>>> - > >>>> -#ifndef _STAT_VER > >>>> -#if defined (__aarch64__) > >>>> -#define _STAT_VER 0 > >>>> -#elif defined (__x86_64__) > >>>> -#define _STAT_VER 1 > >>>> -#else > >>>> -#define _STAT_VER 3 > >>>> -#endif > >>>> -#endif > >>>> -#ifndef _MKNOD_VER > >>>> -#if defined (__aarch64__) > >>>> -#define _MKNOD_VER 0 > >>>> -#elif defined (__x86_64__) > >>>> -#define _MKNOD_VER 0 > >>>> -#else > >>>> -#define _MKNOD_VER 1 > >>>> -#endif > >>>> -#endif > >>>> diff --git a/ports/linux/pseudo_wrappers.c > >>>> b/ports/linux/pseudo_wrappers.c > >>>> index 7659897..7a4f549 100644 > >>>> --- a/ports/linux/pseudo_wrappers.c > >>>> +++ b/ports/linux/pseudo_wrappers.c > >>>> @@ -2,50 +2,7 @@ > >>>> * SPDX-License-Identifier: LGPL-2.1-only > >>>> * > >>>> */ > >>>> -/* the unix port wants to know that real_stat() and > >>>> - * friends exist. So they do. And because the Linux > >>>> - * port really uses stat64 for those... > >>>> - */ > >>>> -int > >>>> -pseudo_stat(const char *path, struct stat *buf) { > >>>> - return real___xstat(_STAT_VER, path, buf); > >>>> -} > >>>> - > >>>> -int > >>>> -pseudo_lstat(const char *path, struct stat *buf) { > >>>> - return real___lxstat(_STAT_VER, path, buf); > >>>> -} > >>>> - > >>>> -int > >>>> -pseudo_fstat(int fd, struct stat *buf) { > >>>> - return real___fxstat(_STAT_VER, fd, buf); > >>>> -} > >>>> - > >>>> -int > >>>> -pseudo_stat64(const char *path, struct stat64 *buf) { > >>>> - return real___xstat64(_STAT_VER, path, buf); > >>>> -} > >>>> - > >>>> -int > >>>> -pseudo_lstat64(const char *path, struct stat64 *buf) { > >>>> - return real___lxstat64(_STAT_VER, path, buf); > >>>> -} > >>>> - > >>>> -int > >>>> -pseudo_fstat64(int fd, struct stat64 *buf) { > >>>> - return real___fxstat64(_STAT_VER, fd, buf); > >>>> -} > >>>> - > >>>> /* similar thing happens with mknod */ > >>>> -int > >>>> -pseudo_mknod(const char *path, mode_t mode, dev_t dev) { > >>>> - return real___xmknod(_MKNOD_VER, path, mode, &dev); > >>>> -} > >>>> - > >>>> -int > >>>> -pseudo_mknodat(int dirfd, const char *path, mode_t mode, dev_t dev) { > >>>> - return real___xmknodat(_MKNOD_VER, dirfd, path, mode, &dev); > >>>> -} > >>>> > >>>> int pseudo_capset(cap_user_header_t hdrp, const cap_user_data_t datap) > >>>> { > >>>> (void)hdrp; > >>>> diff --git a/ports/linux/subports b/ports/linux/subports > >>>> index 099ea59..53f6696 100755 > >>>> --- a/ports/linux/subports > >>>> +++ b/ports/linux/subports > >>>> @@ -70,3 +70,18 @@ else > >>>> fi > >>>> rm -f dummy.c dummy.o > >>>> > >>>> +# Check if _STAT_VER is defined. This is an indication that the old > >>>> internal __*xstat* functions are available > >>>> +# Check if _MKNOD_VER is defined. This is an indication that the old > >>>> internal __xmknod* functions are available > >>>> +cat > dummy.c <<EOF > >>>> +#include <sys/stat.h> > >>>> +#ifndef _STAT_VER > >>>> +#error _STAT_VER not defined > >>>> +#endif > >>>> +#ifndef _MKNOD_VER > >>>> +#error _MKNOD_VER not defined > >>>> +#endif > >>>> +EOF > >>>> +if ${CC} -c -o dummy.o dummy.c >/dev/null 2>&1; then > >>>> + echo "linux/old__x" > >>>> +fi > >>>> +rm -f dummy.c dummy.o > >>>> diff --git a/ports/linux/wrapfuncs.in b/ports/linux/wrapfuncs.in > >>>> index 97b16c2..5187fd8 100644 > >>>> --- a/ports/linux/wrapfuncs.in > >>>> +++ b/ports/linux/wrapfuncs.in > >>>> @@ -1,17 +1,11 @@ > >>>> int open(const char *path, int flags, ...{mode_t mode}); /* > >>>> flags=flags&O_NOFOLLOW, noignore_path=1 */ > >>>> char *get_current_dir_name(void); > >>>> -int __xstat(int ver, const char *path, struct stat *buf); > >>>> -int __lxstat(int ver, const char *path, struct stat *buf); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> -int __fxstat(int ver, int fd, struct stat *buf); > >>>> int lchmod(const char *path, mode_t mode); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> int lchown(const char *path, uid_t owner, gid_t group); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> -int __fxstatat(int ver, int dirfd, const char *path, struct stat *buf, > >>>> int flags); > >>>> int openat(int dirfd, const char *path, int flags, ...{mode_t mode}); > >>>> /* flags=flags&O_NOFOLLOW, noignore_path=1 */ > >>>> int __openat_2(int dirfd, const char *path, int flags); /* > >>>> flags=flags&O_NOFOLLOW, noignore_path=1 */ > >>>> -int mknod(const char *path, mode_t mode, dev_t dev); /* > >>>> real_func=pseudo_mknod */ > >>>> -int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); /* > >>>> real_func=pseudo_mknodat */ > >>>> -int __xmknod(int ver, const char *path, mode_t mode, dev_t *dev); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> -int __xmknodat(int ver, int dirfd, const char *path, mode_t mode, dev_t > >>>> *dev); /* flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int mknod(const char *path, mode_t mode, dev_t dev); > >>>> +int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); > >>>> int fcntl(int fd, int cmd, ...{struct flock *lock}); /* > >>>> noignore_path=1 */ > >>>> int fcntl64(int fd, int cmd, ...{struct flock *lock}); /* > >>>> noignore_path=1 */ > >>>> # just so we know the inums of symlinks > >>>> @@ -21,18 +15,14 @@ int open64(const char *path, int flags, ...{mode_t > >>>> mode}); /* flags=flags&O_NOFO > >>>> int openat64(int dirfd, const char *path, int flags, ...{mode_t > >>>> mode}); /* flags=flags&O_NOFOLLOW, noignore_path=1 */ > >>>> int __openat64_2(int dirfd, const char *path, int flags); /* > >>>> flags=flags&O_NOFOLLOW, noignore_path=1 */ > >>>> int creat64(const char *path, mode_t mode); > >>>> -int stat(const char *path, struct stat *buf); /* real_func=pseudo_stat > >>>> */ > >>>> -int lstat(const char *path, struct stat *buf); /* > >>>> real_func=pseudo_lstat, flags=AT_SYMLINK_NOFOLLOW */ > >>>> -int fstat(int fd, struct stat *buf); /* real_func=pseudo_fstat */ > >>>> +int stat(const char *path, struct stat *buf); > >>>> +int lstat(const char *path, struct stat *buf); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int fstat(int fd, struct stat *buf); > >>>> int fstatat(int dirfd, const char *path, struct stat *buf, int flags); > >>>> -int stat64(const char *path, struct stat64 *buf); /* > >>>> real_func=pseudo_stat64 */ > >>>> -int lstat64(const char *path, struct stat64 *buf); /* > >>>> real_func=pseudo_lstat64, flags=AT_SYMLINK_NOFOLLOW */ > >>>> -int fstat64(int fd, struct stat64 *buf); /* real_func=pseudo_fstat64 */ > >>>> +int stat64(const char *path, struct stat64 *buf); > >>>> +int lstat64(const char *path, struct stat64 *buf); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> +int fstat64(int fd, struct stat64 *buf); > >>>> int fstatat64(int dirfd, const char *path, struct stat64 *buf, int > >>>> flags); > >>>> -int __xstat64(int ver, const char *path, struct stat64 *buf); > >>>> -int __lxstat64(int ver, const char *path, struct stat64 *buf); /* > >>>> flags=AT_SYMLINK_NOFOLLOW */ > >>>> -int __fxstat64(int ver, int fd, struct stat64 *buf); > >>>> -int __fxstatat64(int ver, int dirfd, const char *path, struct stat64 > >>>> *buf, int flags); > >>>> FILE *fopen64(const char *path, const char *mode); /* noignore_path=1 > >>>> */ > >>>> int nftw64(const char *path, int (*fn)(const char *, const struct > >>>> stat64 *, int, struct FTW *), int nopenfd, int flag); /* noignore_path=1 > >>>> */ > >>>> FILE *freopen64(const char *path, const char *mode, FILE *stream); /* > >>>> noignore_path=1 */ > >>>> diff --git a/pseudo_client.h b/pseudo_client.h > >>>> index d7944ce..8d05e4f 100644 > >>>> --- a/pseudo_client.h > >>>> +++ b/pseudo_client.h > >>>> @@ -12,15 +12,41 @@ extern int pseudo_client_ignore_fd(int fd); > >>>> extern void pseudo_client_linked_paths(const char *oldpath, const char > >>>> *newpath); > >>>> #if PSEUDO_STATBUF_64 > >>>> #define base_lstat real_lstat64 > >>>> -#define base_fstat real_fstat64 > >>>> -#define base_stat real_stat64 > >>>> -#define base_fstatat(dirfd, path, buf, flags) > >>>> real___fxstatat64(_STAT_VER, dirfd, path, buf, flags) > >>>> +#ifndef base_fstat > >>>> + #define base_fstat real_fstat64 > >>>> +#endif > >>>> +#ifndef base_stat > >>>> + #define base_stat real_stat64 > >>>> +#endif > >>>> +#ifndef base_fstatat > >>>> + #define base_fstatat real_fstatat64 > >>>> +#endif > >>>> #else > >>>> #define base_lstat real_lstat > >>>> -#define base_fstat real_fstat > >>>> -#define base_stat real_stat > >>>> -#define base_fstatat(dirfd, path, buf, flags) > >>>> real___fxstatat(_STAT_VER, dirfd, path, buf, flags) > >>>> +#ifndef base_fstat > >>>> + #define base_fstat real_fstat > >>>> +#endif > >>>> +#ifndef base_stat > >>>> + #define base_stat real_stat > >>>> +#endif > >>>> +#ifndef base_fstatat > >>>> + #define base_fstatat real_fstatat > >>>> +#endif > >>>> #endif > >>>> + > >>>> +#ifndef base_lstat64 > >>>> + #define base_lstat64 real_lstat64 > >>>> +#endif > >>>> +#ifndef base_fstat64 > >>>> + #define base_fstat64 real_fstat64 > >>>> +#endif > >>>> +#ifndef base_stat64 > >>>> + #define base_stat64 real_stat64 > >>>> +#endif > >>>> +#ifndef base_fstatat64 > >>>> + #define base_fstatat64 real_fstatat64 > >>>> +#endif > >>>> + > >>>> extern void pseudo_antimagic(void); > >>>> extern void pseudo_magic(void); > >>>> extern void pseudo_client_touchuid(void); > >>>> -- > >>>> 2.17.1 > >>>> > >>>> > >>>> > >>> > >>> -- > >>> Alexandre Belloni, co-owner and COO, Bootlin > >>> Embedded Linux and Kernel engineering > >>> https://bootlin.com > >>> > >>> > >>> > >> > >> -- > >> Alexandre Belloni, co-owner and COO, Bootlin > >> Embedded Linux and Kernel engineering > >> https://bootlin.com > >> > >> > >> >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#182833): https://lists.openembedded.org/g/openembedded-core/message/182833 Mute This Topic: https://lists.openembedded.org/mt/99234918/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
