Added support for APPMODE=<type>[:<mainFunc>]

Gregg Mattinson gm138242 at scot.canada.sun.com
Tue Jul 2 15:06:56 CDT 2002


ChangeLog: dlls/Makedll.rules.in programs/Makeprog.rules.in
           programs/expand/Makefile.in programs/expand/expand.c
           programs/osversioncheck/Makefile.in
           programs/osversioncheck/osversioncheck.c
           programs/regsvr32/Makefile.in programs/regsvr32/regsvr32.c
           programs/wcmd/Makefile.in programs/wcmd/wcmdmain.c
           programs/winepath/Makefile.in programs/winepath/winepath.c
           programs/winetest/Makefile.in programs/winetest/winetest.c
           tools/winebuild/build.h tools/winebuild/import.c
           tools/winebuild/main.c tools/winebuild/relay.c
           tools/winebuild/spec16.c tools/winebuild/spec32.c
 - .spec files can't be compiled with -g when using Forte C.  This causes static 
variables to have a "random" prefix attached to their name, and prevents the 
assembly code from linking to them correctly.
 - Forte C has linker issues, so cui executables with main() conflicted with 
main() in $WINELOADER.  Renaming main() to main2() solved the issue, so I added 
support to winebuild to allow the main function name to be optionally specified 
in the makefile.
 - Forte C does not support .previous  It was replaced with a .section statement 
for the appropriate section
 - '.section .text' is incorrect.  It should be '.section ".text"'

Gregg Mattinson
Co-op Developer
Sun Microsystems of Canada

-------------- next part --------------
Index: dlls/Makedll.rules.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/dlls/Makedll.rules.in,v
retrieving revision 1.1
diff -u -r1.1 Makedll.rules.in
--- /tmp/T0hga4IG       Tue Jul  2 16:01:28 2002
+++ Makedll.rules.in    Thu Jun 27 08:05:43 2002
@@ -27,6 +27,9 @@
 $(MAINSPEC).c: $(MAINSPEC) $(RC_SRCS:.rc=.res) $(SYMBOLFILE) $(WINEBUILD)
        $(LDPATH) $(WINEBUILD) $(DEFS) $(SYMBOLFILE:%=-sym %) -o $@ -spec $(SRCDIR)/$(MAINSPEC) $(RC_SRCS:%.rc=-res %.res) -L$(DLLDIR) $(DELAYIMPORTS:%=-dl%) $(IMPORTS:%=-l%)
 
+$(MAINSPEC).o: $(MAINSPEC).c
+       $(CC) -c -o $@ $(MAINSPEC).c
+
 # Rules for .so files
 
 $(MODULE).so: $(ALL_OBJS) Makefile.in
Index: programs/Makeprog.rules.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/Makeprog.rules.in,v
retrieving revision 1.1
diff -u -r1.1 Makeprog.rules.in
--- /tmp/T0OHaiSF	Tue Jul  2 13:53:50 2002
+++ Makeprog.rules.in	Thu Jun 27 09:57:43 2002
@@ -27,6 +27,9 @@
 $(MODULE).spec.c: $(RC_SRCS:.rc=.res) $(SYMBOLFILE) $(WINEBUILD)
 	$(LDPATH) $(WINEBUILD) $(DEFS) $(SYMBOLFILE:%=-sym %) -o $@ -exe $(MODULE) $(APPMODE:%=-m%) $(RC_SRCS:%.rc=-res %.res) -L$(DLLDIR) $(DELAYIMPORTS:%=-dl%) $(IMPORTS:%=-l%)
 
+$(MODULE).spec.o: $(MODULE).spec.c
+	$(CC) -c -o $@ $(MODULE).spec.c
+
 # Rules for .so main module
 
 $(MODULE).so: $(MODULE).spec.o $(ALL_OBJS) Makefile.in
Index: programs/expand/Makefile.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/expand/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- /tmp/T0AsaGSF	Tue Jul  2 13:53:53 2002
+++ Makefile.in	Fri Jun 28 09:43:52 2002
@@ -3,7 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = expand.exe
-APPMODE   = cui
+APPMODE   = cui:main2
 IMPORTS   = lz32 kernel32
 
 C_SRCS = expand.c
