From 285d81be9725acc36dc8eca48d4df506cd5e6f6f Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Mon, 7 Sep 2020 15:43:04 +0200 Subject: libphobos: libdruntime doesn't support shadow stack (PR95680) Rather than implementing support within D runtime itself, use libc getcontext/swapcontext functions if CET is enabled. Removes whatever CET support was in the switchContext routine for x86 D runtime, along with setting version AsmExternal, so that the fallback ucontext_t implementation is used, which is capable of doing shadow stack handling. libphobos/ChangeLog: PR d/95680 * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac (DCFG_ENABLE_CET): Substitute. * libdruntime/Makefile.in: Regenerate. * libdruntime/config/x86/switchcontext.S: Remove CET support code. * libdruntime/core/thread.d: Import gcc.config. Don't set version AsmExternal when GNU_Enable_CET is true. * libdruntime/gcc/config.d.in (GNU_Enable_CET): Define. * src/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. --- libphobos/Makefile.in | 3 ++ libphobos/configure | 13 ++++-- libphobos/configure.ac | 3 ++ libphobos/libdruntime/Makefile.in | 4 ++ libphobos/libdruntime/config/x86/switchcontext.S | 12 +----- libphobos/libdruntime/core/thread.d | 52 ++++++++++++++---------- libphobos/libdruntime/gcc/config.d.in | 3 ++ libphobos/src/Makefile.in | 4 ++ libphobos/testsuite/Makefile.in | 4 ++ 9 files changed, 64 insertions(+), 34 deletions(-) (limited to 'libphobos') diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in index 4806f69..f6cba17 100644 --- a/libphobos/Makefile.in +++ b/libphobos/Makefile.in @@ -108,6 +108,8 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -214,6 +216,7 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ +DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ diff --git a/libphobos/configure b/libphobos/configure index a8d151c..86a0aba 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -722,6 +722,7 @@ LIBTOOL CFLAGS_FOR_BUILD CC_FOR_BUILD AR +DCFG_ENABLE_CET CET_FLAGS RANLIB MAINT @@ -5586,7 +5587,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 @@ -5650,6 +5651,12 @@ $as_echo "no" >&6; } fi +if test x$enable_cet = xyes; then : + DCFG_ENABLE_CET=true +else + DCFG_ENABLE_CET=false +fi + # This should be inherited in the recursive make, but ensure it is defined. test "$AR" || AR=ar @@ -11738,7 +11745,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11741 "configure" +#line 11748 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11844,7 +11851,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11847 "configure" +#line 11854 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libphobos/configure.ac b/libphobos/configure.ac index ec8a30e..97f9693 100644 --- a/libphobos/configure.ac +++ b/libphobos/configure.ac @@ -68,6 +68,9 @@ AC_PROG_MAKE_SET # Add CET specific flags if CET is enabled GCC_CET_FLAGS(CET_FLAGS) AC_SUBST(CET_FLAGS) +AS_IF([test x$enable_cet = xyes], + [DCFG_ENABLE_CET=true], [DCFG_ENABLE_CET=false]) +AC_SUBST(DCFG_ENABLE_CET) # This should be inherited in the recursive make, but ensure it is defined. test "$AR" || AR=ar diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 3fddbc3..28b4333 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -131,6 +131,8 @@ target_triplet = @target@ subdir = libdruntime ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -565,6 +567,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ +CET_FLAGS = @CET_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHECKING_DFLAGS = @CHECKING_DFLAGS@ @@ -573,6 +576,7 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ +DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ diff --git a/libphobos/libdruntime/config/x86/switchcontext.S b/libphobos/libdruntime/config/x86/switchcontext.S index 35063af..85f2e00 100644 --- a/libphobos/libdruntime/config/x86/switchcontext.S +++ b/libphobos/libdruntime/config/x86/switchcontext.S @@ -24,13 +24,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "../common/threadasm.S" -#ifdef __CET__ -# include -#else -# define _CET_ENDBR -#endif - -#if defined(__i386__) +#if defined(__i386__) && !defined(__CET__) .text .globl CSYM(fiber_switchContext) @@ -38,7 +32,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see .align 16 CSYM(fiber_switchContext): .cfi_startproc - _CET_ENDBR // save current stack state push %ebp mov %esp, %ebp @@ -65,7 +58,7 @@ CSYM(fiber_switchContext): .cfi_endproc .size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext) -#elif defined(__x86_64__) && !defined(__ILP32__) +#elif defined(__x86_64__) && !defined(__ILP32__) && !defined(__CET__) .text .globl CSYM(fiber_switchContext) @@ -73,7 +66,6 @@ CSYM(fiber_switchContext): .align 16 CSYM(fiber_switchContext): .cfi_startproc - _CET_ENDBR // Save current stack state.save current stack state push %rbp mov %rsp, %rbp diff --git a/libphobos/libdruntime/core/thread.d b/libphobos/libdruntime/core/thread.d index e1a6805..8f4603d 100644 --- a/libphobos/libdruntime/core/thread.d +++ b/libphobos/libdruntime/core/thread.d @@ -3586,35 +3586,45 @@ private } else version (X86) { - version = AsmExternal; + import gcc.config; - version (MinGW) - { - version = GNU_AsmX86_Windows; - version = AlignFiberStackTo16Byte; - } - else version (Posix) + version = AlignFiberStackTo16Byte; + + static if (!GNU_Enable_CET) { - version = AsmX86_Posix; - version (OSX) - version = AlignFiberStackTo16Byte; + version = AsmExternal; + + version (MinGW) + { + version = GNU_AsmX86_Windows; + } + else version (Posix) + { + version = AsmX86_Posix; + } } } else version (X86_64) { - version (D_X32) - { - // let X32 be handled by ucontext swapcontext - } - else + import gcc.config; + + version = AlignFiberStackTo16Byte; + + static if (!GNU_Enable_CET) { - version = AsmExternal; - version = AlignFiberStackTo16Byte; + version (D_X32) + { + // let X32 be handled by ucontext swapcontext + } + else + { + version = AsmExternal; - version (MinGW) - version = GNU_AsmX86_64_Windows; - else version (Posix) - version = AsmX86_64_Posix; + version (MinGW) + version = GNU_AsmX86_64_Windows; + else version (Posix) + version = AsmX86_64_Posix; + } } } else version (PPC) diff --git a/libphobos/libdruntime/gcc/config.d.in b/libphobos/libdruntime/gcc/config.d.in index 6301aaf..9ac7d05 100644 --- a/libphobos/libdruntime/gcc/config.d.in +++ b/libphobos/libdruntime/gcc/config.d.in @@ -49,3 +49,6 @@ enum GNU_Have_LibAtomic = @DCFG_HAVE_LIBATOMIC@; // Do we have qsort_r function enum Have_Qsort_R = @DCFG_HAVE_QSORT_R@; + +// Whether libphobos been configured with --enable-cet. +enum GNU_Enable_CET = @DCFG_ENABLE_CET@; diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in index 4b1ae86..dc5f4f5 100644 --- a/libphobos/src/Makefile.in +++ b/libphobos/src/Makefile.in @@ -93,6 +93,8 @@ target_triplet = @target@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -321,6 +323,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ +CET_FLAGS = @CET_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHECKING_DFLAGS = @CHECKING_DFLAGS@ @@ -329,6 +332,7 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ +DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in index 66077fc..5a4c031 100644 --- a/libphobos/testsuite/Makefile.in +++ b/libphobos/testsuite/Makefile.in @@ -93,6 +93,8 @@ target_triplet = @target@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -149,6 +151,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ +CET_FLAGS = @CET_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHECKING_DFLAGS = @CHECKING_DFLAGS@ @@ -157,6 +160,7 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ +DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ -- cgit v1.1 From 31a050462476f4f15dc5e1f9d6ac9a1dd0a70e74 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Wed, 9 Sep 2020 00:16:29 +0000 Subject: Daily bump. --- libphobos/ChangeLog | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'libphobos') diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index fd0db86..47482eb 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,17 @@ +2020-09-08 Iain Buclaw + + PR d/95680 + * Makefile.in: Regenerate. + * configure: Regenerate. + * configure.ac (DCFG_ENABLE_CET): Substitute. + * libdruntime/Makefile.in: Regenerate. + * libdruntime/config/x86/switchcontext.S: Remove CET support code. + * libdruntime/core/thread.d: Import gcc.config. Don't set version + AsmExternal when GNU_Enable_CET is true. + * libdruntime/gcc/config.d.in (GNU_Enable_CET): Define. + * src/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2020-06-25 Iain Buclaw * libdruntime/MERGE: Merge upstream druntime d05ebaad. -- cgit v1.1 From c6632dc9a8ee77ad66a8d62d736a9112de9e41c7 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 8 Sep 2020 05:54:56 -0700 Subject: libphobos: Include to generate the CET marker for -fcf-protection Include to generate the CET marker for -fcf-protection to avoid /bin/ld: ../libdruntime/.libs/libgdruntime_convenience.a(libgdruntime_convenience_la-switchcontext.o): error: missing IBT and SHSTK properties when -z cet-report=error is passed to the linker to create libgphobos.so and libgdruntime.so. PR d/95680 * libdruntime/config/x86/switchcontext.S: Include to generate the CET marker for -fcf-protection. --- libphobos/libdruntime/config/x86/switchcontext.S | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'libphobos') diff --git a/libphobos/libdruntime/config/x86/switchcontext.S b/libphobos/libdruntime/config/x86/switchcontext.S index 85f2e00..f2f8efa 100644 --- a/libphobos/libdruntime/config/x86/switchcontext.S +++ b/libphobos/libdruntime/config/x86/switchcontext.S @@ -24,6 +24,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "../common/threadasm.S" +/* NB: Generate the CET marker for -fcf-protection. */ +#ifdef __CET__ +# include +#endif + #if defined(__i386__) && !defined(__CET__) .text -- cgit v1.1 From 80f86e78ac0b8a54e2ad208782a583d53f397aa3 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Thu, 10 Sep 2020 00:16:28 +0000 Subject: Daily bump. --- libphobos/ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libphobos') diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index 47482eb..07ccdc7 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,9 @@ +2020-09-09 H.J. Lu + + PR d/95680 + * libdruntime/config/x86/switchcontext.S: Include to + generate the CET marker for -fcf-protection. + 2020-09-08 Iain Buclaw PR d/95680 -- cgit v1.1 From 0ed757604f4e232324ca798e46f3d8bf7e35b009 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Thu, 10 Sep 2020 01:30:20 +0200 Subject: libphobos: libdruntime doesn't support shadow stack (PR95680) The first implementation hit a front-end implementation bug where version conditions are resolved ahead of static if confitions. The logic for whether to use asm implemented fiber_switchContext or libc's swapcontext has been moved from GNU_Enable_CET to version CET. libphobos/ChangeLog: PR d/95680 PR d/97007 * Makefile.am (AM_MAKEFLAGS): Remove $(CET_FLAGS). * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac (DCFG_ENABLE_CET): Remove substitution. (CET_DFLAGS): Substitute. * libdruntime/Makefile.am (AM_DFLAGS): Add $(CET_DFLAGS). (AM_CFLAGS): Add $(CET_FLAGS). (AM_CCASFLAGS): Likewise. * libdruntime/Makefile.in: Regenerate. * libdruntime/core/thread.d: Replace static if GNU_Enable_CET condition with `version (CET)'. * libdruntime/gcc/config.d.in (GNU_Enable_CET): Remove. * src/Makefile.am (AM_DFLAGS): Add $(CET_DFLAGS). (AM_CFLAGS): Add $(CET_FLAGS). * src/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. * testsuite/testsuite_flags.in: Add $(CET_DFLAGS) to --gdcflags. --- libphobos/Makefile.am | 10 ++++---- libphobos/Makefile.in | 12 +++++----- libphobos/configure | 15 ++++++------ libphobos/configure.ac | 8 ++++--- libphobos/libdruntime/Makefile.am | 6 ++++- libphobos/libdruntime/Makefile.in | 8 +++++-- libphobos/libdruntime/core/thread.d | 43 +++++++++++++++++----------------- libphobos/libdruntime/gcc/config.d.in | 3 --- libphobos/src/Makefile.am | 5 +++- libphobos/src/Makefile.in | 7 ++++-- libphobos/testsuite/Makefile.in | 2 +- libphobos/testsuite/testsuite_flags.in | 2 +- 12 files changed, 66 insertions(+), 55 deletions(-) (limited to 'libphobos') diff --git a/libphobos/Makefile.am b/libphobos/Makefile.am index 84d8001..874b3a2 100644 --- a/libphobos/Makefile.am +++ b/libphobos/Makefile.am @@ -33,14 +33,14 @@ AM_MAKEFLAGS = \ "AR_FLAGS=$(AR_FLAGS)" \ "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ - "CCASFLAGS=$(CCASFLAGS) $(CET_FLAGS)" \ - "CFLAGS=$(CFLAGS) $(CET_FLAGS)" \ - "CXXFLAGS=$(CXXFLAGS) $(CET_FLAGS)" \ + "CCASFLAGS=$(CCASFLAGS)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ - "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET) $(CET_FLAGS)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ "GDC_FOR_TARGET=$(GDC_FOR_TARGET)" \ "GDC=$(GDC)" \ - "GDCFLAGS=$(GDCFLAGS) $(CET_FLAGS)" \ + "GDCFLAGS=$(GDCFLAGS)" \ "INSTALL=$(INSTALL)" \ "INSTALL_DATA=$(INSTALL_DATA)" \ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in index f6cba17..f692b2f 100644 --- a/libphobos/Makefile.in +++ b/libphobos/Makefile.in @@ -207,6 +207,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ +CET_DFLAGS = @CET_DFLAGS@ CET_FLAGS = @CET_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @@ -216,7 +217,6 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ -DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ @@ -355,14 +355,14 @@ AM_MAKEFLAGS = \ "AR_FLAGS=$(AR_FLAGS)" \ "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ - "CCASFLAGS=$(CCASFLAGS) $(CET_FLAGS)" \ - "CFLAGS=$(CFLAGS) $(CET_FLAGS)" \ - "CXXFLAGS=$(CXXFLAGS) $(CET_FLAGS)" \ + "CCASFLAGS=$(CCASFLAGS)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ - "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET) $(CET_FLAGS)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ "GDC_FOR_TARGET=$(GDC_FOR_TARGET)" \ "GDC=$(GDC)" \ - "GDCFLAGS=$(GDCFLAGS) $(CET_FLAGS)" \ + "GDCFLAGS=$(GDCFLAGS)" \ "INSTALL=$(INSTALL)" \ "INSTALL_DATA=$(INSTALL_DATA)" \ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ diff --git a/libphobos/configure b/libphobos/configure index 86a0aba..4c1116d 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -722,7 +722,7 @@ LIBTOOL CFLAGS_FOR_BUILD CC_FOR_BUILD AR -DCFG_ENABLE_CET +CET_DFLAGS CET_FLAGS RANLIB MAINT @@ -5651,12 +5651,11 @@ $as_echo "no" >&6; } fi -if test x$enable_cet = xyes; then : - DCFG_ENABLE_CET=true -else - DCFG_ENABLE_CET=false -fi +# To ensure that runtime code for CET is compiled in, add in D version flags. +if test "$enable_cet" = yes; then + CET_DFLAGS="$CET_FLAGS -fversion=CET" +fi # This should be inherited in the recursive make, but ensure it is defined. test "$AR" || AR=ar @@ -11745,7 +11744,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11748 "configure" +#line 11747 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11851,7 +11850,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11854 "configure" +#line 11853 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libphobos/configure.ac b/libphobos/configure.ac index 97f9693..bf21128 100644 --- a/libphobos/configure.ac +++ b/libphobos/configure.ac @@ -68,9 +68,11 @@ AC_PROG_MAKE_SET # Add CET specific flags if CET is enabled GCC_CET_FLAGS(CET_FLAGS) AC_SUBST(CET_FLAGS) -AS_IF([test x$enable_cet = xyes], - [DCFG_ENABLE_CET=true], [DCFG_ENABLE_CET=false]) -AC_SUBST(DCFG_ENABLE_CET) +# To ensure that runtime code for CET is compiled in, add in D version flags. +if test "$enable_cet" = yes; then + CET_DFLAGS="$CET_FLAGS -fversion=CET" + AC_SUBST(CET_DFLAGS) +fi # This should be inherited in the recursive make, but ensure it is defined. test "$AR" || AR=ar diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am index 1d340a0..4136642 100644 --- a/libphobos/libdruntime/Makefile.am +++ b/libphobos/libdruntime/Makefile.am @@ -24,7 +24,11 @@ D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) -I . # D flags for compilation AM_DFLAGS= \ $(phobos_compiler_pic_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) + +# Flags for other kinds of sources +AM_CFLAGS=$(CET_FLAGS) +AM_CCASFLAGS=$(CET_FLAGS) # Install all D and DI files ALL_DRUNTIME_INSTALL_DSOURCES = $(DRUNTIME_DSOURCES) \ diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 28b4333..d0bb324 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -567,6 +567,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ +CET_DFLAGS = @CET_DFLAGS@ CET_FLAGS = @CET_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @@ -576,7 +577,6 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ -DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ @@ -719,9 +719,13 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) -I . # D flags for compilation AM_DFLAGS = \ $(phobos_compiler_pic_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) +# Flags for other kinds of sources +AM_CFLAGS = $(CET_FLAGS) +AM_CCASFLAGS = $(CET_FLAGS) + # Install all D and DI files ALL_DRUNTIME_INSTALL_DSOURCES = $(DRUNTIME_DSOURCES) \ $(DRUNTIME_DSOURCES_BIONIC) $(DRUNTIME_DSOURCES_DARWIN) \ diff --git a/libphobos/libdruntime/core/thread.d b/libphobos/libdruntime/core/thread.d index 8f4603d..eaf088d 100644 --- a/libphobos/libdruntime/core/thread.d +++ b/libphobos/libdruntime/core/thread.d @@ -3586,45 +3586,44 @@ private } else version (X86) { - import gcc.config; - version = AlignFiberStackTo16Byte; - static if (!GNU_Enable_CET) + version (CET) + { + // fiber_switchContext does not support shadow stack from + // Intel CET. So use ucontext implementation. + } + else { version = AsmExternal; version (MinGW) - { version = GNU_AsmX86_Windows; - } else version (Posix) - { version = AsmX86_Posix; - } } } else version (X86_64) { - import gcc.config; - version = AlignFiberStackTo16Byte; - static if (!GNU_Enable_CET) + version (CET) { - version (D_X32) - { - // let X32 be handled by ucontext swapcontext - } - else - { - version = AsmExternal; + // fiber_switchContext does not support shadow stack from + // Intel CET. So use ucontext implementation. + } + else version (D_X32) + { + // let X32 be handled by ucontext swapcontext + } + else + { + version = AsmExternal; - version (MinGW) - version = GNU_AsmX86_64_Windows; - else version (Posix) - version = AsmX86_64_Posix; - } + version (MinGW) + version = GNU_AsmX86_64_Windows; + else version (Posix) + version = AsmX86_64_Posix; } } else version (PPC) diff --git a/libphobos/libdruntime/gcc/config.d.in b/libphobos/libdruntime/gcc/config.d.in index 9ac7d05..6301aaf 100644 --- a/libphobos/libdruntime/gcc/config.d.in +++ b/libphobos/libdruntime/gcc/config.d.in @@ -49,6 +49,3 @@ enum GNU_Have_LibAtomic = @DCFG_HAVE_LIBATOMIC@; // Do we have qsort_r function enum Have_Qsort_R = @DCFG_HAVE_QSORT_R@; - -// Whether libphobos been configured with --enable-cet. -enum GNU_Enable_CET = @DCFG_ENABLE_CET@; diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am index 9fb416e..3769d8e 100644 --- a/libphobos/src/Makefile.am +++ b/libphobos/src/Makefile.am @@ -25,7 +25,10 @@ D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) \ # D flags for compilation AM_DFLAGS= \ $(phobos_compiler_pic_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) + +# Flags for other kinds of sources +AM_CFLAGS=$(CET_FLAGS) # Install all D files ALL_PHOBOS_INSTALL_DSOURCES = $(PHOBOS_DSOURCES) diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in index dc5f4f5..4a0612a 100644 --- a/libphobos/src/Makefile.in +++ b/libphobos/src/Makefile.in @@ -323,6 +323,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ +CET_DFLAGS = @CET_DFLAGS@ CET_FLAGS = @CET_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @@ -332,7 +333,6 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ -DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ @@ -477,9 +477,12 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) \ # D flags for compilation AM_DFLAGS = \ $(phobos_compiler_pic_flag) \ - $(WARN_DFLAGS) $(CHECKING_DFLAGS) + $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS) +# Flags for other kinds of sources +AM_CFLAGS = $(CET_FLAGS) + # Install all D files ALL_PHOBOS_INSTALL_DSOURCES = $(PHOBOS_DSOURCES) diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in index 5a4c031..2f6911d 100644 --- a/libphobos/testsuite/Makefile.in +++ b/libphobos/testsuite/Makefile.in @@ -151,6 +151,7 @@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CC_FOR_BUILD = @CC_FOR_BUILD@ +CET_DFLAGS = @CET_DFLAGS@ CET_FLAGS = @CET_FLAGS@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @@ -160,7 +161,6 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@ DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@ -DCFG_ENABLE_CET = @DCFG_ENABLE_CET@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@ DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@ DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@ diff --git a/libphobos/testsuite/testsuite_flags.in b/libphobos/testsuite/testsuite_flags.in index 14b6795..6a2d79f 100755 --- a/libphobos/testsuite/testsuite_flags.in +++ b/libphobos/testsuite/testsuite_flags.in @@ -28,7 +28,7 @@ case ${query} in ;; --gdcflags) GDCFLAGS_default="-fmessage-length=0 -fno-show-column" - GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGS@ -fno-release -funittest" + GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGS@ @CET_DFLAGS@ -fno-release -funittest" echo ${GDCFLAGS_default} ${GDCFLAGS_config} ;; --gdcpaths) -- cgit v1.1 From fdcc0283c6fbae461214a011ac517443c81b0102 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Fri, 11 Sep 2020 00:16:28 +0000 Subject: Daily bump. --- libphobos/ChangeLog | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'libphobos') diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index 07ccdc7..d8c9914 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,25 @@ +2020-09-10 Iain Buclaw + + PR d/95680 + PR d/97007 + * Makefile.am (AM_MAKEFLAGS): Remove $(CET_FLAGS). + * Makefile.in: Regenerate. + * configure: Regenerate. + * configure.ac (DCFG_ENABLE_CET): Remove substitution. + (CET_DFLAGS): Substitute. + * libdruntime/Makefile.am (AM_DFLAGS): Add $(CET_DFLAGS). + (AM_CFLAGS): Add $(CET_FLAGS). + (AM_CCASFLAGS): Likewise. + * libdruntime/Makefile.in: Regenerate. + * libdruntime/core/thread.d: Replace static if GNU_Enable_CET + condition with `version (CET)'. + * libdruntime/gcc/config.d.in (GNU_Enable_CET): Remove. + * src/Makefile.am (AM_DFLAGS): Add $(CET_DFLAGS). + (AM_CFLAGS): Add $(CET_FLAGS). + * src/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + * testsuite/testsuite_flags.in: Add $(CET_DFLAGS) to --gdcflags. + 2020-09-09 H.J. Lu PR d/95680 -- cgit v1.1 From edafa96b8210227b0c6a2d539aa41ce529805441 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Mon, 12 Oct 2020 10:11:44 +0200 Subject: libphobos: Override tool_timeout value in testsuite Some of the larger tests in the phobos testsuite on occasion trigger the default timeout limit. Increasing the limit to 10 minutes should give compilation enough time to finish. libphobos/ChangeLog: * testsuite/lib/libphobos.exp: Define tool_timeout, set to 600. --- libphobos/testsuite/lib/libphobos.exp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libphobos') diff --git a/libphobos/testsuite/lib/libphobos.exp b/libphobos/testsuite/lib/libphobos.exp index 2e9da95..790480b 100644 --- a/libphobos/testsuite/lib/libphobos.exp +++ b/libphobos/testsuite/lib/libphobos.exp @@ -105,6 +105,7 @@ proc libphobos_init { args } { global gdcpaths gdcldflags global gluefile wrap_flags global ld_library_path + global tool_timeout global DEFAULT_DFLAGS # If a testcase doesn't have special options, use these. @@ -185,6 +186,9 @@ proc libphobos_init { args } { } } + # Set the default timeout for phobos tests. + set tool_timeout 600 + set_ld_library_path_env_vars libphobos_maybe_build_wrapper "${objdir}/testglue.o" -- cgit v1.1