Index: rtl/unix/cwstring.pp
===================================================================
--- rtl/unix/cwstring.pp	(revision 4321)
+++ rtl/unix/cwstring.pp	(revision 4342)
@@ -75,8 +75,12 @@
 {$ifdef FreeBSD} // actually FreeBSD5. internationalisation is afaik not default on 4.
   CODESET = 0;
 {$else freebsd}
+{$ifdef solaris}
+  CODESET=49;
+{$else}
 {$error lookup the value of CODESET in /usr/include/langinfo.h for your OS }
 // and while doing it, check if iconv is in libc, and if the symbols are prefixed with iconv_ or libiconv_
+{$endif solaris}
 {$endif FreeBSD}
 {$endif darwin}
 {$endif linux}
Index: rtl/linux/sparc/sysnr.inc
===================================================================
--- rtl/linux/sparc/sysnr.inc	(revision 4321)
+++ rtl/linux/sparc/sysnr.inc	(revision 4342)
@@ -207,14 +207,14 @@
       syscall_nr_setpgid          = 185 ; // Common
 //       syscall_nr_pathconf      = 186    SunOS Specific
       syscall_nr_tkill            = 187 ; // SunOS: fpathconf
-//       syscall_nr_sysconf       = 188    SunOS Specific
+      syscall_nr_exit_group       = 188 ; // SunOS sysconf
       syscall_nr_uname            = 189 ; // Linux Specific
       syscall_nr_init_module      = 190 ; // Linux Specific
       syscall_nr_personality      = 191 ; // Linux Specific
 //       syscall_nr_prof          = 192    Linux Specific
-//       syscall_nr_break         = 193    Linux Specific
-//       syscall_nr_lock          = 194    Linux Specific
-//       syscall_nr_mpx           = 195    Linux Specific
+      syscall_nr_epoll_create     = 193 ; // Linux Specific - was break
+      syscall_nr_epoll_ctl        = 194 ; // Linux Specific - was lock
+      syscall_nr_epoll_wait       = 195 ; // Linux Specific - was mpx
 //       syscall_nr_ulimit        = 196    Linux Specific
       syscall_nr_getppid          = 197 ; // Linux Specific
       syscall_nr_sigaction        = 198 ; // Linux Specific
Index: compiler/sparc/cgcpu.pas
===================================================================
--- compiler/sparc/cgcpu.pas	(revision 4321)
+++ compiler/sparc/cgcpu.pas	(revision 4342)
@@ -285,6 +285,9 @@
              RS_F16,RS_F17,RS_F18,RS_F19,RS_F20,RS_F21,RS_F22,RS_F23,
              RS_F24,RS_F25,RS_F26,RS_F27,RS_F28,RS_F29,RS_F30,RS_F31],
             first_fpu_imreg,[]);
+        { needs at least one element for rgobj not to crash }
+        rg[R_MMREGISTER]:=trgcpu.create(R_MMREGISTER,R_SUBNONE,
+            [RS_L0],first_mm_imreg,[]);
       end;
 
 
Index: compiler/sparc/cpubase.pas
===================================================================
--- compiler/sparc/cpubase.pas	(revision 4321)
+++ compiler/sparc/cpubase.pas	(revision 4342)
@@ -73,7 +73,7 @@
 
       { MM Super register first and last }
       first_mm_supreg    = 0;
-      first_mm_imreg     = 0;
+      first_mm_imreg     = 1;
 
 {$warning TODO Calculate bsstart}
       regnumber_count_bsstart = 128;
Index: compiler/cgobj.pas
===================================================================
--- compiler/cgobj.pas	(revision 4321)
+++ compiler/cgobj.pas	(revision 4342)
@@ -1464,6 +1464,8 @@
             alloccpuregisters(list,R_MMREGISTER,paramanager.get_volatile_registers_int(pocall_default));
             a_call_name(list,incrfunc);
             dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
+            dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
+            dealloccpuregisters(list,R_MMREGISTER,paramanager.get_volatile_registers_int(pocall_default));
           end
          else
           begin
Index: compiler/rgobj.pas
===================================================================
--- compiler/rgobj.pas	(revision 4321)
+++ compiler/rgobj.pas	(revision 4342)
@@ -363,7 +363,7 @@
          i : Tsuperregister;
        begin
          { empty super register sets can cause very strange problems }
-         if high(Ausable)=0 then
+         if high(Ausable)=-1 then
            internalerror(200210181);
          extend_live_range_backwards := false;
          first_imaginary:=Afirst_imaginary;
