From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id V6pQMFLrRmPOMAsAWB0awg (envelope-from ) for ; Wed, 12 Oct 2022 12:29:06 -0400 Received: by simark.ca (Postfix, from userid 112) id B8DB91E112; Wed, 12 Oct 2022 12:29:06 -0400 (EDT) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=FPWPP16s; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,NICE_REPLY_A,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 8CD7C1E0D5 for ; Wed, 12 Oct 2022 12:29:02 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id ADD1B38515C3 for ; Wed, 12 Oct 2022 16:29:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ADD1B38515C3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1665592141; bh=zGr/tYtoSNCabssrnylVFx3ZBeR9DVY57W76v/Ezm3k=; h=Date:Subject:To:References:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=FPWPP16s5y0qQPbb6kl4YQYgKvbORUATS7P+5Wjv8IJwc8u1D23cHk8grjBzlP1XJ wLUmzP+AbowHPvIgMPX6jhB+mRgGlMOyXjR+gx/UqnJpkjHo45+9BNz5oYwPZY94zZ /GsQBYpl0/NrbuYx72aeepo6TEv03K1lYmGBDUV4= Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id D282C385736F for ; Wed, 12 Oct 2022 16:28:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D282C385736F Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id E01D521CF9; Wed, 12 Oct 2022 16:28:36 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id B19E513A5C; Wed, 12 Oct 2022 16:28:36 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id m976KTTrRmMiZAAAMHmgww (envelope-from ); Wed, 12 Oct 2022 16:28:36 +0000 Message-ID: <7b235ccb-ab2e-cba0-3015-2eae5fe6a8a4@suse.de> Date: Wed, 12 Oct 2022 18:28:36 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 Subject: Re: [PATCH v3 4/5] sim: Check known getopt definition existence Content-Language: en-US To: Tsukasa OI , Andrew Burgess , Mike Frysinger References: In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Tom de Vries via Gdb-patches Reply-To: Tom de Vries Cc: gdb-patches@sourceware.org Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" On 10/6/22 08:43, Tsukasa OI via Gdb-patches wrote: > Clang generates a warning if there is a function declaration/definition > with zero arguments. Such declarations/definitions without a prototype (an > argument list) are deprecated forms of indefinite arguments > ("-Wdeprecated-non-prototype"). On the default configuration, it causes a > build failure (unless "--disable-werror" is specified). > > include/getopt.h defines some getopt function definitions but one of them > has a form "extern int getopt ();". If this form is selected in > include/getopt.h, Clang generates a warning and the build fails by default. > > In really old environments, this getopt definition with no arguments is > necessary (because the definition may change between environments). > However, this definition is now a cause of problems on modern environments. > > A good news is, this definition is not always selected (e.g. if used by > binutils/*.c). This is because configuration scripts of binutils, gas, > gprof and ld tries to find known definition of getopt function is used and > defines HAVE_DECL_GETOPT macro. If this macro is defined when getopt.h is > included, a good form of getopt is used and Clang won't generate warnings. > > This commit adds a modified portion of ld/configure.ac to find the known > getopt definition. If we could find one (and we *will* in most modern > environments), we don't need to rely on the deprecated definition. I'm guessing this cause the build breakage on buildbot gdb-centos-x86_64 . https://builder.sourceware.org/buildbot/#/builders/71/builds/1392 Thanks, - Tom > --- > sim/config.h.in | 3 +++ > sim/configure | 32 ++++++++++++++++++++++++++++++++ > sim/configure.ac | 10 ++++++++++ > 3 files changed, 45 insertions(+) > > diff --git a/sim/config.h.in b/sim/config.h.in > index 84c363c0aec..9a94b289e46 100644 > --- a/sim/config.h.in > +++ b/sim/config.h.in > @@ -41,6 +41,9 @@ > /* Define to 1 if you have the `chmod' function. */ > #undef HAVE_CHMOD > > +/* Is the prototype for getopt in in the expected format? */ > +#undef HAVE_DECL_GETOPT > + > /* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. > */ > #undef HAVE_DECL_TZNAME > diff --git a/sim/configure b/sim/configure > index 75d1935df38..dac7f085be1 100755 > --- a/sim/configure > +++ b/sim/configure > @@ -16428,6 +16428,38 @@ $as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; } > fi > > > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a known getopt prototype in unistd.h" >&5 > +$as_echo_n "checking for a known getopt prototype in unistd.h... " >&6; } > +if ${sim_cv_decl_getopt_unistd_h+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +#include > +int > +main () > +{ > +extern int getopt (int, char *const*, const char *); > + ; > + return 0; > +} > +_ACEOF > +if ac_fn_c_try_compile "$LINENO"; then : > + sim_cv_decl_getopt_unistd_h=yes > +else > + sim_cv_decl_getopt_unistd_h=no > +fi > +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > +fi > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_cv_decl_getopt_unistd_h" >&5 > +$as_echo "$sim_cv_decl_getopt_unistd_h" >&6; } > +if test $sim_cv_decl_getopt_unistd_h = yes; then > + > +$as_echo "#define HAVE_DECL_GETOPT 1" >>confdefs.h > + > +fi > + > > > > diff --git a/sim/configure.ac b/sim/configure.ac > index 66a1020efe0..be0cfdbea32 100644 > --- a/sim/configure.ac > +++ b/sim/configure.ac > @@ -177,6 +177,16 @@ SIM_AC_OPTION_STDIO > SIM_AC_OPTION_TRACE > SIM_AC_OPTION_WARNINGS > > +AC_MSG_CHECKING(for a known getopt prototype in unistd.h) > +AC_CACHE_VAL(sim_cv_decl_getopt_unistd_h, > +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [extern int getopt (int, char *const*, const char *);])], > +sim_cv_decl_getopt_unistd_h=yes, sim_cv_decl_getopt_unistd_h=no)]) > +AC_MSG_RESULT($sim_cv_decl_getopt_unistd_h) > +if test $sim_cv_decl_getopt_unistd_h = yes; then > + AC_DEFINE([HAVE_DECL_GETOPT], 1, > + [Is the prototype for getopt in in the expected format?]) > +fi > + > dnl These are unfortunate. They are conditionally called by other sim macros > dnl but always used by common/Make-common.in. So we have to subst here even > dnl when the rest of the code is in the respective macros. Once we merge the