diff options
| author | Josh Magee <joshua_magee@playstation.sony.com> | 2014-02-01 01:36:16 +0000 |
|---|---|---|
| committer | Josh Magee <joshua_magee@playstation.sony.com> | 2014-02-01 01:36:16 +0000 |
| commit | 24c7f063333b0654fb3d6667d0096ce97141b82e (patch) | |
| tree | 7332ef67a673107e3d0cf9bcabe73dd2e9d743c4 /llvm/docs/LangRef.rst | |
| parent | 31cb474e2d0dea9eb4298b6cbfe5887bbde7e3cf (diff) | |
| download | bcm5719-llvm-24c7f063333b0654fb3d6667d0096ce97141b82e.tar.gz bcm5719-llvm-24c7f063333b0654fb3d6667d0096ce97141b82e.zip | |
[stackprotector] Implement the sspstrong rules for stack layout.
This changes the PrologueEpilogInserter and LocalStackSlotAllocation passes to
follow the extended stack layout rules for sspstrong and sspreq.
The sspstrong layout rules are:
1. Large arrays and structures containing large arrays (>= ssp-buffer-size)
are closest to the stack protector.
2. Small arrays and structures containing small arrays (< ssp-buffer-size) are
2nd closest to the protector.
3. Variables that have had their address taken are 3rd closest to the
protector.
Differential Revision: http://llvm-reviews.chandlerc.com/D2546
llvm-svn: 200601
Diffstat (limited to 'llvm/docs/LangRef.rst')
| -rw-r--r-- | llvm/docs/LangRef.rst | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst index 07e94a9f84e..e1880f2bc1e 100644 --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -1112,6 +1112,9 @@ example: - Calls to alloca() with variable sizes or constant sizes greater than ``ssp-buffer-size``. + Variables that are identified as requiring a protector will be arranged + on the stack such that they are adjacent to the stack protector guard. + If a function that has an ``ssp`` attribute is inlined into a function that doesn't have an ``ssp`` attribute, then the resulting function will have an ``ssp`` attribute. @@ -1120,6 +1123,17 @@ example: stack smashing protector. This overrides the ``ssp`` function attribute. + Variables that are identified as requiring a protector will be arranged + on the stack such that they are adjacent to the stack protector guard. + The specific layout rules are: + + #. Large arrays and structures containing large arrays + (``>= ssp-buffer-size``) are closest to the stack protector. + #. Small arrays and structures containing small arrays + (``< ssp-buffer-size``) are 2nd closest to the protector. + #. Variables that have had their address taken are 3rd closest to the + protector. + If a function that has an ``sspreq`` attribute is inlined into a function that doesn't have an ``sspreq`` attribute or which has an ``ssp`` or ``sspstrong`` attribute, then the resulting function will have @@ -1135,6 +1149,17 @@ example: - Calls to alloca(). - Local variables that have had their address taken. + Variables that are identified as requiring a protector will be arranged + on the stack such that they are adjacent to the stack protector guard. + The specific layout rules are: + + #. Large arrays and structures containing large arrays + (``>= ssp-buffer-size``) are closest to the stack protector. + #. Small arrays and structures containing small arrays + (``< ssp-buffer-size``) are 2nd closest to the protector. + #. Variables that have had their address taken are 3rd closest to the + protector. + This overrides the ``ssp`` function attribute. If a function that has an ``sspstrong`` attribute is inlined into a |

