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.
This commit is contained in:
parent
cd2d3822ca
commit
285d81be97
|
@ -108,6 +108,8 @@ target_triplet = @target@
|
||||||
subdir = .
|
subdir = .
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.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/lead-dot.m4 \
|
||||||
$(top_srcdir)/../config/multi.m4 \
|
$(top_srcdir)/../config/multi.m4 \
|
||||||
$(top_srcdir)/../config/override.m4 \
|
$(top_srcdir)/../config/override.m4 \
|
||||||
|
@ -214,6 +216,7 @@ CPPFLAGS = @CPPFLAGS@
|
||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
||||||
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
||||||
|
DCFG_ENABLE_CET = @DCFG_ENABLE_CET@
|
||||||
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
||||||
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
||||||
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
||||||
|
|
|
@ -722,6 +722,7 @@ LIBTOOL
|
||||||
CFLAGS_FOR_BUILD
|
CFLAGS_FOR_BUILD
|
||||||
CC_FOR_BUILD
|
CC_FOR_BUILD
|
||||||
AR
|
AR
|
||||||
|
DCFG_ENABLE_CET
|
||||||
CET_FLAGS
|
CET_FLAGS
|
||||||
RANLIB
|
RANLIB
|
||||||
MAINT
|
MAINT
|
||||||
|
@ -5586,7 +5587,7 @@ case "$host" in
|
||||||
case "$enable_cet" in
|
case "$enable_cet" in
|
||||||
auto)
|
auto)
|
||||||
# Check if target supports multi-byte NOPs
|
# 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"
|
cet_save_CFLAGS="$CFLAGS"
|
||||||
CFLAGS="$CFLAGS -fcf-protection"
|
CFLAGS="$CFLAGS -fcf-protection"
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
@ -5650,6 +5651,12 @@ $as_echo "no" >&6; }
|
||||||
fi
|
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.
|
# This should be inherited in the recursive make, but ensure it is defined.
|
||||||
test "$AR" || AR=ar
|
test "$AR" || AR=ar
|
||||||
|
@ -11738,7 +11745,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11741 "configure"
|
#line 11748 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
@ -11844,7 +11851,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11847 "configure"
|
#line 11854 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
|
|
@ -68,6 +68,9 @@ AC_PROG_MAKE_SET
|
||||||
# Add CET specific flags if CET is enabled
|
# Add CET specific flags if CET is enabled
|
||||||
GCC_CET_FLAGS(CET_FLAGS)
|
GCC_CET_FLAGS(CET_FLAGS)
|
||||||
AC_SUBST(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.
|
# This should be inherited in the recursive make, but ensure it is defined.
|
||||||
test "$AR" || AR=ar
|
test "$AR" || AR=ar
|
||||||
|
|
|
@ -131,6 +131,8 @@ target_triplet = @target@
|
||||||
subdir = libdruntime
|
subdir = libdruntime
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.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/lead-dot.m4 \
|
||||||
$(top_srcdir)/../config/multi.m4 \
|
$(top_srcdir)/../config/multi.m4 \
|
||||||
$(top_srcdir)/../config/override.m4 \
|
$(top_srcdir)/../config/override.m4 \
|
||||||
|
@ -565,6 +567,7 @@ CC = @CC@
|
||||||
CCAS = @CCAS@
|
CCAS = @CCAS@
|
||||||
CCASFLAGS = @CCASFLAGS@
|
CCASFLAGS = @CCASFLAGS@
|
||||||
CC_FOR_BUILD = @CC_FOR_BUILD@
|
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||||
|
CET_FLAGS = @CET_FLAGS@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
||||||
CHECKING_DFLAGS = @CHECKING_DFLAGS@
|
CHECKING_DFLAGS = @CHECKING_DFLAGS@
|
||||||
|
@ -573,6 +576,7 @@ CPPFLAGS = @CPPFLAGS@
|
||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
||||||
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
||||||
|
DCFG_ENABLE_CET = @DCFG_ENABLE_CET@
|
||||||
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
||||||
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
||||||
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
||||||
|
|
|
@ -24,13 +24,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
|
||||||
#include "../common/threadasm.S"
|
#include "../common/threadasm.S"
|
||||||
|
|
||||||
#ifdef __CET__
|
#if defined(__i386__) && !defined(__CET__)
|
||||||
# include <cet.h>
|
|
||||||
#else
|
|
||||||
# define _CET_ENDBR
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__i386__)
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.globl CSYM(fiber_switchContext)
|
.globl CSYM(fiber_switchContext)
|
||||||
|
@ -38,7 +32,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
.align 16
|
.align 16
|
||||||
CSYM(fiber_switchContext):
|
CSYM(fiber_switchContext):
|
||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
_CET_ENDBR
|
|
||||||
// save current stack state
|
// save current stack state
|
||||||
push %ebp
|
push %ebp
|
||||||
mov %esp, %ebp
|
mov %esp, %ebp
|
||||||
|
@ -65,7 +58,7 @@ CSYM(fiber_switchContext):
|
||||||
.cfi_endproc
|
.cfi_endproc
|
||||||
.size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
|
.size CSYM(fiber_switchContext),.-CSYM(fiber_switchContext)
|
||||||
|
|
||||||
#elif defined(__x86_64__) && !defined(__ILP32__)
|
#elif defined(__x86_64__) && !defined(__ILP32__) && !defined(__CET__)
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.globl CSYM(fiber_switchContext)
|
.globl CSYM(fiber_switchContext)
|
||||||
|
@ -73,7 +66,6 @@ CSYM(fiber_switchContext):
|
||||||
.align 16
|
.align 16
|
||||||
CSYM(fiber_switchContext):
|
CSYM(fiber_switchContext):
|
||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
_CET_ENDBR
|
|
||||||
// Save current stack state.save current stack state
|
// Save current stack state.save current stack state
|
||||||
push %rbp
|
push %rbp
|
||||||
mov %rsp, %rbp
|
mov %rsp, %rbp
|
||||||
|
|
|
@ -3585,22 +3585,32 @@ private
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else version (X86)
|
else version (X86)
|
||||||
|
{
|
||||||
|
import gcc.config;
|
||||||
|
|
||||||
|
version = AlignFiberStackTo16Byte;
|
||||||
|
|
||||||
|
static if (!GNU_Enable_CET)
|
||||||
{
|
{
|
||||||
version = AsmExternal;
|
version = AsmExternal;
|
||||||
|
|
||||||
version (MinGW)
|
version (MinGW)
|
||||||
{
|
{
|
||||||
version = GNU_AsmX86_Windows;
|
version = GNU_AsmX86_Windows;
|
||||||
version = AlignFiberStackTo16Byte;
|
|
||||||
}
|
}
|
||||||
else version (Posix)
|
else version (Posix)
|
||||||
{
|
{
|
||||||
version = AsmX86_Posix;
|
version = AsmX86_Posix;
|
||||||
version (OSX)
|
}
|
||||||
version = AlignFiberStackTo16Byte;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else version (X86_64)
|
else version (X86_64)
|
||||||
|
{
|
||||||
|
import gcc.config;
|
||||||
|
|
||||||
|
version = AlignFiberStackTo16Byte;
|
||||||
|
|
||||||
|
static if (!GNU_Enable_CET)
|
||||||
{
|
{
|
||||||
version (D_X32)
|
version (D_X32)
|
||||||
{
|
{
|
||||||
|
@ -3609,7 +3619,6 @@ private
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
version = AsmExternal;
|
version = AsmExternal;
|
||||||
version = AlignFiberStackTo16Byte;
|
|
||||||
|
|
||||||
version (MinGW)
|
version (MinGW)
|
||||||
version = GNU_AsmX86_64_Windows;
|
version = GNU_AsmX86_64_Windows;
|
||||||
|
@ -3617,6 +3626,7 @@ private
|
||||||
version = AsmX86_64_Posix;
|
version = AsmX86_64_Posix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else version (PPC)
|
else version (PPC)
|
||||||
{
|
{
|
||||||
version (Posix)
|
version (Posix)
|
||||||
|
|
|
@ -49,3 +49,6 @@ enum GNU_Have_LibAtomic = @DCFG_HAVE_LIBATOMIC@;
|
||||||
|
|
||||||
// Do we have qsort_r function
|
// Do we have qsort_r function
|
||||||
enum Have_Qsort_R = @DCFG_HAVE_QSORT_R@;
|
enum Have_Qsort_R = @DCFG_HAVE_QSORT_R@;
|
||||||
|
|
||||||
|
// Whether libphobos been configured with --enable-cet.
|
||||||
|
enum GNU_Enable_CET = @DCFG_ENABLE_CET@;
|
||||||
|
|
|
@ -93,6 +93,8 @@ target_triplet = @target@
|
||||||
subdir = src
|
subdir = src
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.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/lead-dot.m4 \
|
||||||
$(top_srcdir)/../config/multi.m4 \
|
$(top_srcdir)/../config/multi.m4 \
|
||||||
$(top_srcdir)/../config/override.m4 \
|
$(top_srcdir)/../config/override.m4 \
|
||||||
|
@ -321,6 +323,7 @@ CC = @CC@
|
||||||
CCAS = @CCAS@
|
CCAS = @CCAS@
|
||||||
CCASFLAGS = @CCASFLAGS@
|
CCASFLAGS = @CCASFLAGS@
|
||||||
CC_FOR_BUILD = @CC_FOR_BUILD@
|
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||||
|
CET_FLAGS = @CET_FLAGS@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
||||||
CHECKING_DFLAGS = @CHECKING_DFLAGS@
|
CHECKING_DFLAGS = @CHECKING_DFLAGS@
|
||||||
|
@ -329,6 +332,7 @@ CPPFLAGS = @CPPFLAGS@
|
||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
||||||
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
||||||
|
DCFG_ENABLE_CET = @DCFG_ENABLE_CET@
|
||||||
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
||||||
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
||||||
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
||||||
|
|
|
@ -93,6 +93,8 @@ target_triplet = @target@
|
||||||
subdir = testsuite
|
subdir = testsuite
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.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/lead-dot.m4 \
|
||||||
$(top_srcdir)/../config/multi.m4 \
|
$(top_srcdir)/../config/multi.m4 \
|
||||||
$(top_srcdir)/../config/override.m4 \
|
$(top_srcdir)/../config/override.m4 \
|
||||||
|
@ -149,6 +151,7 @@ CC = @CC@
|
||||||
CCAS = @CCAS@
|
CCAS = @CCAS@
|
||||||
CCASFLAGS = @CCASFLAGS@
|
CCASFLAGS = @CCASFLAGS@
|
||||||
CC_FOR_BUILD = @CC_FOR_BUILD@
|
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||||
|
CET_FLAGS = @CET_FLAGS@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
||||||
CHECKING_DFLAGS = @CHECKING_DFLAGS@
|
CHECKING_DFLAGS = @CHECKING_DFLAGS@
|
||||||
|
@ -157,6 +160,7 @@ CPPFLAGS = @CPPFLAGS@
|
||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
DCFG_ARM_EABI_UNWINDER = @DCFG_ARM_EABI_UNWINDER@
|
||||||
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
DCFG_DLPI_TLS_MODID = @DCFG_DLPI_TLS_MODID@
|
||||||
|
DCFG_ENABLE_CET = @DCFG_ENABLE_CET@
|
||||||
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
|
||||||
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
|
||||||
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
|
||||||
|
|
Loading…
Reference in New Issue