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