[PATCH] Fix build failure for 32-bit targets

Simon Marchi simark@simark.ca
Fri Oct 1 16:08:38 GMT 2021


On 2021-10-01 11:53 a.m., Luis Machado via Gdb-patches wrote:
> On 10/1/21 12:25 PM, Mike Frysinger wrote:
>> On 01 Oct 2021 08:50, Luis Machado via Gdb-patches wrote:
>>> When building master GDB, I ran into the following:
>>>
>>> binutils-gdb/gdb/bt-utils.c: In function ‘int libbacktrace_print(void*, uintptr_t, const char*, int, const char*)’:
>>> binutils-gdb/gdb/bt-utils.c:93:44: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘uintptr_t {aka unsigned int}’ [-Werror=format=]
>>>     snprintf (buf, sizeof (buf), "0x%lx ", pc);
>>>
>>> Fix this by using phex and %s as opposed to 0x%lx.
>>
>> wouldn't PRIxPTR fix it and be simpler ?
>> -mike
>>
>
> I'm happy either way, but GDB uses phex/phex_nz/pulongest much more often.
>
> grep "phex" gdb -R | wc -l
> 143
>
> grep "PRIx" gdb -R | wc -l
> 25

That's probably because GDB (for historical reasons I suppose) uses
these LONGEST/ULONGEST types, so we can't use standard things like
PRIx64 directly.  Although we could also define, say, PRIxLONGEST and
PRIxULONGEST and use them in format strings.

But here, since we want to print a uintptr_t, I would also go for
PRIxPTR, it's standard after all:

  https://en.cppreference.com/w/cpp/types/integer

Simon


More information about the Gdb-patches mailing list