GNU bug report logs - #41264
Bootstrap packages fail to build due to mes-libc lacking 'stat64' etc. syscalls

Previous Next

Package: guix;

Reported by: Mathieu Othacehe <othacehe <at> gnu.org>

Date: Thu, 14 May 2020 15:18:02 UTC

Severity: important

Merged with 49985

To reply to this bug, email your comments to 41264 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Thu, 14 May 2020 15:18:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Mathieu Othacehe <othacehe <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Thu, 14 May 2020 15:18:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Mathieu Othacehe <othacehe <at> gnu.org>
To: bug-guix <at> gnu.org
Cc: janneke <at> gnu.org
Subject: Bootstrap packages fail to build.
Date: Thu, 14 May 2020 17:17:47 +0200
[Message part 1 (text/plain, inline)]
Hello,

This command fails on one of my systems:

--8<---------------cut here---------------start------------->8---
guix build  -e "(@@ (gnu packages commencement) glibc-mesboot0)"
--8<---------------cut here---------------end--------------->8---

with the following error:

--8<---------------cut here---------------start------------->8---
phase `unpack' succeeded after 11.8 seconds
starting phase `apply-boot-patch'
patch: **** fstatsterror: unknown error:  
command "patch" "--force" "-p1" "-i" "/gnu/store/pfz4y5i7krlvam2m8lpddmg9vi44rpqh-glibc-boot-2.2.5.patch" failed with status 2
note: keeping build directory `/tmp/guix-build-glibc-mesboot0-2.2.5.drv-1'
builder for `/gnu/store/jcqggqckhiq43y2ivlfhpkbfbp2vyjlc-glibc-mesboot0-2.2.5.drv' failed with exit code 1
build of /gnu/store/jcqggqckhiq43y2ivlfhpkbfbp2vyjlc-glibc-mesboot0-2.2.5.drv failed
View build log at '/var/log/guix/drvs/jc/qggqckhiq43y2ivlfhpkbfbp2vyjlc-glibc-mesboot0-2.2.5.drv.bz2'.
guix build: error: build of `/gnu/store/jcqggqckhiq43y2ivlfhpkbfbp2vyjlc-glibc-mesboot0-2.2.5.drv' failed
--8<---------------cut here---------------end--------------->8---

Here's a stracing of the failing "patch" command:

--8<---------------cut here---------------start------------->8---
open("/gnu/store/pfz4y5i7krlvam2m8lpddmg9vi44rpqh-glibc-boot-2.2.5.patch", O_RDONLY) = 3
brk(0x9377913)                          = 0x9377913
fstat(3, 0xffb29328)                    = -1 EOVERFLOW (Value too large for defined data type)
--8<---------------cut here---------------end--------------->8---

"patch-mesboot" is built for 32 bits. Hence, it can be using
"__ia32_sys_fstat", "__ia32_compat_sys_newfstat" or
"__ia32_compat_sys_x86_fstat64" syscall for "fstat". Here, according to
perf, it's using __ia32_compat_sys_newfstat which is overflowing on my
file system (inode count to high or so).

There's a little demonstration program attached. When built with `gcc
-m32 test.c', I have:

--8<---------------cut here---------------start------------->8---
fstat(3, 0xffad5874)                    = -1 EOVERFLOW (Value too large for defined data type)
fstat64(3, {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
fstat64(3, {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
--8<---------------cut here---------------end--------------->8---

So I think somehow, bootstrap packages use the legacy "fstat" syscall,
which may overflow on a 64 bits system.

WDYT,

Thanks,

Mathieu
[t.c (text/x-csrc, inline)]
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/sysmacros.h>

int
main(int argc, char *argv[])
{
    struct stat sb;

    if (argc != 2) {
        fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    int fd = open(argv[1], O_RDONLY);
    syscall(__NR_fstat, fd, &sb);
    syscall(__NR_fstat64, fd, &sb);
    fstat(fd, &sb);


    exit(EXIT_SUCCESS);
}

Information forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Fri, 15 May 2020 12:12:02 GMT) Full text and rfc822 format available.

Message #8 received at 41264 <at> debbugs.gnu.org (full text, mbox):

From: Mathieu Othacehe <othacehe <at> gnu.org>
To: 41264 <at> debbugs.gnu.org
Subject: Re: bug#41264: Bootstrap packages fail to build.
Date: Fri, 15 May 2020 14:11:34 +0200
Hello,

> fstat(3, 0xffad5874)                    = -1 EOVERFLOW (Value too large for defined data type)
> fstat64(3, {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
> fstat64(3, {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
>
> So I think somehow, bootstrap packages use the legacy "fstat" syscall,
> which may overflow on a 64 bits system.

More info on that one. Linux syscall "newstat", will call
"cp_compat_stat". This function starts by checking the device id:

--8<---------------cut here---------------start------------->8---
	struct compat_stat tmp;

	if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev))
		return -EOVERFLOW;
--8<---------------cut here---------------end--------------->8---

Here, stat->dev is 66308 (major: 259, minor 4).

"old_valid_dev" checks that:

--8<---------------cut here---------------start------------->8---
static inline bool old_valid_dev(dev_t dev)
{
	return MAJOR(dev) < 256 && MINOR(dev) < 256;
}--8<---------------cut here---------------end--------------->8---

Which is false here, because my NVME disk has a BLOCK_EXT_MAJOR (259).

So stat, lstat, and all other related function will return -EOVERFLOW
unless their 64 bits stat64, lstat64 counterpart is used.

So I think this means that one cannot build the Guix bootstrap toolchain on an
NVME disk.

Thanks,

Mathieu




Information forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Tue, 19 May 2020 08:53:01 GMT) Full text and rfc822 format available.

Message #11 received at 41264 <at> debbugs.gnu.org (full text, mbox):

From: Mathieu Othacehe <othacehe <at> gnu.org>
To: 41264 <at> debbugs.gnu.org
Subject: Re: bug#41264: Bootstrap packages fail to build.
Date: Tue, 19 May 2020 10:52:28 +0200
Hello,

> So stat, lstat, and all other related function will return -EOVERFLOW
> unless their 64 bits stat64, lstat64 counterpart is used.
>
> So I think this means that one cannot build the Guix bootstrap toolchain on an
> NVME disk.

After further investigations I think that it is needed to patch GNU Mes
to fix this bug.

We would need to add three new syscalls for x86:

--8<---------------cut here---------------start------------->8---
#define SYS_stat64    0xc3
#define SYS_lstat64   0xc4
#define SYS_fstat64   0xc5
--8<---------------cut here---------------end--------------->8---

lib/linux/stat.c should be modified this way:

--8<---------------cut here---------------start------------->8---
#if __i386__
#define STAT_SYSCALL SYS_stat64
#else
#define STAT_SYSCALL SYS_stat
#endif

int
stat (char const *file_name, struct stat *statbuf)
{
  struct stat64 statbuf64;
  int ret;

  ret = _sys_call2 (STAT_SYSCALL, (long) file_name, (long) &statbuf64);

#if __i386__
  stat64_to_32(&statbuf64, statbuf);
#else
  *statbuf = statbuf64;
#endif

  return ret;
}
--8<---------------cut here---------------end--------------->8---

Then we would need to create stat64_to_32 which could be inspired from
__xstat64_conv from the glibc. Then, lstat and fstat64 would need to be
patched the same way.

This way, we would replicate the glibc behavior.

Thanks,

Mathieu




Information forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Tue, 19 May 2020 16:54:01 GMT) Full text and rfc822 format available.

Message #14 received at 41264 <at> debbugs.gnu.org (full text, mbox):

From: Jan Nieuwenhuizen <janneke <at> gnu.org>
To: Mathieu Othacehe <othacehe <at> gnu.org>
Cc: 41264 <at> debbugs.gnu.org
Subject: Re: bug#41264: Bootstrap packages fail to build.
Date: Tue, 19 May 2020 18:52:56 +0200
Mathieu Othacehe writes:

Hello Mathieu,

>> So stat, lstat, and all other related function will return -EOVERFLOW
>> unless their 64 bits stat64, lstat64 counterpart is used.
>>
>> So I think this means that one cannot build the Guix bootstrap toolchain on an
>> NVME disk.
>
> After further investigations I think that it is needed to patch GNU Mes
> to fix this bug.

Hmm, we need to patch Mes after all.  That's unfortunate.

> We would need to add three new syscalls for x86:
>
> #define SYS_stat64    0xc3
> #define SYS_lstat64   0xc4
> #define SYS_fstat64   0xc5
>
>
> lib/linux/stat.c should be modified this way:
>
> #if __i386__
> #define STAT_SYSCALL SYS_stat64
> #else
> #define STAT_SYSCALL SYS_stat
> #endif

Ah...the stat64 syscall is meant for i386; now it at starts making at
least some sense to me.

> int
> stat (char const *file_name, struct stat *statbuf)
> {
>   struct stat64 statbuf64;
>   int ret;
>
>   ret = _sys_call2 (STAT_SYSCALL, (long) file_name, (long) &statbuf64);
>
> #if __i386__
>   stat64_to_32(&statbuf64, statbuf);
> #else
>   *statbuf = statbuf64;
> #endif
>
>   return ret;
> }

That looks OK...

> Then we would need to create stat64_to_32 which could be inspired from
> __xstat64_conv from the glibc. Then, lstat and fstat64 would need to be
> patched the same way.
>
> This way, we would replicate the glibc behavior.

Beautiful, thanks for getting to the bottom of this.  Now that you
already have gone this far, would you like to whip-up a full patch for
GNU Mes?

To test it we may have to provide a tarball as we don't want to use XZ
and we don't have patch yet.  Or possibly we can download some
individual files ande overwrite them.

Greetings,
Janneke

-- 
Jan Nieuwenhuizen <janneke <at> gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com




Merged 41264 49985. Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Wed, 01 Sep 2021 13:57:02 GMT) Full text and rfc822 format available.

Changed bug title to 'Bootstrap packages fail to build due to mes-libc lacking 'stat64' etc. syscalls' from 'Bootstrap packages fail to build.' Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Wed, 01 Sep 2021 14:00:02 GMT) Full text and rfc822 format available.

Severity set to 'important' from 'normal' Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Wed, 01 Sep 2021 14:00:03 GMT) Full text and rfc822 format available.

Information forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Mon, 13 Feb 2023 11:30:03 GMT) Full text and rfc822 format available.

Message #23 received at 41264 <at> debbugs.gnu.org (full text, mbox):

From: Jan Nieuwenhuizen <janneke <at> gnu.org>
To: Mathieu Othacehe <othacehe <at> gnu.org>
Cc: 41264 <at> debbugs.gnu.org, 49985 <at> debbugs.gnu.org
Subject: Re: bug#49985: Bootstrap packages fail to build due to mes-libc
 lacking 'stat64' etc. syscalls
Date: Mon, 13 Feb 2023 12:28:54 +0100
[Message part 1 (text/plain, inline)]
Jan Nieuwenhuizen writes:

Hello!

> Mathieu Othacehe writes:
[..]
>> lib/linux/stat.c should be modified this way:
>>
>> #if __i386__
>> #define STAT_SYSCALL SYS_stat64
>> #else
>> #define STAT_SYSCALL SYS_stat
>> #endif
>
> Ah...the stat64 syscall is meant for i386; now it at starts making at
> least some sense to me.
[..]
>> This way, we would replicate the glibc behavior.
>
> Beautiful, thanks for getting to the bottom of this.  Now that you
> already have gone this far, would you like to whip-up a full patch for
> GNU Mes?
[..]

To use stat64 and friends on 32bit, I created the attached patch for GNU
Mes and hope to create a 0.24.2 release from

    https://gitlab.com/janneke/mes/-/tree/wip-stat64

Also, I have update my core-updates branch with preliminary 0.24.2 mes
and mes-boot packages here

    https://gitlab.com/janneke/guix/-/tree/core-updates

Greetings,
Janneke

[0001-lib-stat-Use-SYS_stat64-for-32bit-platforms.patch (text/x-patch, inline)]
From bc1fa57851d360abb161c54dce5339ad9d7af7aa Mon Sep 17 00:00:00 2001
From: "Jan (janneke) Nieuwenhuizen" <janneke <at> gnu.org>
Date: Sat, 29 Oct 2022 13:17:58 +0200
Subject: [PATCH] lib: stat: Use SYS_stat64 for 32bit platforms.

This fixes <https://debbugs.gnu.org/41264>.

* include/linux/arm/syscall.h (SYS_stat64, SYS_lstat64,
SYS_fstat64)[__SIZEOF_LONG_LONG__ == 8]:
New defines.
(SYS_stat, SYS_lstat, SYS_fstat)[__SIZEOF_LONG_LONG__ == 8]: Redefine them.
* include/linux/x86/syscall.h (SYS_stat64, SYS_lstat64,
SYS_fstat64)[__SIZEOF_LONG_LONG__ == 8]:
New defines.
(SYS_stat, SYS_lstat, SYS_fstat)[__SIZEOF_LONG_LONG__ == 8]: Redefine them.
* include/sys/stat.h (struct stat): Move definition to...
* include/linux/arm/kernel-stat.h,
include/linux/m2/kernel-stat.h,
include/linux/x86/kernel-stat.h,
include/linux/x86_64/kernel-stat.h: These new files.
* include/gnu/x86/kernel-stat.h: New file.
* configure (main): Copy <srcdest>include/<kernel>/<arch>/*.h to
include/.
* configure.sh: Likewise.
* .gitignore: Ignore them.  Add copyright header.
* build-aux/GNUmakefile.in (X86_ARCH_HEADERS, ARCH_HEADERS): New
variables.
(build): Use them.
(include/arch/%.h, arch-dir): New targets.
* build-aux/bootstrap.sh.in (AM_CPPFLAGS): Replace
<srcdest>include/<kernel>/<cpu> with built ../include.
* build-aux/build.sh.in (AM_CPPFLAGS): Likewise.
* build-aux/install.sh.in: Also install built include.
* include/m2/types.h: New file.
* kaem.run: Use it.
* simple.sh: Copy kernel-stat.h, syscall.h for kernel/cpu to
include/arch.
---
 .gitignore                         |  19 ++++
 build-aux/GNUmakefile.in           |  11 ++-
 build-aux/bootstrap.sh.in          |   4 +-
 build-aux/build.sh.in              |  11 ++-
 build-aux/install.sh.in            |   3 +-
 configure                          |   7 ++
 configure.sh                       |   4 +
 include/gnu/x86/kernel-stat.h      |  25 ++++++
 include/linux/arm/kernel-stat.h    |  79 +++++++++++++++++
 include/linux/arm/syscall.h        |  19 ++++
 include/linux/m2/kernel-stat.h     |  47 ++++++++++
 include/linux/x86/kernel-stat.h    |  79 +++++++++++++++++
 include/linux/x86/syscall.h        |  20 ++++-
 include/linux/x86_64/kernel-stat.h |  51 +++++++++++
 include/m2/types.h                 | 138 +++++++++++++++++++++++++++++
 include/sys/stat.h                 |  51 +----------
 kaem.run                           |   3 +
 lib/linux/_getcwd.c                |   4 +-
 lib/linux/_open3.c                 |   2 +-
 lib/linux/_read.c                  |   4 +-
 lib/linux/access.c                 |   4 +-
 lib/linux/brk.c                    |   4 +-
 lib/linux/chdir.c                  |   4 +-
 lib/linux/chmod.c                  |   4 +-
 lib/linux/clock_gettime.c          |   4 +-
 lib/linux/close.c                  |   4 +-
 lib/linux/dup.c                    |   4 +-
 lib/linux/dup2.c                   |   4 +-
 lib/linux/execve.c                 |   4 +-
 lib/linux/fcntl.c                  |   4 +-
 lib/linux/fork.c                   |   4 +-
 lib/linux/fstat.c                  |   4 +-
 lib/linux/fsync.c                  |   4 +-
 lib/linux/getdents.c               |   4 +-
 lib/linux/getegid.c                |   4 +-
 lib/linux/geteuid.c                |   4 +-
 lib/linux/getgid.c                 |   4 +-
 lib/linux/getpid.c                 |   4 +-
 lib/linux/getppid.c                |   4 +-
 lib/linux/getrusage.c              |   4 +-
 lib/linux/gettimeofday.c           |   4 +-
 lib/linux/getuid.c                 |   4 +-
 lib/linux/ioctl.c                  |   2 +-
 lib/linux/ioctl3.c                 |   2 +-
 lib/linux/kill.c                   |   4 +-
 lib/linux/link.c                   |   4 +-
 lib/linux/lseek.c                  |   2 +-
 lib/linux/lstat.c                  |   4 +-
 lib/linux/mkdir.c                  |   4 +-
 lib/linux/mknod.c                  |   4 +-
 lib/linux/nanosleep.c              |   4 +-
 lib/linux/pipe.c                   |   4 +-
 lib/linux/read.c                   |   2 +-
 lib/linux/readlink.c               |   4 +-
 lib/linux/rename.c                 |   4 +-
 lib/linux/rmdir.c                  |   4 +-
 lib/linux/setgid.c                 |   4 +-
 lib/linux/settimer.c               |   4 +-
 lib/linux/setuid.c                 |   4 +-
 lib/linux/signal.c                 |   4 +-
 lib/linux/sigprogmask.c            |   4 +-
 lib/linux/stat.c                   |   4 +-
 lib/linux/symlink.c                |   4 +-
 lib/linux/time.c                   |   2 +-
 lib/linux/unlink.c                 |   4 +-
 lib/linux/waitpid.c                |   2 +-
 lib/m2/execve.c                    |   4 +-
 lib/m2/open.c                      |   2 +
 lib/m2/time.c                      |   2 +-
 lib/m2/waitpid.c                   |   2 +-
 simple.sh                          |  12 ++-
 71 files changed, 617 insertions(+), 158 deletions(-)
 create mode 100644 include/gnu/x86/kernel-stat.h
 create mode 100644 include/linux/arm/kernel-stat.h
 create mode 100644 include/linux/m2/kernel-stat.h
 create mode 100644 include/linux/x86/kernel-stat.h
 create mode 100644 include/linux/x86_64/kernel-stat.h
 create mode 100644 include/m2/types.h

diff --git a/.gitignore b/.gitignore
index 58cb2afb..72ba34d8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,21 @@
+# GNU Mes --- Maxwell Equations of Software
+# Copyright © 2016,2017,2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+#
+# This file is part of GNU Mes.
+#
+# GNU Mes is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GNU Mes is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+
 *-
 *~
 .#*
@@ -117,6 +135,7 @@
 /doc/images/gcc-mesboot-graph.pdf
 /doc/web/
 /config.sh
+/include/arch
 /include/mes/config.h
 /gcc-lib
 /mescc-lib
diff --git a/build-aux/GNUmakefile.in b/build-aux/GNUmakefile.in
index d74e9f99..c3304192 100644
--- a/build-aux/GNUmakefile.in
+++ b/build-aux/GNUmakefile.in
@@ -85,17 +85,26 @@ PHONY_TARGETS:=\
 
 .PHONY: $(PHONY_TARGETS)
 
+X86_ARCH_HEADERS = $(wildcard $(scrdest)include/linux/x86/*.h)
+ARCH_HEADERS = $(X86_ARCH_HEADERS:$(srcdest)include/linux/x86/%=include/arch/%)
+
 default: all
 
 all: doc
 
 doc: build
 
-build:
+build: | $(ARCH_HEADERS)
 	$(SHELL) build.sh
 
 src/${program_prefix}mes: build
 
+include/arch/%.h: $(srcdest)include/$(mes_kernel)/$(mes_cpu)/%.h | arch-dir
+	cp -f $< $@
+
+arch-dir:
+	mkdir -p include/arch
+
 clean:
 	rm -f *.o *.s bin/mes bin/mes-gcc bin/mes-mescc
 	rm -f mes.{aux,cp,cps,fn,info,log,tmp,toc,vr,vrs}
diff --git a/build-aux/bootstrap.sh.in b/build-aux/bootstrap.sh.in
index b2d56c50..a2451d02 100644
--- a/build-aux/bootstrap.sh.in
+++ b/build-aux/bootstrap.sh.in
@@ -50,7 +50,7 @@ srcdest=../${srcdest}
 ln -sf ${srcdest}mes .
 ln -sf ${srcdest}module .
 ln -sf ${srcdest}src .
-AM_CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ${srcdest}include/$mes_kernel/$mes_cpu"
+AM_CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ../include -I include"
 AM_CFLAGS="-L ${srcdest}lib"
 
 mkdir -p $mes_cpu-mes
@@ -108,7 +108,7 @@ $AR crD $mes_cpu-mes/libc+tcc.a $objects
 
 cd ..
 srcdest=
-CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ${srcdest}include/$mes_kernel/$mes_cpu"
+AM_CPPFLAGS="-D HAVE_CONFIG_H=1 -I ${srcdest}include -I ../include -I include"
 AM_CFLAGS="-L ${srcdest}lib"
 
 objects=
diff --git a/build-aux/build.sh.in b/build-aux/build.sh.in
index f4a6a264..3f356e10 100644
--- a/build-aux/build.sh.in
+++ b/build-aux/build.sh.in
@@ -66,9 +66,8 @@ fi
         AM_CPPFLAGS="
 -D HAVE_CONFIG_H=1
 -I ${srcdest}lib
--I include
 -I ${srcdest}include
--I ${srcdest}include/$mes_kernel/$mes_cpu
+-I ../include
 "
         if test $mes_kernel = gnu; then
             AM_CPPFLAGS="$AM_CPPFLAGS
@@ -93,9 +92,9 @@ fi
     AM_CPPFLAGS="
 -D HAVE_CONFIG_H=1
 -I ${srcdest}lib
--I include
 -I ${srcdest}include
--I ${srcdest}include/$mes_kernel/$mes_cpu
+-I ../include
+-I include
 "
     if test "$compiler" != bootstrap; then
         ${SHELL} ${srcdest}build-aux/build-mes.sh
@@ -137,9 +136,9 @@ fi
     AM_CPPFLAGS="
 -D HAVE_CONFIG_H=1
 -I ${srcdest}lib
--I include
 -I ${srcdest}include
--I ${srcdest}include/$mes_kernel/$mes_cpu
+-I ../include
+-I include
 "
     compiler=mescc
     AR=${MESAR-"${srcdest}pre-inst-env mesar"}
diff --git a/build-aux/install.sh.in b/build-aux/install.sh.in
index 340faf5f..f3a69229 100644
--- a/build-aux/install.sh.in
+++ b/build-aux/install.sh.in
@@ -1,7 +1,7 @@
 #! @SHELL@
 
 # GNU Mes --- Maxwell Equations of Software
-# Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+# Copyright © 2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
 #
 # This file is part of GNU Mes.
 #
@@ -99,6 +99,7 @@ mkdir -p $DESTDIR$includedir
 mkdir -p $DESTDIR$libdir
 mkdir -p $DESTDIR$pkgdatadir
 tar -cf- -C ${srcdir}/include . | tar -${v}xf- -C $DESTDIR$includedir
+tar -cf- -C include . | tar -${v}xf- -C $DESTDIR$includedir
 tar -cf- -C ${srcdir}/lib $mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir
 tar -cf- -C ${srcdir}/lib $mes_kernel/$mes_cpu-mes | tar -${v}xf- -C $DESTDIR$libdir
 if test -z "$srcdest"; then
diff --git a/configure b/configure
index b02e75bf..98467094 100755
--- a/configure
+++ b/configure
@@ -707,6 +707,13 @@ See \"Porting GNU Mes\" in the manual, or try --with-courage\n" mes-system)
 #define MES_VERSION \"" VERSION "\"
 ")))))
         (substitute (string-append srcdest "build-aux/config.make.in") pairs #:target ".config.make"))
+      (let ((arch-dir (string-append srcdest "include/" mes-kernel "/" mes-cpu)))
+        (define (copy-header file-name)
+          (system* "cp" "-f" "-v"
+                   (string-append arch-dir "/" file-name)
+                   (string-append "include/arch/" file-name)))
+        (system* "mkdir" "-p" "include/arch")
+        (for-each copy-header '("kernel-stat.h" "syscall.h")))
 
       (let ((make (and=> (file-name "make" deps) basename)))
         (display (string-append "
diff --git a/configure.sh b/configure.sh
index 51d99b6f..f182530e 100755
--- a/configure.sh
+++ b/configure.sh
@@ -271,6 +271,10 @@ cat >> include/mes/config.h <<EOF
 #define MES_VERSION "$VERSION"
 EOF
 
+mkdir -p include/arch
+cp -f -v ${srcdest}include/${mes_kernel}/${mes_cpu}/kernel-stat.h include/arch
+cp -f -v ${srcdest}include/${mes_kernel}/${mes_cpu}/syscall.h include/arch
+
 cat <<EOF
 GNU Mes is configured for
    compiler:   $compiler
diff --git a/include/gnu/x86/kernel-stat.h b/include/gnu/x86/kernel-stat.h
new file mode 100644
index 00000000..7b49efe9
--- /dev/null
+++ b/include/gnu/x86/kernel-stat.h
@@ -0,0 +1,25 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_GNU_X86_KERNEL_STAT_H
+#define __MES_GNU_X86_KERNEL_STAT_H 1
+
+#include <arch/syscall.h>
+
+#endif // __MES_GNU_X86_KERNEL_STAT_H
diff --git a/include/linux/arm/kernel-stat.h b/include/linux/arm/kernel-stat.h
new file mode 100644
index 00000000..79dc48ec
--- /dev/null
+++ b/include/linux/arm/kernel-stat.h
@@ -0,0 +1,79 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_LINUX_ARM_KERNEL_STAT_H
+#define __MES_LINUX_ARM_KERNEL_STAT_H 1
+
+// https://github.com/torvalds/linux/blob/master/arch/arm/include/uapi/asm/stat.h
+
+#include <arch/syscall.h>
+
+#if __SIZEOF_LONG_LONG__ != 8
+
+// *INDENT-OFF*
+struct stat
+{
+  unsigned long  st_dev;
+  unsigned long  st_ino;
+  unsigned short st_mode;
+  unsigned short st_nlink;
+  unsigned short st_uid;
+  unsigned short st_gid;
+  unsigned long  st_rdev;
+  unsigned long  st_size;
+  unsigned long  st_blksize;
+  unsigned long  st_blocks;
+  unsigned long  st_atime;
+  unsigned long  st_atime_usec;
+  unsigned long  st_mtime;
+  unsigned long  st_mtime_usec;
+  unsigned long  st_ctime;
+  unsigned long  st_ctime_usec;
+  unsigned long  __pad0;
+  unsigned long  __pad1;
+};
+
+#else // __SIZEOF_LONG_LONG__ == 8
+
+struct stat
+{
+  unsigned long long st_dev;
+  unsigned char __pad0[4];
+  unsigned long __st_ino;
+  unsigned int st_mode;
+  unsigned int st_nlink;
+  unsigned long st_uid;
+  unsigned long st_gid;
+  unsigned long long st_rdev;
+  unsigned char __pad3[4];
+  long long st_size;
+  unsigned long st_blksize;
+  unsigned long long st_blocks;
+  unsigned long st_atime;
+  unsigned long st_atime_nsec;
+  unsigned long st_mtime;
+  unsigned int st_mtime_nsec;
+  unsigned long st_ctime;
+  unsigned long st_ctime_nsec;
+  unsigned long long st_ino;
+};
+
+#endif // __SIZEOF_LONG_LONG__ == 8
+
+#endif // __MES_LINUX_ARM_KERNEL_STAT_H
diff --git a/include/linux/arm/syscall.h b/include/linux/arm/syscall.h
index b04ff039..ca9f1f97 100644
--- a/include/linux/arm/syscall.h
+++ b/include/linux/arm/syscall.h
@@ -109,4 +109,23 @@
 #define SYS_readlink  0x55
 #define SYS_mknod     0x0e
 
+#if __SIZEOF_LONG_LONG__ == 8
+
+#define SYS_stat64     0xc3
+#define SYS_lstat64    0xc4
+#define SYS_fstat64    0xc5
+#define SYS_fcntl64    0xdd
+#define SYS_getdents64 0xdc
+
+#undef SYS_stat
+#define SYS_stat SYS_stat64
+
+#undef SYS_lstat
+#define SYS_lstat SYS_lstat64
+
+#undef SYS_fstat
+#define SYS_fstat SYS_fstat64
+
+#endif  // __SIZEOF_LONG_LONG__ == 8
+
 #endif /* __MES_LINUX_ARM_SYSCALL_H */