Index: programs/expand/expand.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/expand/expand.c,v
retrieving revision 1.1
diff -u -r1.1 expand.c
--- /tmp/T0vwa4SF	Tue Jul  2 13:53:53 2002
+++ expand.c	Fri Jun 28 09:43:59 2002
@@ -23,7 +23,7 @@
 #include <windows.h>
 #include <lzexpand.h>
 
-int main(int argc, char *argv[])
+int main2(int argc, char *argv[])
 {
   OFSTRUCT SourceOpenStruct1, SourceOpenStruct2;
   DWORD dwreturn;
Index: programs/osversioncheck/Makefile.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/osversioncheck/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- /tmp/T0JrayUF	Tue Jul  2 13:53:57 2002
+++ Makefile.in	Fri Jun 28 09:44:10 2002
@@ -3,7 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = osversioncheck.exe
-APPMODE   = cui
+APPMODE   = cui:main2
 IMPORTS   = kernel32
 
 C_SRCS = osversioncheck.c
Index: programs/osversioncheck/osversioncheck.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/osversioncheck/osversioncheck.c,v
retrieving revision 1.1
diff -u -r1.1 osversioncheck.c
--- /tmp/T0RwaWUF	Tue Jul  2 13:53:57 2002
+++ osversioncheck.c	Fri Jun 28 09:44:21 2002
@@ -54,7 +54,7 @@
 }
 
 int
-main(int argc, char ** argv)
+main2(int argc, char ** argv)
 
 {
   BOOL result;
Index: programs/regsvr32/Makefile.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/regsvr32/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- /tmp/T0nRaGVF	Tue Jul  2 13:54:03 2002
+++ Makefile.in	Fri Jun 28 09:43:23 2002
@@ -4,7 +4,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = regsvr32.exe
-APPMODE   = cui
+APPMODE   = cui:main2
 IMPORTS   = msvcrt kernel32
 
 C_SRCS = \
Index: programs/regsvr32/regsvr32.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/regsvr32/regsvr32.c,v
retrieving revision 1.1
diff -u -r1.1 regsvr32.c
--- /tmp/T0PXa4VF	Tue Jul  2 13:54:03 2002
+++ regsvr32.c	Fri Jun 28 09:43:32 2002
@@ -160,7 +160,7 @@
     return 0;
 }
 
-int main(int argc, char* argv[])
+int main2(int argc, char* argv[])
 {
     int             i;
     BOOL            CallRegister = TRUE;
Index: programs/wcmd/Makefile.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/wcmd/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- /tmp/T0HwaOWF	Tue Jul  2 13:54:05 2002
+++ Makefile.in	Fri Jun 28 09:44:35 2002
@@ -3,7 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = wcmd.exe
-APPMODE   = cui
+APPMODE   = cui:main2
 IMPORTS   = shell32 user32 kernel32
 
 C_SRCS = \
Index: programs/wcmd/wcmdmain.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/wcmd/wcmdmain.c,v
retrieving revision 1.1
diff -u -r1.1 wcmdmain.c
--- /tmp/T0uPaiXF	Tue Jul  2 13:54:07 2002
+++ wcmdmain.c	Fri Jun 28 09:44:47 2002
@@ -47,7 +47,7 @@
  * winmain().
  */
 
-int main (int argc, char *argv[]) {
+int main2 (int argc, char *argv[]) {
 
 char string[1024], args[MAX_PATH], param[MAX_PATH];
 int status, i;
Index: programs/winepath/Makefile.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/winepath/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- /tmp/T01faOYF	Tue Jul  2 13:54:13 2002
+++ Makefile.in	Fri Jun 28 09:44:58 2002
@@ -3,7 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = winepath.exe
-APPMODE   = cui
+APPMODE   = cui:main2
 IMPORTS   = kernel32
 
 C_SRCS = winepath.c
Index: programs/winepath/winepath.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/winepath/winepath.c,v
retrieving revision 1.1
diff -u -r1.1 winepath.c
--- /tmp/T0fnaaZF	Tue Jul  2 13:54:13 2002
+++ winepath.c	Fri Jun 28 09:45:06 2002
@@ -126,7 +126,7 @@
 /*
  * Main function
  */
-int main(int argc, char *argv[])
+int main2(int argc, char *argv[])
 {
     wine_get_unix_file_name_t wine_get_unix_file_name_ptr = NULL;
     static char path[MAX_PATH];
Index: programs/winetest/Makefile.in
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/winetest/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- /tmp/T0zyaGZF	Tue Jul  2 13:54:14 2002
+++ Makefile.in	Fri Jun 28 09:45:17 2002
@@ -7,7 +7,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = winetest.exe
-APPMODE   = cui
+APPMODE   = cui:main2
 IMPORTS   = kernel32
 
 C_SRCS = winetest.c
Index: programs/winetest/winetest.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/programs/winetest/winetest.c,v
retrieving revision 1.1
diff -u -r1.1 winetest.c
--- /tmp/T0cXay0F	Tue Jul  2 13:54:15 2002
+++ winetest.c	Fri Jun 28 09:45:47 2002
@@ -159,7 +159,7 @@
 }
 
 /* main function */
-int main( int argc, char **argv, char **envp )
+int main2( int argc, char **argv, char **envp )
 {
     PerlInterpreter *perl;
     int status;
Index: tools/winebuild/build.h
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/tools/winebuild/build.h,v
retrieving revision 1.1
diff -u -r1.1 build.h
--- /tmp/T0EOaq4F	Tue Jul  2 13:54:48 2002
+++ build.h	Thu Jun 27 11:08:02 2002
@@ -43,6 +43,12 @@
 # define STRING ".ascii"
 #endif
 
+#ifdef __SUNPRO_C
+# define SHORT  ".half"
+#else
+# define SHORT  ".short"
+#endif
+
 typedef enum
 {
     TYPE_VARIABLE,     /* variable */
Index: tools/winebuild/import.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/tools/winebuild/import.c,v
retrieving revision 1.1
diff -u -r1.1 import.c
--- /tmp/T0mAaOqG       Tue Jul  2 15:08:30 2002
+++ import.c    Tue Jul  2 15:04:55 2002
@@ -532,7 +532,7 @@
         }
         pos += 4;
     }
-    fprintf( outfile, "\".previous\");\n#ifndef __GNUC__\n}\n#endif\n\n" );
+    fprintf( outfile, "\".section\t\\\".text\\\"\");\n#ifndef __GNUC__\n}\n#endif\n\n" );
 
  done:
     return nb_imm;
@@ -738,7 +738,7 @@
             fprintf( outfile, "\"\n" );
         }
     }
-    fprintf( outfile, "\".previous\");\n" );
+    fprintf( outfile, "\".section \\\".text\\\"\");\n" );
     fprintf( outfile, "#ifndef __GNUC__\n" );
     fprintf( outfile, "}\n" );
     fprintf( outfile, "#endif\n" );
Index: tools/winebuild/main.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/tools/winebuild/main.c,v
retrieving revision 1.1
diff -u -r1.1 main.c
--- /tmp/T0i.aa5F	Tue Jul  2 13:54:49 2002
+++ main.c	Fri Jun 28 09:49:30 2002
@@ -118,6 +118,7 @@
 static void do_f_flags( const char *arg );
 static void do_define( const char *arg );
 static void do_include( const char *arg );
+static void do_k_flags( const char *arg );
 static void do_exe_mode( const char *arg );
 static void do_spec( const char *arg );
 static void do_def( const char *arg );
@@ -141,6 +142,7 @@
     { "-f",       1, do_f_flags, "-f flags         Compiler flags (only -fPIC is supported)" },
     { "-D",       1, do_define,  "-D sym           Ignored for C flags compatibility" },
     { "-I",       1, do_include, "-I dir           Ignored for C flags compatibility" },
+    { "-K",       1, do_k_flags, "-K flags         Compiler flags (only -KPIC is supported)" },
     { "-m",       1, do_exe_mode,"-m mode          Set the executable mode (cui|gui|cuiw|guiw)" },
     { "-L",       1, do_lib,     "-L directory     Look for imports libraries in 'directory'" },
     { "-l",       1, do_import,  "-l lib.dll       Import the specified library" },
@@ -205,6 +207,13 @@
     /* nothing */
 }
 
+static void do_k_flags( const char *arg )
+{
+    /* Ignored, because cc generates correct code. */
+    /* if (!strcmp( arg, "PIC" )) UsePIC = 1; */
+    /* ignore all other flags */
+}
+
 static void do_spec( const char *arg )
 {
     if (exec_mode != MODE_NONE || !arg[0]) do_usage();
@@ -235,6 +244,13 @@
 
 static void do_exe_mode( const char *arg )
 {
+    char *pFunc = strchr(arg, ':');
+
+    if (pFunc) {
+      *pFunc++ = 0;
+      init_func = pFunc;
+    }
+
     if (!strcmp( arg, "gui" )) SpecMode = SPEC_MODE_GUIEXE;
     else if (!strcmp( arg, "cui" )) SpecMode = SPEC_MODE_CUIEXE;
     else if (!strcmp( arg, "guiw" )) SpecMode = SPEC_MODE_GUIEXE_UNICODE;
Index: tools/winebuild/relay.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/tools/winebuild/relay.c,v
retrieving revision 1.1
diff -u -r1.1 relay.c
--- /tmp/T0ymay5F	Tue Jul  2 13:54:50 2002
+++ relay.c	Mon Jun 24 13:48:58 2002
@@ -28,7 +28,6 @@
 #include <ctype.h>
 
 #include "thread.h"
-#include "stackframe.h"
 
 #include "build.h"
 
Index: tools/winebuild/spec16.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/tools/winebuild/spec16.c,v
retrieving revision 1.1
diff -u -r1.1 spec16.c
--- /tmp/T0CAaW5F	Tue Jul  2 13:54:51 2002
+++ spec16.c	Tue Jun 25 15:15:56 2002
@@ -28,11 +28,9 @@
 #include <assert.h>
 #include <ctype.h>
 
-#include "wine/exception.h"
 #include "wine/library.h"
 #include "builtin16.h"
 #include "module.h"
-#include "stackframe.h"
 
 #include "build.h"
 
@@ -584,7 +582,7 @@
         fprintf( outfile, "    const void *info[15];\n" );
         fprintf( outfile, "  } rec;\n\n" );
         fprintf( outfile, "  extern void __stdcall RtlRaiseException( struct exc_record * );\n\n" );
-        fprintf( outfile, "  rec.code    = 0x%08x;\n", EXCEPTION_WINE_STUB );
+        fprintf( outfile, "  rec.code    = 0x%08x;\n", 0x80000100 );
         fprintf( outfile, "  rec.flags   = %d;\n", EH_NONCONTINUABLE );
         fprintf( outfile, "  rec.rec     = 0;\n" );
         fprintf( outfile, "  rec.params  = 2;\n" );
@@ -706,7 +704,9 @@
 
     /* Output code segment */
 
+#ifndef __SUNPRO_C
     fprintf( outfile, "\n#include \"pshpack1.h\"\n" );
+#endif
     fprintf( outfile, "\nstatic struct code_segment\n{\n" );
     fprintf( outfile, "  struct {\n" );
 #ifdef __i386__
@@ -856,8 +856,9 @@
     res_size = output_res16_data( outfile );
 
     /* Output the DLL descriptor */
-
+#ifndef __SUNPRO_C
     fprintf( outfile, "#include \"poppack.h\"\n\n" );
+#endif
 
     fprintf( outfile, "static const struct dll_descriptor\n{\n" );
     fprintf( outfile, "    unsigned char *module_start;\n" );
@@ -887,11 +888,11 @@
              make_c_identifier(DLLName) );
     fprintf( outfile, "    \"\\t.previous\\n\");\n" );
 #elif defined(__sparc__)
-    fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
+    fprintf( outfile, "asm(\"\\t.section\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" );
     fprintf( outfile, "    \"\\tcall " PREFIX "__wine_spec_%s_init\\n\"\n",
              make_c_identifier(DLLName) );
     fprintf( outfile, "    \"\\tnop\\n\"\n" );
-    fprintf( outfile, "    \"\\t.previous\\n\");\n" );
+    fprintf( outfile, "    \"\\t.section\t\\\".text\\\"\\n\");\n" );
 #elif defined(__PPC__)
     fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
     fprintf( outfile, "    \"\\tbl " PREFIX "__wine_spec_%s_init\\n\"\n",
Index: tools/winebuild/spec32.c
===================================================================
RCS file: /opcom/comp/ws/wine/CVSROOT/wine/tools/winebuild/spec32.c,v
retrieving revision 1.1
diff -u -r1.1 spec32.c
--- /tmp/T0ZtaisG       Tue Jul  2 15:12:44 2002
+++ spec32.c    Tue Jul  2 15:11:17 2002
@@ -30,7 +30,6 @@
 #include <string.h>
 
 #include "winbase.h"
-#include "wine/exception.h"
 #include "build.h"
 
 
@@ -208,10 +207,14 @@
 
         /* output the function names */
 
-        fprintf( outfile, "    \"\\t.text 1\\n\"\n" );
+        fprintf( outfile, "    \"\\t.text\\n\"\n" );
         fprintf( outfile, "    \"__wine_spec_exp_names:\\n\"\n" );
         for (i = 0; i < nb_names; i++)
+#ifdef __SUNPRO_C
+            fprintf( outfile, "    \"\\t" STRING " \\\"%s\\\\0\\\"\\n\"\n", Names[i]->name );
+#else
             fprintf( outfile, "    \"\\t" STRING " \\\"%s\\\"\\n\"\n", Names[i]->name );
+#endif
         fprintf( outfile, "    \"\\t.data\\n\"\n" );
 
         /* output the function ordinals */
@@ -219,12 +222,12 @@
         fprintf( outfile, "    \"__wine_spec_exp_ordinals:\\n\"\n" );
         for (i = 0; i < nb_names; i++)
         {
-            fprintf( outfile, "    \"\\t.short %d\\n\"\n", Names[i]->ordinal - Base );
+            fprintf( outfile, "    \"\\t" SHORT " %d\\n\"\n", Names[i]->ordinal - Base );
         }
         total_size += nb_names * sizeof(short);
         if (nb_names % 2)
         {
-            fprintf( outfile, "    \"\\t.short 0\\n\"\n" );
+            fprintf( outfile, "    \"\\t" SHORT " 0\\n\"\n" );
             total_size += sizeof(short);
         }
     }
@@ -238,7 +241,11 @@
         {
             ORDDEF *odp = Ordinals[i];
             if (odp && odp->type == TYPE_FORWARD)
+#ifdef __SUNPRO_C
+                fprintf( outfile, "    \"\\t" STRING " \\\"%s\\\\0\\\"\\n\"\n", odp->link_name );
+#else
                 fprintf( outfile, "    \"\\t" STRING " \\\"%s\\\"\\n\"\n", odp->link_name );
+#endif
         }
         fprintf( outfile, "    \"\\t.align %d\\n\"\n", get_alignment(4) );
         total_size += (fwd_size + 3) & ~3;
@@ -286,7 +293,7 @@
             case TYPE_CDECL:
                 fprintf( outfile, "    \"\\tjmp " PREFIX "%s\\n\"\n", name );
                 fprintf( outfile, "    \"\\tret\\n\"\n" );
-                fprintf( outfile, "    \"\\t.short 0x%04x\\n\"\n", args );
+                fprintf( outfile, "    \"\\t" SHORT " 0x%04x\\n\"\n", args );
                 fprintf( outfile, "    \"\\t.long " PREFIX "%s,0x%08x\\n\"\n", name, mask );
                 break;
             default:
@@ -335,6 +342,8 @@
         }
     }
 
