From 963b99efaaf1f0628b155e52b8a7c102cd1d37ff Mon Sep 17 00:00:00 2001 From: Henrik Gramner Date: Mon, 12 Oct 2015 20:15:18 +0200 Subject: [PATCH] x86inc: Preserve arguments when allocating stack space When allocating stack space with a larger alignment than the known stack alignment a temporary register is used for storing the stack pointer. Ensure that this isn't one of the registers used for passing arguments. --- common/x86/x86inc.asm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/x86/x86inc.asm b/common/x86/x86inc.asm index 9e3e7b0c..bde32c5f 100644 --- a/common/x86/x86inc.asm +++ b/common/x86/x86inc.asm @@ -374,8 +374,10 @@ DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 %if %1 != 0 && required_stack_alignment > STACK_ALIGNMENT %if %1 > 0 %assign regs_used (regs_used + 1) - %elif ARCH_X86_64 && regs_used == num_args && num_args <= 4 + UNIX64 * 2 - %warning "Stack pointer will overwrite register argument" + %endif + %if ARCH_X86_64 && regs_used < 5 + UNIX64 * 3 + ; Ensure that we don't clobber any registers containing arguments + %assign regs_used 5 + UNIX64 * 3 %endif %endif %endif -- 2.39.5