[Patch] New hook TARGET_STACK_PROTECT_RUNTIME_ENABLED_P to disable SSP runtime
authorJiong Wang <jiong.wang@arm.com>
Tue, 29 Nov 2016 11:47:48 +0000 (11:47 +0000)
committerJiong Wang <jiwang@gcc.gnu.org>
Tue, 29 Nov 2016 11:47:48 +0000 (11:47 +0000)
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

gcc/ChangeLog
gcc/calls.c
gcc/cfgexpand.c
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/function.c
gcc/target.def

index c1dd877bd3d70f896d885e709741ca1198c72ea3..b7ccbd88550183b46a89f23af1ac4ac9f047c429 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        PR middle-end/78546
index c916e0725dc0de6f2503442cc95fed47c1bdfca2..21385ce0e12ccc28723cc36c318026e3792eb767 100644 (file)
@@ -3083,7 +3083,9 @@ expand_call (tree exp, rtx target, int ignore)
       if (pass && (flags & ECF_MALLOC))
        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 ();
 
       adjusted_args_size = args_size;
index 9cca6111ee4fa691e5548cde9aa78b482dde45dd..c3aca593e53c54b8468bb4ca9a39f9ea28d9ecac 100644 (file)
@@ -6334,7 +6334,7 @@ pass_expand::execute (function *fun)
 
   /* Initialize the stack_protect_guard field.  This must happen after the
      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 ();
 
   expand_phi_nodes (&SA);
index ebcadacbe9aa2596181b732b2a5f1df46849e6f8..7559c12210723875d44cc6904fae032f844ff62b 100644 (file)
@@ -4946,6 +4946,10 @@ The default version of this hook invokes a function called
 normally defined in @file{libgcc2.c}.
 @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})
 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
index 95f5fd9f2842f3baa17ca01764ab32358d5b485b..bc6d3cbce029cbc63aa71d4331483aff9c0f7bec 100644 (file)
@@ -3820,6 +3820,8 @@ generic code.
 
 @hook TARGET_STACK_PROTECT_FAIL
 
+@hook TARGET_STACK_PROTECT_RUNTIME_ENABLED_P
+
 @hook TARGET_SUPPORTS_SPLIT_STACK
 
 @node Miscellaneous Register Hooks
index c5a538f249b99299a7b831a38dc709afea0d2d92..0829fbe0d01315311917698b847ef27121e783be 100644 (file)
@@ -5635,7 +5635,7 @@ expand_function_end (void)
     emit_insn (gen_blockage ());
 
   /* 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 ();
 
   /* If we had calls to alloca, and this machine needs
index 85a0ac03092e152c642b4104d791f8b68ffadc15..417cd0256c5c036937a2a713e4a85dc703f60c7d 100644 (file)
@@ -4039,6 +4039,15 @@ normally defined in @file{libgcc2.c}.",
  tree, (void),
  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
 (can_use_doloop_p,
  "Return true if it is possible to use low-overhead loops (@code{doloop_end}\n\