From: Peter Jones <pjones@redhat.com>
Date: Mon, 14 Mar, 2011 09:29:00 -0500
Subject: [PATCH] Use larger stack frame for x64_call[0..4]()
This fixes rhbz# 669765
diff --git a/efi/x86_64/callwrap.c b/efi/x86_64/callwrap.c
index eb8fd25..bd5dd5e 100644
--- a/efi/x86_64/callwrap.c
+++ b/efi/x86_64/callwrap.c
@@ -113,9 +113,9 @@ unsigned long long x64_call0(void *func)
register unsigned long long r10 __asm__("r10");
register unsigned long long r11 __asm__("r11");
__asm__ __volatile__(
- alloc_win_stack_frame(4)
+ alloc_win_stack_frame(5)
"call *%[fptr]\n\t"
- free_win_stack_frame(4)
+ free_win_stack_frame(5)
: "=a" (ret), "=c" (dummy), "=d" (dummy),
"=r" (r8), "=r" (r9), "=r" (r10), "=r" (r11)
: [fptr] "r" (func));
@@ -130,9 +130,9 @@ unsigned long long x64_call1(void *func, unsigned long long arg1)
register unsigned long long r10 __asm__("r10");
register unsigned long long r11 __asm__("r11");
__asm__ __volatile__(
- alloc_win_stack_frame(4)
+ alloc_win_stack_frame(5)
"call *%[fptr]\n\t"
- free_win_stack_frame(4)
+ free_win_stack_frame(5)
: "=a" (ret), "=c" (dummy), "=d" (dummy),
"=r" (r8), "=r" (r9), "=r" (r10), "=r" (r11)
: "c" (arg1),
@@ -148,9 +148,9 @@ unsigned long long x64_call2(void *func, unsigned long long arg1, unsigned long
register unsigned long long r10 __asm__("r10");
register unsigned long long r11 __asm__("r11");
__asm__ __volatile__(
- alloc_win_stack_frame(4)
+ alloc_win_stack_frame(5)
"call *%[fptr]\n\t"
- free_win_stack_frame(4)
+ free_win_stack_frame(5)
: "=a" (ret), "=c" (dummy), "=d" (dummy),
"=r" (r8), "=r" (r9), "=r" (r10), "=r" (r11)
: "c" (arg1), "d" (arg2),
@@ -170,9 +170,9 @@ unsigned long long x64_call3(
register unsigned long long r10 __asm__("r10");
register unsigned long long r11 __asm__("r11");
__asm__ __volatile__(
- alloc_win_stack_frame(4)
+ alloc_win_stack_frame(5)
"call *%[fptr]\n\t"
- free_win_stack_frame(4)
+ free_win_stack_frame(5)
: "=a" (ret), "=c" (dummy), "=d" (dummy),
"=r" (r8), "=r" (r9), "=r" (r10), "=r" (r11)
: "c" (arg1), "d" (arg2), "r" (r8),
@@ -193,9 +193,9 @@ unsigned long long x64_call4(
register unsigned long long r10 __asm__("r10");
register unsigned long long r11 __asm__("r11");
__asm__ __volatile__(
- alloc_win_stack_frame(4)
+ alloc_win_stack_frame(5)
"call *%[fptr]\n\t"
- free_win_stack_frame(4)
+ free_win_stack_frame(5)
: "=a" (ret), "=c" (dummy), "=d" (dummy),
"=r" (r8), "=r" (r9), "=r" (r10), "=r" (r11)
: "c" (arg1), "d" (arg2), "r" (r8), "r" (r9),