On Wed, 15 Jul 2020, H.J. Lu wrote:

> On Wed, Jul 15, 2020 at 8:20 AM Richard Biener <rguent...@suse.de> wrote:
> >
> > On Wed, 15 Jul 2020, H.J. Lu wrote:
> >
> > > With --enable-cet, require CET support only for the final GCC build.
> > > Don't enable CET without CET support in stage1 nor for build support.
> >
> > I wonder if we want to do sth less fragile than testing
> > for ../stage_current - for example the toplevel make could
> > export sth special through POSTSTAGE1_FLAGS_TO_PASS?
> 
> That would be nice.
> 
> > But note one of the issues is that when not cross-compiling we're
> > using a single libiberty for target and host objects (likewise
> 
> It shouldn't be a problem.
> 
> > for libstdc++ I guess).  When cross-compiling say powerpc -> x86_64
> > we should already build stage1 libiberty used for target objects
> > by the stage1 compiler and thus CET enabled.
> >
> > Note that for PR96202 it's host objects (gen*) that we get complaints
> > for - the host objects should never get CET enabled.
> 
> We must enable CET in lto-plugin on CET enabled hosts even if
> CET isn't enabled in GCC run-time.  Otherwise, ld can't dlopen
>  lto-plugin.

But then don't we also need to enable CET for _all_ host objects?
Note libiberty for the build also seems instrumented leading to
LTO link fail when building gen* - so you probably mean that
lto-plugin for the _build_ needs to be CET enabled?  But then
gen* would need such CET enablement, too?

In any case we might want to try to disentangle CET enablement
for the build/host from that of the target?

