[PATCH] Fix build failure for 32-bit targets

Simon Marchi simark@simark.ca
Fri Oct 1 16:11:32 GMT 2021


On 2021-10-01 12:08 p.m., Simon Marchi wrote:
> 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

Or, maybe %p since the goal is to print a pointer for the local host, but
I suppose the value would have to be cast to void*.

Simon




More information about the Gdb-patches mailing list