Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: David Edelsohn <dje.gcc@gmail.com>
To: Pedro Alves <palves@redhat.com>
Cc: GDB Patches <gdb-patches@sourceware.org>
Subject: Re: GDB AIX build broken
Date: Tue, 25 Oct 2016 00:51:00 -0000	[thread overview]
Message-ID: <CAGWvny=Rao6JtFbT2fNJQyGVirhB2rOCzCV6TKBJfCYmjo2Avg@mail.gmail.com> (raw)
In-Reply-To: <9a7ac4b5-2f5c-916c-a52e-c94e64d6f4f0@redhat.com>

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


  parent reply	other threads:[~2016-10-25  0:51 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-24 22:40 David Edelsohn
2016-10-24 22:46 ` Pedro Alves
2016-10-24 22:53   ` David Edelsohn
2016-10-24 23:00     ` Pedro Alves
2016-10-25  0:13       ` David Edelsohn
2016-10-25  0:31         ` Pedro Alves
2016-10-25  0:50           ` Pedro Alves
2016-10-25  1:08             ` David Edelsohn
2016-10-25  1:22               ` Pedro Alves
2016-10-25 10:58                 ` [pushed] Define __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS again (Re: GDB AIX build broken) Pedro Alves
2016-10-25 12:41                   ` David Edelsohn
2016-10-25 12:48                     ` Pedro Alves
2016-10-25 12:54                       ` [pushed] common/common-defs.h: Define __STDC_FORMAT_MACROS as well " Pedro Alves
2016-10-25 13:01                         ` David Edelsohn
2016-10-25  0:51           ` David Edelsohn [this message]
2016-10-25  1:10             ` GDB AIX build broken Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGWvny=Rao6JtFbT2fNJQyGVirhB2rOCzCV6TKBJfCYmjo2Avg@mail.gmail.com' \
    --to=dje.gcc@gmail.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox