From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13894 invoked by alias); 25 Oct 2016 01:10:30 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 12927 invoked by uid 89); 25 Oct 2016 01:10:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.3 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:2503 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Oct 2016 01:10:19 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6141AC05678C; Tue, 25 Oct 2016 01:10:18 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u9P1AHnK000939; Mon, 24 Oct 2016 21:10:17 -0400 Subject: Re: GDB AIX build broken To: David Edelsohn References: <01ba546d-060d-8591-9c5a-84d4bda2af22@redhat.com> <9a7ac4b5-2f5c-916c-a52e-c94e64d6f4f0@redhat.com> Cc: GDB Patches From: Pedro Alves Message-ID: <0c1a4aa3-438b-cc85-7e19-79e5912d2c37@redhat.com> Date: Tue, 25 Oct 2016 01:10:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2016-10/txt/msg00684.txt.bz2 On 10/25/2016 01:51 AM, David Edelsohn wrote: > On Mon, Oct 24, 2016 at 8:31 PM, Pedro Alves wrote: >> On 10/25/2016 01:13 AM, David Edelsohn wrote: >>> On Mon, Oct 24, 2016 at 7:00 PM, Pedro Alves 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. Sure, and if so, gnulib will be patched to handle it somehow. > > > AIX inttypes.h protects the printf format macros with > > #if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) There you go. See my other email. This means AIX's headers haven't been updated for C++11 yet. C++11 overruled C99's decision to require the __STDC_FORMAT_MACROS input macro, and the C11 followed suit. > > gnulib inttypes.h helpfully provides > > /* Some pre-C++11 implementations need this. */ > # if defined __cplusplus && ! defined __STDC_FORMAT_MACROS > # define __STDC_FORMAT_MACROS 1 > # endif > > # include_next > # endif > #endif Right, that old way of defining __STDC_FORMAT_MACROS isn't complete. That's why I wrote the fix at: https://lists.gnu.org/archive/html/bug-gnulib/2015-11/msg00010.html That now defines __STDC_FORMAT_MACROS in config.h instead. Now the problem is that gnulib's configure runs with a C compiler, not a C++ compiler, so my fix doesn't really make a difference. I had written that assuming we'd change to configure/build gnulib with a C++ compiler, back then. So the fix is to do what I had suggested here : ~~~~~~ If this causes a problem somewhere, we can re-define the macros higher up in the file, before system headers are included. ~~~~~~ > Should __STDC_FORMAT_MACROS be defined in gdb/common/common-defs.h and > gdb/defs.h (if btrace.c also is changed)? Exactly, almost. Only common/common-defs.h should be changed. defs.h includes common/common-defs.h first thing, before system headers. ("common" refers to the file being shared between gdb and gdbserver.) Thanks, Pedro Alves