diff --git a/include/linux/m2/kernel-stat.h b/include/linux/m2/kernel-stat.h
new file mode 100644
index 00000000..c446bdbc
--- /dev/null
+++ b/include/linux/m2/kernel-stat.h
@@ -0,0 +1,47 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __LINUX_M2_KERNEL_STAT_H
+#define __LINUX_M2_KERNEL_STAT_H
+
+/* https://github.com/torvalds/linux/blob/master/arch/x86/include/uapi/asm/stat.h */
+
+/* *INDENT-OFF* */
+struct stat
+{
+  unsigned st_dev;
+  unsigned st_ino;
+  char st_mode[2];
+  char st_nlink[2];
+  char st_uid[2];
+  char st_gid[2];
+  unsigned st_rdev;
+  unsigned st_size;
+  unsigned st_blksize;
+  unsigned st_blocks;
+  unsigned st_atime;
+  unsigned st_atime_usec;
+  unsigned st_mtime;
+  unsigned st_mtime_usec;
+  unsigned st_ctime;
+  unsigned st_ctime_usec;
+  unsigned __pad0;
+  unsigned __pad1;
+};
+#endif /* __LINUX_M2_KERNEL_STAT_H */
diff --git a/include/linux/x86/kernel-stat.h b/include/linux/x86/kernel-stat.h
new file mode 100644
index 00000000..997fadc7
--- /dev/null
+++ b/include/linux/x86/kernel-stat.h
@@ -0,0 +1,79 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_LINUX_X86_KERNEL_STAT_H
+#define __MES_LINUX_X86_KERNEL_STAT_H 1
+
+// https://github.com/torvalds/linux/blob/master/arch/x86/include/uapi/asm/stat.h
+
+#include <arch/syscall.h>
+
+#if __SIZEOF_LONG_LONG__ != 8
+
+// *INDENT-OFF*
+struct stat
+{
+  unsigned long  st_dev;
+  unsigned long  st_ino;
+  unsigned short st_mode;
+  unsigned short st_nlink;
+  unsigned short st_uid;
+  unsigned short st_gid;
+  unsigned long  st_rdev;
+  unsigned long  st_size;
+  unsigned long  st_blksize;
+  unsigned long  st_blocks;
+  unsigned long  st_atime;
+  unsigned long  st_atime_usec;
+  unsigned long  st_mtime;
+  unsigned long  st_mtime_usec;
+  unsigned long  st_ctime;
+  unsigned long  st_ctime_usec;
+  unsigned long  __pad0;
+  unsigned long  __pad1;
+};
+
+#else // __SIZEOF_LONG_LONG__ == 8
+
+struct stat
+{
+  unsigned long long st_dev;
+  unsigned char __pad0[4];
+  unsigned long __st_ino;
+  unsigned int st_mode;
+  unsigned int st_nlink;
+  unsigned long st_uid;
+  unsigned long st_gid;
+  unsigned long long st_rdev;
+  unsigned char __pad3[4];
+  long long st_size;
+  unsigned long st_blksize;
+  unsigned long long st_blocks;
+  unsigned long st_atime;
+  unsigned long st_atime_nsec;
+  unsigned long st_mtime;
+  unsigned int st_mtime_nsec;
+  unsigned long st_ctime;
+  unsigned long st_ctime_nsec;
+  unsigned long long st_ino;
+};
+
+#endif // __SIZEOF_LONG_LONG__ == 8
+
+#endif // __MES_LINUX_X86_KERNEL_STAT_H
diff --git a/include/linux/x86/syscall.h b/include/linux/x86/syscall.h
index 01c46a35..d849c175 100644
--- a/include/linux/x86/syscall.h
+++ b/include/linux/x86/syscall.h
@@ -75,7 +75,6 @@
 #define SYS_stat   0x6a
 
 /* libc+gnu */