+    fprintf( outfile, "    \"\\t.text\\n\"\n" );
+    fprintf( outfile, "    \"\\t.align 4\\n\"\n" );
     fprintf( outfile, ");\n\n" );
 
     return total_size;
@@ -366,7 +375,7 @@
         fprintf( outfile, "extern void __stdcall RtlRaiseException( struct exc_record * );\n\n" );
         fprintf( outfile, "static void __wine_unimplemented( const char *func )\n{\n" );
         fprintf( outfile, "  struct exc_record rec;\n" );
-        fprintf( outfile, "  rec.code    = 0x%08x;\n", EXCEPTION_WINE_STUB );
+        fprintf( outfile, "  rec.code    = 0x%08x;\n", 0x80000100 );
         fprintf( outfile, "  rec.flags   = %d;\n", EH_NONCONTINUABLE );
         fprintf( outfile, "  rec.rec     = 0;\n" );
         fprintf( outfile, "  rec.params  = 2;\n" );
@@ -460,9 +469,18 @@
     /* Reserve some space for the PE header */
 
     fprintf( outfile, "extern char pe_header[];\n" );
-    fprintf( outfile, "asm(\".section .text\\n\\t\"\n" );
+
+    fprintf( outfile, "#ifndef __GNUC__\n" );
+    fprintf( outfile, "static void __asm__dummy_header(void) {\n" );
+    fprintf( outfile, "#endif /* !defined(__GNUC__) */\n" );
+
+    fprintf( outfile, "asm(\".section \\\".text\\\"\\n\\t\"\n" );
     fprintf( outfile, "    \".align %d\\n\"\n", get_alignment(page_size) );
