From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Cc: gdb-patches@sourceware.org References: From: Tom de Vries In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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: , X-List-Received-Date: Wed, 12 Oct 2022 16:28:43 -0000 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