Don't make the spec file constructors static so that they don't get
optimized out.
This commit is contained in:
parent
447ddfd37d
commit
9fd831f68a
|
@ -771,18 +771,20 @@ void BuildSpec16File( FILE *outfile )
|
||||||
|
|
||||||
/* Output the DLL constructor */
|
/* Output the DLL constructor */
|
||||||
|
|
||||||
fprintf( outfile, "#ifdef __GNUC__\n" );
|
fprintf( outfile,
|
||||||
fprintf( outfile, "static void init(void) __attribute__((unused));\n" );
|
"#ifndef __GNUC__\n"
|
||||||
fprintf( outfile, "#else /* defined(__GNUC__) */\n" );
|
"static void __asm__dummy_dll_init(void) {\n"
|
||||||
fprintf( outfile, "static void __asm__dummy_dll_init(void) {\n" );
|
"#endif /* defined(__GNUC__) */\n"
|
||||||
fprintf( outfile, "#endif /* defined(__GNUC__) */\n" );
|
"asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n"
|
||||||
fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
|
" \"\\tcall " PREFIX "__wine_spec_%s_init\\n\"\n"
|
||||||
fprintf( outfile, " \"\\tcall init\\n\"\n" );
|
" \"\\t.previous\\n\");\n"
|
||||||
fprintf( outfile, " \"\\t.previous\\n\");\n" );
|
"#ifndef __GNUC__\n"
|
||||||
fprintf( outfile, "#ifndef __GNUC__\n" );
|
"}\n"
|
||||||
fprintf( outfile, "}\n" );
|
"#endif /* defined(__GNUC__) */\n\n"
|
||||||
fprintf( outfile, "#endif /* defined(__GNUC__) */\n" );
|
"void __wine_spec_%s_init(void)\n"
|
||||||
fprintf( outfile, "static void init(void) { __wine_register_dll_16( &descriptor ); }\n" );
|
"{\n"
|
||||||
|
" __wine_register_dll_16( &descriptor );\n"
|
||||||
|
"}\n", DLLName, DLLName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -670,38 +670,40 @@ void BuildSpec32File( FILE *outfile )
|
||||||
|
|
||||||
/* Output the DLL constructor */
|
/* Output the DLL constructor */
|
||||||
|
|
||||||
fprintf( outfile, "#ifdef __GNUC__\n" );
|
fprintf( outfile, "#ifndef __GNUC__\n" );
|
||||||
fprintf( outfile, "static void init(void) __attribute__((unused));\n" );
|
|
||||||
if (nr_debug)
|
|
||||||
fprintf( outfile, "static void fini(void) __attribute__((unused));\n" );
|
|
||||||
fprintf( outfile, "#else /* defined(__GNUC__) */\n" );
|
|
||||||
fprintf( outfile, "static void __asm__dummy_dll_init(void) {\n" );
|
fprintf( outfile, "static void __asm__dummy_dll_init(void) {\n" );
|
||||||
fprintf( outfile, "#endif /* defined(__GNUC__) */\n" );
|
fprintf( outfile, "#endif /* defined(__GNUC__) */\n" );
|
||||||
fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
|
fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
|
||||||
fprintf( outfile, " \"\\tcall init\\n\"\n" );
|
fprintf( outfile, " \"\\tcall " PREFIX "__wine_spec_%s_init\\n\"\n", DLLName );
|
||||||
fprintf( outfile, " \"\\t.previous\\n\");\n" );
|
fprintf( outfile, " \"\\t.previous\\n\");\n" );
|
||||||
if (nr_debug)
|
if (nr_debug)
|
||||||
{
|
{
|
||||||
fprintf( outfile, "asm(\"\\t.section\t.fini ,\\\"ax\\\"\\n\"\n" );
|
fprintf( outfile, "asm(\"\\t.section\t.fini ,\\\"ax\\\"\\n\"\n" );
|
||||||
fprintf( outfile, " \"\\tcall fini\\n\"\n" );
|
fprintf( outfile, " \"\\tcall " PREFIX "__wine_spec_%s_fini\\n\"\n", DLLName );
|
||||||
fprintf( outfile, " \"\\t.previous\\n\");\n" );
|
fprintf( outfile, " \"\\t.previous\\n\");\n" );
|
||||||
}
|
}
|
||||||
fprintf( outfile, "#ifndef __GNUC__\n" );
|
fprintf( outfile, "#ifndef __GNUC__\n" );
|
||||||
fprintf( outfile, "}\n" );
|
fprintf( outfile, "}\n" );
|
||||||
fprintf( outfile, "#endif /* defined(__GNUC__) */\n\n" );
|
fprintf( outfile, "#endif /* defined(__GNUC__) */\n\n" );
|
||||||
fprintf( outfile, "static void init(void)\n{\n" );
|
|
||||||
fprintf( outfile, " extern void __wine_dll_register( const struct image_nt_headers *, const char * );\n" );
|
fprintf( outfile,
|
||||||
fprintf( outfile, " extern void *__wine_dbg_register( char * const *, int );\n");
|
"void __wine_spec_%s_init(void)\n"
|
||||||
fprintf( outfile, " __wine_dll_register( &nt_header, \"%s\" );\n", DLLFileName );
|
"{\n"
|
||||||
|
" extern void __wine_dll_register( const struct image_nt_headers *, const char * );\n"
|
||||||
|
" extern void *__wine_dbg_register( char * const *, int );\n"
|
||||||
|
" __wine_dll_register( &nt_header, \"%s\" );\n",
|
||||||
|
DLLName, DLLFileName );
|
||||||
if (nr_debug)
|
if (nr_debug)
|
||||||
fprintf( outfile, " debug_registration = __wine_dbg_register( debug_channels, %d );\n",
|
fprintf( outfile, " debug_registration = __wine_dbg_register( debug_channels, %d );\n",
|
||||||
nr_debug );
|
nr_debug );
|
||||||
fprintf( outfile, "}\n" );
|
fprintf( outfile, "}\n" );
|
||||||
if (nr_debug)
|
if (nr_debug)
|
||||||
{
|
{
|
||||||
fprintf( outfile, "\nstatic void fini(void)\n{\n" );
|
fprintf( outfile,
|
||||||
fprintf( outfile, " extern void __wine_dbg_unregister( void * );\n");
|
"\nvoid __wine_spec_%s_fini(void)\n"
|
||||||
fprintf( outfile, " __wine_dbg_unregister( debug_registration );\n" );
|
"{\n"
|
||||||
fprintf( outfile, "}\n" );
|
" extern void __wine_dbg_unregister( void* );\n"
|
||||||
|
" __wine_dbg_unregister( debug_registration );\n"
|
||||||
|
"}\n", DLLName );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue