This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] MinGW and attribute format(printf/gnu_printf)


On 10/30/2015 12:19 AM, Pedro Alves wrote:
> Cross building gdbserver for --host=x86_64-w64-mingw32 with gcc 4.8.4
> 20141219 (Fedora MinGW 4.8.4-1.fc20), I get:
> 
>   src/gdb/gdbserver/tracepoint.c: In function 'cmd_qtdp':
>   src/gdb/gdbserver/tracepoint.c:2577:7: error: unknown conversion type character 'l' in format [-Werror=format=]
> 	 trace_debug ("Defined %stracepoint %d at 0x%s, "
> 	 ^
>   src/gdb/gdbserver/tracepoint.c:2577:7: error: unknown conversion type character 'l' in format [-Werror=format=]
>   src/gdb/gdbserver/tracepoint.c:2577:7: error: too many arguments for format [-Werror=format-extra-args]
>   src/gdb/gdbserver/tracepoint.c: In function 'stop_tracing':
>   src/gdb/gdbserver/tracepoint.c:3447:7: error: unknown conversion type character 'l' in format [-Werror=format=]
> 	 trace_debug ("Stopping the trace because "
> 	 ^
>   src/gdb/gdbserver/tracepoint.c:3447:7: error: too many arguments for format [-Werror=format-extra-args]
>   src/gdb/gdbserver/tracepoint.c: In function 'collect_data_at_tracepoint':
>   src/gdb/gdbserver/tracepoint.c:4651:3: error: unknown conversion type character 'l' in format [-Werror=format=]
>      trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64,
>      ^
>   src/gdb/gdbserver/tracepoint.c:4651:3: error: too many arguments for format [-Werror=format-extra-args]
>   src/gdb/gdbserver/tracepoint.c: In function 'collect_data_at_step':
>   src/gdb/gdbserver/tracepoint.c:4687:3: error: unknown conversion type character 'l' in format [-Werror=format=]
>      trace_debug ("Making new step traceframe for "
>      ^
> 
> trace_debug is a macro that calls:
> 
>   static void trace_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
> 
> The calls that fail checking use PRIu64, etc., like:
> 
>       trace_debug ("Defined %stracepoint %d at 0x%s, "
> 		   "enabled %d step %" PRIu64 " pass %" PRIu64,
> 		   tpoint->type == fast_tracepoint ? "fast "
> 		   : tpoint->type == static_tracepoint ? "static " : "",
> 		   tpoint->number, paddress (tpoint->address), tpoint->enabled,
> 		   tpoint->step_count, tpoint->pass_count);
> 
> gnulib's stdio/printf module replacements may make %llu, etc. work on
> mingw, instead of the MS-specific %I64u, and thus may make PRIu64
> expand to %llu.  However, gcc isn't aware of that, because libiberty's
> ansidecl.h defines ATTRIBUTE_PRINTF as using attribute format(printf).
> But, with that format, gcc checks for MS-style format strings (%I64u).
> In order to have gcc expect gnu/standard formats, we need to use
> gnu_printf format instead.  Which version to use (printf/gnu_printf)
> depends on msvcrt and mingw version, and so gnulib has a
> configure-time check, and defines _GL_ATTRIBUTE_FORMAT_PRINTF
> accordingly.
> 
> Since _GL_ATTRIBUTE_FORMAT_PRINTF is compatible with ATTRIBUTE_PRINTF,
> the fix is simply to make use of the former.
> 
> gdb/ChangeLog:
> 2015-10-29  Pedro Alves  <palves@redhat.com>
> 
> 	* common/common-defs.h (ATTRIBUTE_PRINTF): Redefine in terms of
> 	_GL_ATTRIBUTE_FORMAT_PRINTF after including ansidecl.h.

I've pushed this in.

Thanks,
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]