> -----Original Message-----
> From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches-
> ow...@gcc.gnu.org] On Behalf Of H.J. Lu
> Sent: Wednesday, April 18, 2018 3:21 PM
> To: GCC Patches <gcc-patches@gcc.gnu.org>
> Cc: Uros Bizjak <ubiz...@gmail.com>; Jeff Law <l...@redhat.com>
> Subject: PING: [PATCH] libgcc/CET: Skip signal frames when unwinding
> shadow stack
> 
> On Thu, Apr 12, 2018 at 12:43 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> > On Wed, Apr 11, 2018 at 3:37 AM, H.J. Lu <hongjiu...@intel.com> wrote:
> >> When -fcf-protection -mcet is used, I got
> >>
> >> FAIL: g++.dg/eh/sighandle.C
> >>
> >> (gdb) bt
> >>  #0  _Unwind_RaiseException (exc=exc@entry=0x416ed0)
> >>     at /export/gnu/import/git/sources/gcc/libgcc/unwind.inc:140
> >>  #1  0x00007ffff7d9936b in __cxxabiv1::__cxa_throw (obj=<optimized
> out>,
> >>     tinfo=0x403dd0 <typeinfo for int@@CXXABI_1.3>, dest=0x0)
> >>     at /export/gnu/import/git/sources/gcc/libstdc++-
> v3/libsupc++/eh_throw.cc:90
> >>  #2  0x0000000000401255 in sighandler (signo=11, si=0x7fffffffd6f8,
> >>     uc=0x7fffffffd5c0)
> >>     at
> /export/gnu/import/git/sources/gcc/gcc/testsuite/g++.dg/eh/sighandle.C:9
> >>  #3  <signal handler called> <<<< Signal frame which isn't on shadow
> stack
> >>  #4  dosegv ()
> >>     at
> /export/gnu/import/git/sources/gcc/gcc/testsuite/g++.dg/eh/sighandle.C:14
> >>  #5  0x00000000004012e3 in main ()
> >>     at
> /export/gnu/import/git/sources/gcc/gcc/testsuite/g++.dg/eh/sighandle.C:30
> >> (gdb) p frames
> >> $6 = 5
> >> (gdb)
> >>
> >> frame count should be 4, not 5.  This patch skips signal frames when
> >> unwinding shadow stack.
> >>
> >> Tested on i686 and x86-64.  OK for trunk?
> >>
> >> H.J.
> >> ----
> >>         PR libgcc/85334
> >>         * unwind-generic.h (_Unwind_Frames_Increment): New.
> >>         * config/i386/shadow-stack-unwind.h (_Unwind_Frames_Increment):
> >>         Likewise.
> >>         * unwind.inc (_Unwind_RaiseException_Phase2): Increment frame
> >>         count with _Unwind_Frames_Increment.
> >>         (_Unwind_ForcedUnwind_Phase2): Likewise.
> 
> >
> > I need to increment frame count after uw_advance_context which will set
> > the signal frame bit.
> >
> > OK for trunk?
> 
> PING:

OK.

Igor

> https://gcc.gnu.org/ml/gcc-patches/2018-04/msg00633.html
> 
> 
> --
> H.J.

Reply via email to