[Bug middle-end/85620] Missing ENDBR after swapcontext

hjl at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jul 4 03:02:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85620

--- Comment #8 from hjl at gcc dot gnu.org <hjl at gcc dot gnu.org> ---
Author: hjl
Date: Wed Jul  4 03:01:33 2018
New Revision: 262370

URL: https://gcc.gnu.org/viewcvs?rev=262370&root=gcc&view=rev
Log:
i386: Add indirect_return function attribute

On x86, swapcontext may return via indirect branch when shadow stack
is enabled.  To support code instrumentation of control-flow transfers
with -fcf-protection, add indirect_return function attribute to inform
compiler that a function may return via indirect branch.

Note: Unlike setjmp, swapcontext only returns once.  Mark it return
twice will unnecessarily disable compiler optimization as shown in
the testcase here.

gcc/

        PR target/85620
        * config/i386/i386.c (rest_of_insert_endbranch): Also generate
        ENDBRANCH for non-tail call which may return via indirect branch.
        * doc/extend.texi: Document indirect_return attribute.

gcc/testsuite/

        PR target/85620
        * gcc.target/i386/pr85620-1.c: New test.
        * gcc.target/i386/pr85620-2.c: Likewise.
        * gcc.target/i386/pr85620-3.c: Likewise.
        * gcc.target/i386/pr85620-4.c: Likewise.

Added:
    trunk/gcc/testsuite/gcc.target/i386/pr85620-1.c
    trunk/gcc/testsuite/gcc.target/i386/pr85620-2.c
    trunk/gcc/testsuite/gcc.target/i386/pr85620-3.c
    trunk/gcc/testsuite/gcc.target/i386/pr85620-4.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/i386/i386.c
    trunk/gcc/doc/extend.texi
    trunk/gcc/testsuite/ChangeLog


More information about the Gcc-bugs mailing list