On 07/03/2018 10:53 AM, H.J. Lu wrote:
> On Tue, Jul 3, 2018 at 9:12 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>> On Tue, Jul 3, 2018 at 5:32 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>> On Fri, Jun 8, 2018 at 3:27 AM, H.J. Lu <hongjiu...@intel.com> wrote:
>>>> 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.
>>>>
>>>> OK for trunk?
>>>>
>>>> H.J.
>>>> ----
>>>> 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.
>>>>
>>> Here is the updated patch with a testcase to show the impact of
>>> returns_twice attribute.
>>>
>>> Jan, Uros, can you take a look?
>> LGTM for the implementation, can't say if attribute is really needed or not.
> This gives programmers more flexibly.
>
>> +@item indirect_return
>> +@cindex @code{indirect_return} function attribute, x86
>> +
>> +The @code{indirect_return} attribute on a function is used to inform
>> +the compiler that the function may return via indiret branch.
>>
>> s/indiret/indirect/
> Fixed. Here is the updated patch.
>
> Thanks.
>
> -- H.J.
>
>
> 0001-i386-Add-indirect_return-function-attribute.patch
>
>
> From bb98f6a31801659ae3c6689d6d31af33a3c28bb2 Mon Sep 17 00:00:00 2001
> From: "H.J. Lu" <hjl.to...@gmail.com>
> Date: Thu, 7 Jun 2018 20:05:15 -0700
> Subject: [PATCH] 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.
OK
jeff