This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: GDB AIX build broken
On Mon, Oct 24, 2016 at 8:31 PM, Pedro Alves <palves@redhat.com> wrote:
> On 10/25/2016 01:13 AM, David Edelsohn wrote:
>> On Mon, Oct 24, 2016 at 7:00 PM, Pedro Alves <palves@redhat.com> wrote:
>>
>>> That's a hint, but it can't be the fix. common-defs.h must be the
>>> first file included. I suspect that gnulib's inttypes.h
>>> replacement logic is broken on AIX.
>>
>> The gnulib import definitely is the commit that caused the breakage.
gnulib weaves between its header files and the system header files in
dangerous ways. It incorrectly assumes that it's version of a header
file always will be seen before a system header file. But a system
header file may include another system header file directly.
AIX inttypes.h protects the printf format macros with
#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
gnulib inttypes.h helpfully provides
/* Some pre-C++11 <stdint.h> implementations need this. */
# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
# define __STDC_FORMAT_MACROS 1
# endif
# include_next <inttypes.h>
# endif
#endif
However, the first header file included by buffer.c is common-defs.h.
common-defs.h includes stdio.h, which includes gnulib stdio.h
#include_next <stdio.h>
Now we're in AIX stdio.h. AIX stdio.h includes sys/types.h. AIX
sys/types.h includes inttypes.h.
Bam. We now have included AIX inttypes.h without __STDC_FORMAT_MACROS defined.
Later when gnulib inttypes.h explicitly is included, with
__STDC_FORMAT_MACROS defined, it's too late because inttypes.h is
protected from multiple inclusion.
Should __STDC_FORMAT_MACROS be defined in gdb/common/common-defs.h and
gdb/defs.h (if btrace.c also is changed)?
Thanks, David