This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 08/22] Add Intel CET support for EH in libgcc.


On 11/13/2017 02:44 PM, Tsimbalist, Igor V wrote:
> New patch is attached. The difference is that all newly introduced macro
> are removed except of _Unwind_Frames_Extra macro. They are replaced
> with new parameters and local variables.
> 
> Igor
> 
> 
> 0008-Add-Intel-CET-support-for-EH-in-libgcc.patch
> 
> 
> From 47fe033b2a23397be50455b7661ad499c42209be Mon Sep 17 00:00:00 2001
> From: Igor Tsimbalist <igor.v.tsimbalist@intel.com>
> Date: Wed, 19 Jul 2017 03:04:46 +0300
> Subject: [PATCH 08/22] Add Intel CET support for EH in libgcc.
> 
> Control-flow Enforcement Technology (CET), published by Intel,
> introduces the Shadow Stack feature, which ensures a return from a
> function is done to exactly the same location from where the function
> was called. When EH is present the control-flow transfer may skip some
> stack frames and the shadow stack has to be adjusted not to signal a
> violation of a control-flow transfer. It's done by counting a number
> of skiping frames and adjasting shadow stack pointer by this number.
> 
> Having new semantic of the 'ret' instruction if CET is supported in HW
> the 'ret' instruction cannot be generated in ix86_expand_epilogue when
> we are returning after EH is processed. Added a code in
> ix86_expand_epilogue to adjust Shadow Stack pointer and to generate an
> indirect jump instead of 'ret'. As sp register is used during this
> adjustment thus the argument in pro_epilogue_adjust_stack is changed
> to update cfa_reg based on whether control-flow instrumentation is set.
> Without updating the cfa_reg field there is an assert later in dwarf2
> pass related to mismatch the stack register and cfa_reg value.
> 
> gcc/
> 	* config/i386/i386.c (ix86_expand_epilogue): Change simple
> 	return to indirect jump for EH return. Change explicit 'false'
> 	argument in pro_epilogue_adjust_stack with a value of
> 	flag_cf_protection.
> 	* config/i386/i386.md (simple_return_indirect_internal): Remove
> 	SImode restriction to support 64-bit.
> 
> libgcc/
> 	* config/i386/linux-unwind.h: Include
> 	config/i386/shadow-stack-unwind.h.
> 	* config/i386/shadow-stack-unwind.h: New file.
> 	* unwind-dw2.c: (uw_install_context): Add a frame parameter and
> 	pass it to _Unwind_Frames_Extra.
> 	* unwind-generic.h (_Unwind_Frames_Extra): New.
> 	* unwind.inc (_Unwind_RaiseException_Phase2): Add frames_p
> 	parameter. Add local variable frames to count number of frames.
> 	(_Unwind_ForcedUnwind_Phase2): Likewise.
> 	(_Unwind_RaiseException): Add local variable frames to count
> 	number of frames, pass it to _Unwind_RaiseException_Phase2 and
> 	uw_install_context.
> 	(_Unwind_ForcedUnwind): Likewise.
> 	(_Unwind_Resume): Likewise.
> 	(_Unwind_Resume_or_Rethrow): Likewise.
This version looks much better  :-)

OK.
jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]