-    fprintf( outfile, "    \"" PREFIX "pe_header:\\t.fill %ld,1,0\\n\\t\");\n", page_size );
+    fprintf( outfile, "    \"" PREFIX "pe_header:\\t.skip %ld\\n\\t\");\n", page_size );
+
+    fprintf( outfile, "#ifndef __GNUC__\n" );
+    fprintf( outfile, "}\n" );
+    fprintf( outfile, "#endif /* !defined(__GNUC__) */\n" );
 
     fprintf( outfile, "static const char dllname[] = \"%s\";\n\n", DLLName );
     fprintf( outfile, "extern int __wine_spec_exports[];\n\n" );
@@ -722,11 +740,11 @@
              make_c_identifier(DLLName) );
     fprintf( outfile, "    \"\\t.previous\\n\");\n" );
 #elif defined(__sparc__)
-    fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
+    fprintf( outfile, "asm(\"\\t.section\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" );
     fprintf( outfile, "    \"\\tcall " PREFIX "__wine_spec_%s_init\\n\"\n",
              make_c_identifier(DLLName) );
     fprintf( outfile, "    \"\\tnop\\n\"\n" );
-    fprintf( outfile, "    \"\\t.previous\\n\");\n" );
+    fprintf( outfile, "    \"\\t.text\\n\");\n" );
 #elif defined(__PPC__)
     fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
     fprintf( outfile, "    \"\\tbl " PREFIX "__wine_spec_%s_init\\n\"\n",
@@ -861,14 +879,13 @@
     fprintf( outfile, "    \"\\tcall " PREFIX "__wine_dbg_%s_fini\\n\"\n", prefix );
     fprintf( outfile, "    \"\\t.previous\\n\");\n" );
 #elif defined(__sparc__)
-    fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
+    fprintf( outfile, "asm(\"\\t.section\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" );
     fprintf( outfile, "    \"\\tcall " PREFIX "__wine_dbg_%s_init\\n\"\n", prefix );
-    fprintf( outfile, "    \"\\tnop\\n\"\n" );
-    fprintf( outfile, "    \"\\t.previous\\n\");\n" );
-    fprintf( outfile, "asm(\"\\t.section\t.fini ,\\\"ax\\\"\\n\"\n" );
+    fprintf( outfile, "    \"\\tnop\\n\");\n" );
+    fprintf( outfile, "asm(\"\\t.section\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" );
     fprintf( outfile, "    \"\\tcall " PREFIX "__wine_dbg_%s_fini\\n\"\n", prefix );
     fprintf( outfile, "    \"\\tnop\\n\"\n" );
-    fprintf( outfile, "    \"\\t.previous\\n\");\n" );
+    fprintf( outfile, "    \"\\t.section\t\\\".text\\\"\\n\");\n" );
 #elif defined(__PPC__)
     fprintf( outfile, "asm(\"\\t.section\t.init ,\\\"ax\\\"\\n\"\n" );
     fprintf( outfile, "    \"\\tbl " PREFIX "__wine_dbg_%s_init\\n\"\n", prefix );


More information about the wine-patches mailing list