linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@kernel.org>
To: Willy Tarreau <w@1wt.eu>
Cc: Mark Brown <broonie@kernel.org>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 00/42] nolibc: update to resync with out-of-tree project
Date: Mon, 7 Feb 2022 16:00:28 -0800	[thread overview]
Message-ID: <20220208000028.GG4285@paulmck-ThinkPad-P17-Gen-1> (raw)
In-Reply-To: <20220207162354.14293-1-w@1wt.eu>

On Mon, Feb 07, 2022 at 05:23:12PM +0100, Willy Tarreau wrote:
> Hello Paul,
> 
> Here comes an update to the nolibc subsystem to keep it in sync with
> the out-of-tree project and to bring a number of usability improvements.
> 
> The approach here consists in better splitting the layers so that
> arch-specific syscall functions are now in their own files (one per
> arch), then syscalls are implemented on top of this in a generic file,
> then the generic libc stuff is exposed. This way it becomes easier to
> add support for new architectures if needed.
> 
> I exported 3 functions as weak symbols: memset(), memmove() and abort().
> For the first two ones, gcc/clang may issue calls to them and will not
> always fall back to the builtin equivalent. For abort(), I've seen it
> referenced by libgcc from some divide functions.
> 
> A few stdio-level functions were added (unbuffered), including a quite
> limited but usable printf() which significantly eases debugging of test
> programs by allowing to print return codes or pointers for example.
> 
> A few functions and syscalls like abort(), raise(), time() and usleep()
> were added. More str* functions were added as well. open() now takes a
> vararg on the 3rd argument so as to ease porting of existing programs.
> 
> Finally, the functions and definitions were moved to the appropriate
> files as documented in their man pages when relevant, so that simple
> programs which only use a few include files among stdio.h, stdlib.h,
> string.h, unistd.h, errno.h, ctype.h, signal.h, time.h or types.h can
> build without modification. Obviously this remains fairly limited in
> scope, but for test programs that's usually fine.
> 
> I could verify that a few of my programs and that your rcutorture test
> continue to work (not much surprising since most of the work only
> consists in moving functions between files).
> 
> There's obviously no rush, but I preferred to resync the version here
> given that Mark expressed some interest recently, and I'd hate it if
> he had to add new syscalls that already existed out of tree! Comments,
> suggestions and feature requests welcome as usual. If you prefer to
> pull, it's also available here, on top of 5.17-rc3:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/wtarreau/nolibc.git 20220206-nolibc-split-2

I queued these from email to get some time on them.  If an update is
needed (for example, based on discussion with David Laight), please feel
free to send me an update and I can drop the current set in favor of a
new version.

Good stuff, by the way, thank you!!!

Hmmm...  I should make rcutorture able to smoke-test this.  My thought
would be to add some code to rcutorture's init.c that tried out the
system calls.  But I bet that you already have some test code.  ;-)

One approach would be to place the test code in tools/nolibc, and
have rcutorture's init.c either #include that or link to it.

Thoughts?  Especially thoughts about better testing approaches?

							Thanx, Paul

> Thank you!
> Willy
> 
> ---
> Willy Tarreau (42):
>   tools/nolibc: use pselect6 on RISCV
>   tools/nolibc: guard the main file against multiple inclusion
>   tools/nolibc/std: move the standard type definitions to std.h
>   tools/nolibc/types: split syscall-specific definitions into their own files
>   tools/nolibc/arch: split arch-specific code into individual files
>   tools/nolibc/sys: split the syscall definitions into their own file
>   tools/nolibc/stdlib: extract the stdlib-specific functions to their own file
>   tools/nolibc/string: split the string functions into string.h
>   tools/nolibc/ctype: split the is* functions to ctype.h
>   tools/nolibc/ctype: add the missing is* functions
>   tools/nolibc/types: move the FD_* functions to macros in types.h
>   tools/nolibc/types: make FD_SETSIZE configurable
>   tools/nolibc/types: move makedev to types.h and make it a macro
>   tools/nolibc/stdlib: move ltoa() to stdlib.h
>   tools/nolibc/stdlib: replace the ltoa() function with more efficient ones
>   tools/nolibc/stdlib: add i64toa() and u64toa()
>   tools/nolibc/stdlib: add utoh() and u64toh()
>   tools/nolibc/stdio: add a minimal set of stdio functions
>   tools/nolibc/stdio: add stdin/stdout/stderr and fget*/fput* functions
>   tools/nolibc/stdio: add fwrite() to stdio
>   tools/nolibc/stdio: add a minimal [vf]printf() implementation
>   tools/nolibc/types: define EXIT_SUCCESS and EXIT_FAILURE
>   tools/nolibc/stdio: add perror() to report the errno value
>   tools/nolibc/sys: make open() take a vararg on the 3rd argument
>   tools/nolibc/stdlib: avoid a 64-bit shift in u64toh_r()
>   tools/nolibc/stdlib: make raise() use the lower level syscalls only
>   tools/nolibc/sys: make getpgrp(), getpid(), gettid() not set errno
>   tools/nolibc/string: use unidirectional variants for memcpy()
>   tools/nolibc/string: slightly simplify memmove()
>   tools/nolibc/string: add strncpy() and strlcpy()
>   tools/nolibc/string: add tiny versions of strncat() and strlcat()
>   tools/nolibc: move exported functions to their own section
>   tools/nolibc/arch: mark the _start symbol as weak
>   tools/nolibc/types: define PATH_MAX and MAXPATHLEN
>   tools/nolibc/string: export memset() and memmove()
>   tools/nolibc/errno: extract errno.h from sys.h
>   tools/nolibc/unistd: extract msleep(), sleep(), tcsetpgrp() to unistd.h
>   tools/nolibc/unistd: add usleep()
>   tools/nolibc/signal: move raise() to signal.h
>   tools/nolibc/time: create time.h with time()
>   tools/nolibc: also mention how to build by just setting the include path
>   tools/nolibc/stdlib: implement abort()
> 
>  tools/include/nolibc/arch-aarch64.h |  200 +++
>  tools/include/nolibc/arch-arm.h     |  205 +++
>  tools/include/nolibc/arch-i386.h    |  197 +++
>  tools/include/nolibc/arch-mips.h    |  216 +++
>  tools/include/nolibc/arch-riscv.h   |  205 +++
>  tools/include/nolibc/arch-x86_64.h  |  216 +++
>  tools/include/nolibc/arch.h         |   32 +
>  tools/include/nolibc/ctype.h        |   99 ++
>  tools/include/nolibc/errno.h        |   27 +
>  tools/include/nolibc/nolibc.h       | 2540 +--------------------------
>  tools/include/nolibc/signal.h       |   22 +
>  tools/include/nolibc/std.h          |   49 +
>  tools/include/nolibc/stdio.h        |  296 ++++
>  tools/include/nolibc/stdlib.h       |  311 ++++
>  tools/include/nolibc/string.h       |  212 +++
>  tools/include/nolibc/sys.h          | 1168 ++++++++++++
>  tools/include/nolibc/time.h         |   28 +
>  tools/include/nolibc/types.h        |  184 ++
>  tools/include/nolibc/unistd.h       |   54 +
>  19 files changed, 3756 insertions(+), 2505 deletions(-)
>  create mode 100644 tools/include/nolibc/arch-aarch64.h
>  create mode 100644 tools/include/nolibc/arch-arm.h
>  create mode 100644 tools/include/nolibc/arch-i386.h
>  create mode 100644 tools/include/nolibc/arch-mips.h
>  create mode 100644 tools/include/nolibc/arch-riscv.h
>  create mode 100644 tools/include/nolibc/arch-x86_64.h
>  create mode 100644 tools/include/nolibc/arch.h
>  create mode 100644 tools/include/nolibc/ctype.h
>  create mode 100644 tools/include/nolibc/errno.h
>  create mode 100644 tools/include/nolibc/signal.h
>  create mode 100644 tools/include/nolibc/std.h
>  create mode 100644 tools/include/nolibc/stdio.h
>  create mode 100644 tools/include/nolibc/stdlib.h
>  create mode 100644 tools/include/nolibc/string.h
>  create mode 100644 tools/include/nolibc/sys.h
>  create mode 100644 tools/include/nolibc/time.h
>  create mode 100644 tools/include/nolibc/types.h
>  create mode 100644 tools/include/nolibc/unistd.h
> 
> -- 
> 2.35.1
> 

  parent reply	other threads:[~2022-02-08  1:06 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-07 16:23 [PATCH 00/42] nolibc: update to resync with out-of-tree project Willy Tarreau
2022-02-07 16:23 ` [PATCH 01/42] tools/nolibc: use pselect6 on RISCV Willy Tarreau
2022-02-07 16:23 ` [PATCH 02/42] tools/nolibc: guard the main file against multiple inclusion Willy Tarreau
2022-02-07 16:23 ` [PATCH 03/42] tools/nolibc/std: move the standard type definitions to std.h Willy Tarreau
2022-02-07 16:23 ` [PATCH 04/42] tools/nolibc/types: split syscall-specific definitions into their own files Willy Tarreau
2022-02-07 16:23 ` [PATCH 05/42] tools/nolibc/arch: split arch-specific code into individual files Willy Tarreau
2022-02-07 16:23 ` [PATCH 06/42] tools/nolibc/sys: split the syscall definitions into their own file Willy Tarreau
2022-02-07 16:23 ` [PATCH 07/42] tools/nolibc/stdlib: extract the stdlib-specific functions to " Willy Tarreau
2022-02-07 16:23 ` [PATCH 08/42] tools/nolibc/string: split the string functions into string.h Willy Tarreau
2022-02-07 16:23 ` [PATCH 09/42] tools/nolibc/ctype: split the is* functions to ctype.h Willy Tarreau
2022-02-07 16:23 ` [PATCH 10/42] tools/nolibc/ctype: add the missing is* functions Willy Tarreau
2022-02-07 16:23 ` [PATCH 11/42] tools/nolibc/types: move the FD_* functions to macros in types.h Willy Tarreau
2022-02-07 17:05   ` David Laight
2022-02-08  5:14     ` Willy Tarreau
2022-02-13  8:52   ` [PATCH v2 " Willy Tarreau
2022-02-07 16:23 ` [PATCH 12/42] tools/nolibc/types: make FD_SETSIZE configurable Willy Tarreau
2022-02-13  8:53   ` [PATCH v2 " Willy Tarreau
2022-02-14 20:17     ` Paul E. McKenney
2022-02-07 16:23 ` [PATCH 13/42] tools/nolibc/types: move makedev to types.h and make it a macro Willy Tarreau
2022-02-07 16:23 ` [PATCH 14/42] tools/nolibc/stdlib: move ltoa() to stdlib.h Willy Tarreau
2022-02-07 16:23 ` [PATCH 15/42] tools/nolibc/stdlib: replace the ltoa() function with more efficient ones Willy Tarreau
2022-02-07 16:23 ` [PATCH 16/42] tools/nolibc/stdlib: add i64toa() and u64toa() Willy Tarreau
2022-02-07 16:23 ` [PATCH 17/42] tools/nolibc/stdlib: add utoh() and u64toh() Willy Tarreau
2022-02-07 16:23 ` [PATCH 18/42] tools/nolibc/stdio: add a minimal set of stdio functions Willy Tarreau
2022-02-07 16:23 ` [PATCH 19/42] tools/nolibc/stdio: add stdin/stdout/stderr and fget*/fput* functions Willy Tarreau
2022-02-07 16:23 ` [PATCH 20/42] tools/nolibc/stdio: add fwrite() to stdio Willy Tarreau
2022-02-07 16:23 ` [PATCH 21/42] tools/nolibc/stdio: add a minimal [vf]printf() implementation Willy Tarreau
2022-02-07 16:23 ` [PATCH 22/42] tools/nolibc/types: define EXIT_SUCCESS and EXIT_FAILURE Willy Tarreau
2022-02-07 16:23 ` [PATCH 23/42] tools/nolibc/stdio: add perror() to report the errno value Willy Tarreau
2022-02-07 16:23 ` [PATCH 24/42] tools/nolibc/sys: make open() take a vararg on the 3rd argument Willy Tarreau
2022-02-07 16:23 ` [PATCH 25/42] tools/nolibc/stdlib: avoid a 64-bit shift in u64toh_r() Willy Tarreau
2022-02-07 16:23 ` [PATCH 26/42] tools/nolibc/stdlib: make raise() use the lower level syscalls only Willy Tarreau
2022-02-07 16:23 ` [PATCH 27/42] tools/nolibc/sys: make getpgrp(), getpid(), gettid() not set errno Willy Tarreau
2022-02-07 16:23 ` [PATCH 28/42] tools/nolibc/string: use unidirectional variants for memcpy() Willy Tarreau
2022-02-07 16:23 ` [PATCH 29/42] tools/nolibc/string: slightly simplify memmove() Willy Tarreau
2022-02-07 16:23 ` [PATCH 30/42] tools/nolibc/string: add strncpy() and strlcpy() Willy Tarreau
2022-02-07 16:23 ` [PATCH 31/42] tools/nolibc/string: add tiny versions of strncat() and strlcat() Willy Tarreau
2022-02-07 16:23 ` [PATCH 32/42] tools/nolibc: move exported functions to their own section Willy Tarreau
2022-02-07 16:23 ` [PATCH 33/42] tools/nolibc/arch: mark the _start symbol as weak Willy Tarreau
2022-02-07 16:23 ` [PATCH 34/42] tools/nolibc/types: define PATH_MAX and MAXPATHLEN Willy Tarreau
2022-02-07 16:23 ` [PATCH 35/42] tools/nolibc/string: export memset() and memmove() Willy Tarreau
2022-02-07 16:23 ` [PATCH 36/42] tools/nolibc/errno: extract errno.h from sys.h Willy Tarreau
2022-02-07 16:23 ` [PATCH 37/42] tools/nolibc/unistd: extract msleep(), sleep(), tcsetpgrp() to unistd.h Willy Tarreau
2022-02-07 16:23 ` [PATCH 38/42] tools/nolibc/unistd: add usleep() Willy Tarreau
2022-02-07 16:23 ` [PATCH 39/42] tools/nolibc/signal: move raise() to signal.h Willy Tarreau
2022-02-07 16:23 ` [PATCH 40/42] tools/nolibc/time: create time.h with time() Willy Tarreau
2022-02-07 16:23 ` [PATCH 41/42] tools/nolibc: also mention how to build by just setting the include path Willy Tarreau
2022-02-07 16:23 ` [PATCH 42/42] tools/nolibc/stdlib: implement abort() Willy Tarreau
2022-02-08  0:00 ` Paul E. McKenney [this message]
2022-02-08  4:41   ` [PATCH 00/42] nolibc: update to resync with out-of-tree project Willy Tarreau
2022-02-08  5:10     ` Paul E. McKenney

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=20220208000028.GG4285@paulmck-ThinkPad-P17-Gen-1 \
    --to=paulmck@kernel.org \
    --cc=broonie@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --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).