From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <3VFa9YAcKCwMpdvnud1jrrjoh.frpjff-sdwfkhvjff.jqx.ruj@flex--maskray.bounces.google.com> Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by sourceware.org (Postfix) with ESMTPS id CBC6F3855035 for ; Sun, 6 Jun 2021 23:12:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CBC6F3855035 Received: by mail-yb1-xb4a.google.com with SMTP id x187-20020a25e0c40000b029052a5f0bf9acso20356094ybg.1 for ; Sun, 06 Jun 2021 16:12:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=R1Dth5VlPmXhjmqNbE8w/MvW601N56hczlxJJd6trCA=; b=iFsbY85YMG71BGO3fiuoFetKTnFLEY/+xLmhgMLdnEAXzi4aBkNrbBKXRtY4OoiSTh Vd5ihBavvTkJ0ZhSqQve8+mZ0zbP+Ypn7aCehiSJUUULVGmgCpGSnMxZobLuQc9wNv+t Kk0DlboBPWXPS4oNEbZTBGw08Zio6UBDS2oPdPFJlytKYzzt6055oveTTAXloLY6iSx/ q/eR7zcc0BSyQXXYKN4FSY/SDPfmwL55YKUGEYArXa7eBdLXvMC7USd5PFtJ1t95yCK6 rOonTwTqCxlGXNLRSEEyo5ceXNtDXwAqpemxHQMBX1Km4OvSc1GoJQlGYdrSZqrFi2Nt H0Fw== X-Gm-Message-State: AOAM533X+77pAwxE28xAD6YtFsBQz5imkrwZpXbOK/FjIfIv3CTfOSAe ER/HObTW3ny2DLyu+k+o3AzLxPJgSNQ49KMebw7hJTNHQYJtxmT8x1NQMxH/dLyHFizOZd/nNjt hy1ocaE5XPzro2gyjz/IEif28jkVNTJOEl2jsu7w2g7JmZqxKNMOivfquKmKY8pj9cA== X-Google-Smtp-Source: ABdhPJzBpdk3JAytFw4svU4YiKajep8pQXeuChct5rN7TdQwTWxtopDSRRQkl0xkdgYap4mydzDU2e0WNjX4 X-Received: from maskray1.svl.corp.google.com ([2620:15c:2ce:200:949b:d340:d21:48a0]) (user=maskray job=sendgmr) by 2002:a25:8b08:: with SMTP id i8mr18830587ybl.370.1623021140239; Sun, 06 Jun 2021 16:12:20 -0700 (PDT) Date: Sun, 6 Jun 2021 16:12:15 -0700 Message-Id: <20210606231215.49899-1-maskray@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.32.0.rc1.229.g3e70b5a671-goog Subject: [PATCH] Add --enable-default-semantic-interposition to GCC configure From: Fangrui Song To: gcc-patches@gcc.gnu.org, Jan Hubicka Cc: Fangrui Song Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 Jun 2021 23:12:24 -0000 From: Fangrui Song --enable-default-semantic-interposition=no makes -fPIC default to -fno-semantic-interposition which enables interprocedural optimizations for default visibility non-vague-linkage function definitions. The suppression of interprocedural optimizations and inlining for such functions is the biggest difference between -fPIE/-fPIC. Distributions may want to enable default -fno-semantic-interposition to reclaim the lost performance (e.g. CPython is said to be 27% faster; Clang is 3% faster). gcc/ PR 100937 * common.opt (fsemantic-interposition): Initialize to -1. * configure.ac: Add --enable-default-semantic-interposition. Default to yes. * defaults.h (DEFAULT_FLAG_SEMANTIC_INTERPOSITION): New. * opts.c (finish_options): Update opts->x_flag_semantic_interposition if it is -1. * doc/install.texi: Document --enable-default-semantic-interposition. * config.in: Add template. * configure: Regenerate. --- gcc/common.opt | 2 +- gcc/config.in | 6 ++++++ gcc/configure | 22 ++++++++++++++++++++-- gcc/configure.ac | 12 ++++++++++++ gcc/defaults.h | 6 ++++++ gcc/doc/install.texi | 3 +++ gcc/opts.c | 3 +++ 7 files changed, 51 insertions(+), 3 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index ffb968d90f8..68fcbac96b1 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2480,7 +2480,7 @@ Common Var(flag_sel_sched_reschedule_pipelined) Init(0) Optimization Reschedule pipelined regions without pipelining. fsemantic-interposition -Common Var(flag_semantic_interposition) Init(1) +Common Var(flag_semantic_interposition) Init(-1) Allow interposing function (or variables) by ones with different semantics (or initializer) respectively by dynamic linker. ; sched_stalled_insns means that insns can be moved prematurely from the queue diff --git a/gcc/config.in b/gcc/config.in index e54f59ce0c3..7f1d56c1903 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -125,6 +125,12 @@ #endif +/* Define if -fPIC defaults to -fsemantic-interposition */ +#ifndef USED_FOR_TARGET +#undef ENABLE_DEFAULT_SEMANTIC_INTERPOSITION +#endif + + /* Define if your target supports default stack protector and it is enabled. */ #ifndef USED_FOR_TARGET diff --git a/gcc/configure b/gcc/configure index 4a9e4fa08ab..3835b22f6a5 100755 --- a/gcc/configure +++ b/gcc/configure @@ -632,6 +632,7 @@ ac_includes_default="\ ac_subst_vars='LTLIBOBJS LIBOBJS CET_HOST_FLAGS +enable_default_semantic_interposition NO_PIE_FLAG NO_PIE_CFLAGS enable_default_pie @@ -1027,6 +1028,7 @@ with_linker_hash_style with_diagnostics_color with_diagnostics_urls enable_default_pie +enable_default_semantic_interposition enable_cet enable_s390_excess_float_precision ' @@ -1787,6 +1789,8 @@ Optional Features: --disable-libquadmath-support disable libquadmath support for Fortran --enable-default-pie enable Position Independent Executable as default + --enable-default-semantic-interposition + enable -fsemantic-interposition as -fPIC default --enable-cet enable Intel CET in host libraries [default=auto] --enable-s390-excess-float-precision on s390 targets, evaluate float with double @@ -19435,7 +19439,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 19438 "configure" +#line 19454 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -19541,7 +19545,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 19544 "configure" +#line 19560 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -31893,6 +31897,20 @@ if test "$gcc_cv_no_pie" = "yes"; then fi +# Check whether --enable-default-semantic-interposition=no was given. +if test "${enable_default_semantic_interposition+set}" = set; then : + enableval=$enable_default_semantic_interposition; enable_default_semantic_interposition=$enableval +else + enable_default_semantic_interposition=yes +fi + +if test x$enable_default_semantic_interposition != xno ; then + +$as_echo "#define ENABLE_DEFAULT_SEMANTIC_INTERPOSITION 1" >>confdefs.h + +fi + + # Enable Intel CET on Intel CET enabled host if jit is enabled. # Check whether --enable-cet was given. if test "${enable_cet+set}" = set; then : diff --git a/gcc/configure.ac b/gcc/configure.ac index d9fc3c219e8..1cdf8b4ce00 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -7419,6 +7419,18 @@ if test "$gcc_cv_no_pie" = "yes"; then fi AC_SUBST([NO_PIE_FLAG]) +# Check whether --enable-default-semantic-interposition=no was given. +AC_ARG_ENABLE(default-semantic-interposition, +[AS_HELP_STRING([--enable-default-semantic-interposition], + [enable -fsemantic-interposition as -fPIC default])], +enable_default_semantic_interposition=$enableval, +enable_default_semantic_interposition=yes) +if test x$enable_default_semantic_interposition != xno ; then + AC_DEFINE(ENABLE_DEFAULT_SEMANTIC_INTERPOSITION, 1, + [Define if -fPIC defaults to -fsemantic-interposition.]) +fi +AC_SUBST([enable_default_semantic_interposition]) + # Enable Intel CET on Intel CET enabled host if jit is enabled. GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) case x$enable_languages in diff --git a/gcc/defaults.h b/gcc/defaults.h index 91216593e75..548b1f64f17 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -1249,6 +1249,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see # define DEFAULT_FLAG_PIE 0 #endif +#ifdef ENABLE_DEFAULT_SEMANTIC_INTERPOSITION +# define DEFAULT_FLAG_SEMANTIC_INTERPOSITION 1 +#else +# define DEFAULT_FLAG_SEMANTIC_INTERPOSITION 0 +#endif + #ifndef SWITCHABLE_TARGET #define SWITCHABLE_TARGET 0 #endif diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 591ccaacbc1..17e756c7e7a 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1867,6 +1867,9 @@ mips-linux and s390-linux. @item --enable-default-pie Turn on @option{-fPIE} and @option{-pie} by default. +@item --enable-default-semantic-interposition=no +Make @option{-fPIC} default to @option{-fno-semantic-interposition}. + @item --enable-secureplt This option enables @option{-msecure-plt} by default for powerpc-linux. @ifnothtml diff --git a/gcc/opts.c b/gcc/opts.c index a751d95d32b..c6f49af2583 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -1068,6 +1068,9 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, if (opts->x_flag_stack_protect == -1) opts->x_flag_stack_protect = DEFAULT_FLAG_SSP; + if (opts->x_flag_semantic_interposition == -1) + opts->x_flag_semantic_interposition = DEFAULT_FLAG_SEMANTIC_INTERPOSITION; + if (opts->x_optimize == 0) { /* Inlining does not work if not optimizing, -- 2.32.0.rc1.229.g3e70b5a671-goog