> > That said, giving configury an idea whether it configures for
> > the host, the target or the build would be required here - Joseph,
> > is there an existing mechanism for example libiberty can use
> > here?
> >
> > Thanks,
> > Richard.
> >
> > > config/
> > >
> > >       PR bootstrap/96202
> > >       * cet.m4 (GCC_CET_HOST_FLAGS): Don't enable CET without CET
> > >       support in stage1 nor for build support.
> > >
> > > gcc/
> > >
> > >       PR bootstrap/96202
> > >       * configure: Regenerated.
> > >
> > > libbacktrace/
> > >
> > >       PR bootstrap/96202
> > >       * configure: Regenerated.
> > >
> > > libcc1/
> > >
> > >       PR bootstrap/96202
> > >       * configure: Regenerated.
> > >
> > > libcpp/
> > >
> > >       PR bootstrap/96202
> > >       * configure: Regenerated.
> > >
> > > libdecnumber/
> > >
> > >       PR bootstrap/96202
> > >       * configure: Regenerated.
> > >
> > > libiberty/
> > >
> > >       PR bootstrap/96202
> > >       * configure: Regenerated.
> > >
> > > lto-plugin/
> > >
> > >       PR bootstrap/96202
> > >       * configure: Regenerated.
> > > ---
> > >  config/cet.m4          | 22 +++++++++++++++++-----
> > >  gcc/configure          | 30 ++++++++++++++++++++++--------
> > >  libbacktrace/configure | 22 +++++++++++++++++-----
> > >  libcc1/configure       | 20 ++++++++++++++++----
> > >  libcpp/configure       | 20 ++++++++++++++++----
> > >  libdecnumber/configure | 20 ++++++++++++++++----
> > >  libiberty/configure    | 20 ++++++++++++++++----
> > >  lto-plugin/configure   | 24 ++++++++++++++++++------
> > >  8 files changed, 138 insertions(+), 40 deletions(-)
> > >
> > > diff --git a/config/cet.m4 b/config/cet.m4
> > > index 911fbd46475..265756e4c81 100644
> > > --- a/config/cet.m4
> > > +++ b/config/cet.m4
> > > @@ -13,7 +13,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET insn.
> > >       cet_save_CFLAGS="$CFLAGS"
> > >       CFLAGS="$CFLAGS -fcf-protection"
> > >       AC_COMPILE_IFELSE(
> > > @@ -70,7 +70,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       AC_COMPILE_IFELSE(
> > >        [AC_LANG_PROGRAM(
> > >         [],
> > > @@ -85,13 +85,25 @@ asm ("setssbsy");
> > >        [enable_cet=no])
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       AC_COMPILE_IFELSE(
> > >        [AC_LANG_PROGRAM(
> > >         [],
> > >         [asm ("setssbsy");])],
> > > -      [],
> > > -      [AC_MSG_ERROR([assembler with CET support is required for 
> > > --enable-cet])])
> > > +      [support_cet=yes],
> > > +      [support_cet=no])
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         AC_MSG_ERROR([compiler and assembler with CET support are 
> > > required for --enable-cet])
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > diff --git a/gcc/configure b/gcc/configure
> > > index f224679ed3e..6d06220eb2c 100755
> > > --- a/gcc/configure
> > > +++ b/gcc/configure
> > > @@ -785,10 +785,10 @@ manext
> > >  LIBICONV_DEP
> > >  LTLIBICONV
> > >  LIBICONV
> > > -ZSTD_LIB
> > > -ZSTD_INCLUDE
> > >  ZSTD_LDFLAGS
> > >  ZSTD_CPPFLAGS
> > > +ZSTD_LIB
> > > +ZSTD_INCLUDE
> > >  DL_LIB
> > >  LDEXP_LIB
> > >  EXTRA_GCC_LIBS
> > > @@ -9978,6 +9978,8 @@ ZSTD_LIB=
> > >  ZSTD_CPPFLAGS=
> > >  ZSTD_LDFLAGS=
> > >
> > > +
> > > +
> > >  # Check whether --with-zstd was given.
> > >  if test "${with_zstd+set}" = set; then :
> > >    withval=$with_zstd;
> > > @@ -19021,7 +19023,7 @@ else
> > >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> > >    lt_status=$lt_dlunknown
> > >    cat > conftest.$ac_ext <<_LT_EOF
> > > -#line 19022 "configure"
> > > +#line 19026 "configure"
> > >  #include "confdefs.h"
> > >
> > >  #if HAVE_DLFCN_H
> > > @@ -19127,7 +19129,7 @@ else
> > >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> > >    lt_status=$lt_dlunknown
> > >    cat > conftest.$ac_ext <<_LT_EOF
> > > -#line 19128 "configure"
> > > +#line 19132 "configure"
> > >  #include "confdefs.h"
> > >
> > >  #if HAVE_DLFCN_H
> > > @@ -30792,7 +30794,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -30818,7 +30820,7 @@ fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -30831,11 +30833,23 @@ asm ("setssbsy");
> > >  }
> > >  _ACEOF
> > >  if ac_fn_cxx_try_compile "$LINENO"; then :
> > > -
> > > +  support_cet=yes
> > >  else
> > > -  as_fn_error $? "assembler with CET support is required for 
> > > --enable-cet" "$LINENO" 5
> > > +  support_cet=no
> > >  fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         as_fn_error $? "compiler and assembler with CET support are 
> > > required for --enable-cet" "$LINENO" 5
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > diff --git a/libbacktrace/configure b/libbacktrace/configure
> > > index 37c38e7ac5b..e23ffc18edb 100755
> > > --- a/libbacktrace/configure
> > > +++ b/libbacktrace/configure
> > > @@ -12169,7 +12169,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET insn.
> > >       cet_save_CFLAGS="$CFLAGS"
> > >       CFLAGS="$CFLAGS -fcf-protection"
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > > @@ -12409,7 +12409,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -12435,7 +12435,7 @@ fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -12448,11 +12448,23 @@ asm ("setssbsy");
> > >  }
> > >  _ACEOF
> > >  if ac_fn_c_try_compile "$LINENO"; then :
> > > -
> > > +  support_cet=yes
> > >  else
> > > -  as_fn_error $? "assembler with CET support is required for 
> > > --enable-cet" "$LINENO" 5
> > > +  support_cet=no
> > >  fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         as_fn_error $? "compiler and assembler with CET support are 
> > > required for --enable-cet" "$LINENO" 5
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > diff --git a/libcc1/configure b/libcc1/configure
> > > index 37dbeac4908..896181ac703 100755
> > > --- a/libcc1/configure
> > > +++ b/libcc1/configure
> > > @@ -14565,7 +14565,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -14591,7 +14591,7 @@ fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -14604,11 +14604,23 @@ asm ("setssbsy");
> > >  }
> > >  _ACEOF
> > >  if ac_fn_c_try_compile "$LINENO"; then :
> > > -
> > > +  support_cet=yes
> > >  else
> > > -  as_fn_error $? "assembler with CET support is required for 
> > > --enable-cet" "$LINENO" 5
> > > +  support_cet=no
> > >  fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         as_fn_error $? "compiler and assembler with CET support are 
> > > required for --enable-cet" "$LINENO" 5
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > diff --git a/libcpp/configure b/libcpp/configure
> > > index 3329e20c392..b5ccd57a629 100755
> > > --- a/libcpp/configure
> > > +++ b/libcpp/configure
> > > @@ -7564,7 +7564,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -7590,7 +7590,7 @@ fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -7603,11 +7603,23 @@ asm ("setssbsy");
> > >  }
> > >  _ACEOF
> > >  if ac_fn_c_try_compile "$LINENO"; then :
> > > -
> > > +  support_cet=yes
> > >  else
> > > -  as_fn_error $? "assembler with CET support is required for 
> > > --enable-cet" "$LINENO" 5
> > > +  support_cet=no
> > >  fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         as_fn_error $? "compiler and assembler with CET support are 
> > > required for --enable-cet" "$LINENO" 5
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > diff --git a/libdecnumber/configure b/libdecnumber/configure
> > > index df6fdcfbc7f..94ee3357498 100755
> > > --- a/libdecnumber/configure
> > > +++ b/libdecnumber/configure
> > > @@ -5217,7 +5217,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -5243,7 +5243,7 @@ fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -5256,11 +5256,23 @@ asm ("setssbsy");
> > >  }
> > >  _ACEOF
> > >  if ac_fn_c_try_compile "$LINENO"; then :
> > > -
> > > +  support_cet=yes
> > >  else
> > > -  as_fn_error $? "assembler with CET support is required for 
> > > --enable-cet" "$LINENO" 5
> > > +  support_cet=no
> > >  fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         as_fn_error $? "compiler and assembler with CET support are 
> > > required for --enable-cet" "$LINENO" 5
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > diff --git a/libiberty/configure b/libiberty/configure
> > > index 1f8e23f0d23..4cd6cfe3291 100755
> > > --- a/libiberty/configure
> > > +++ b/libiberty/configure
> > > @@ -5291,7 +5291,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -5317,7 +5317,7 @@ fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -5330,11 +5330,23 @@ asm ("setssbsy");
> > >  }
> > >  _ACEOF
> > >  if ac_fn_c_try_compile "$LINENO"; then :
> > > -
> > > +  support_cet=yes
> > >  else
> > > -  as_fn_error $? "assembler with CET support is required for 
> > > --enable-cet" "$LINENO" 5
> > > +  support_cet=no
> > >  fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         as_fn_error $? "compiler and assembler with CET support are 
> > > required for --enable-cet" "$LINENO" 5
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > diff --git a/lto-plugin/configure b/lto-plugin/configure
> > > index 69f6fce05c5..1666e87eedd 100755
> > > --- a/lto-plugin/configure
> > > +++ b/lto-plugin/configure
> > > @@ -5687,7 +5687,7 @@ case "$host" in
> > >      case "$enable_cet" in
> > >        auto)
> > >       # Check if target supports multi-byte NOPs
> > > -     # and if assembler supports CET insn.
> > > +     # and if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -5713,7 +5713,7 @@ fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > >       ;;
> > >        yes)
> > > -     # Check if assembler supports CET.
> > > +     # Check if compiler and assembler support CET.
> > >       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > >  /* end confdefs.h.  */
> > >
> > > @@ -5726,11 +5726,23 @@ asm ("setssbsy");
> > >  }
> > >  _ACEOF
> > >  if ac_fn_c_try_compile "$LINENO"; then :
> > > -
> > > +  support_cet=yes
> > >  else
> > > -  as_fn_error $? "assembler with CET support is required for 
> > > --enable-cet" "$LINENO" 5
> > > +  support_cet=no
> > >  fi
> > >  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> > > +     if test $support_cet = "no"; then
> > > +       if test -z "${with_build_subdir}" \
> > > +          && (test ! -f ../stage_current \
> > > +              || test `cat ../stage_current` != "stage1"); then
> > > +         # Require CET support only for the final GCC build.
> > > +         as_fn_error $? "compiler and assembler with CET support are 
> > > required for --enable-cet" "$LINENO" 5
> > > +       else
> > > +         # Don't enable CET without CET support in stage1 nor for
> > > +         # build support.
> > > +         enable_cet=no
> > > +       fi
> > > +     fi
> > >       ;;
> > >      esac
> > >      CFLAGS="$cet_save_CFLAGS"
> > > @@ -11947,7 +11959,7 @@ else
> > >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> > >    lt_status=$lt_dlunknown
> > >    cat > conftest.$ac_ext <<_LT_EOF
> > > -#line 11950 "configure"
> > > +#line 11962 "configure"
> > >  #include "confdefs.h"
> > >
> > >  #if HAVE_DLFCN_H
> > > @@ -12053,7 +12065,7 @@ else
> > >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> > >    lt_status=$lt_dlunknown
> > >    cat > conftest.$ac_ext <<_LT_EOF
> > > -#line 12056 "configure"
> > > +#line 12068 "configure"
> > >  #include "confdefs.h"
> > >
> > >  #if HAVE_DLFCN_H
> > >
> >
> > --
> > Richard Biener <rguent...@suse.de>
> > SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
> > Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)
> 
> 
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to