Commit 9be3bb2c by H.J. Lu

x86: Allow -fcf-protection with external thunk

Allow -fcf-protection with external thunk since the external thunk can be
made compatible with -fcf-protection.

gcc/

	PR target/93654
	* config/i386/i386-options.c (ix86_set_indirect_branch_type):
	Allow -fcf-protection with -mindirect-branch=thunk-extern and
	-mfunction-return=thunk-extern.
	* doc/invoke.texi: Update notes for -fcf-protection=branch with
	-mindirect-branch=thunk-extern and -mindirect-return=thunk-extern.

gcc/testsuite/

	PR target/93654
	* gcc.target/i386/pr93654.c: New test.
parent 668d8f3c
2020-04-29 H.J. Lu <hongjiu.lu@intel.com>
PR target/93654
* config/i386/i386-options.c (ix86_set_indirect_branch_type):
Allow -fcf-protection with -mindirect-branch=thunk-extern and
-mfunction-return=thunk-extern.
* doc/invoke.texi: Update notes for -fcf-protection=branch with
-mindirect-branch=thunk-extern and -mindirect-return=thunk-extern.
2020-04-29 Richard Sandiford <richard.sandiford@arm.com>
* doc/sourcebuild.texi: Add missing arm_arch_v8a_hard_ok anchor.
......
......@@ -3083,6 +3083,8 @@ ix86_set_indirect_branch_type (tree fndecl)
? "thunk-extern" : "thunk"));
if (cfun->machine->indirect_branch_type != indirect_branch_keep
&& (cfun->machine->indirect_branch_type
!= indirect_branch_thunk_extern)
&& (flag_cf_protection & CF_RETURN))
error ("%<-mindirect-branch%> and %<-fcf-protection%> are not "
"compatible");
......@@ -3126,6 +3128,8 @@ ix86_set_indirect_branch_type (tree fndecl)
? "thunk-extern" : "thunk"));
if (cfun->machine->function_return_type != indirect_branch_keep
&& (cfun->machine->function_return_type
!= indirect_branch_thunk_extern)
&& (flag_cf_protection & CF_RETURN))
error ("%<-mfunction-return%> and %<-fcf-protection%> are not "
"compatible");
......
......@@ -30097,9 +30097,9 @@ Note that @option{-mcmodel=large} is incompatible with
@option{-mindirect-branch=thunk-extern} since the thunk function may
not be reachable in the large code model.
Note that @option{-mindirect-branch=thunk-extern} is incompatible with
@option{-fcf-protection=branch} since the external thunk cannot be modified
to disable control-flow check.
Note that @option{-mindirect-branch=thunk-extern} is compatible with
@option{-fcf-protection=branch} since the external thunk can be made
to enable control-flow check.
@item -mfunction-return=@var{choice}
@opindex mfunction-return
......@@ -30112,6 +30112,10 @@ object file. You can control this behavior for a specific function by
using the function attribute @code{function_return}.
@xref{Function Attributes}.
Note that @option{-mindirect-return=thunk-extern} is compatible with
@option{-fcf-protection=branch} since the external thunk can be made
to enable control-flow check.
Note that @option{-mcmodel=large} is incompatible with
@option{-mfunction-return=thunk} and
@option{-mfunction-return=thunk-extern} since the thunk function may
2020-04-29 H.J. Lu <hongjiu.lu@intel.com>
PR target/93654
* gcc.target/i386/pr93654.c: New test.
2020-04-29 Richard Sandiford <richard.sandiford@arm.com>
* lib/target-supports.exp: Add v8a_hard to the list of arm_arch_*
......
/* { dg-do compile } */
/* { dg-options "-O2 -fcf-protection -mfunction-return=thunk-extern -mindirect-branch=thunk-extern" } */
int
bar (void (*foo) (void))
{
foo ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment