gcc/libgcc
H.J. Lu bf6465d046 i386: Properly pop restore token in signal frame
Linux CET kernel places a restore token on shadow stack for signal
handler to enhance security.  The restore token is 8 byte and aligned
to 8 bytes.  It is usually transparent to user programs since kernel
will pop the restore token when signal handler returns.  But when an
exception is thrown from a signal handler, now we need to pop the
restore token from shadow stack.  For x86-64, we just need to treat
the signal frame as normal frame.  For i386, we need to search for
the restore token to check if the original shadow stack is 8 byte
aligned.  If the original shadow stack is 8 byte aligned, we just
need to pop 2 slots, one restore token, from shadow stack.  Otherwise,
we need to pop 3 slots, one restore token + 4 byte padding, from
shadow stack.

This patch also includes 2 tests, one has a restore token with 4 byte
padding and one without.

Tested on Linux/x86-64 CET machine with and without -m32.

libgcc/

	PR libgcc/85334
	* config/i386/shadow-stack-unwind.h (_Unwind_Frames_Increment):
	New.

gcc/testsuite/

	PR libgcc/85334
	* g++.target/i386/pr85334-1.C: New test.
	* g++.target/i386/pr85334-2.C: Likewise.
2020-02-10 07:59:10 -08:00
..
config i386: Properly pop restore token in signal frame 2020-02-10 07:59:10 -08:00
soft-fp soft-fp: Update soft-fp from glibc 2019-05-17 07:37:39 -07:00
ChangeLog arm: Fix up arm installed unwind.h for use in pedantic modes [PR93615] 2020-02-10 14:35:31 +00:00
config.host nios2: Support for GOT-relative DW_EH_PE_datarel encoding. 2020-01-31 16:46:50 -08:00
config.in aarch64: Configure for sys/auxv.h in libgcc for lse-init.c 2019-09-25 15:51:55 -07:00
configure Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
configure.ac Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
crtstuff.c Fix compilation of crtstuff.c when DEFAULT_USE_CXA_ATEXIT is false 2020-01-18 10:30:29 -05:00
dfp-bit.c Update copyright years. 2020-01-01 12:51:42 +01:00
dfp-bit.h Update copyright years. 2020-01-01 12:51:42 +01:00
divmod.c Update copyright years. 2020-01-01 12:51:42 +01:00
empty.mk
emutls.c Update copyright years. 2020-01-01 12:51:42 +01:00
enable-execute-stack-empty.c
enable-execute-stack-mprotect.c Update copyright years. 2020-01-01 12:51:42 +01:00
find-symver.awk Update copyright years. 2020-01-01 12:51:42 +01:00
fixed-bit.c Update copyright years. 2020-01-01 12:51:42 +01:00
fixed-bit.h Update copyright years. 2020-01-01 12:51:42 +01:00
fixed-obj.mk
floatunsidf.c
floatunsisf.c
floatunsitf.c
floatunsixf.c
fp-bit.c Update copyright years. 2020-01-01 12:51:42 +01:00
fp-bit.h Update copyright years. 2020-01-01 12:51:42 +01:00
gbl-ctors.h Update copyright years. 2020-01-01 12:51:42 +01:00
gcov.h Update copyright years. 2020-01-01 12:51:42 +01:00
gen-fixed.sh
generic-morestack-thread.c Update copyright years. 2020-01-01 12:51:42 +01:00
generic-morestack.c Update copyright years. 2020-01-01 12:51:42 +01:00
generic-morestack.h Update copyright years. 2020-01-01 12:51:42 +01:00
gstdint.h
gthr-posix.h Update copyright years. 2020-01-01 12:51:42 +01:00
gthr-single.h Update copyright years. 2020-01-01 12:51:42 +01:00
gthr.h Update copyright years. 2020-01-01 12:51:42 +01:00
libgcc2.c Update copyright years. 2020-01-01 12:51:42 +01:00
libgcc2.h Update copyright years. 2020-01-01 12:51:42 +01:00
libgcc-std.ver.in Update copyright years. 2020-01-01 12:51:42 +01:00
libgcov-driver-system.c Update copyright years. 2020-01-01 12:51:42 +01:00
libgcov-driver.c Remove wrong bail out in prune_topn_counter. 2020-01-23 14:34:59 +01:00
libgcov-interface.c Update copyright years. 2020-01-01 12:51:42 +01:00
libgcov-merge.c libgcov: Fix merging of topn [PR92924] 2020-01-24 12:12:17 +01:00
libgcov-profiler.c Add __gcov_indirect_call_profiler_v4_atomic. 2020-01-27 16:20:10 +01:00
libgcov-util.c Update copyright years. 2020-01-01 12:51:42 +01:00
libgcov.h Add __gcov_indirect_call_profiler_v4_atomic. 2020-01-27 16:20:10 +01:00
Makefile.in Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
memcmp.c
memcpy.c
memmove.c
memset.c
mkheader.sh Update copyright years. 2020-01-01 12:51:42 +01:00
mkmap-flat.awk Update copyright years. 2020-01-01 12:51:42 +01:00
mkmap-symver.awk Update copyright years. 2020-01-01 12:51:42 +01:00
offloadstuff.c Update copyright years. 2020-01-01 12:51:42 +01:00
shared-object.mk
siditi-object.mk
static-object.mk
sync.c Update copyright years. 2020-01-01 12:51:42 +01:00
udivhi3.c Update copyright years. 2020-01-01 12:51:42 +01:00
udivmod.c Update copyright years. 2020-01-01 12:51:42 +01:00
udivmodhi4.c Update copyright years. 2020-01-01 12:51:42 +01:00
udivmodsi4.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-arm-common.inc arm: Fix up arm installed unwind.h for use in pedantic modes [PR93615] 2020-02-10 14:35:31 +00:00
unwind-c.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-compat.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-compat.h Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-dw2-fde-compat.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-dw2-fde-dip.c nios2: Support for GOT-relative DW_EH_PE_datarel encoding. 2020-01-31 16:46:50 -08:00
unwind-dw2-fde.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-dw2-fde.h Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-dw2.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-dw2.h Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-generic.h Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-pe.h arm: Fix up arm installed unwind.h for use in pedantic modes [PR93615] 2020-02-10 14:35:31 +00:00
unwind-seh.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind-sjlj.c Update copyright years. 2020-01-01 12:51:42 +01:00
unwind.inc Update copyright years. 2020-01-01 12:51:42 +01:00
vtv_end_preinit.c Update copyright years. 2020-01-01 12:51:42 +01:00
vtv_end.c Update copyright years. 2020-01-01 12:51:42 +01:00
vtv_start_preinit.c Update copyright years. 2020-01-01 12:51:42 +01:00
vtv_start.c Update copyright years. 2020-01-01 12:51:42 +01:00