Alexandre Julliard : winebuild: Use iretq on x86_64 to restore more system registers and flags.

Alexandre Julliard julliard at winehq.org
Mon May 4 09:06:36 CDT 2009


Module: wine
Branch: master
Commit: 880d00fb43de924a3543b0ad53b5aaf0ad63d0cb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=880d00fb43de924a3543b0ad53b5aaf0ad63d0cb

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May  1 18:03:23 2009 +0200

winebuild: Use iretq on x86_64 to restore more system registers and flags.

---

 tools/winebuild/relay.c |   24 +++++++++++-------------
 1 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/tools/winebuild/relay.c b/tools/winebuild/relay.c
index 50b47d9..ddc8051 100644
--- a/tools/winebuild/relay.c
+++ b/tools/winebuild/relay.c
@@ -1111,19 +1111,17 @@ static void build_call_from_regs_x86_64(void)
     output( "\tfxrstor 0x100(%%rbx)\n" );
     output( "\tldmxcsr 0x34(%%rbx)\n" );
 
-    output( "\tmovl 0x44(%%rbx),%%eax\n" );
-    output( "\tpushq %%rax\n" );
-    output( "\tpopfq\n" );
-
-    output( "\tmovq 0x98(%%rbx),%%rax\n" );  /* stack pointer */
-    output( "\tpushq 0xf8(%%rbx)\n" );  /* return address */
-    output( "\tpopq -8(%%rax)\n" );
-    output( "\tpushq 0x78(%%rbx)\n" );  /* rax */
-    output( "\tpopq -16(%%rax)\n" );
-    output( "\tmovq 0x90(%%rbx),%%rbx\n" );
-    output( "\tleaq -16(%%rax),%%rsp\n" );
-    output( "\tpopq %%rax\n" );
-    output( "\tret\n" );
+    output( "\tmovq 0xf8(%%rbx),%%rax\n" );  /* rip */
+    output( "\tmovq %%rax,0(%%rsp)\n" );
+    output( "\tmovw 0x38(%%rbx),%%ax\n" );   /* cs */
+    output( "\tmovq %%rax,0x8(%%rsp)\n" );
+    output( "\tmovl 0x44(%%rbx),%%eax\n" );  /* flags */
+    output( "\tmovq %%rax,0x10(%%rsp)\n" );
+    output( "\tmovq 0x98(%%rbx),%%rax\n" );  /* rsp */
+    output( "\tmovq %%rax,0x18(%%rsp)\n" );
+    output( "\tmovw 0x42(%%rbx),%%ax\n" );   /* ss */
+    output( "\tmovq %%rax,0x20(%%rsp)\n" );
+    output( "\tiretq\n" );
 
     output_function_size( "__wine_call_from_regs" );
 




More information about the wine-cvs mailing list