summarylogtreecommitdiffstats
path: root/0002-LoL-6.17+-syscall-fix.patch
blob: 7bf74f30ee429e2bb480edc49f5980e49390098a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c
index c876d51..654c84d 100644
--- a/tools/winebuild/import.c
+++ b/tools/winebuild/import.c
@@ -1401,19 +1401,9 @@ void output_syscalls( DLLSPEC *spec )
         switch (target.cpu)
         {
         case CPU_i386:
-            if (UsePIC)
-            {
-                output( "\tcall %s\n", asm_name("__wine_spec_get_pc_thunk_eax") );
-                output( "1:\tmovl %s-1b(%%eax),%%edx\n", asm_name("__wine_syscall_dispatcher") );
-                output( "\tmovl $%u,%%eax\n", id );
-                needs_get_pc_thunk = 1;
-            }
-            else
-            {
-                output( "\tmovl $%u,%%eax\n", id );
-                output( "\tmovl $%s,%%edx\n", asm_name("__wine_syscall") );
-            }
-            output( "\tcall *%%edx\n" );
+            output( "\t.byte 0xb8\n" );                               /* mov eax, SYSCALL */
+            output( "\t.long %d\n", id );
+            output( "\t.byte 0x64,0xff,0x15,0xc0,0x00,0x00,0x00\n" ); /* call dword ptr fs:[0C0h] */
             output( "\tret $%u\n", odp->type == TYPE_STDCALL ? get_args_size( odp ) : 0 );
             break;
         case CPU_x86_64: