Get rid of the debug channels support.

This commit is contained in:
Alexandre Julliard 2005-09-29 13:41:34 +00:00
parent 8248d0ae87
commit e86a6a2454
5 changed files with 2 additions and 313 deletions

View File

@ -207,24 +207,20 @@ extern void output_resources( FILE *outfile, DLLSPEC *spec );
extern void load_res16_file( const char *name, DLLSPEC *spec );
extern void output_res16_data( FILE *outfile, DLLSPEC *spec );
extern void output_res16_directory( FILE *outfile, DLLSPEC *spec, const char *header_name );
extern void output_dll_init( FILE *outfile, const char *constructor, const char *destructor );
extern void BuildRelays16( FILE *outfile );
extern void BuildRelays32( FILE *outfile );
extern void BuildSpec16File( FILE *outfile, DLLSPEC *spec );
extern void BuildSpec32File( FILE *outfile, DLLSPEC *spec );
extern void BuildDef32File( FILE *outfile, DLLSPEC *spec );
extern void BuildDebugFile( FILE *outfile, const char *srcdir, char **argv );
extern int parse_spec_file( FILE *file, DLLSPEC *spec );
extern int parse_def_file( FILE *file, DLLSPEC *spec );
extern int parse_debug_channels( const char *srcdir, const char *filename );
/* global variables */
extern int current_line;
extern int UsePIC;
extern int nb_debug_channels;
extern int nb_lib_paths;
extern int nb_errors;
extern int display_warnings;
@ -235,7 +231,6 @@ extern int save_temps;
extern char *input_file_name;
extern char *spec_file_name;
extern const char *output_file_name;
extern char **debug_channels;
extern char **lib_path;
extern char *as_command;

View File

