Blob Blame History Raw
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),