From af62e83d1ce0296070800cfc5b6e7a4b39c5ccbd Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 23 Aug 2003 00:45:20 +0000 Subject: [PATCH] Got rid of 16-bit glue code generation since it is no longer used. --- Make.rules.in | 2 +- Makefile.in | 4 +- dlls/Makedll.rules.in | 5 -- dlls/ntdll/.cvsignore | 1 - tools/winebuild/build.h | 1 - tools/winebuild/main.c | 10 --- tools/winebuild/spec16.c | 138 ------------------------------- tools/winebuild/winebuild.man.in | 45 +--------- 8 files changed, 4 insertions(+), 202 deletions(-) diff --git a/Make.rules.in b/Make.rules.in index 351f11e2e95..c4b70ac0947 100644 --- a/Make.rules.in +++ b/Make.rules.in @@ -100,7 +100,7 @@ prog_manext = 1 api_manext = 3w conf_manext = 5 CLEAN_FILES = *.o *.a *.so *.ln *.$(LIBEXT) \\\#*\\\# *~ *% .\\\#* *.bak *.orig *.rej \ - *.flc *.spec.c *.spec.def *.glue.c *.dbg.c y.tab.c y.tab.h @LEX_OUTPUT_ROOT@.c core + *.flc *.spec.c *.spec.def *.dbg.c y.tab.c y.tab.h @LEX_OUTPUT_ROOT@.c core OBJS = $(C_SRCS:.c=.o) $(EXTRA_OBJS) diff --git a/Makefile.in b/Makefile.in index 5dfcc1aafa6..0c50eb45ed8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -126,10 +126,10 @@ crosstest:: $(TESTSUBDIRS:%=%/__crosstest__) # Misc rules TAGS etags: - etags `find $(TOPSRCDIR) -name '*.[ch]' -a -not -name '*.spec.c' -a -not -name '*.glue.c' -a -not -name '*.dbg.c' -print` + etags `find $(TOPSRCDIR) -name '*.[ch]' -a -not -name '*.spec.c' -a -not -name '*.dbg.c' -print` tags ctags: - ctags --c-types=+px `find $(TOPSRCDIR) -name '*.[ch]' -a -not -name '*.spec.c' -a -not -name '*.glue.c' -a -not -name '*.dbg.c' -print` + ctags --c-types=+px `find $(TOPSRCDIR) -name '*.[ch]' -a -not -name '*.spec.c' -a -not -name '*.dbg.c' -print` manpages: $(MKINSTALLDIRS) $(TOPOBJDIR)/documentation/man3w diff --git a/dlls/Makedll.rules.in b/dlls/Makedll.rules.in index 765b907b41b..933d1a8859c 100644 --- a/dlls/Makedll.rules.in +++ b/dlls/Makedll.rules.in @@ -34,11 +34,6 @@ $(MODULE).tmp.o: $(ALL_OBJS) Makefile.in $(LDCOMBINE) $(ALL_OBJS) -o $@ -$(STRIP) --strip-unneeded $@ -# Rule for 16-bit glue - -$(MODULE).glue.c: $(C_SRCS) $(C_SRCS16) $(WINEBUILD) - $(WINEBUILD) $(DEFS) -o $@ --glue -C$(SRCDIR) $(C_SRCS) $(C_SRCS16) - # Rules for .dll files $(MODULE): $(RCOBJS) $(OBJS) $(MODULE).dbg.o $(SPEC_DEF) $(IMPORTLIBS) Makefile.in diff --git a/dlls/ntdll/.cvsignore b/dlls/ntdll/.cvsignore index bb36679b50d..6c69916f8f7 100644 --- a/dlls/ntdll/.cvsignore +++ b/dlls/ntdll/.cvsignore @@ -1,6 +1,5 @@ Makefile ntdll.dll.dbg.c -ntdll.dll.glue.c ntdll.spec.c ntdll.spec.def relay16.s diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h index 0f5092ef9bb..84d6a9a398c 100644 --- a/tools/winebuild/build.h +++ b/tools/winebuild/build.h @@ -155,7 +155,6 @@ extern int output_res16_directory( unsigned char *buffer ); extern void output_dll_init( FILE *outfile, const char *constructor, const char *destructor ); extern int parse_debug_channels( const char *srcdir, const char *filename ); -extern void BuildGlue( FILE *outfile, const char *srcdir, char **argv ); extern void BuildRelays16( FILE *outfile ); extern void BuildRelays32( FILE *outfile ); extern void BuildSpec16File( FILE *outfile ); diff --git a/tools/winebuild/main.c b/tools/winebuild/main.c index 5c254e0ae68..1729c5ec3f5 100644 --- a/tools/winebuild/main.c +++ b/tools/winebuild/main.c @@ -85,7 +85,6 @@ enum exec_mode_values MODE_NONE, MODE_SPEC, MODE_EXE, - MODE_GLUE, MODE_DEF, MODE_DEBUG, MODE_RELAY16, @@ -148,7 +147,6 @@ static const char usage_str[] = " --def=FILE.SPEC Build a .def file from a spec file\n" " --exe=NAME Build a .c file for the named executable\n" " --debug [FILES] Build a .c file with the debug channels declarations\n" -" --glue [FILES] Build the 16-bit glue for the source files\n" " --relay16 Build the 16-bit relay assembly routines\n" " --relay32 Build the 32-bit relay assembly routines\n\n" "The mode options are mutually exclusive; you must specify one and only one.\n\n"; @@ -159,7 +157,6 @@ enum long_options_values LONG_OPT_DEF, LONG_OPT_EXE, LONG_OPT_DEBUG, - LONG_OPT_GLUE, LONG_OPT_RELAY16, LONG_OPT_RELAY32, LONG_OPT_VERSION @@ -173,7 +170,6 @@ static const struct option long_options[] = { "def", 1, 0, LONG_OPT_DEF }, { "exe", 1, 0, LONG_OPT_EXE }, { "debug", 0, 0, LONG_OPT_DEBUG }, - { "glue", 0, 0, LONG_OPT_GLUE }, { "relay16", 0, 0, LONG_OPT_RELAY16 }, { "relay32", 0, 0, LONG_OPT_RELAY32 }, { "version", 0, 0, LONG_OPT_VERSION }, @@ -328,9 +324,6 @@ static char **parse_options( int argc, char **argv ) case LONG_OPT_DEBUG: set_exec_mode( MODE_DEBUG ); break; - case LONG_OPT_GLUE: - set_exec_mode( MODE_GLUE ); - break; case LONG_OPT_RELAY16: set_exec_mode( MODE_RELAY16 ); break; @@ -421,9 +414,6 @@ int main(int argc, char **argv) case MODE_DEBUG: BuildDebugFile( output_file, current_src_dir, argv ); break; - case MODE_GLUE: - BuildGlue( output_file, current_src_dir, argv ); - break; case MODE_RELAY16: if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] ); BuildRelays16( output_file ); diff --git a/tools/winebuild/spec16.c b/tools/winebuild/spec16.c index 3c94bd82106..9be8747c17a 100644 --- a/tools/winebuild/spec16.c +++ b/tools/winebuild/spec16.c @@ -451,91 +451,6 @@ static void BuildCallFrom16Func( FILE *outfile, const char *profile, const char } -/******************************************************************* - * BuildCallTo16Func - * - * Build a Wine-to-16-bit callback glue function. - * - * Prototypes for the CallTo16 functions: - * extern WORD CALLBACK PREFIX_CallTo16_word_xxx( FARPROC16 func, args... ); - * extern LONG CALLBACK PREFIX_CallTo16_long_xxx( FARPROC16 func, args... ); - * - * These routines are provided solely for convenience; they simply - * write the arguments onto the 16-bit stack, and call the appropriate - * wine_call_to_16... core routine. - * - * If you have more sophisticated argument conversion requirements than - * are provided by these routines, you might as well call the core - * routines by yourself. - * - */ -static int BuildCallTo16Func( FILE *outfile, const char *profile, const char *prefix ) -{ - const char *args = profile + 5; - int i, argsize = 0, short_ret = 0; - - if (!strncmp( "word_", profile, 5 )) short_ret = 1; - else if (strncmp( "long_", profile, 5 )) - { - error( "Invalid function name '%s'\n", profile ); - return 0; - } - - fprintf( outfile, "unsigned %s __stdcall %s_CallTo16_%s( void (*proc)()", - short_ret? "short" : "int", prefix, profile ); - args = profile + 5; - for ( i = 0; args[i]; i++ ) - { - fprintf( outfile, ", " ); - switch (args[i]) - { - case 'w': fprintf( outfile, "unsigned short" ); argsize += 2; break; - case 'l': fprintf( outfile, "unsigned int" ); argsize += 4; break; - default: - error( "Invalid letter '%c' in function name '%s'\n", args[i], profile ); - return 0; - } - fprintf( outfile, " arg%d", i+1 ); - } - fprintf( outfile, " )\n{\n" ); - -#ifdef __i386__ - if ( argsize > 0 ) - { - fprintf( outfile, " char *args;\n" ); - fprintf( outfile, " unsigned int cur_stack;\n\n" ); - fprintf( outfile, "#ifdef __GNUC__\n" ); - fprintf( outfile, " __asm__(\".byte 0x64\\n\\tmovl (0x%x),%%0\" : \"=r\" (cur_stack));\n", - STACKOFFSET ); - fprintf( outfile, "#else\n" ); - fprintf( outfile, " extern char *NtCurrentTeb(void);\n" ); - fprintf( outfile, " cur_stack = *(unsigned int *)(NtCurrentTeb() + 0x%x);\n", - STACKOFFSET ); - fprintf( outfile, "#endif\n" ); - fprintf( outfile, " args = (char *)wine_ldt_copy.base[cur_stack >> 19] + (cur_stack & 0xffff);\n" ); - } - - args = profile + 5; - for ( i = 0; args[i]; i++ ) - { - switch (args[i]) - { - case 'w': fprintf( outfile, " args -= sizeof(unsigned short); *(unsigned short" ); break; - case 'l': fprintf( outfile, " args -= sizeof(unsigned int); *(unsigned int" ); break; - default: fprintf( stderr, "Unexpected case '%c' in BuildCallTo16Func\n", - args[i] ); - } - fprintf( outfile, " *)args = arg%d;\n", i+1 ); - } - - fprintf( outfile, " return wine_call_to_16( proc, %d );\n}\n\n", argsize ); -#else /* __i386__ */ - fprintf( outfile, " assert(0);\n}\n\n" ); -#endif /* __i386__ */ - return 1; -} - - /******************************************************************* * get_function_name */ @@ -921,56 +836,3 @@ void BuildSpec16File( FILE *outfile ) " __wine_unregister_dll_16( &descriptor );\n" "}\n", destructor ); } - - -/******************************************************************* - * BuildGlue - * - * Build the 16-bit-to-Wine/Wine-to-16-bit callback glue code - */ -void BuildGlue( FILE *outfile, const char *srcdir, char **argv ) -{ - char buffer[1024]; - - /* File header */ - - output_file_header( outfile ); - -#ifdef __i386__ - fprintf( outfile, "extern unsigned int __stdcall wine_call_to_16( void (*target)(), int args );\n\n" ); -#else - fprintf( outfile, "#include \n\n" ); -#endif - - /* Build the callback glue functions */ - - while (*argv) - { - FILE *infile = open_input_file( srcdir, *argv ); - - while (fgets( buffer, sizeof(buffer), infile )) - { - current_line++; - if (strstr( buffer, "### start build ###" )) break; - } - while (fgets( buffer, sizeof(buffer), infile )) - { - char *p; - if ( (p = strstr( buffer, "CallTo16_" )) != NULL ) - { - char *q, *profile = p + strlen( "CallTo16_" ); - for (q = profile; (*q == '_') || isalpha(*q); q++ ) - ; - *q = '\0'; - for (q = p-1; q > buffer && ((*q == '_') || isalnum(*q)); q-- ) - ; - if ( ++q < p ) p[-1] = '\0'; else q = ""; - BuildCallTo16Func( outfile, profile, q ); - } - current_line++; - if (strstr( buffer, "### stop build ###" )) break; - } - close_input_file( infile ); - argv++; - } -} diff --git a/tools/winebuild/winebuild.man.in b/tools/winebuild/winebuild.man.in index d5672bf1972..7bd7632baba 100644 --- a/tools/winebuild/winebuild.man.in +++ b/tools/winebuild/winebuild.man.in @@ -53,13 +53,6 @@ should be a list of C files to search for debug channel definitions. The resulting C file must be compiled and linked with the dll. .TP -.B \--glue -Build a C file containing the glue code for the 16-bit calls contained -in the -.I input files. -These calls must be specified in the source files using special -markers, as described in the \fBGLUE FUNCTIONS\fR section. -.TP .B \--relay16 Generate the assembly code for the 16-bit relay routines. This is for Wine internal usage only, you should never need to use this option. @@ -72,7 +65,7 @@ Wine internal usage only, you should never need to use this option. .BI \-C,\ --source-dir= directory Change to the specified directory before reading source files. Only meaningful in -.BR \--debug\ and\ --glue\ modes. +.BR \--debug\ mode. .TP .BI \-D\ symbol Ignored for compatibility with the C compiler. @@ -406,42 +399,6 @@ This declaration defines an ordinal as an absolute value. will be the name available for dynamic linking. .I data can be a decimal number or a hex number preceeded by "0x". -.SH "GLUE FUNCTIONS" -Glue functions are used to call down to 16-bit code from a 32-bit -function. This is done by declaring a special type of function -prototype in the source file that needs to call to 16-bit code, and -processing the source file through -.I winebuild --glue. -.PP -These prototypes must be of one of the following forms: -.PP -.B extern WORD CALLBACK \fIprefix\fB_CallTo16_word_\fIxxx\fB( FARPROC16 func, \fIargs\fB ); -.br -.B extern LONG CALLBACK \fIprefix\fB_CallTo16_long_\fIxxx\fB( FARPROC16 func, \fIargs\fB ); -.PP -The -.I prefix -can be anything you need to make the function names unique inside a -given dll. The -.I xxx -characters specify the type of the arguments, with one letter for each -argument. A \fBw\fR indicates a WORD argument, a \fBl\fR indicates a -LONG argument. -.PP -All the CallTo16 prototypes must be located between the special -markers -.B ### start build ### -and -.B ### stop build ### -(which have to be inside C comments of course). -.PP -Here's what a real life example looks like: -.PP -.B /* ### start build ### */ -.br -.B extern WORD CALLBACK PRTDRV_CallTo16_word_ww(FARPROC16,WORD,WORD); -.br -.B /* ### stop build ### */ .SH AUTHORS .B winebuild has been worked on by many people over the years. The main authors are