Alexandre Julliard : winebuild: Remove 32-bit register function support.
Alexandre Julliard
julliard at winehq.org
Wed Jul 26 15:41:40 CDT 2017
Module: wine
Branch: master
Commit: e3a236e6ce368e3d960cfbe3018d3a5cb52a0add
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e3a236e6ce368e3d960cfbe3018d3a5cb52a0add
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Jul 26 10:43:09 2017 +0200
winebuild: Remove 32-bit register function support.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
tools/winebuild/build.h | 1 -
tools/winebuild/relay.c | 207 -----------------------------------------------
tools/winebuild/spec32.c | 1 -
3 files changed, 209 deletions(-)
diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h
index 398d542..f01ae4f 100644
--- a/tools/winebuild/build.h
+++ b/tools/winebuild/build.h
@@ -304,7 +304,6 @@ extern void output_bin_res16_directory( DLLSPEC *spec, unsigned int data_offset
extern void output_spec16_file( DLLSPEC *spec );
extern void output_fake_module16( DLLSPEC *spec16 );
extern void output_res_o_file( DLLSPEC *spec );
-extern void output_asm_relays(void);
extern void output_asm_relays16(void);
extern void BuildSpec32File( DLLSPEC *spec );
diff --git a/tools/winebuild/relay.c b/tools/winebuild/relay.c
index 1cc6465..4b78f68 100644
--- a/tools/winebuild/relay.c
+++ b/tools/winebuild/relay.c
@@ -749,190 +749,6 @@ static void BuildCallTo32CBClient( int isEx )
/*******************************************************************
- * build_call_from_regs_x86
- *
- * Build a 32-bit-to-Wine call-back function for a 'register' function.
- * 'args' is the number of dword arguments.
- *
- * Stack layout:
- * ...
- * (ebp+20) first arg
- * (ebp+16) ret addr to user code
- * (ebp+12) func to call (relative to relay code ret addr)
- * (ebp+8) number of args
- * (ebp+4) ret addr to relay code
- * (ebp+0) saved ebp
- * (ebp-128) buffer area to allow stack frame manipulation
- * (ebp-332) CONTEXT86 struct
- * (ebp-336) padding for stack alignment
- * (ebp-336-n) CONTEXT86 *argument
- * .... other arguments copied from (ebp+12)
- *
- * The entry point routine is called with a CONTEXT* extra argument,
- * following the normal args. In this context structure, EIP_reg
- * contains the return address to user code, and ESP_reg the stack
- * pointer on return (with the return address and arguments already
- * removed).
- */
-static void build_call_from_regs_x86(void)
-{
- static const int STACK_SPACE = 128 + 0x2cc /* sizeof(CONTEXT86) */;
-
- /* Function header */
-
- output( "\t.text\n" );
- function_header( "__wine_call_from_regs" );
-
- /* Allocate some buffer space on the stack */
-
- output_cfi( ".cfi_startproc" );
- output( "\tpushl %%ebp\n" );
- output_cfi( ".cfi_adjust_cfa_offset 4" );
- output_cfi( ".cfi_rel_offset %%ebp,0" );
- output( "\tmovl %%esp,%%ebp\n" );
- output_cfi( ".cfi_def_cfa_register %%ebp" );
- output( "\tleal -%d(%%esp),%%esp\n", STACK_SPACE );
-
- /* Build the context structure */
-
- output( "\tmovl %%eax,0xb0(%%esp)\n" ); /* Eax */
- output( "\tpushfl\n" );
- output( "\tpopl %%eax\n" );
- output( "\tmovl %%eax,0xc0(%%esp)\n"); /* EFlags */
- output( "\tmovl 0(%%ebp),%%eax\n" );
- output( "\tmovl %%eax,0xb4(%%esp)\n"); /* Ebp */
- output( "\tmovl %%ebx,0xa4(%%esp)\n"); /* Ebx */
- output( "\tmovl %%ecx,0xac(%%esp)\n"); /* Ecx */
- output( "\tmovl %%edx,0xa8(%%esp)\n"); /* Edx */
- output( "\tmovl %%esi,0xa0(%%esp)\n"); /* Esi */
- output( "\tmovl %%edi,0x9c(%%esp)\n"); /* Edi */
-
- output( "\txorl %%eax,%%eax\n" );
- output( "\tmovw %%cs,%%ax\n" );
- output( "\tmovl %%eax,0xbc(%%esp)\n"); /* SegCs */
- output( "\tmovw %%es,%%ax\n" );
- output( "\tmovl %%eax,0x94(%%esp)\n"); /* SegEs */
- output( "\tmovw %%fs,%%ax\n" );
- output( "\tmovl %%eax,0x90(%%esp)\n"); /* SegFs */
- output( "\tmovw %%gs,%%ax\n" );
- output( "\tmovl %%eax,0x8c(%%esp)\n"); /* SegGs */
- output( "\tmovw %%ss,%%ax\n" );
- output( "\tmovl %%eax,0xc8(%%esp)\n"); /* SegSs */
- output( "\tmovw %%ds,%%ax\n" );
- output( "\tmovl %%eax,0x98(%%esp)\n"); /* SegDs */
- output( "\tmovw %%ax,%%es\n" ); /* set %es equal to %ds just in case */
-
- output( "\tmovl $0x10007,0(%%esp)\n"); /* ContextFlags */
-
- output( "\tmovl 16(%%ebp),%%eax\n" ); /* Get %eip at time of call */
- output( "\tmovl %%eax,0xb8(%%esp)\n"); /* Eip */
-
- /* Transfer the arguments */
-
- output( "\tmovl 8(%%ebp),%%ecx\n" ); /* fetch number of args to copy */
- output( "\tleal 4(,%%ecx,4),%%edx\n" ); /* add 4 for context arg */
- output( "\tsubl %%edx,%%esp\n" );
- output( "\tandl $~15,%%esp\n" );
- output( "\tleal 20(%%ebp),%%esi\n" ); /* get %esp at time of call */
- output( "\tmovl %%esp,%%edi\n" );
- output( "\ttest %%ecx,%%ecx\n" );
- output( "\tjz 1f\n" );
- output( "\tcld\n" );
- output( "\trep\n\tmovsl\n" ); /* copy args */
- output( "1:\tleal %d(%%ebp),%%eax\n", -STACK_SPACE ); /* get addr of context struct */
- output( "\tmovl %%eax,(%%edi)\n" ); /* and pass it as extra arg */
- output( "\tmovl %%esi,%d(%%ebp)\n", 0xc4 /* Esp */ - STACK_SPACE );
-
- /* Call the entry point */
-
- output( "\tmovl 4(%%ebp),%%eax\n" ); /* get relay code addr */
- output( "\taddl 12(%%ebp),%%eax\n" );
- output( "\tcall *%%eax\n" );
- output( "\tleal -%d(%%ebp),%%ecx\n", STACK_SPACE );
-
- /* Restore the context structure */
-
- output( "2:\tpushl 0x94(%%ecx)\n" ); /* SegEs */
- output( "\tpopl %%es\n" );
- output( "\tpushl 0x90(%%ecx)\n" ); /* SegFs */
- output( "\tpopl %%fs\n" );
- output( "\tpushl 0x8c(%%ecx)\n" ); /* SegGs */
- output( "\tpopl %%gs\n" );
-
- output( "\tmovw %%ss,%%ax\n" );
- output( "\tcmpw 0xc8(%%ecx),%%ax\n" ); /* SegSs */
- output( "\tjne 3f\n" );
-
- /* As soon as we have switched stacks the context structure could
- * be invalid (when signal handlers are executed for example). Copy
- * values on the target stack before changing ESP. */
-
- output( "\tmovl 0xc4(%%ecx),%%eax\n" ); /* Esp */
- output( "\tleal -4*4(%%eax),%%eax\n" );
-
- output( "\tmovl 0xc0(%%ecx),%%edx\n" ); /* EFlags */
- output( "\t.byte 0x36\n\tmovl %%edx,3*4(%%eax)\n" );
- output( "\tmovl 0xbc(%%ecx),%%edx\n" ); /* SegCs */
- output( "\t.byte 0x36\n\tmovl %%edx,2*4(%%eax)\n" );
- output( "\tmovl 0xb8(%%ecx),%%edx\n" ); /* Eip */
- output( "\t.byte 0x36\n\tmovl %%edx,1*4(%%eax)\n" );
- output( "\tmovl 0xb0(%%ecx),%%edx\n" ); /* Eax */
- output( "\t.byte 0x36\n\tmovl %%edx,0*4(%%eax)\n" );
-
- output( "\tpushl 0x98(%%ecx)\n" ); /* SegDs */
-
- output( "\tmovl 0x9c(%%ecx),%%edi\n" ); /* Edi */
- output( "\tmovl 0xa0(%%ecx),%%esi\n" ); /* Esi */
- output( "\tmovl 0xa4(%%ecx),%%ebx\n" ); /* Ebx */
- output( "\tmovl 0xa8(%%ecx),%%edx\n" ); /* Edx */
- output( "\tmovl 0xb4(%%ecx),%%ebp\n" ); /* Ebp */
- output( "\tmovl 0xac(%%ecx),%%ecx\n" ); /* Ecx */
-
- output( "\tpopl %%ds\n" );
- output( "\tmovl %%eax,%%esp\n" );
-
- output( "\tpopl %%eax\n" );
- output( "\tiret\n" );
-
- output("3:\n");
-
- /* Restore the context when the stack segment changes. We can't use
- * the same code as above because we do not know if the stack segment
- * is 16 or 32 bit, and 'movl' will throw an exception when we try to
- * access memory above the limit. */
-
- output( "\tmovl 0x9c(%%ecx),%%edi\n" ); /* Edi */
- output( "\tmovl 0xa0(%%ecx),%%esi\n" ); /* Esi */
- output( "\tmovl 0xa4(%%ecx),%%ebx\n" ); /* Ebx */
- output( "\tmovl 0xa8(%%ecx),%%edx\n" ); /* Edx */
- output( "\tmovl 0xb0(%%ecx),%%eax\n" ); /* Eax */
- output( "\tmovl 0xb4(%%ecx),%%ebp\n" ); /* Ebp */
-
- output( "\tpushl 0xc8(%%ecx)\n" ); /* SegSs */
- output( "\tpopl %%ss\n" );
- output( "\tmovl 0xc4(%%ecx),%%esp\n" ); /* Esp */
-
- output( "\tpushl 0xc0(%%ecx)\n" ); /* EFlags */
- output( "\tpushl 0xbc(%%ecx)\n" ); /* SegCs */
- output( "\tpushl 0xb8(%%ecx)\n" ); /* Eip */
- output( "\tpushl 0x98(%%ecx)\n" ); /* SegDs */
- output( "\tmovl 0xac(%%ecx),%%ecx\n" ); /* Ecx */
-
- output( "\tpopl %%ds\n" );
- output( "\tiret\n" );
- output_cfi( ".cfi_endproc" );
- output_function_size( "__wine_call_from_regs" );
-
- function_header( "__wine_restore_regs" );
- output_cfi( ".cfi_startproc" );
- output( "\tmovl 4(%%esp),%%ecx\n" );
- output( "\tjmp 2b\n" );
- output_cfi( ".cfi_endproc" );
- output_function_size( "__wine_restore_regs" );
-}
-
-
-/*******************************************************************
* BuildPendingEventCheck
*
* Build a function that checks whether there are any
@@ -1027,27 +843,4 @@ void output_asm_relays16(void)
output( "\n\t.data\n\t.align %d\n", get_alignment(4) );
output( "%s\n\t.long 0\n", asm_globl("CallTo16_DataSelector") );
output( "%s\n\t.long 0\n", asm_globl("CallTo16_TebSelector") );
-
- output( "\t.text\n" );
- output( "%s:\n", asm_name("__wine_spec_thunk_text_32") );
- build_call_from_regs_x86();
- output_function_size( "__wine_spec_thunk_text_32" );
-}
-
-
-/*******************************************************************
- * output_asm_relays
- *
- * Build all the assembly relay callbacks
- */
-void output_asm_relays(void)
-{
- switch (target_cpu)
- {
- case CPU_x86:
- build_call_from_regs_x86();
- break;
- default:
- break;
- }
}
diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c
index 6536cd8..4a01238 100644
--- a/tools/winebuild/spec32.c
+++ b/tools/winebuild/spec32.c
@@ -651,7 +651,6 @@ void BuildSpec32File( DLLSPEC *spec )
output_stubs( spec );
output_exports( spec );
output_imports( spec );
- if (is_undefined( "__wine_call_from_regs" )) output_asm_relays();
if (needs_get_pc_thunk) output_get_pc_thunk();
output_resources( spec );
output_gnu_stack_note();
More information about the wine-cvs
mailing list