public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: david.laight.linux@gmail.com
Cc: "Thomas Weißschuh" <linux@weissschuh.net>,
	linux-kernel@vger.kernel.org, "Cheng Li" <lechain@gmail.com>
Subject: Re: [PATCH v5 next 00/17] Enhance printf()
Date: Sun, 8 Mar 2026 12:58:36 +0100	[thread overview]
Message-ID: <aa1kbMfBKT78KVN7@1wt.eu> (raw)
In-Reply-To: <20260308113742.12649-1-david.laight.linux@gmail.com>

On Sun, Mar 08, 2026 at 11:37:25AM +0000, david.laight.linux@gmail.com wrote:
> From: David Laight <david.laight.linux@gmail.com>
> 
> Update printf() so that it handles almost all the non-fp formats.
> In particular:
> - Left alignment.
> - Zero padding.
> - Alternate form "%#x" and "%#o".
> - Field precision.
> - Variable field width and precision.
> - Width modifiers q, L, t and z.
> - Conversion specifiers i, o and X (X generates lower case).
> About the only things that are missing are wide chanacters and floating point.
> 
> The tests are updated to match.
> 
> Bloat/savings (in nolibc-test, but excluding the program) to patch 11:
> (Measured for v3)
>     Function                                     old     new   delta
>     _nolibc_u64toa_base.isra                       -     143    +143
>     strerror                                       -      78     +78
>     __nolibc_sprintf_cb                           58      91     +33
>     itoa_r.isra                                   60      75     +15
>     utoa_r.isra                                  144       -    -144
>     __nolibc_printf                             1081     729    -352
> (All these functions include ~40 bytes for the stack protector code.)
> utoa_r.isra and _nolibc_u64toa_base.isra pretty much cancel each other out.
> itoa_r.isra grows slightly since it calls _nolibc_u64toa_base().
> strerror() used to be inlined, but over half of it is the stack check.
> While some of the code added to __nolibc_sprintf_cb() has come out of
> __nolibc_printf() 16-20 bytes is removed from the caller.
> So there is a net saving of about 280 bytes (including losing a copy of
> the number to ascii code).
> 
> The later patches add code back in:
>     patch 13 - conversion flags " +#"            +80 bytes
>     patch 14 - left aligning fields              +38 bytes
>     patch 15 - zero padding and field precision +260 bytes
>     patch 16 - octal output                      +34 bytes
> So probably about +130 bytes, but it will depend on what the application
> actually calls and inlining decisions made by the compiler.
> (All x86-64, other architectures will vary.)
> 
> The biggest size change is probably removing the .data from strerror().
> This reduced the program binary file by 4k if it is the only initialised
> data in a small program.
> 
> Changes for v5:
> - Old patches 2 to 7 have been applied to nolibc-next and removed.
> - Patch 3 changed to return the correct (success/fail not length)
>   value from strerror_r() and to return ERANGE if the buffer is short.
> - Patch 11 (prepend sign) has an updated comment.

Thank you David. For me this is all OK. Great work!

Willy

  parent reply	other threads:[~2026-03-08 11:58 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-08 11:37 [PATCH v5 next 00/17] Enhance printf() david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 01/17] tools/nolibc: Add _NOLIBC_OPTIMIZER_HIDE_VAR() to compiler.h david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 02/17] selftests/nolibc: Rename w to written in expect_vfprintf() david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 03/17] tools/nolibc: Implement strerror() in terms of strerror_r() david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 04/17] tools/nolibc: Rename the 'errnum' parameter to strerror() david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 05/17] tools/nolibc/printf: Output pad characters in 16 byte chunks david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 06/17] tools/nolibc/printf: Simplify __nolibc_printf() david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 07/17] tools/nolibc/printf: Use goto and reduce indentation david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 08/17] tools/nolibc/printf: Use bit-masks to hold requested flag, length and conversion chars david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 09/17] tools/nolibc/printf: Add support for length modifiers tzqL and formats iX david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 10/17] tools/nolibc/printf: Handle "%s" with the numeric formats david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 11/17] tools/nolibc/printf: Prepend sign to converted number david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 12/17] tools/nolibc/printf: Add support for conversion flags space and plus david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 13/17] tools/nolibc/printf: Special case 0 and add support for %#x david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 14/17] tools/nolibc/printf: Add support for left aligning fields david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 15/17] tools/nolibc/printf: Add support for zero padding and field precision david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 16/17] tools/nolibc/printf: Add support for octal output david.laight.linux
2026-03-08 11:37 ` [PATCH v5 next 17/17] selftests/nolibc: Use printf variable field widths and precisions david.laight.linux
2026-03-08 11:58 ` Willy Tarreau [this message]
2026-03-08 21:01 ` [PATCH v5 next 00/17] Enhance printf() Thomas Weißschuh
2026-03-08 22:41   ` David Laight
2026-03-09  6:55     ` Willy Tarreau
2026-03-09  9:20       ` David Laight
2026-03-13 20:07     ` Thomas Weißschuh
2026-03-13 22:40       ` David Laight
2026-03-14  4:48         ` Willy Tarreau

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=aa1kbMfBKT78KVN7@1wt.eu \
    --to=w@1wt.eu \
    --cc=david.laight.linux@gmail.com \
    --cc=lechain@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@weissschuh.net \
    /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