From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7619 invoked by alias); 2 Nov 2015 20:47:11 -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 7610 invoked by uid 89); 2 Nov 2015 20:47:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: usevmg21.ericsson.net Received: from usevmg21.ericsson.net (HELO usevmg21.ericsson.net) (198.24.6.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Mon, 02 Nov 2015 20:47:09 +0000 Received: from EUSAAHC007.ericsson.se (Unknown_Domain [147.117.188.93]) by usevmg21.ericsson.net (Symantec Mail Security) with SMTP id 87.2E.26730.17E57365; Mon, 2 Nov 2015 14:00:33 +0100 (CET) Received: from [142.133.110.144] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.95) with Microsoft SMTP Server id 14.3.248.2; Mon, 2 Nov 2015 15:47:05 -0500 Subject: Re: [PATCH 07/11] [C++/mingw] Define __STDC_CONSTANT_MACROS / __STDC_LIMIT_MACROS for stdint.h To: Pedro Alves , References: <1446492970-21432-1-git-send-email-palves@redhat.com> <1446492970-21432-8-git-send-email-palves@redhat.com> From: Simon Marchi Message-ID: <5637CBC9.2050404@ericsson.com> Date: Mon, 02 Nov 2015 20:47:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <1446492970-21432-8-git-send-email-palves@redhat.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-11/txt/msg00050.txt.bz2 On 15-11-02 02:36 PM, Pedro Alves wrote: > Cross building for --host=x86_64-w64-mingw32 using Fedora 20's g++ > (gcc version 4.8.4 20141219 (Fedora MinGW 4.8.4-1.fc20)), stumbles on > many instances of: > > In file included from ../../src/gdb/../include/splay-tree.h:43:0, > from ../../src/gdb/dcache.c:26: > build-gnulib/import/inttypes.h:61:3: error: #error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to ." > # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to ." > ^ > make: *** [dcache.o] Error 1 > > That's: > > #if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) > # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to ." > #endif > > The issue is that on some hosts that predate C++11, when using C++ one > must define __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS to make visible > the definitions of INTMAX_C / INTMAX_MAX etc. > > This was a C99 requirement that later C++11 -- the first to define > stdint.h -- removed, and then C11 removed it as well. > > https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html > says that gnulib's stdint.h fixes this, but because we run gnulib's > configure tests with a C compiler, gnulib determines that mingw's > stdint.h is C99-compliant, and doesn't actually replace it. Actually, > even though configuring gnulib with a C++ compiler does result in > gnulib replacing stdint.h, the resulting replacement is broken for > mingw, because it defines uintptr_t incorrectly. I sent a gnulib > patch upstream to fix that, here: > > https://lists.gnu.org/archive/html/bug-gnulib/2015-11/msg00004.html > > but then even with that, gnulib still stumbles on other > configured-with-C++-compiler problems. > > So for now, until gnulib + C++ is fixed upstream and then gdb's copy > is updated, which may take a while, I think it's best to keep > configuring gnulib in C, and define > __STDC_LIMIT_MACROS/__STDC_CONSTANT_MACROS ourselves, just like C99 > intended. > > gdb/ChangeLog: > 2015-11-01 Pedro Alves > > * common/common-defs.h (__STDC_CONSTANT_MACROS) > (__STDC_LIMIT_MACROS): Define before including stdint.h. > --- > gdb/common/common-defs.h | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/gdb/common/common-defs.h b/gdb/common/common-defs.h > index 2be0d7d..59b1887 100644 > --- a/gdb/common/common-defs.h > +++ b/gdb/common/common-defs.h > @@ -31,7 +31,23 @@ > #include > #include > #include > + > +/* From: > + https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html > + > + "On some hosts that predate C++11, when using C++ one must define > + __STDC_CONSTANT_MACROS to make visible the definitions of constant > + macros such as INTMAX_C, and one must define __STDC_LIMIT_MACROS to > + make visible the definitions of limit macros such as INTMAX_MAX." > + > + gnulib doesn't fix this for us correctly yet. See: > + https://lists.gnu.org/archive/html/bug-gnulib/2015-11/msg00004.html > + > + Meanwhile, explicitly define these ourselves, as C99 intended. */ > +#define __STDC_CONSTANT_MACROS > +#define __STDC_LIMIT_MACROS > #include > + > #include > #include > #include > FYI, I stumbled on the same problem when building for various architectures this weekend. I generated some toolchains by using some of the Buildroot included configurations, which use uclibc. I ended up defining those macros as well in CFLAGS. So that change can help for more configurations than just mingw.