diff options
author | Omair Javaid <omair.javaid@linaro.org> | 2025-06-12 19:38:42 +0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-12 19:38:42 +0500 |
commit | e1e1836bbd70e4f30bd0be97b9d81eabfd6b45c8 (patch) | |
tree | 161853a2d8cb724fdc46c3fabac05f2c4c2201df /lldb/source/Commands/CommandObjectMemory.cpp | |
parent | cc17f68e566ab7db4ac8e95dc857e49e10d8366c (diff) | |
download | llvm-e1e1836bbd70e4f30bd0be97b9d81eabfd6b45c8.zip llvm-e1e1836bbd70e4f30bd0be97b9d81eabfd6b45c8.tar.gz llvm-e1e1836bbd70e4f30bd0be97b9d81eabfd6b45c8.tar.bz2 |
[CodeGen] Inline stack guard check on Windows (#136290)
This patch optimizes the Windows security cookie check mechanism by
moving the comparison inline and only calling __security_check_cookie
when the check fails. This reduces the overhead of making a DLL call
for every function return.
Previously, we implemented this optimization through a machine pass
(X86WinFixupBufferSecurityCheckPass) in PR #95904 submitted by
@mahesh-attarde. We have reverted that pass in favor of this new
approach. Also we have abandoned the AArch64 specific implementation
of same pass in PR #121938 in favor of this more general solution.
The old machine instruction pass approach:
- Scanned the generated code to find __security_check_cookie calls
- Modified these calls by splitting basic blocks
- Added comparison logic and conditional branching
- Required complex block management and live register computation
The new approach:
- Implements the same optimization during instruction selection
- Directly emits the comparison and conditional branching
- No need for post-processing or basic block manipulation
- Disables optimization at -Oz.
Thanks @tamaspetz, @efriedma-quic and @arsenm for their help.
Diffstat (limited to 'lldb/source/Commands/CommandObjectMemory.cpp')
0 files changed, 0 insertions, 0 deletions