-
 #define SYS_chdir     0x0c
 #define SYS_link      0x09
 #define SYS_getpid    0x14
@@ -112,4 +111,23 @@
 #define SYS_readlink  0x55
 #define SYS_mknod     0x0e
 
+#if __SIZEOF_LONG_LONG__ == 8
+
+#define SYS_stat64     0xc3
+#define SYS_lstat64    0xc4
+#define SYS_fstat64    0xc5
+#define SYS_fcntl64    0xdd
+#define SYS_getdents64 0xdc
+
+#undef SYS_stat
+#define SYS_stat SYS_stat64
+
+#undef SYS_lstat
+#define SYS_lstat SYS_lstat64
+
+#undef SYS_fstat
+#define SYS_fstat SYS_fstat64
+
+#endif  // __SIZEOF_LONG_LONG__ == 8
+
 #endif /* __MES_LINUX_X86_SYSCALL_H */
diff --git a/include/linux/x86_64/kernel-stat.h b/include/linux/x86_64/kernel-stat.h
new file mode 100644
index 00000000..fdb15946
--- /dev/null
+++ b/include/linux/x86_64/kernel-stat.h
@@ -0,0 +1,51 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __MES_LINUX_X86_64_KERNEL_STAT_H
+#define __MES_LINUX_X86_64_KERNEL_STAT_H 1
+
+// https://github.com/torvalds/linux/blob/master/arch/x86/include/uapi/asm/stat.h
+
+// *INDENT-OFF*
+struct stat
+{
+  unsigned long	st_dev;
+  unsigned long	st_ino;
+  unsigned long	st_nlink;
+  unsigned int	st_mode;
+  unsigned int	st_uid;
+  unsigned int	st_gid;
+  unsigned int	__pad0;
+  unsigned long	st_rdev;
+  unsigned long	st_size;
+  unsigned long	st_atime;
+  unsigned long	st_atime_nsec;
+  unsigned long	st_mtime;
+  unsigned long	st_mtime_nsec;
+  unsigned long	st_ctime;
+  unsigned long	st_ctime_nsec;
+  unsigned long	st_blksize;
+  long		st_blocks;
+  unsigned long	__pad1;
+  unsigned long	__pad2;
+  unsigned long	__pad3;
+  unsigned long	__pad4;
+};
+
+#endif // __MES_LINUX_X86_64_KERNEL_STAT_H
diff --git a/include/m2/types.h b/include/m2/types.h
new file mode 100644
index 00000000..c5547f5c
--- /dev/null
+++ b/include/m2/types.h
@@ -0,0 +1,138 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2017,2022,2023 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __M2_TYPES_H
+#define __M2_TYPES_H 1
+
+/*
+#ifndef __MES_CLOCK_T
+#define __MES_CLOCK_T
+#undef clock_t
+typedef long clock_t;
+#endif
+*/
+
+#ifndef __MES_DEV_T
+#define __MES_DEV_T
+#undef dev_t
+typedef long dev_t;
+#endif
+
+/*
+#if !defined (__MES_FILE_T) && ! defined (_FILE_T)
+#define __MES_FILE_T
+#define _FILE_T
+typedef long FILE;
+#endif
+*/
+
+#ifndef __MES_GID_T
+#define __MES_GID_T
+#undef gid_t
+typedef unsigned gid_t;
+#endif
+
+#ifndef __MES_INO_T
+#define __MES_INO_T
+#undef ino_t
+typedef unsigned ino_t;
+#endif
+
+#if __SIZEOF_LONG_LONG__ == 8
+#ifndef __MES_INO64_T
+#define __MES_INO64_T
+#undef ino64_t
+typedef unsigned ino64_t;
+#endif
+#endif // __SIZEOF_LONG_LONG__ == 8
+
+#if !defined (__MES_INTPTR_T) && !defined (__intptr_t_defined)
+#define __MES_INTPTR_T
+#define __intptr_t_defined
+#undef intptr_t
+typedef long intptr_t;
+#undef uintptr_t
+typedef unsigned uintptr_t;
+#endif
+
+#ifndef __MES_OFF_T
+#define __MES_OFF_T
+#undef off_t
+typedef long off_t;
+#endif
+
+#if __SIZEOF_LONG_LONG__ == 8
+#ifndef __MES_OFF64_T
+#define __MES_OFF64_T
+#undef off64_t
+typedef unsigned off64_t;
+#endif
+#endif // __SIZEOF_LONG_LONG__ == 8
+
+#ifndef __MES_PID_T
+#define __MES_PID_T
+#undef pid_t
+typedef int pid_t;
+#endif
+
+#ifndef __PTRDIFF_T
+#define __PTRDIFF_T
+#ifndef __MES_PTRDIFF_T
+#define __MES_PTRDIFF_T
+#undef ptrdiff_t
+typedef long ptrdiff_t;
+#endif
+#endif
+
+#ifndef __MES_SIGVAL_T
+#define __MES_SIGVAL_T
+#undef clock_t
+typedef long sigval_t;
+#endif
+
+#ifndef __SIZE_T
+#define __SIZE_T
+#ifndef __MES_SIZE_T
+#define __MES_SIZE_T
+typedef unsigned size_t;
+#endif
+#endif
+
+#ifndef __MES_SSIZE_T
+#define __MES_SSIZE_T
+#undef ssize_t
+typedef long ssize_t;
+#endif
+
+#ifndef __MES_UID_T
+#define __MES_UID_T
+#undef uid_t
+typedef unsigned uid_t;
+#endif
+
+#ifndef __WCHAR_T
+#define __WCHAR_T
+#ifndef __MES_WCHAR_T
+#define __MES_WCHAR_T
+#undef wchar_t
+typedef int wchar_t;
+#endif
+#endif
+
+#endif // __M2_TYPES_H
diff --git a/include/sys/stat.h b/include/sys/stat.h
index 0aefa286..fbcee2f1 100644
--- a/include/sys/stat.h
+++ b/include/sys/stat.h
@@ -19,7 +19,7 @@
  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 #ifndef __MES_SYS_STAT_H
-#define __MES_SYS_STAT_H 1lei
+#define __MES_SYS_STAT_H 1
 
 #if SYSTEM_LIBC
 #undef __MES_SYS_STAT_H
@@ -29,60 +29,13 @@
 
 #include <time.h>
 #include <sys/types.h>
+#include <arch/kernel-stat.h>
 
 #ifndef __MES_MODE_T
 #define __MES_MODE_T
 typedef int mode_t;
 #endif
 
-// *INDENT-OFF*
-#if __i386__ || __arm__
-struct stat
-{
-  unsigned long  st_dev;
-  unsigned long  st_ino;
-  unsigned short st_mode;
-  unsigned short st_nlink;
-  unsigned short st_uid;
-  unsigned short st_gid;
-  unsigned long  st_rdev;
-  long           st_size; /* Linux: unsigned long; glibc: off_t (i.e. signed) */
-  unsigned long  st_blksize;
-  unsigned long  st_blocks;
-  time_t         st_atime; /* Linux: unsigned long; glibc: time_t */
-  unsigned long  st_atime_usec;
-  time_t         st_mtime; /* Linux: unsigned long; glibc: time_t */
-  unsigned long  st_mtime_usec;
-  time_t         st_ctime; /* Linux: unsigned long; glibc: time_t */
-  unsigned long  st_ctime_usec;
-  unsigned long  __foo0;
-  unsigned long  __foo1;
-};
-#elif __x86_64__
-struct stat
-{
-  unsigned long  st_dev;
-  unsigned long  st_ino;
-  unsigned int   st_mode;
-  unsigned int   st_nlink;
-  unsigned int   st_uid;
-  unsigned int   st_gid;
-  unsigned long  st_rdev;
-  long           st_size;
-  unsigned long  st_blksize;
-  unsigned long  st_blocks;
-  time_t         st_atime;
-  unsigned long  st_atime_usec;
-  time_t         st_mtime;
-  unsigned long  st_mtime_usec;
-  time_t         st_ctime;
-  unsigned long  st_ctime_usec;
-  unsigned long  __foo0;
-  unsigned long  __foo1;
-};
-#endif
-// *INDENT-ON*
-
 int chmod (char const *file_name, mode_t mode);
 int fstat (int filedes, struct stat *buf);
 int mkdir (char const *file_name, mode_t mode);
diff --git a/kaem.run b/kaem.run
index 3c78e39a..1d8df90b 100644
--- a/kaem.run
+++ b/kaem.run
@@ -53,6 +53,7 @@ M2-Planet                                       \
     -f lib/mes/fdputc.c                         \
     -f lib/mes/eputc.c                          \
                                                 \
+    -f include/m2/types.h                       \
     -f include/mes/mes.h                        \
     -f include/mes/builtins.h                   \
     -f include/mes/constants.h                  \
@@ -81,6 +82,8 @@ M2-Planet                                       \
     -f lib/mes/fdungetc.c                       \
     -f lib/posix/setenv.c                       \
     -f lib/linux/access.c                       \
+    -f include/linux/m2/kernel-stat.h           \
+    -f include/sys/stat.h                       \
     -f lib/m2/chmod.c                           \
     -f lib/linux/ioctl3.c                       \
     -f lib/m2/isatty.c                          \
diff --git a/lib/linux/_getcwd.c b/lib/linux/_getcwd.c
index 85153cb1..10eb270e 100644
--- a/lib/linux/_getcwd.c
+++ b/lib/linux/_getcwd.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 char *
 _getcwd (char *buffer, size_t size)
diff --git a/lib/linux/_open3.c b/lib/linux/_open3.c
index 3072f9bf..cfad689a 100644
--- a/lib/linux/_open3.c
+++ b/lib/linux/_open3.c
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <mes/lib.h>
 #include <fcntl.h>
 
diff --git a/lib/linux/_read.c b/lib/linux/_read.c
index 6c5ff42f..c5a34abc 100644
--- a/lib/linux/_read.c
+++ b/lib/linux/_read.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <mes/lib.h>
 #include <fcntl.h>
 
diff --git a/lib/linux/access.c b/lib/linux/access.c
index 805e8f01..ceb18595 100644
--- a/lib/linux/access.c
+++ b/lib/linux/access.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 access (char const *file_name, int how)
diff --git a/lib/linux/brk.c b/lib/linux/brk.c
index 586bd7e1..3517850c 100644
--- a/lib/linux/brk.c
+++ b/lib/linux/brk.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 long
 brk (void *addr)
diff --git a/lib/linux/chdir.c b/lib/linux/chdir.c
index ada7feec..aed98378 100644
--- a/lib/linux/chdir.c
+++ b/lib/linux/chdir.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 chdir (char const *file_name)
diff --git a/lib/linux/chmod.c b/lib/linux/chmod.c
index 1feabec5..a6d74a43 100644
--- a/lib/linux/chmod.c
+++ b/lib/linux/chmod.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/stat.h>
 
 int
diff --git a/lib/linux/clock_gettime.c b/lib/linux/clock_gettime.c
index 051dba33..63753ef8 100644
--- a/lib/linux/clock_gettime.c
+++ b/lib/linux/clock_gettime.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <time.h>
 
 int
diff --git a/lib/linux/close.c b/lib/linux/close.c
index e25e8318..490b4881 100644
--- a/lib/linux/close.c
+++ b/lib/linux/close.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <mes/lib.h>
 
 int
diff --git a/lib/linux/dup.c b/lib/linux/dup.c
index 9237ef97..b954d3de 100644
--- a/lib/linux/dup.c
+++ b/lib/linux/dup.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 dup (int old)
diff --git a/lib/linux/dup2.c b/lib/linux/dup2.c
index ef996273..9a0752e3 100644
--- a/lib/linux/dup2.c
+++ b/lib/linux/dup2.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 dup2 (int old, int new)
diff --git a/lib/linux/execve.c b/lib/linux/execve.c
index 51c8b4ff..7cb02e20 100644
--- a/lib/linux/execve.c
+++ b/lib/linux/execve.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 execve (char const *file_name, char *const argv[], char *const env[])
diff --git a/lib/linux/fcntl.c b/lib/linux/fcntl.c
index e10e7348..85a167ae 100644
--- a/lib/linux/fcntl.c
+++ b/lib/linux/fcntl.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <stdarg.h>
 
 int
diff --git a/lib/linux/fork.c b/lib/linux/fork.c
index 1f5c25fc..d07050bf 100644
--- a/lib/linux/fork.c
+++ b/lib/linux/fork.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 fork ()
diff --git a/lib/linux/fstat.c b/lib/linux/fstat.c
index 19d3f6a9..f4965776 100644
--- a/lib/linux/fstat.c
+++ b/lib/linux/fstat.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/stat.h>
 
 int
diff --git a/lib/linux/fsync.c b/lib/linux/fsync.c
index 0eef6db4..ba75088d 100644
--- a/lib/linux/fsync.c
+++ b/lib/linux/fsync.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 fsync (int filedes)
diff --git a/lib/linux/getdents.c b/lib/linux/getdents.c
index 5ebafa45..03717710 100644
--- a/lib/linux/getdents.c
+++ b/lib/linux/getdents.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/types.h>
 
 int
diff --git a/lib/linux/getegid.c b/lib/linux/getegid.c
index 5ad2f2c6..2fb8098f 100644
--- a/lib/linux/getegid.c
+++ b/lib/linux/getegid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 gid_t
diff --git a/lib/linux/geteuid.c b/lib/linux/geteuid.c
index 4fcf9fd1..62d2da47 100644
--- a/lib/linux/geteuid.c
+++ b/lib/linux/geteuid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 uid_t
diff --git a/lib/linux/getgid.c b/lib/linux/getgid.c
index 4402b528..48fd3579 100644
--- a/lib/linux/getgid.c
+++ b/lib/linux/getgid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 gid_t
diff --git a/lib/linux/getpid.c b/lib/linux/getpid.c
index 9cab47ae..73cb74b6 100644
--- a/lib/linux/getpid.c
+++ b/lib/linux/getpid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 pid_t
diff --git a/lib/linux/getppid.c b/lib/linux/getppid.c
index 7eea4539..49d472ba 100644
--- a/lib/linux/getppid.c
+++ b/lib/linux/getppid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 pid_t
diff --git a/lib/linux/getrusage.c b/lib/linux/getrusage.c
index 2a789949..174d4c0b 100644
--- a/lib/linux/getrusage.c
+++ b/lib/linux/getrusage.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/resource.h>
 
 int
diff --git a/lib/linux/gettimeofday.c b/lib/linux/gettimeofday.c
index 495f059f..ed4e336f 100644
--- a/lib/linux/gettimeofday.c
+++ b/lib/linux/gettimeofday.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/time.h>
 
 int
diff --git a/lib/linux/getuid.c b/lib/linux/getuid.c
index e6edd257..d5ca3a50 100644
--- a/lib/linux/getuid.c
+++ b/lib/linux/getuid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 uid_t
diff --git a/lib/linux/ioctl.c b/lib/linux/ioctl.c
index 0e6e14ac..27547c68 100644
--- a/lib/linux/ioctl.c
+++ b/lib/linux/ioctl.c
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <stdarg.h>
 #include <sys/ioctl.h>
 
diff --git a/lib/linux/ioctl3.c b/lib/linux/ioctl3.c
index 3f759d06..7990b8b7 100644
--- a/lib/linux/ioctl3.c
+++ b/lib/linux/ioctl3.c
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <mes/lib.h>
 
 int
diff --git a/lib/linux/kill.c b/lib/linux/kill.c
index 4298a9db..f04424fb 100644
--- a/lib/linux/kill.c
+++ b/lib/linux/kill.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 int
diff --git a/lib/linux/link.c b/lib/linux/link.c
index cf8dec32..e2d66912 100644
--- a/lib/linux/link.c
+++ b/lib/linux/link.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 link (char const *old_name, char const *new_name)
diff --git a/lib/linux/lseek.c b/lib/linux/lseek.c
index f71af59f..c72a75cf 100644
--- a/lib/linux/lseek.c
+++ b/lib/linux/lseek.c
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <stdio.h>
 #include <sys/types.h>
 
diff --git a/lib/linux/lstat.c b/lib/linux/lstat.c
index 039de0e1..feebc6cb 100644
--- a/lib/linux/lstat.c
+++ b/lib/linux/lstat.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/stat.h>
 
 int
diff --git a/lib/linux/mkdir.c b/lib/linux/mkdir.c
index 53188888..59319329 100644
--- a/lib/linux/mkdir.c
+++ b/lib/linux/mkdir.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/stat.h>
 
 int
diff --git a/lib/linux/mknod.c b/lib/linux/mknod.c
index 8339f7a6..24a9b0c7 100644
--- a/lib/linux/mknod.c
+++ b/lib/linux/mknod.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/stat.h>
 
 int
diff --git a/lib/linux/nanosleep.c b/lib/linux/nanosleep.c
index bc838a4f..a5e2a044 100644
--- a/lib/linux/nanosleep.c
+++ b/lib/linux/nanosleep.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <time.h>
 #include <sys/time.h>
 
diff --git a/lib/linux/pipe.c b/lib/linux/pipe.c
index 0ed4c23e..f6b3689a 100644
--- a/lib/linux/pipe.c
+++ b/lib/linux/pipe.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 int
diff --git a/lib/linux/read.c b/lib/linux/read.c
index efd25744..d91f81b2 100644
--- a/lib/linux/read.c
+++ b/lib/linux/read.c
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <mes/lib.h>
 #include <fcntl.h>
 
diff --git a/lib/linux/readlink.c b/lib/linux/readlink.c
index 9990b50f..96443273 100644
--- a/lib/linux/readlink.c
+++ b/lib/linux/readlink.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/stat.h>
 
 ssize_t
diff --git a/lib/linux/rename.c b/lib/linux/rename.c
index 492c734d..762c3093 100644
--- a/lib/linux/rename.c
+++ b/lib/linux/rename.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 int
diff --git a/lib/linux/rmdir.c b/lib/linux/rmdir.c
index 7c096832..5d4c0f49 100644
--- a/lib/linux/rmdir.c
+++ b/lib/linux/rmdir.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 rmdir (char const *file_name)
diff --git a/lib/linux/setgid.c b/lib/linux/setgid.c
index 5512c622..13399c2e 100644
--- a/lib/linux/setgid.c
+++ b/lib/linux/setgid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 int
diff --git a/lib/linux/settimer.c b/lib/linux/settimer.c
index a66240f1..7247c8a0 100644
--- a/lib/linux/settimer.c
+++ b/lib/linux/settimer.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/time.h>
 #include <unistd.h>
 
diff --git a/lib/linux/setuid.c b/lib/linux/setuid.c
index 5157dcae..d5e2ae76 100644
--- a/lib/linux/setuid.c
+++ b/lib/linux/setuid.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 int
diff --git a/lib/linux/signal.c b/lib/linux/signal.c
index 11174be9..23cf106d 100644
--- a/lib/linux/signal.c
+++ b/lib/linux/signal.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 #include <signal.h>
 
diff --git a/lib/linux/sigprogmask.c b/lib/linux/sigprogmask.c
index c0326a28..4b0bb8eb 100644
--- a/lib/linux/sigprogmask.c
+++ b/lib/linux/sigprogmask.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <signal.h>
 #include <unistd.h>
 
diff --git a/lib/linux/stat.c b/lib/linux/stat.c
index d8f4465b..df0022aa 100644
--- a/lib/linux/stat.c
+++ b/lib/linux/stat.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/stat.h>
 
 int
diff --git a/lib/linux/symlink.c b/lib/linux/symlink.c
index 53f99fb7..4e4084d2 100644
--- a/lib/linux/symlink.c
+++ b/lib/linux/symlink.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <unistd.h>
 
 int
