tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

long-double.patch (2860B)


      1 https://github.com/libffi/libffi/pull/580
      2 
      3 diff --git a/src/x86/win64.S b/src/x86/win64.S
      4 index 2c334c82f9b2d..a54459f077c91 100644
      5 --- a/src/x86/win64.S
      6 +++ b/src/x86/win64.S
      7 @@ -25,17 +25,17 @@
      8 
      9 /* This macro allows the safe creation of jump tables without an
     10    actual table.  The entry points into the table are all 8 bytes.
     11    The use of ORG asserts that we're at the correct location.  */
     12 /* ??? The clang assembler doesn't handle .org with symbolic expressions.  */
     13 #if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__))
     14 # define E(BASE, X)	.balign 8
     15 #else
     16 -# define E(BASE, X)	.balign 8; .org BASE + X * 8
     17 +# define E(BASE, X)	.balign 8; .org BASE + (X) * 8
     18 #endif
     19 
     20 	.text
     21 
     22 /* ffi_call_win64 (void *stack, struct win64_call_frame *frame, void *r10)
     23 
     24    Bit o trickiness here -- FRAME is the base of the stack frame
     25    for this function.  This has been allocated by ffi_call.  We also
     26 @@ -102,17 +102,18 @@ E(0b, FFI_TYPE_INT)
     27 	movq	%rax, (%r8)
     28 	epilogue
     29 E(0b, FFI_TYPE_FLOAT)
     30 	movss	%xmm0, (%r8)
     31 	epilogue
     32 E(0b, FFI_TYPE_DOUBLE)
     33 	movsd	%xmm0, (%r8)
     34 	epilogue
     35 -E(0b, FFI_TYPE_LONGDOUBLE)
     36 +// FFI_TYPE_LONGDOUBLE may be FFI_TYPE_DOUBLE but we need a different value here.
     37 +E(0b, FFI_TYPE_DOUBLE + 1)
     38 	call	PLT(C(abort))
     39 E(0b, FFI_TYPE_UINT8)
     40 	movzbl	%al, %eax
     41 	movq	%rax, (%r8)
     42 	epilogue
     43 E(0b, FFI_TYPE_SINT8)
     44 	movsbq	%al, %rax
     45 	jmp	98f
     46 diff --git a/src/x86/win64_intel.S b/src/x86/win64_intel.S
     47 index 7df78b30e42c6..970a4f997a981 100644
     48 --- a/src/x86/win64_intel.S
     49 +++ b/src/x86/win64_intel.S
     50 @@ -24,17 +24,17 @@
     51 
     52 /* This macro allows the safe creation of jump tables without an
     53    actual table.  The entry points into the table are all 8 bytes.
     54    The use of ORG asserts that we're at the correct location.  */
     55 /* ??? The clang assembler doesn't handle .org with symbolic expressions.  */
     56 #if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__))
     57 # define E(BASE, X)	ALIGN 8
     58 #else
     59 -# define E(BASE, X)	ALIGN 8; ORG BASE + X * 8
     60 +# define E(BASE, X)	ALIGN 8; ORG BASE + (X) * 8
     61 #endif
     62 
     63 	.CODE
     64 	extern PLT(C(abort)):near
     65 	extern C(ffi_closure_win64_inner):near
     66 
     67 /* ffi_call_win64 (void *stack, struct win64_call_frame *frame, void *r10)
     68 
     69 @@ -102,17 +102,18 @@ E(0b, FFI_TYPE_INT)
     70 	mov qword ptr [r8], rax; movq	%rax, (%r8)
     71 	epilogue
     72 E(0b, FFI_TYPE_FLOAT)
     73 	movss dword ptr [r8], xmm0 ; movss	%xmm0, (%r8)
     74 	epilogue
     75 E(0b, FFI_TYPE_DOUBLE)
     76 	movsd qword ptr[r8], xmm0; movsd	%xmm0, (%r8)
     77 	epilogue
     78 -E(0b, FFI_TYPE_LONGDOUBLE)
     79 +// FFI_TYPE_LONGDOUBLE may be FFI_TYPE_DOUBLE but we need a different value here.
     80 +E(0b, FFI_TYPE_DOUBLE + 1)
     81 	call	PLT(C(abort))
     82 E(0b, FFI_TYPE_UINT8)
     83 	movzx eax, al ;movzbl	%al, %eax
     84 	mov qword ptr[r8], rax; movq	%rax, (%r8)
     85 	epilogue
     86 E(0b, FFI_TYPE_SINT8)
     87 	movsx rax, al ; movsbq	%al, %rax
     88 	jmp	L98