From 1c9aa9c6652df0be177e1b578cc174712f474a28 Mon Sep 17 00:00:00 2001 From: itsimbal Date: Wed, 14 Feb 2018 15:06:21 +0000 Subject: Reimplement CET intrinsics for rdssp/incssp insn. Introduce a couple of new CET intrinsics for reading and updating a shadow stack pointer (_get_ssp and _inc_ssp). They replace the existing _rdssp[d|q] and _incssp[d|q] instrinsics. PR target/84239 * gcc/config/i386/cetintrin.h: Remove _rdssp[d|q] and add _get_ssp intrinsics. Remove argument from __builtin_ia32_rdssp[d|q]. * gcc/config/i386/i386-builtin-types.def: Add UINT_FTYPE_VOID. * gcc/config/i386/i386-builtin.def: Remove argument from __builtin_ia32_rdssp[d|q]. * gcc/config/i386/i386.c: Use UINT_FTYPE_VOID. Use ix86_expand_special_args_builtin for _rdssp[d|q]. * gcc/config/i386/i386.md: Remove argument from rdssp[si|di] insn. Clear register before usage. * doc/extend.texi: Remove argument from __builtin_ia32_rdssp[d|q]. Add documentation for new _get_ssp and _inc_ssp intrinsics. * testsuite/gcc.target/i386/cet-intrin-3.c: Use new _get_ssp and _inc_ssp intrinsics. * testsuite/gcc.target/i386/cet-intrin-4.c: Likewise. * testsuite/gcc.target/i386/cet-rdssp-1.c: Remove argument from __builtin_ia32_rdssp[d|q]. * libgcc/config/i386/shadow-stack-unwind.hi (_Unwind_Frames_Extra): Use new _get_ssp and _inc_ssp intrinsics. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257660 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgcc/ChangeLog | 6 ++++++ libgcc/config/i386/shadow-stack-unwind.h | 17 +++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) (limited to 'libgcc') diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 1eb16631e03..692773d7d2d 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2018-02-08 Igor Tsimbalist + + PR target/84239 + * config/i386/shadow-stack-unwind.hi (_Unwind_Frames_Extra): + Use new _get_ssp and _inc_ssp intrinsics. + 2018-02-02 Julia Koval * config/i386/cpuinfo.h (processor_subtypes): Add INTEL_COREI7_ICELAKE. diff --git a/libgcc/config/i386/shadow-stack-unwind.h b/libgcc/config/i386/shadow-stack-unwind.h index ef75d97aa2f..416e061dd46 100644 --- a/libgcc/config/i386/shadow-stack-unwind.h +++ b/libgcc/config/i386/shadow-stack-unwind.h @@ -22,30 +22,23 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ -#ifdef __x86_64__ -# define incssp(x) __builtin_ia32_incsspq ((x)) -# define rdssp(x) __builtin_ia32_rdsspq (x) -#else -# define incssp(x) __builtin_ia32_incsspd ((x)) -# define rdssp(x) __builtin_ia32_rdsspd (x) -#endif +#include /* Unwind the shadow stack for EH. */ #undef _Unwind_Frames_Extra #define _Unwind_Frames_Extra(x) \ do \ { \ - unsigned long ssp = 0; \ - ssp = rdssp (ssp); \ + _Unwind_Word ssp = _get_ssp (); \ if (ssp != 0) \ { \ - unsigned long tmp = (x); \ + _Unwind_Word tmp = (x); \ while (tmp > 255) \ { \ - incssp (tmp); \ + _inc_ssp (tmp); \ tmp -= 255; \ } \ - incssp (tmp); \ + _inc_ssp (tmp); \ } \ } \ while (0) -- cgit v1.2.1 From d4f2cbd867b3c746736865926f4d82d9ea16cf95 Mon Sep 17 00:00:00 2001 From: itsimbal Date: Fri, 16 Feb 2018 10:19:14 +0000 Subject: Additional fix for PR 84239. PR target/84239 * libgcc/config/i386/shadow-stack-unwind.h (_Unwind_Frames_Extra): Include cetintrin.h not x86intrin.h. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257730 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgcc/ChangeLog | 8 +++++++- libgcc/config/i386/shadow-stack-unwind.h | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'libgcc') diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 692773d7d2d..012c866f1c9 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,7 +1,13 @@ +2018-02-16 Igor Tsimbalist + + PR target/84239 + * config/i386/shadow-stack-unwind.h (_Unwind_Frames_Extra): + Include cetintrin.h not x86intrin.h. + 2018-02-08 Igor Tsimbalist PR target/84239 - * config/i386/shadow-stack-unwind.hi (_Unwind_Frames_Extra): + * config/i386/shadow-stack-unwind.h (_Unwind_Frames_Extra): Use new _get_ssp and _inc_ssp intrinsics. 2018-02-02 Julia Koval diff --git a/libgcc/config/i386/shadow-stack-unwind.h b/libgcc/config/i386/shadow-stack-unwind.h index 416e061dd46..b7c3d98a9dc 100644 --- a/libgcc/config/i386/shadow-stack-unwind.h +++ b/libgcc/config/i386/shadow-stack-unwind.h @@ -22,7 +22,14 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ -#include +/* NB: We need _get_ssp and _inc_ssp from . But we can't + include which ends up including , which + includes and unconditionally. But we can't + include any libc system headers unconditionally from libgcc. Avoid + including here by defining _IMMINTRIN_H_INCLUDED. */ +#define _IMMINTRIN_H_INCLUDED +#include +#undef _IMMINTRIN_H_INCLUDED /* Unwind the shadow stack for EH. */ #undef _Unwind_Frames_Extra -- cgit v1.2.1 From 5611e648542e5fdbb5a839ec21179ab979338839 Mon Sep 17 00:00:00 2001 From: itsimbal Date: Mon, 19 Feb 2018 16:25:49 +0000 Subject: CET shouldn't be enabled in 32-bit run-time libraries by defualt ENDBR32 and RDSSPD are multi-byte NOPs on x86-64 processors and newer x86 processors, starting Pentium Pro. They are UD on older 32-bit processors. Detect this at configure time and adjust the default value for enable_cet. GCC will enable CET in 32-bit run-time libraries in any case if --enable-cet is used to configure GCC. PR target/84148 * config/cet.m4: Check if target support multi-byte NOPS (SSE). * libatomic/configure: Regenerate. * libbacktrace/configure: Likewise. * libgcc/configure: Likewise. * libgfortran/configure: Likewise. * libgomp/configure: Likewise. * libitm/configure: Likewise. * libmpx/configure: Likewise. * libobjc/configure: Likewise. * libquadmath/configure: Likewise. * libsanitizer/configure: Likewise. * libssp/configure: Likewise. * libstdc++-v3/configure: Likewise. * libvtv/configure: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257809 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgcc/ChangeLog | 5 +++++ libgcc/configure | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'libgcc') diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 012c866f1c9..5df8d85a875 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2018-02-14 Igor Tsimbalist + + PR target/84148 + * configure: Regenerate. + 2018-02-16 Igor Tsimbalist PR target/84239 diff --git a/libgcc/configure b/libgcc/configure index 38a28c2a48f..3241f19ab67 100644 --- a/libgcc/configure +++ b/libgcc/configure @@ -4790,18 +4790,28 @@ else fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CET support" >&5 +$as_echo_n "checking for CET support... " >&6; } + case "$host" in i[34567]86-*-linux* | x86_64-*-linux*) case "$enable_cet" in default) - # Check if assembler supports CET. + # Check if target supports multi-byte NOPs + # and if assembler supports CET insn. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { + +#if !defined(__SSE2__) +#error target does not support multi-byte NOPs +#else asm ("setssbsy"); +#endif + ; return 0; } @@ -4841,6 +4851,11 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext esac if test x$enable_cet = xyes; then CET_FLAGS="-fcf-protection -mcet" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -- cgit v1.2.1 From 372da7cd85625c78080722e104d3a604a77c8ca8 Mon Sep 17 00:00:00 2001 From: jcmvbkbc Date: Tue, 20 Feb 2018 20:55:56 +0000 Subject: libgcc: xtensa: fix build with -mtext-section-literals libgcc/ 2018-02-20 Max Filippov * config/xtensa/ieee754-df.S (__adddf3_aux): Add .literal_position directive. * config/xtensa/ieee754-sf.S (__addsf3_aux): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257862 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgcc/ChangeLog | 6 ++++++ libgcc/config/xtensa/ieee754-df.S | 1 + libgcc/config/xtensa/ieee754-sf.S | 1 + 3 files changed, 8 insertions(+) (limited to 'libgcc') diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 5df8d85a875..0e9e7759f62 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2018-02-20 Max Filippov + + * config/xtensa/ieee754-df.S (__adddf3_aux): Add + .literal_position directive. + * config/xtensa/ieee754-sf.S (__addsf3_aux): Likewise. + 2018-02-14 Igor Tsimbalist PR target/84148 diff --git a/libgcc/config/xtensa/ieee754-df.S b/libgcc/config/xtensa/ieee754-df.S index 2662a660075..a997c1b4263 100644 --- a/libgcc/config/xtensa/ieee754-df.S +++ b/libgcc/config/xtensa/ieee754-df.S @@ -55,6 +55,7 @@ __negdf2: #ifdef L_addsubdf3 + .literal_position /* Addition */ __adddf3_aux: diff --git a/libgcc/config/xtensa/ieee754-sf.S b/libgcc/config/xtensa/ieee754-sf.S index d48b230a758..695c67b0fc8 100644 --- a/libgcc/config/xtensa/ieee754-sf.S +++ b/libgcc/config/xtensa/ieee754-sf.S @@ -55,6 +55,7 @@ __negsf2: #ifdef L_addsubsf3 + .literal_position /* Addition */ __addsf3_aux: -- cgit v1.2.1