From f3c4c0773c7cde9ffb919050fd3dec412408c60e Mon Sep 17 00:00:00 2001 From: rtldg Date: Mon, 3 Mar 2025 10:18:19 +0000 Subject: [PATCH] Some OBJECT alignment things again --- .../DynamicHooks/conventions/x86_64SystemVDefault.cpp | 7 +++++++ extensions/dhooks/dynhooks_sourcepawn.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/extensions/dhooks/DynamicHooks/conventions/x86_64SystemVDefault.cpp b/extensions/dhooks/DynamicHooks/conventions/x86_64SystemVDefault.cpp index 01394f42f..94288e738 100644 --- a/extensions/dhooks/DynamicHooks/conventions/x86_64SystemVDefault.cpp +++ b/extensions/dhooks/DynamicHooks/conventions/x86_64SystemVDefault.cpp @@ -61,6 +61,13 @@ x86_64SystemVDefault::x86_64SystemVDefault(std::vector &vecArgT } } + // Let's pad our objects up since the stack must be aligned by 8 (and potentially 16 or 32). + for (auto& arg : m_vecArgTypes) { + if (arg.type == DATA_TYPE_OBJECT) { + arg.size = Align(arg.size, 8); + } + } + for (const auto& arg : m_vecArgTypes) { bool found_as_int_or_ptr = false; diff --git a/extensions/dhooks/dynhooks_sourcepawn.cpp b/extensions/dhooks/dynhooks_sourcepawn.cpp index df12d77ae..08146abb6 100644 --- a/extensions/dhooks/dynhooks_sourcepawn.cpp +++ b/extensions/dhooks/dynhooks_sourcepawn.cpp @@ -727,7 +727,7 @@ void CDynamicHooksSourcePawn::UpdateParamsFromStruct(HookParamsStruct *params) // Keep track of the seperate stack and register arguments. if (argTypes[i].custom_register == None) { -#ifdef DYNAMICHOOKS_x86_64 +#if defined(DYNAMICHOOKS_x86_64) && defined(PLATFORM_WINDOWS) stackOffset += 8; #else stackOffset += size;