Got rid of 16-bit glue code generation since it is no longer used.
This commit is contained in:
parent
5fbb446cfc
commit
af62e83d1c
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
Makefile
|
||||
ntdll.dll.dbg.c
|
||||
ntdll.dll.glue.c
|
||||
ntdll.spec.c
|
||||
ntdll.spec.def
|
||||
relay16.s
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 <assert.h>\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++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue