Patchwork [libffi] : Make sure code is position-independent for x64 targets

login
register
mail settings
Submitter Kai Tietz
Date March 22, 2013, 7:42 a.m.
Message ID <CAEwic4Z+qdfahbN_Zi4Y66rkuWnaA1MhokYnQTwC2mnpOjpGCQ@mail.gmail.com>
Download mbox | patch
Permalink /patch/229898/
State New
Headers show

Comments

Kai Tietz - March 22, 2013, 7:42 a.m.
Hi,

this patch fixes the Win64-code so that we use only pc-relative
addressing.  This
is of importance if code gets linked to an pe-image with an image-base
above 2GB.

ChangeLog

2013-03-22  Kai Tietz  <ktietz@redhat.com>

	* src/x86/win64.S: Make use of ffi_closure_win64_inner
	symbol pc-relative.

Tested for x86_64-w64-mingw32, and for upcoming x86_64-pc-cygwin
target.  Ok for apply?

Regards,
Kai
Andrew Haley - March 22, 2013, 9:18 a.m.
On 03/22/2013 07:42 AM, Kai Tietz wrote:
> Tested for x86_64-w64-mingw32, and for upcoming x86_64-pc-cygwin
> target.  Ok for apply?

Yes, that's fine.

Andrew.

Patch

Index: src/x86/win64.S
===================================================================
--- src/x86/win64.S	(Revision 196898)
+++ src/x86/win64.S	(Arbeitskopie)
@@ -295,7 +295,7 @@ 
 	mov	%rax, %rcx	# context is first parameter
 	mov	%rsp, %rdx	# stack is second parameter
 	add	$48, %rdx	# point to start of arguments
-	mov	$SYMBOL_NAME(ffi_closure_win64_inner), %rax
+	leaq	SYMBOL_NAME(ffi_closure_win64_inner)(%rip), %rax
 	callq	*%rax		# call the real closure function
 	add	$40, %rsp
 	movq	%rax, %xmm0	# If the closure returned a float,