[PATCH] malloc_simple: Remove usage of unsupported %zx format string
Sean Anderson
sean.anderson at seco.com
Thu Feb 3 20:28:23 CET 2022
On 2/3/22 2:25 PM, Sean Anderson wrote:
> Hi Pali,
>
> On 2/3/22 1:51 PM, Pali Rohár wrote:
>> Replace %zx by %lx and cast size_t to ulong.
>>
>> U-Boot currently prints garbage debug output:
>> size=x, ptr=18, limit=18: 4002a000
>>
>> With this change it prints correct debug data:
>> size=18, ptr=18, limit=2000: 4002a000
>>
>> Signed-off-by: Pali Rohár <pali at kernel.org>
>
> This qualifier is implemented in vsprintf, but not tiny-printf,
> and is widely used throughout the codebase. So perhaps a better
> fix might be
>
> diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c
> index f661fc6505..ad25bb7383 100644
> --- a/lib/tiny-printf.c
> +++ b/lib/tiny-printf.c
> @@ -229,7 +229,8 @@ static int _vprintf(struct printf_info *info, const char *fmt, va_list va)
> ch = *fmt++;
> }
> }
> - if (ch == 'l') {
> + if (ch == 'l' ||
> + (sizeof(size_t) >= sizeof(int) && ch == 'z')) {
> ch = *(fmt++);
> islong = true;
> }
> --
>
> which is not completely correct (since tiny-printf doesn't
> support long longs), but will address the core issue.
Actually, we probably need something more like
if (ch == 'z') {
ch = *(fmt++);
islong = sizeof(size_t) >= sizeof(int);
}
so that 32-bit arches still print the integer.
--Sean
More information about the U-Boot
mailing list