On Fri, Jul 20, 2018 at 11:15 AM, H.J. Lu <hongjiu...@intel.com> wrote:
> Tested on CET SDV using the CET kernel on cet branch at:
>
> https://github.com/yyu168/linux_cet/tree/cet
>
> OK for trunk and GCC 8 branch?
>
> Thanks.
>
>
> H.J.
> ---
> The CET kernel has been changed to place a restore token on shadow stack
> for signal handler to enhance security.  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 remove _Unwind_Frames_Increment to pop the the restore token
> from shadow stack.  Otherwise, we get
>
> FAIL: g++.dg/torture/pr85334.C   -O0  execution test
> FAIL: g++.dg/torture/pr85334.C   -O1  execution test
> FAIL: g++.dg/torture/pr85334.C   -O2  execution test
> FAIL: g++.dg/torture/pr85334.C   -O3 -g  execution test
> FAIL: g++.dg/torture/pr85334.C   -Os  execution test
> FAIL: g++.dg/torture/pr85334.C   -O2 -flto -fno-use-linker-plugin 
> -flto-partition=none  execution test
>
>         PR libgcc/85334
>         * config/i386/shadow-stack-unwind.h (_Unwind_Frames_Increment):
>         Removed.
> ---
>  libgcc/config/i386/shadow-stack-unwind.h | 5 -----
>  1 file changed, 5 deletions(-)
>
> diff --git a/libgcc/config/i386/shadow-stack-unwind.h 
> b/libgcc/config/i386/shadow-stack-unwind.h
> index a32f3e74b52..40f48df2aec 100644
> --- a/libgcc/config/i386/shadow-stack-unwind.h
> +++ b/libgcc/config/i386/shadow-stack-unwind.h
> @@ -49,8 +49,3 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  
> If not, see
>         }                                       \
>      }                                          \
>      while (0)
> -
> -/* Increment frame count.  Skip signal frames.  */
> -#undef _Unwind_Frames_Increment
> -#define _Unwind_Frames_Increment(context, frames) \
> -  if (!_Unwind_IsSignalFrame (context)) frames++
> --
> 2.17.1
>

I will check it into trunk tomorrow if there is no objection.


-- 
H.J.

Reply via email to