Troy Rollo wrote:

winegcc from the current WineHQ produces assembly output for SPARC systems that cannot be processed by the assembler.
I've attached the patches we're using for winebuild on SPARC. This fixes both of the problems you're encountering. I'm not sure if the fix is the right one, but it works quite nicely :-) We use gcc/gas.

Eric
Index: import.c
===================================================================
--- import.c    (.../vendor/wine/current/tools/winebuild)       (revision 31841)
+++ import.c    (.../trunk/wine/tools/winebuild)        (revision 31841)
@@ -314,7 +314,7 @@
         if (odp->flags & FLAG_PRIVATE) continue;
         imp->exports[imp->nb_exports++] = odp;
     }
-    imp->exports = xrealloc( imp->exports, imp->nb_exports * 
sizeof(*imp->exports) );
+    imp->exports = xrealloc( imp->exports, imp->nb_exports ? (imp->nb_exports 
* sizeof(*imp->exports)) : 1);
     if (imp->nb_exports)
         qsort( imp->exports, imp->nb_exports, sizeof(*imp->exports), func_cmp 
);
     return 1;
@@ -835,7 +835,10 @@
     if (!nb_imm) return;
 
     fprintf( outfile, "\n/* immediate import thunks */\n\n" );
-    fprintf( outfile, "\t.text\n" );
+    if (target_cpu == CPU_SPARC)
+        fprintf( outfile, "\t.data\n" );
+    else
+        fprintf( outfile, "\t.text\n" );
     fprintf( outfile, "\t.align %d\n", get_alignment(8) );
     fprintf( outfile, "%s:\n", asm_name(import_thunks));
 
@@ -959,7 +962,10 @@
     if (!nb_delayed) return;
 
     fprintf( outfile, "\n/* delayed import thunks */\n\n" );
-    fprintf( outfile, "\t.text\n" );
+    if (target_cpu == CPU_SPARC)
+        fprintf( outfile, "\t.data\n" );
+    else
+        fprintf( outfile, "\t.text\n" );
     fprintf( outfile, "\t.align %d\n", get_alignment(8) );
     fprintf( outfile, "%s:\n", asm_name(delayed_import_loaders));
     fprintf( outfile, "\t%s\n", func_declaration("__wine_delay_load_asm") );
@@ -1147,7 +1153,10 @@
     for (i = 0; i < ext_link_imports.count; i++)
         fprintf( outfile, "\t%s %s\n", get_asm_ptr_keyword(), 
asm_name(ext_link_imports.names[i]) );
 
-    fprintf( outfile, "\n\t.text\n" );
+    if (target_cpu == CPU_SPARC)
+        fprintf( outfile, "\t.data\n" );
+    else
+        fprintf( outfile, "\t.text\n" );
     fprintf( outfile, "\t.align %d\n", get_alignment(get_ptr_size()) );
     fprintf( outfile, "%s:\n", asm_name("__wine_spec_external_link_thunks") );
 
@@ -1239,6 +1248,15 @@
     output_delayed_imports( outfile, spec );
     output_immediate_import_thunks( outfile );
     output_delayed_import_thunks( outfile, spec );
+
+    if (target_cpu == CPU_SPARC)
+        {
+        /* DJANKOV Q&D */
+        fprintf( outfile, "\n\t.data\n" );
+        fprintf( outfile, "\t.align %d\n", get_alignment(4) );
+        fprintf( outfile, "%s:\n", asm_name("_end") );
+        fprintf( outfile, "\t.long 0\n" );
+        }
     output_external_link_imports( outfile, spec );
     if (nb_imports || ext_link_imports.count || has_stubs(spec)) 
output_get_pc_thunk( outfile );
 }


Reply via email to