diff --git a/common/system/fcontext.s b/common/system/fcontext.s index 71055cc9a2..16b291e4bd 100644 --- a/common/system/fcontext.s +++ b/common/system/fcontext.s @@ -5,16 +5,17 @@ #if __i386__ - #include "jump_i386_sysv_elf_gas.S" - #include "make_i386_sysv_elf_gas.S" - #ifdef __WIN32__ - #include "jump_i386_pe_gas.S" - #include "make_i386_pe_gas.S" - #endif + #ifdef __WIN32__ + #include "jump_i386_pe_gas.S" + #include "make_i386_pe_gas.S" + #else + #include "jump_i386_sysv_elf_gas.S" + #include "make_i386_sysv_elf_gas.S" + #endif #elif __x86_64__ - #include "jump_x86_64_sysv_elf_gas.S" - #include "make_x86_64_sysv_elf_gas.S" + #include "jump_x86_64_sysv_elf_gas.S" + #include "make_x86_64_sysv_elf_gas.S" #endif diff --git a/common/system/jump_i386_pe_gas.S b/common/system/jump_i386_pe_gas.S index 39db0dec1f..e93e42bae0 100644 --- a/common/system/jump_i386_pe_gas.S +++ b/common/system/jump_i386_pe_gas.S @@ -4,54 +4,53 @@ http://www.boost.org/LICENSE_1_0.txt) */ +.global _jump_fcontext .text -.globl jump_fcontext .align 2 -.type jump_fcontext,@function -jump_fcontext: - mov 0x4(%esp),%ecx - mov %edi,(%ecx) - mov %esi,0x4(%ecx) - mov %ebx,0x8(%ecx) - mov %ebp,0xc(%ecx) - mov %fs:0x18,%edx - mov (%edx),%eax - mov %eax,0x24(%ecx) - mov 0x4(%edx),%eax - mov %eax,0x18(%ecx) - mov 0x8(%edx),%eax - mov %eax,0x20(%ecx) - mov 0x10(%edx),%eax - mov %eax,0x28(%ecx) - lea 0x4(%esp),%eax - mov %eax,0x10(%ecx) - mov (%esp),%eax - mov %eax,0x14(%ecx) - mov 0x8(%esp),%edx - mov (%edx),%edi - mov 0x4(%edx),%esi - mov 0x8(%edx),%ebx - mov 0xc(%edx),%ebp - mov 0x10(%esp),%eax - test %eax,%eax - je jump_fcontext+0x5f - stmxcsr 0x2c(%ecx) - fnstcw 0x30(%ecx) - ldmxcsr 0x2c(%edx) - fldcw 0x30(%edx) - mov %edx,%ecx - mov %fs:0x18,%edx - mov 0x24(%ecx),%eax - mov %eax,(%edx) - mov 0x18(%ecx),%eax - mov %eax,0x4(%edx) - mov 0x20(%ecx),%eax - mov %eax,0x8(%edx) - mov 0x28(%ecx),%eax - mov %eax,0x10(%edx) - mov 0xc(%esp),%eax - mov 0x10(%ecx),%esp - mov %eax,0x4(%esp) - mov 0x14(%ecx),%ecx - jmp *%ecx +_jump_fcontext: + mov 0x4(%esp),%ecx + mov %edi,(%ecx) + mov %esi,0x4(%ecx) + mov %ebx,0x8(%ecx) + mov %ebp,0xc(%ecx) + mov %fs:0x18,%edx + mov (%edx),%eax + mov %eax,0x24(%ecx) + mov 0x4(%edx),%eax + mov %eax,0x18(%ecx) + mov 0x8(%edx),%eax + mov %eax,0x20(%ecx) + mov 0x10(%edx),%eax + mov %eax,0x28(%ecx) + lea 0x4(%esp),%eax + mov %eax,0x10(%ecx) + mov (%esp),%eax + mov %eax,0x14(%ecx) + mov 0x8(%esp),%edx + mov (%edx),%edi + mov 0x4(%edx),%esi + mov 0x8(%edx),%ebx + mov 0xc(%edx),%ebp + mov 0x10(%esp),%eax + test %eax,%eax + je _jump_fcontext+0x5f + stmxcsr 0x2c(%ecx) + fnstcw 0x30(%ecx) + ldmxcsr 0x2c(%edx) + fldcw 0x30(%edx) + mov %edx,%ecx + mov %fs:0x18,%edx + mov 0x24(%ecx),%eax + mov %eax,(%edx) + mov 0x18(%ecx),%eax + mov %eax,0x4(%edx) + mov 0x20(%ecx),%eax + mov %eax,0x8(%edx) + mov 0x28(%ecx),%eax + mov %eax,0x10(%edx) + mov 0xc(%esp),%eax + mov 0x10(%ecx),%esp + mov %eax,0x4(%esp) + mov 0x14(%ecx),%ecx + jmp *%ecx diff --git a/common/system/make_i386_pe_gas.S b/common/system/make_i386_pe_gas.S index 297f8bf54a..f0d9a60078 100644 --- a/common/system/make_i386_pe_gas.S +++ b/common/system/make_i386_pe_gas.S @@ -4,12 +4,11 @@ http://www.boost.org/LICENSE_1_0.txt) */ +.global _make_fcontext .text -.globl make_fcontext .align 2 -.type make_fcontext,@function -make_fcontext: +_make_fcontext: mov 0x4(%esp),%eax lea -0x34(%eax),%eax and $0xfffffff0,%eax @@ -31,10 +30,10 @@ make_fcontext: mov %fs:0x18,%ecx mov (%ecx),%edx inc %edx - je make_fcontext+0x4c // <_make_fcontext+0x4c> + je _make_fcontext+0x4c // <_make_fcontext+0x4c> dec %edx xchg %edx,%ecx - jmp make_fcontext+0x42 // <_make_fcontext+0x42> + jmp _make_fcontext+0x42 // <_make_fcontext+0x42> mov 0x4(%ecx),%ecx mov 0x10(%eax),%edx mov %ecx,0x18(%edx) @@ -45,10 +44,7 @@ make_fcontext: ret finish: - xor %eax,%eax - mov %eax,(%esp) - call finish+0xa - hlt - -.size make_fcontext,.-make_fcontext - + xor %eax,%eax + mov %eax,(%esp) + call finish+0xa + hlt