Hi,

I've just been through the rfe list on the wiki and as far as I can tell 
the upcoming Sun Studio 12 Update 1 release (or the current Sun Studio 
Express releases) will address all the issues with the exception of 
recognising the -Wall gcc compiler flag.

Alan, are you still having issues with the MMX/SSE intrinsics. If so, 
perhaps you can provide me with more details so that we can better 
evaluate the problem.

Regards,

Darryl.


On 01/23/09 07:55 AM, Alan Coopersmith wrote:
> Halton Huo wrote:
>> Hi All,
>>
>> I write a report on issues when porting OpenSource projects to
>> Solaris/OpenSolaris.
>>
>> The report link is:
>> http://wikis.sun.com/display/SolarisDeveloper/Issues+when+porting+OpenSource+projects+to+Solaris
> 
> Thanks for collecting and sharing this information.
> 
> Some additional notes from our work on X.Org code:
> 
> - No support for GCC options: -Wall/-Werror/-Wl
> 
>   - Your sample patch just removes -Wall - the code integrated into X.Org
>     upstream checks for the compiler in a configure macro to set either -v
>     for Sun Studio or the -W flags for gcc:
>    http://cgit.freedesktop.org/xorg/util/macros/tree/xorg-macros.m4.in#n436
> 
> - MMX/SSE intrinsic functions are not compatible
> 
>   - We hit this issue in X a while ago, and filed CR 6224421 with the 
> compilers
>     for it, which though closed as duplicate of another bug, they never fully
>     addressed, and chose to remain at least partially incompatible with gcc in
>     the type definitions in a way that breaks the Xorg MMX code.
> 
>     Our solution was to build the code that used it (the Xorg server) with gcc
>     on x86, since the performance increase of being able to use the MMX code
>     was significant.   (This code has since moved to libpixman, so we may be
>     able to move Xorg server back to Sun Studio builds soon.)
> 
> - No definition for _FUNCTION_
> 
>   - You give workarounds that use glib's G_STRFUNC or use Sun Studio express.
>     Our solution for non-glib code for Studio 12 is simply to use the C99
>     equivalent version that Studio 12 already supports - for instance, in 
> Mesa:
>     http://cgit.freedesktop.org/mesa/mesa/tree/src/mesa/main/glheader.h#n288
> 
> Like you, we've had to upstream multiple fixes already for some of these:
> - No definition for u_int8_t/u_int16_t/u_int32_t/u_int64_t causes build 
> failure
> - libc printf(%s, NULL) segfaults
> - Missing strcasestr() causes build failure
> 
> Other things we've had to fix that I didn't see in your list:
> - No support in Sun compilers for gcc's __builtin_expect
>   (Seems to be covered by compiler CR's 6603861 (C) & 6603858 (C++) )
> 
>   Solution for now:
> #if (!defined(__GNUC__) || __GNUC__ < 3) && (!defined(__IBMC__) || __IBMC__ < 
> 900)
> #  define __builtin_expect(x, y) x
> #endif
> 
> - Needing to add -R flags to pkgconfig *.pc files & Makefiles for finding
>   runtime libraries that aren't in /usr/lib
> 
> - Adding checks for Sun Studio's __i386__, __amd64__, & __sparc__ defines
>   everywhere the code checks for gcc's __i386, __amd64, & __sparc defines
> 
> - No support for gcc's __volatile keyword.
>   Solution:
> +#ifdef __SUNPRO_C
> +# if !defined(__volatile)
> +#  define __volatile volatile
> +# endif
> +#endif
> 
> - Functions to get the name of the running program (used by some libraries
>   in error messages).
> 
>   Solution: On Solaris, use basename(getexecname()) where BSD uses
>   getprogname() & Linux uses program_invocation_short_name, as shown in:
> http://cgit.freedesktop.org/mesa/mesa/tree/src/mesa/drivers/dri/common/xmlconfig.c#n51
> 
> - Different headers/names for byteswapping macros.
> 
>   Solution: Can either use platform-independent generic versions, such as:
>     http://cgit.freedesktop.org/xorg/xserver/tree/glx/glxbyteorder.h
>   or use Solaris <sys/byteorder.h> versions, as in:
> http://cgit.freedesktop.org/xorg/lib/libpciaccess/tree/src/common_interface.c#n39
> 
>   I believe the <sys/byteorder.h> versions are somewhat optimized, due to
>   CR 6729208: Optimize BSWAP_* and BE_* macros in sys/byteorder.h to use 
> inline
> amd64 assembly
> 
> 
> 

-- 
Darryl Gove
Compiler Performance Engineering
Blog : http://blogs.sun.com/d/
Books: http://www.sun.com/books/catalog/solaris_app_programming.xml
        http://my.safaribooksonline.com/0595352510

Reply via email to