diff --git a/lib/linux/time.c b/lib/linux/time.c
index f4931970..53c92052 100644
--- a/lib/linux/time.c
+++ b/lib/linux/time.c
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <time.h>
 #include <sys/time.h>
 #include <stdlib.h>
diff --git a/lib/linux/unlink.c b/lib/linux/unlink.c
index 03713e64..9f204b5f 100644
--- a/lib/linux/unlink.c
+++ b/lib/linux/unlink.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 unlink (char const *file_name)
diff --git a/lib/linux/waitpid.c b/lib/linux/waitpid.c
index 693e3dfa..bb89c692 100644
--- a/lib/linux/waitpid.c
+++ b/lib/linux/waitpid.c
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/types.h>
 
 pid_t
diff --git a/lib/m2/execve.c b/lib/m2/execve.c
index 7fe7c9ba..1f078c3d 100644
--- a/lib/m2/execve.c
+++ b/lib/m2/execve.c
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+ * Copyright © 2016,2017,2018,2019,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 
 int
 execve (char const *file_name, char **argv, char **env)
diff --git a/lib/m2/open.c b/lib/m2/open.c
index 3d3fe4dc..ee5513e7 100644
--- a/lib/m2/open.c
+++ b/lib/m2/open.c
@@ -18,6 +18,8 @@
  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/syscall.h>
+#include <arch/syscall.h>
 #include <mes/lib.h>
 #include <fcntl.h>
 #include <stdarg.h>
diff --git a/lib/m2/time.c b/lib/m2/time.c
index c589de85..7f43cdad 100644
--- a/lib/m2/time.c
+++ b/lib/m2/time.c
@@ -19,7 +19,7 @@
  */
 
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <time.h>
 
 long
diff --git a/lib/m2/waitpid.c b/lib/m2/waitpid.c
index a3d98d1d..5cd18d98 100644
--- a/lib/m2/waitpid.c
+++ b/lib/m2/waitpid.c
@@ -20,7 +20,7 @@
 
 #include <mes/lib.h>
 #include <linux/syscall.h>
-#include <syscall.h>
+#include <arch/syscall.h>
 #include <sys/types.h>
 
 int
diff --git a/simple.sh b/simple.sh
index ce0ec375..fc5ac371 100755
--- a/simple.sh
+++ b/simple.sh
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # GNU Mes --- Maxwell Equations of Software
-# Copyright © 2019,2020,2022 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
+# Copyright © 2019,2020,2022,2023 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
 #
 # This file is part of GNU Mes.
 #
@@ -36,7 +36,9 @@ cat > include/mes/config.h <<EOF
 EOF
 
 ## Build ##
-gcc -g -D HAVE_CONFIG_H=1 -I include            \
+gcc -g -D HAVE_CONFIG_H=1                       \
+    -I include                                  \
+    -I include/$mes_kernel/$mes_cpu             \
     -o out-system-libc/mes                      \
                                                 \
     lib/mes/eputs.c                             \
@@ -163,11 +165,15 @@ cat > include/mes/config.h <<EOF
 #define MES_VERSION "git"
 EOF
 
+mkdir -p include/arch
+cp -f include/$mes_kernel/$mes_cpu/kernel-stat.h include/arch
+cp -f include/$mes_kernel/$mes_cpu/syscall.h include/arch
+
 ## Build ##
 compiler=gcc     # not configurable
 $CC -g -D HAVE_CONFIG_H=1                               \
     -I include -I include/$mes_kernel/$mes_cpu          \
-       -nostdinc -nostdlib                              \
+    -nostdinc -nostdlib                                 \
     -fno-builtin -fno-stack-protector                   \
     -o out-mes/mes                                      \
                                                         \
-- 
2.38.1


Information forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Wed, 15 Feb 2023 08:46:01 GMT) Full text and rfc822 format available.

Message #26 received at 41264 <at> debbugs.gnu.org (full text, mbox):

From: Janneke Nieuwenhuizen <janneke <at> gnu.org>
To: Mathieu Othacehe <othacehe <at> gnu.org>
Cc: 41264 <at> debbugs.gnu.org, 49985 <at> debbugs.gnu.org,
 Carl Dong <contact <at> carldong.me>
Subject: Re: bug#49985: Bootstrap packages fail to build due to mes-libc
 lacking 'stat64' etc. syscalls
Date: Wed, 15 Feb 2023 09:45:45 +0100
Jan Nieuwenhuizen writes:

Hello,

> To use stat64 and friends on 32bit, I created the attached patch for GNU
> Mes and hope to create a 0.24.2 release from
>
>     https://gitlab.com/janneke/mes/-/tree/wip-stat64
>
> Also, I have update my core-updates branch with preliminary 0.24.2 mes
> and mes-boot packages here
>
>     https://gitlab.com/janneke/guix/-/tree/core-updates

I've got a confirmation this works*, have released 0.24.2 and updated
mes-boot on core-updates as
    b928e38bd333e6186727fe5c5e94b85d157b79d6

Hoping to finally close these bugs!

Greetings,
Janneke

*) https://lists.gnu.org/archive/html/guix-devel/2023-02/msg00137.html

-- 
Janneke Nieuwenhuizen <janneke <at> gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




Information forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Thu, 16 Feb 2023 15:04:01 GMT) Full text and rfc822 format available.

Message #29 received at 41264 <at> debbugs.gnu.org (full text, mbox):

From: Janneke Nieuwenhuizen <janneke <at> gnu.org>
To: Andreas Enge <andreas <at> enge.fr>
Cc: Julien Lepiller <julien <at> lepiller.eu>, 49985 <at> debbugs.gnu.org,
 41264 <at> debbugs.gnu.org, 53416 <at> debbugs.gnu.org, guix-devel <at> gnu.org,
 53415 <at> debbugs.gnu.org
Subject: Re: Merging core-updates?
Date: Thu, 16 Feb 2023 16:03:15 +0100
Andreas Enge writes:

> Am Wed, Feb 15, 2023 at 09:39:39AM +0100 schrieb Janneke Nieuwenhuizen:
>> I have released 0.24.2 and updated mes-boot on core-updates as
>> Let's hope this fixes these bugs.
>
> With your latest patch, I have successfully bootstrapped core-updates
> on x86_64 up to hello and mpc. Thanks a lot!

Great, thanks so much for checking!  Are you using any of tmpfs or btrfs
on /tmp?

Greetings,
janneke

-- 
Janneke Nieuwenhuizen <janneke <at> gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com




Information forwarded to bug-guix <at> gnu.org:
bug#41264; Package guix. (Thu, 16 Feb 2023 15:25:01 GMT) Full text and rfc822 format available.

Message #32 received at 41264 <at> debbugs.gnu.org (full text, mbox):

From: Andreas Enge <andreas <at> enge.fr>
To: Janneke Nieuwenhuizen <janneke <at> gnu.org>
Cc: Julien Lepiller <julien <at> lepiller.eu>, 49985 <at> debbugs.gnu.org,
 41264 <at> debbugs.gnu.org, 53416 <at> debbugs.gnu.org, guix-devel <at> gnu.org,
 53415 <at> debbugs.gnu.org
Subject: Re: Merging core-updates?
Date: Thu, 16 Feb 2023 16:24:02 +0100
Am Thu, Feb 16, 2023 at 04:03:15PM +0100 schrieb Janneke Nieuwenhuizen:
> Great, thanks so much for checking!  Are you using any of tmpfs or btrfs
> on /tmp?

No, it is all on SSD, so we probably cannot conclude for the bugs,
unfortunately.

Andreas





This bug report was last modified 1 year and 280 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.