]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix set-callstack primitive on Windows
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 7 Jan 2010 06:31:15 +0000 (19:31 +1300)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 7 Jan 2010 06:31:15 +0000 (19:31 +1300)
basis/cpu/x86/32/bootstrap.factor
basis/cpu/x86/64/bootstrap.factor
vm/utilities.cpp

index afcae6d4d9f8244cec9cf63b645aab2d2951075e..8a5e43da31f7e25dea581a082333c4e124d3ac10 100644 (file)
@@ -126,12 +126,13 @@ IN: bootstrap.x86
     ! Compute new stack pointer -- 'dst' for memcpy
     EAX EDX SUB
     ! Install new stack pointer
-    RSP EAX MOV
+    ESP EAX MOV
     ! Call memcpy
-    ESP 8 [+] EDX MOV
-    ESP 4 [+] EBP MOV
-    ESP [] EAX MOV
-    0 CALL "memcpy" f rc-relative jit-dlsym
+    EDX PUSH
+    EBP PUSH
+    EAX PUSH
+    0 CALL "factor_memcpy" f rc-relative jit-dlsym
+    ESP 12 ADD
     ! Return with new callstack
     0 RET
 ] \ set-callstack define-sub-primitive
index 55dba215d76dbafc27af3e22d0686a6351811295..2d0296e15911c6401cdf387608571992a5edbf38 100644 (file)
@@ -121,8 +121,12 @@ IN: bootstrap.x86
     ! Install new stack pointer
     RSP arg1 MOV
     ! Call memcpy; arguments are now in the correct registers
-    safe-reg 0 MOV "memcpy" f rc-absolute-cell jit-dlsym
+    ! Create register shadow area for Win64
+    RSP 32 SUB
+    safe-reg 0 MOV "factor_memcpy" f rc-absolute-cell jit-dlsym
     safe-reg CALL
+    ! Tear down register shadow area
+    RSP 32 ADD
     ! Return with new callstack
     0 RET
 ] \ set-callstack define-sub-primitive
index 8f063a9ad4628686d3e366d007181a076a17d611..3e976d06195a23fb030c12ccbd990541a5f6dcfe 100755 (executable)
@@ -18,4 +18,11 @@ cell read_cell_hex()
        return cell;
 }
 
+/* On Windows, memcpy() is in a different DLL and the non-optimizing
+compiler can't find it */
+VM_C_API void *factor_memcpy(void *dst, void *src, size_t len)
+{
+       return memcpy(dst,src,len);
+}
+
 }