linux-um.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: "Berg, Benjamin" <benjamin.berg@intel.com>
To: "w@1wt.eu" <w@1wt.eu>
Cc: "acme@redhat.com" <acme@redhat.com>,
	"linux-um@lists.infradead.org" <linux-um@lists.infradead.org>,
	"linux@weissschuh.net" <linux@weissschuh.net>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-kselftest@vger.kernel.org"
	<linux-kselftest@vger.kernel.org>
Subject: Re: [PATCH v2 07/11] um: add infrastructure to build files using nolibc
Date: Mon, 22 Sep 2025 07:11:01 +0000	[thread overview]
Message-ID: <9d0434033c9475d88184e1e12d5a13853492dfde.camel@intel.com> (raw)
In-Reply-To: <20250921081318.GB16684@1wt.eu>

Hi,

On Sun, 2025-09-21 at 10:13 +0200, Willy Tarreau wrote:
> Hi Benjamin,
> 
> On Fri, Sep 19, 2025 at 05:34:16PM +0200, Benjamin Berg wrote:
> > From: Benjamin Berg <benjamin.berg@intel.com>
> > 
> > Add NOLIBC_CFLAGS and NOLIBC_OBJS to build files against nolibc rather
> > than libc. With this it is possible to move to nolibc in smaller steps.
> > 
> > Set NOLIBC_IGNORE_ERRNO, as the nolibc errno implementation is overly
> > simple and cannot handle threading. nolibc provides sys_* functions that
> > do not emulate the libc errno behaviour and can be used instead.
> 
> Just for my understanding, in case we can improve portability, why is it
> needed to disable errno processing here ? Even if it's limited, it
> shouldn't cause trouble. I mean that if a program works with it defined,
> logically it should also work without since the only difference is that
> the errno global variable will not be defined nor assigned on syscall
> returns.
> 
> > Guard the syscall definition as it is a macro in nolibc.
> 
> This one is interesting:
> 
>   --- a/arch/um/include/shared/os.h
>   +++ b/arch/um/include/shared/os.h
>   @@ -327,7 +327,9 @@ extern int __ignore_sigio_fd(int fd);
>    /* tty.c */
>    extern int get_pty(void);
> 
>   +#ifndef NOLIBC
>    long syscall(long number, ...);
>   +#endif
> 
> In nolibc, the syscall() definition indeed looks like this now:
> 
>   #define __syscall_narg(_0, _1, _2, _3, _4, _5, _6, N, ...) N
>   #define _syscall_narg(...) __syscall_narg(__VA_ARGS__, 6, 5, 4, 3, 2, 1, 0)
>   #define _syscall(N, ...) __sysret(my_syscall##N(__VA_ARGS__))
>   #define _syscall_n(N, ...) _syscall(N, __VA_ARGS__)
>   #define syscall(...) _syscall_n(_syscall_narg(__VA_ARGS__), ##__VA_ARGS__)
> 
> Except by mapping all syscalls to _syscall(6, ...) and always passing
> 6 args, I'm not seeing any easy way to dynamically adapt to the number
> of arguments if we wanted to move it to a function. Also, a static
> function would still conflict with the definition above. I'm wondering
> about what extent the documented "long syscall(number, ...)" is valid in
> fact, as I doubt it's really implemented anywhere as a generic function
> taking the maximum amount of args.
> 
> Thus I think that the guard is indeed the only option to reconciliate these
> two incompatible approaches. By the way I think it could be more future-
> proof to do the guard on the syscall macro definition itself (which would
> thus also resist it being passed by "-Dsyscall(x)=(...)" or any other form:
> 
>   +#ifndef syscall
>    long syscall(long number, ...);
>   +#endif

I had that, but then Thomas suggested the NOLIBC check :-)

Overall, it probably does not really matter. The declaration is used
when this file is included from kernel code to be able to do host
syscalls. That can be useful, but in that case we will not be able to
use nolibc includes and macros anyway. If UML stops linking against
libc we'll need an alternative solution, likely by adding a simple
os_syscall wrapper and using that instead.

Considering that, I think I'll change it to "#ifdef __KERNEL__".

Benjamin
Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Sean Fennelly, Jeffrey Schneiderman, Tiffany Doon Silva
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928

  reply	other threads:[~2025-09-22  7:11 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-19 15:34 [PATCH v2 00/11] Start porting UML to nolibc Benjamin Berg
2025-09-19 15:34 ` [PATCH v2 01/11] tools compiler.h: fix __used definition Benjamin Berg
2025-09-19 15:34 ` [PATCH v2 02/11] um: use tools/include for user files Benjamin Berg
2025-09-19 15:34 ` [PATCH v2 03/11] tools/nolibc/stdio: remove perror if NOLIBC_IGNORE_ERRNO is set Benjamin Berg
2025-09-21  7:55   ` Willy Tarreau
2025-09-21 16:37     ` Thomas Weißschuh
2025-09-21 17:05       ` Benjamin Berg
2025-09-21 17:13         ` Willy Tarreau
2025-09-21 17:16           ` Benjamin Berg
2025-09-21 17:23             ` Willy Tarreau
2025-09-21 18:26           ` Thomas Weißschuh
2025-09-21 18:28             ` Willy Tarreau
2025-09-21 17:09       ` Willy Tarreau
2025-09-19 15:34 ` [PATCH v2 04/11] tools/nolibc/dirent: avoid errno in readdir_r Benjamin Berg
2025-09-19 15:34 ` [PATCH v2 05/11] tools/nolibc: use __fallthrough__ rather than fallthrough Benjamin Berg
2025-09-19 15:34 ` [PATCH v2 06/11] tools/nolibc: add option to disable runtime Benjamin Berg
2025-09-20  9:08   ` Thomas Weißschuh
2025-09-19 15:34 ` [PATCH v2 07/11] um: add infrastructure to build files using nolibc Benjamin Berg
2025-09-21  8:13   ` Willy Tarreau
2025-09-22  7:11     ` Berg, Benjamin [this message]
2025-09-19 15:34 ` [PATCH v2 08/11] um: use nolibc for the --showconfig implementation Benjamin Berg
2025-09-19 15:34 ` [PATCH v2 09/11] tools/nolibc: add uio.h with readv and writev Benjamin Berg
2025-09-20  9:11   ` Thomas Weißschuh
2025-09-19 15:34 ` [PATCH v2 10/11] tools/nolibc: add ptrace support Benjamin Berg
2025-09-20  9:27   ` Thomas Weißschuh
2025-09-21  8:19     ` Willy Tarreau
2025-09-19 15:34 ` [PATCH v2 11/11] um: switch ptrace FP register access to nolibc Benjamin Berg
2025-09-19 20:50   ` kernel test robot
2025-09-19 15:40 ` [PATCH v2 00/11] Start porting UML " Christoph Hellwig
2025-09-22  7:41   ` Johannes Berg
2025-09-23 23:58     ` Hajime Tazaki
2025-09-24  3:32       ` Willy Tarreau
2025-09-24  7:55         ` Benjamin Berg
2025-09-25  1:05         ` Hajime Tazaki
2025-09-20  9:30 ` Thomas Weißschuh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9d0434033c9475d88184e1e12d5a13853492dfde.camel@intel.com \
    --to=benjamin.berg@intel.com \
    --cc=acme@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-um@lists.infradead.org \
    --cc=linux@weissschuh.net \
    --cc=w@1wt.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).