aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Commands/CommandObjectMemory.cpp
diff options
context:
space:
mode:
authorOmair Javaid <omair.javaid@linaro.org>2025-06-12 19:38:42 +0500
committerGitHub <noreply@github.com>2025-06-12 19:38:42 +0500
commite1e1836bbd70e4f30bd0be97b9d81eabfd6b45c8 (patch)
tree161853a2d8cb724fdc46c3fabac05f2c4c2201df /lldb/source/Commands/CommandObjectMemory.cpp
parentcc17f68e566ab7db4ac8e95dc857e49e10d8366c (diff)
downloadllvm-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