Commit 87a5dc2d by Jiong Wang Committed by Jiong Wang

[Patch] New hook TARGET_STACK_PROTECT_RUNTIME_ENABLED_P to disable SSP runtime

gcc/
	* target.def (stack_protect_runtime_enabled_p): New.
	* function.c (expand_function_end): Guard stack_protect_epilogue with
	targetm.stack_protect_runtime_enabled_p.
	* cfgexpand.c (pass_expand::execute): Likewise.
	* calls.c (expand_call): Likewise.
	* doc/tm.texi.in (TARGET_STACK_PROTECT_RUNTIME_ENABLED_P): Add it.
	* doc/tm.texi: Regenerate.

From-SVN: r242955
parent 11edabc2
2016-11-29 Jiong Wang <jiong.wang@arm.com>
* target.def (stack_protect_runtime_enabled_p): New.
* function.c (expand_function_end): Guard stack_protect_epilogue with
targetm.stack_protect_runtime_enabled_p.
* cfgexpand.c (pass_expand::execute): Likewise.
* calls.c (expand_call): Likewise.
* doc/tm.texi.in (TARGET_STACK_PROTECT_RUNTIME_ENABLED_P): Add it.
* doc/tm.texi: Regenerate.
2016-11-29 Richard Biener <rguenther@suse.de> 2016-11-29 Richard Biener <rguenther@suse.de>
PR middle-end/78546 PR middle-end/78546
...@@ -3083,7 +3083,9 @@ expand_call (tree exp, rtx target, int ignore) ...@@ -3083,7 +3083,9 @@ expand_call (tree exp, rtx target, int ignore)
if (pass && (flags & ECF_MALLOC)) if (pass && (flags & ECF_MALLOC))
start_sequence (); start_sequence ();
if (pass == 0 && crtl->stack_protect_guard) if (pass == 0
&& crtl->stack_protect_guard
&& targetm.stack_protect_runtime_enabled_p ())
stack_protect_epilogue (); stack_protect_epilogue ();
adjusted_args_size = args_size; adjusted_args_size = args_size;
......
...@@ -6334,7 +6334,7 @@ pass_expand::execute (function *fun) ...@@ -6334,7 +6334,7 @@ pass_expand::execute (function *fun)
/* Initialize the stack_protect_guard field. This must happen after the /* Initialize the stack_protect_guard field. This must happen after the
call to __main (if any) so that the external decl is initialized. */ call to __main (if any) so that the external decl is initialized. */
if (crtl->stack_protect_guard) if (crtl->stack_protect_guard && targetm.stack_protect_runtime_enabled_p ())
stack_protect_prologue (); stack_protect_prologue ();
expand_phi_nodes (&SA); expand_phi_nodes (&SA);
......
...@@ -4946,6 +4946,10 @@ The default version of this hook invokes a function called ...@@ -4946,6 +4946,10 @@ The default version of this hook invokes a function called
normally defined in @file{libgcc2.c}. normally defined in @file{libgcc2.c}.
@end deftypefn @end deftypefn
@deftypefn {Target Hook} bool TARGET_STACK_PROTECT_RUNTIME_ENABLED_P (void)
Returns true if the target wants GCC's default stack protect runtime support, otherwise return false. The default implementation always returns true.
@end deftypefn
@deftypefn {Common Target Hook} bool TARGET_SUPPORTS_SPLIT_STACK (bool @var{report}, struct gcc_options *@var{opts}) @deftypefn {Common Target Hook} bool TARGET_SUPPORTS_SPLIT_STACK (bool @var{report}, struct gcc_options *@var{opts})
Whether this target supports splitting the stack when the options described in @var{opts} have been passed. This is called after options have been parsed, so the target may reject splitting the stack in some configurations. The default version of this hook returns false. If @var{report} is true, this function may issue a warning or error; if @var{report} is false, it must simply return a value Whether this target supports splitting the stack when the options described in @var{opts} have been passed. This is called after options have been parsed, so the target may reject splitting the stack in some configurations. The default version of this hook returns false. If @var{report} is true, this function may issue a warning or error; if @var{report} is false, it must simply return a value
@end deftypefn @end deftypefn
......
...@@ -3820,6 +3820,8 @@ generic code. ...@@ -3820,6 +3820,8 @@ generic code.
@hook TARGET_STACK_PROTECT_FAIL @hook TARGET_STACK_PROTECT_FAIL
@hook TARGET_STACK_PROTECT_RUNTIME_ENABLED_P
@hook TARGET_SUPPORTS_SPLIT_STACK @hook TARGET_SUPPORTS_SPLIT_STACK
@node Miscellaneous Register Hooks @node Miscellaneous Register Hooks
......
...@@ -5635,7 +5635,7 @@ expand_function_end (void) ...@@ -5635,7 +5635,7 @@ expand_function_end (void)
emit_insn (gen_blockage ()); emit_insn (gen_blockage ());
/* If stack protection is enabled for this function, check the guard. */ /* If stack protection is enabled for this function, check the guard. */
if (crtl->stack_protect_guard) if (crtl->stack_protect_guard && targetm.stack_protect_runtime_enabled_p ())
stack_protect_epilogue (); stack_protect_epilogue ();
/* If we had calls to alloca, and this machine needs /* If we had calls to alloca, and this machine needs
......
...@@ -4039,6 +4039,15 @@ normally defined in @file{libgcc2.c}.", ...@@ -4039,6 +4039,15 @@ normally defined in @file{libgcc2.c}.",
tree, (void), tree, (void),
default_external_stack_protect_fail) default_external_stack_protect_fail)
/* This target hook allows the operating system to disable the default stack
protector runtime support. */
DEFHOOK
(stack_protect_runtime_enabled_p,
"Returns true if the target wants GCC's default stack protect runtime support,\
otherwise return false. The default implementation always returns true.",
bool, (void),
hook_bool_void_true)
DEFHOOK DEFHOOK
(can_use_doloop_p, (can_use_doloop_p,
"Return true if it is possible to use low-overhead loops (@code{doloop_end}\n\ "Return true if it is possible to use low-overhead loops (@code{doloop_end}\n\
......
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