diff options
author | Thomas Preud'homme <thopre01@gcc.gnu.org> | 2018-08-02 11:16:05 +0000 |
---|---|---|
committer | Thomas Preud'homme <thopre01@gcc.gnu.org> | 2018-08-02 11:16:05 +0000 |
commit | a8b2130aee62d3ac499938be26c9ae23c89d25c9 (patch) | |
tree | f414f7dc5d5b2e80a986c376001491121f278e28 /gcc/doc | |
parent | 0016d8d91cb2880e69be74efb44367b282577977 (diff) | |
download | gcc-a8b2130aee62d3ac499938be26c9ae23c89d25c9.zip gcc-a8b2130aee62d3ac499938be26c9ae23c89d25c9.tar.gz gcc-a8b2130aee62d3ac499938be26c9ae23c89d25c9.tar.bz2 |
Revert "[ARM] Fix PR85434: spilling of stack protector guard's address on ARM"
This reverts commit r263245.
From-SVN: r263252
Diffstat (limited to 'gcc/doc')
-rw-r--r-- | gcc/doc/md.texi | 55 |
1 files changed, 8 insertions, 47 deletions
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index e5851a6..02f9e1e 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -7388,61 +7388,22 @@ builtins. The get/set patterns have a single output/input operand respectively, with @var{mode} intended to be @code{Pmode}. -@cindex @code{stack_protect_combined_set} instruction pattern -@item @samp{stack_protect_combined_set} -This pattern, if defined, moves a @code{ptr_mode} value from an address -whose declaration RTX is given in operand 1 to the memory in operand 0 -without leaving the value in a register afterward. If several -instructions are needed by the target to perform the operation (eg. to -load the address from a GOT entry then load the @code{ptr_mode} value -and finally store it), it is the backend's responsibility to ensure no -intermediate result gets spilled. This is to avoid leaking the value -some place that an attacker might use to rewrite the stack guard slot -after having clobbered it. - -If this pattern is not defined, then the address declaration is -expanded first in the standard way and a @code{stack_protect_set} -pattern is then generated to move the value from that address to the -address in operand 0. - @cindex @code{stack_protect_set} instruction pattern @item @samp{stack_protect_set} -This pattern, if defined, moves a @code{ptr_mode} value from the valid -memory location in operand 1 to the memory in operand 0 without leaving -the value in a register afterward. This is to avoid leaking the value -some place that an attacker might use to rewrite the stack guard slot -after having clobbered it. - -Note: on targets where the addressing modes do not allow to load -directly from stack guard address, the address is expanded in a standard -way first which could cause some spills. +This pattern, if defined, moves a @code{ptr_mode} value from the memory +in operand 1 to the memory in operand 0 without leaving the value in +a register afterward. This is to avoid leaking the value some place +that an attacker might use to rewrite the stack guard slot after +having clobbered it. If this pattern is not defined, then a plain move pattern is generated. -@cindex @code{stack_protect_combined_test} instruction pattern -@item @samp{stack_protect_combined_test} -This pattern, if defined, compares a @code{ptr_mode} value from an -address whose declaration RTX is given in operand 1 with the memory in -operand 0 without leaving the value in a register afterward and -branches to operand 2 if the values were equal. If several -instructions are needed by the target to perform the operation (eg. to -load the address from a GOT entry then load the @code{ptr_mode} value -and finally store it), it is the backend's responsibility to ensure no -intermediate result gets spilled. This is to avoid leaking the value -some place that an attacker might use to rewrite the stack guard slot -after having clobbered it. - -If this pattern is not defined, then the address declaration is -expanded first in the standard way and a @code{stack_protect_test} -pattern is then generated to compare the value from that address to the -value at the memory in operand 0. - @cindex @code{stack_protect_test} instruction pattern @item @samp{stack_protect_test} This pattern, if defined, compares a @code{ptr_mode} value from the -valid memory location in operand 1 with the memory in operand 0 without -leaving the value in a register afterward and branches to operand 2 if -the values were equal. +memory in operand 1 with the memory in operand 0 without leaving the +value in a register afterward and branches to operand 2 if the values +were equal. If this pattern is not defined, then a plain compare pattern and conditional branch pattern is used. |