aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h')
-rw-r--r--contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h b/contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h
index e74b9126404e..a9c2ed9c2f14 100644
--- a/contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h
+++ b/contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h
@@ -40,10 +40,15 @@ public:
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
- // In Windows_x86_64 ABI, stack will always be maintained 16-byte aligned
+ // In Windows_x86_64 ABI requires that the stack will be maintained 16-byte
+ // aligned.
+ // When ntdll invokes callbacks such as KiUserExceptionDispatcher or
+ // KiUserCallbackDispatcher, those functions won't have a properly 16-byte
+ // aligned stack - but tolerate unwinding through them by relaxing the
+ // requirement to 8 bytes.
bool CallFrameAddressIsValid(lldb::addr_t cfa) override {
- if (cfa & (16ull - 1ull))
- return false; // Not 16 byte aligned
+ if (cfa & (8ull - 1ull))
+ return false; // Not 8 byte aligned
if (cfa == 0)
return false; // Zero is not a valid stack address
return true;