@ -41,7 +41,6 @@
#include "build.h"
int UsePIC = 0;
int nb_debug_channels = 0;
int nb_lib_paths = 0;
int nb_errors = 0;
int display_warnings = 0;
@ -73,7 +72,6 @@ enum target_platform target_platform = PLATFORM_WINDOWS;
enum target_platform target_platform = PLATFORM_UNSPECIFIED;
#endif
char **debug_channels = NULL;
char **lib_path = NULL;
char *input_file_name = NULL;
@ -86,7 +84,6 @@ char *ld_command = NULL;
char *nm_command = NULL;
static FILE *output_file;
static const char *current_src_dir;
static int nb_res_files;
static char **res_files;
@ -97,7 +94,6 @@ enum exec_mode_values
MODE_DLL,
MODE_EXE,
MODE_DEF,
MODE_DEBUG,
MODE_RELAY16,
MODE_RELAY32
};
@ -248,7 +244,6 @@ static const char usage_str[] =
"Usage: winebuild [OPTIONS] [FILES]\n\n"
"Options:\n"
" --as-cmd=AS Command to use for assembling (default: as)\n"
" -C, --source-dir=DIR Look for source files in DIR\n"
" -d, --delay-lib=LIB Import the specified library in delayed mode\n"
" -D SYM Ignored for C flags compatibility\n"
" -E, --export=FILE Export the symbols defined in the .spec or .def file\n"
@ -280,7 +275,6 @@ static const char usage_str[] =
" --dll Build a .c file from a .spec or .def file\n"
" --def Build a .def file from a .spec file\n"
" --exe Build a .c file for an executable\n"
" --debug [FILES] Build a .c file with the debug channels declarations\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";
@ -290,7 +284,6 @@ enum long_options_values
LONG_OPT_DLL = 1,
LONG_OPT_DEF,
LONG_OPT_EXE,
LONG_OPT_DEBUG,
LONG_OPT_ASCMD,
LONG_OPT_LDCMD,
LONG_OPT_NMCMD,
@ -309,7 +302,6 @@ static const struct option long_options[] =
{ "dll", 0, 0, LONG_OPT_DLL },
{ "def", 0, 0, LONG_OPT_DEF },
{ "exe", 0, 0, LONG_OPT_EXE },
{ "debug", 0, 0, LONG_OPT_DEBUG },
{ "as-cmd", 1, 0, LONG_OPT_ASCMD },
{ "ld-cmd", 1, 0, LONG_OPT_LDCMD },
{ "nm-cmd", 1, 0, LONG_OPT_NMCMD },
@ -320,7 +312,6 @@ static const struct option long_options[] =
{ "target", 1, 0, LONG_OPT_TARGET },
{ "version", 0, 0, LONG_OPT_VERSION },
/* aliases for short options */
{ "source-dir", 1, 0, 'C' },
{ "delay-lib", 1, 0, 'd' },
{ "export", 1, 0, 'E' },
{ "entry", 1, 0, 'e' },
@ -363,9 +354,6 @@ static char **parse_options( int argc, char **argv, DLLSPEC *spec )
{
switch(optc)
{
case 'C':
current_src_dir = optarg;
break;
case 'D':
/* ignored */
break;
@ -475,9 +463,6 @@ static char **parse_options( int argc, char **argv, DLLSPEC *spec )
set_exec_mode( MODE_EXE );
if (!spec->subsystem) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI;
break;
case LONG_OPT_DEBUG:
set_exec_mode( MODE_DEBUG );
break;
case LONG_OPT_ASCMD:
as_command = xstrdup( optarg );
break;
@ -632,9 +617,6 @@ int main(int argc, char **argv)
if (!parse_input_file( spec )) break;
BuildDef32File( output_file, spec );
break;
case MODE_DEBUG:
BuildDebugFile( 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 );

View File

@ -967,80 +967,3 @@ int parse_def_file( FILE *file, DLLSPEC *spec )
assign_ordinals( spec );
return !nb_errors;
}
/*******************************************************************
* add_debug_channel
*/
static void add_debug_channel( const char *name )
{
int i;
for (i = 0; i < nb_debug_channels; i++)
if (!strcmp( debug_channels[i], name )) return;
debug_channels = xrealloc( debug_channels, (nb_debug_channels + 1) * sizeof(*debug_channels));
debug_channels[nb_debug_channels++] = xstrdup(name);
}
/*******************************************************************
* parse_debug_channels
*
* Parse a source file and extract the debug channel definitions.
*/
int parse_debug_channels( const char *srcdir, const char *filename )
{
FILE *file;
int eol_seen = 1;
file = open_input_file( srcdir, filename );
while (fgets( ParseBuffer, sizeof(ParseBuffer), file ))
{
char *channel, *end, *p = ParseBuffer;
p = ParseBuffer + strlen(ParseBuffer) - 1;
if (!eol_seen) /* continuation line */
{
eol_seen = (*p == '\n');
continue;
}
if ((eol_seen = (*p == '\n'))) *p = 0;
p = ParseBuffer;
while (isspace(*p)) p++;
if (!memcmp( p, "WINE_DECLARE_DEBUG_CHANNEL", 26 ) ||
!memcmp( p, "WINE_DEFAULT_DEBUG_CHANNEL", 26 ))
{
p += 26;
while (isspace(*p)) p++;
if (*p != '(')
{
error( "invalid debug channel specification '%s'\n", ParseBuffer );
goto next;
}
p++;
while (isspace(*p)) p++;
if (!isalpha(*p))
{
error( "invalid debug channel specification '%s'\n", ParseBuffer );
goto next;
}
channel = p;
while (isalnum(*p) || *p == '_') p++;
end = p;
while (isspace(*p)) p++;
if (*p != ')')
{
error( "invalid debug channel specification '%s'\n", ParseBuffer );
goto next;
}
*end = 0;
add_debug_channel( channel );
}
next:
current_line++;
}
close_input_file( file );
return !nb_errors;
}

View File

@ -36,46 +36,6 @@
#include "build.h"
static int string_compare( const void *ptr1, const void *ptr2 )
{
const char * const *str1 = ptr1;
const char * const *str2 = ptr2;
return strcmp( *str1, *str2 );
}
/*******************************************************************
* output_debug
*
* Output the debug channels.
*/
static int output_debug( FILE *outfile )
{
int i;
if (!nb_debug_channels) return 0;
qsort( debug_channels, nb_debug_channels, sizeof(debug_channels[0]), string_compare );
fprintf( outfile, "#include \"wine/debug.h\"\n\n" );
for (i = 0; i < nb_debug_channels; i++)
fprintf( outfile, "struct __wine_debug_channel __wine_dbch_%s = { 3, \"%s\" };\n",
debug_channels[i], debug_channels[i] );
fprintf( outfile, "\nstatic struct __wine_debug_channel * const debug_channels[%d] =\n{\n",
nb_debug_channels );
for (i = 0; i < nb_debug_channels; i++)
{
fprintf( outfile, " &__wine_dbch_%s", debug_channels[i] );
if (i < nb_debug_channels - 1) fprintf( outfile, ",\n" );
}
fprintf( outfile, "\n};\n\n" );
fprintf( outfile, "static void *debug_registration;\n\n" );
return nb_debug_channels;
}
/*******************************************************************
* output_exports
*
@ -253,96 +213,6 @@ static void output_exports( FILE *outfile, DLLSPEC *spec )
}
/*******************************************************************
* output_dll_init
*
* Output code for calling a dll constructor and destructor.
*/
void output_dll_init( FILE *outfile, const char *constructor, const char *destructor )
{
if (target_platform == PLATFORM_APPLE)
{
/* Mach-O doesn't have an init section */
if (constructor)
{
fprintf( outfile, "asm(\"\\t.mod_init_func\\n\"\n" );
fprintf( outfile, " \"\\t.align 2\\n\"\n" );
fprintf( outfile, " \"\\t.long %s\\n\"\n", asm_name(constructor) );
fprintf( outfile, " \"\\t.text\\n\");\n" );
}
if (destructor)
{
fprintf( outfile, "asm(\"\\t.mod_term_func\\n\"\n" );
fprintf( outfile, " \"\\t.align 2\\n\"\n" );
fprintf( outfile, " \"\\t.long %s\\n\"\n", asm_name(destructor) );
fprintf( outfile, " \"\\t.text\\n\");\n" );
}
}
else switch(target_cpu)
{
case CPU_x86:
case CPU_x86_64:
if (constructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(constructor) );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
if (destructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(destructor) );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
break;
case CPU_SPARC:
if (constructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(constructor) );
fprintf( outfile, " \"\\tnop\\n\"\n" );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
if (destructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(destructor) );
fprintf( outfile, " \"\\tnop\\n\"\n" );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
break;
case CPU_ALPHA:
if (constructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tjsr $26,%s\\n\"\n", asm_name(constructor) );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
if (destructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tjsr $26,%s\\n\"\n", asm_name(destructor) );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
break;
case CPU_POWERPC:
if (constructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tbl %s\\n\"\n", asm_name(constructor) );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
if (destructor)
{
fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" );
fprintf( outfile, " \"\\tbl %s\\n\"\n", asm_name(destructor) );
fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" );
}
break;
}
}
/*******************************************************************
* output_asm_constructor
*
@ -597,70 +467,3 @@ void BuildDef32File( FILE *outfile, DLLSPEC *spec )
}
if (!total) warning( "%s: Import library doesn't export anything\n", spec->file_name );
}
/*******************************************************************
* BuildDebugFile
*
* Build the debugging channels source file.
*/
void BuildDebugFile( FILE *outfile, const char *srcdir, char **argv )
{
int nr_debug;
char *prefix, *p, *constructor, *destructor;
while (*argv)
{
if (!parse_debug_channels( srcdir, *argv++ )) exit(1);
}
output_standard_file_header( outfile );
nr_debug = output_debug( outfile );
if (!nr_debug)
{
fprintf( outfile, "/* no debug channels found for this module */\n" );
return;
}
if (output_file_name)
{
if ((p = strrchr( output_file_name, '/' ))) p++;
prefix = xstrdup( p ? p : output_file_name );
if ((p = strchr( prefix, '.' ))) *p = 0;
strcpy( p, make_c_identifier(p) );
}
else prefix = xstrdup( "_" );
/* Output the DLL constructor */
constructor = xmalloc( strlen(prefix) + 17 );
destructor = xmalloc( strlen(prefix) + 17 );
sprintf( constructor, "__wine_dbg_%s_init", prefix );
sprintf( destructor, "__wine_dbg_%s_fini", prefix );
fprintf( outfile,
"#ifdef __GNUC__\n"
"void %s(void) __attribute__((constructor));\n"
"void %s(void) __attribute__((destructor));\n"
"#else\n"
"static void __asm__dummy_dll_init(void) {\n",
constructor, destructor );
output_dll_init( outfile, constructor, destructor );
fprintf( outfile, "}\n#endif /* defined(__GNUC__) */\n\n" );
fprintf( outfile,
"void %s(void)\n"
"{\n"
" extern void *__wine_dbg_register( struct __wine_debug_channel * const *, int );\n"
" if (!debug_registration) debug_registration = __wine_dbg_register( debug_channels, %d );\n"
"}\n\n", constructor, nr_debug );
fprintf( outfile,
"void %s(void)\n"
"{\n"
" extern void __wine_dbg_unregister( void* );\n"
" __wine_dbg_unregister( debug_registration );\n"
"}\n", destructor );
free( constructor );
free( destructor );
free( prefix );
}

View File

@ -6,9 +6,8 @@ winebuild \- Wine dll builder
.BI winebuild\ [options]\ [input\ files]
.SH DESCRIPTION
.B winebuild
generates the C and assembly files that are necessary to build a Wine
dll, which is basically a Win32 dll encapsulated inside a Unix
library.
generates the assembly files that are necessary to build a Wine dll,
which is basically a Win32 dll encapsulated inside a Unix library.
.PP
.B winebuild
has different modes, depending on what kind of file it is asked to
@ -47,14 +46,6 @@ executable, and all the other object files must be listed as
Build a .def file from a spec file. The .spec file is specified via the
-E option. This is used when building dlls with a PE (Win32) compiler.
.TP
.B \--debug
Build a C file containing the definitions for debugging channels. In
that mode the
.I input files
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 \--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.
@ -68,11 +59,6 @@ Wine internal usage only, you should never need to use this option.
Specify the command to use to compile assembly files; the default is
\fBas\fR.
.TP
.BI \-C,\ --source-dir= directory
Change to the specified directory before reading source files. Only
meaningful in
.BR \--debug\ mode.
.TP
.BI \-d,\ --delay-lib= name
Set the delayed import mode for the specified library, which must be
one of the libraries imported with the \fB-l\fR option. Delayed mode