Share

Tcl

Tracker: Bugs

9 fp rounding setup on opensolaris x86 - ID: 1839067
Last Update: Settings changed ( dgp )

Testing the 8.5.0 RC0 on opensolaris (SunOS 5.11 svn_55b x86) showed 126
test failures in expr 28.xxx, mostly off by ones when compiled with the
SunStudio 11 compiler.

kbk suggested to look at:
http://developers.sun.com/sunstudio/documentation/ss10_docs/mr/man3m/ieee_f
lags.3m.html

After manually patching tclStrToD in the appropriate places where the gcc
macros are usually used with:

#include <sunmath.h>

ieee_flags("set","precision","double",NULL);

ieee_flags("clear","precsion",NULL,NULL);

and adding -lsunmath in front of -lm in the link line the errors
disappear.


Michael Schlenker ( mic42 ) - 2007-11-26 23:44

9

Closed

Out of Date

Don Porter

48. Number Handling

obsolete: 8.5b3

Public


Comments ( 13 )

Date: 2009-10-22 17:34
Sender: dgpProject Admin


if there's something still to be done for the
8.5.8 and 8.6b2 releases, I've lost track of it.

If there is something, please open a new ticket
on it so we can dig it out of the clutter.


Date: 2009-05-05 16:26
Sender: dgpProject Admin


I claimed this one since we have a few old
Sun's and SGI's around for testing. However,
this item has moved on since it was reported,
and now deals with systems I do not have.

I still see the test failures on IRIX64 6.5 with
the MIPSpro 7.4.4m compiler, but that platform
combo is probably too old to be worth worrying
about.





Date: 2009-02-28 00:32
Sender: mic42

To get around the libsunmath dependecy mentioned by tclguy one can use the
libm based interface documented on x86 via the C99 fenv.h header and just
libm.
http://docs.sun.com/source/819-3693/ncg_lib.html

#include <fenv.h>

fesetprec(FE_DBLPREC); is like
ieee_flags("set","precision","double",NULL);

fesetprec(FE_LDBLPREC) is like the ieee_flags("clear"...) stuff.






Date: 2009-01-31 16:51
Sender: nobody

Suggest that gsyoungblood's patch incorrectly builds 64 bit objects on 32
bit boxes. (The patch against the original code is correct; the original
code was incorrect.)

The patch should be as follows. Note that at configure:8417,
configure:8651, tcl.m4:1916, tcl.m4:1978 we exclude i386 boxes; the
original patch included them. (We don't want -m64 in CFLAGS on a 32-bit
box.)

Regards,
Geoff.
first six letters on the top row (i.e. q...) of a US / UK keyboard at
acm.org.


diff -bur tcl8.5.6/unix/configure tcl8.5.6-patched/unix/configure
--- tcl8.5.6/unix/configure 2008-12-22 14:16:08.000000000 +0000
+++ tcl8.5.6-patched/unix/configure 2009-01-31 16:19:42.495469123 +0000
@@ -8417,7 +8417,7 @@


else
- if test "$arch" = "amd64 i386"; then
+ if test "$arch" = "amd64"; then

if test "$GCC" = yes; then

@@ -8468,7 +8468,7 @@
arch=`isainfo`
echo "$as_me:$LINENO: checking whether to use -lsunmath for fp rounding
control" >&5
echo $ECHO_N "checking whether to use -lsunmath for fp rounding
control... $ECHO_C" >&6
- if test "$arch" = "amd64 i386"; then
+ if test "$arch" = "amd64" -o "$arch" = "i386"; then

echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
@@ -8651,7 +8651,7 @@
#CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"

else
- if test "$arch" = "amd64 i386"; then
+ if test "$arch" = "amd64"; then

SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"

diff -bur tcl8.5.6/unix/tcl.m4 tcl8.5.6-patched/unix/tcl.m4
--- tcl8.5.6/unix/tcl.m4 2008-12-22 14:16:08.000000000 +0000
+++ tcl8.5.6-patched/unix/tcl.m4 2009-01-31 16:20:05.425468467 +0000
@@ -1916,7 +1916,7 @@
# Solaris 64 uses this as well
#LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
])
- ], [AS_IF([test "$arch" = "amd64 i386"], [
+ ], [AS_IF([test "$arch" = "amd64"], [
AS_IF([test "$GCC" = yes], [
case $system in
SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
@@ -1947,7 +1947,7 @@
AS_IF([test "$GCC" = yes],[use_sunmath=no],[
arch=`isainfo`
AC_MSG_CHECKING([whether to use -lsunmath for fp rounding control])
- AS_IF([test "$arch" = "amd64 i386"], [
+ AS_IF([test "$arch" = "amd64" -o "$arch" = "i386"], [
AC_MSG_RESULT([yes])
MATH_LIBS="-lsunmath $MATH_LIBS"
AC_CHECK_HEADER(sunmath.h)
@@ -1978,7 +1978,7 @@
# path, remove so name and append 'sparcv9'
#v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
#CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
- ], [AS_IF([test "$arch" = "amd64 i386"], [
+ ], [AS_IF([test "$arch" = "amd64"], [
SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
])])
])



Date: 2009-01-05 21:59
Sender: gsyoungbloodAccepting Donations

Ran into what I believe is a related problem when attempting to compile
using Sun Studio Express 2008-11 on Solaris 10u6 32-bit Intel.

Compiling would fail with undefined symbol ieee_flags in libtcl8.5.so.
Further digging revealed that the check whether or not to use -lsunmath for
fp rounding control was returning negative, causing -lsunmath not to be
added to MATH_LIBS. The problem appeared to be the use of a list (amd64
i386) when testing arch. Changing it to test each arch individually
appeared to resolve the problem. Assuming this is correct, there's a
similar test for sparc (sparcv9 sparc) that may need tweaking too.

The following patch allows it to compile:
diff -bur tcl8.5.6/unix/configure tcl8.5.6-solaris/unix/configure
--- tcl8.5.6/unix/configure Mon Dec 22 07:16:08 2008
+++ tcl8.5.6-solaris/unix/configure Mon Jan 5 14:36:32 2009
@@ -8417,7 +8417,7 @@


else
- if test "$arch" = "amd64 i386"; then
+ if test "$arch" = "amd64" -o "$arch" = "i386" ; then

if test "$GCC" = yes; then

@@ -8468,7 +8468,7 @@
arch=`isainfo`
echo "$as_me:$LINENO: checking whether to use -lsunmath
for fp rounding control" >&5
echo $ECHO_N "checking whether to use -lsunmath for fp rounding
control... $ECHO_C" >&6
- if test "$arch" = "amd64 i386"; then
+ if test "$arch" = "amd64" -o "$arch" = "i386" ; then

echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
@@ -8651,7 +8651,7 @@

#CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"

else
- if test "$arch" = "amd64 i386"; then
+ if test "$arch" = "amd64" -o "$arch" = "i386" ; then

SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"

diff -bur tcl8.5.6/unix/tcl.m4 tcl8.5.6-solaris/unix/tcl.m4
--- tcl8.5.6/unix/tcl.m4 Mon Dec 22 07:16:08 2008
+++ tcl8.5.6-solaris/unix/tcl.m4 Mon Jan 5 14:35:08 2009
@@ -1916,7 +1916,7 @@
# Solaris 64 uses this as well
#LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
])
- ], [AS_IF([test "$arch" = "amd64 i386"], [
+ ], [AS_IF([test "$arch" = "amd64" -o "$arch" = "i386"], [
AS_IF([test "$GCC" = yes], [
case $system in
SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*)
@@ -1947,7 +1947,7 @@
AS_IF([test "$GCC" = yes],[use_sunmath=no],[
arch=`isainfo`
AC_MSG_CHECKING([whether to use -lsunmath for fp rounding
control])
- AS_IF([test "$arch" = "amd64 i386"], [
+ AS_IF([test "$arch" = "amd64" -o "$arch" = "i386"], [
AC_MSG_RESULT([yes])
MATH_LIBS="-lsunmath $MATH_LIBS"
AC_CHECK_HEADER(sunmath.h)
@@ -1978,7 +1978,7 @@
# path, remove so name and append 'sparcv9'
#v9gcclibdir="`gcc -print-file-name=libgcc_s.so` |
..."

#CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
- ], [AS_IF([test "$arch" = "amd64 i386"], [
+ ], [AS_IF([test "$arch" = "amd64" -o "$arch" =
"i386"], [
SHLIB_LD="$SHLIB_LD -m64 -static-libgcc"
])])
])



Date: 2008-08-15 17:50
Sender: hobbsSourceForge.net SubscriberProject Admin


We have recently discovered another issue with the sunmath fix for
solaris-x86 - libsunmath only comes with Sun's Forte and isn't standard on
default solaris-x86 machines. We are currently having to work around this.


Date: 2008-08-15 14:17
Sender: dgpProject Admin



Had the chance to do some testing
on an IRIX64 6.5 system with the
MIPSpro 7.4.4m compiler, and it
exhibits similar troubles in the
form of 23 failing tests in binary.test
and expr.test, mostly differences
in the LSB in underflow scenarios.


Date: 2008-04-01 20:13
Sender: andreas_kupriesProject Admin


Patch applied to head and core-8-5-branch.


Date: 2008-04-01 19:47
Sender: mic42


Verified your updated patch with my x86 VM and the sun CC, works fine and
as expected.


Date: 2008-04-01 18:02
Sender: andreas_kupriesProject Admin


I have updated the attached patch to the Tcl 8.5 head, should work for Tcl
head (8.6) as well.
In tcl.m4 mostly location differences, and making one rejected chunk
viable to due to conflict with other changes made in the meantime.

In tclStrToD.c I had to add "&& !defined(__GNUC__)" to the ifdeffery of
three uses of ieee_flags. These missing exposed ieee_flags to a gcc build
on a solaris 2.10 amd64 box, causing link failure.

Michael, please check that the updated patch still works for you.



Date: 2008-04-01 17:59
Sender: andreas_kupriesProject Admin


File Added: sunmath-updated.diff


Date: 2008-03-30 05:02
Sender: kennykbProject Admin


I don't have a Solaris-x86 to test on, but the patch looks right.
Jeff, could I trouble you or Andreas to apply the patch,
make test, and commit if everything works? Thanks.


Date: 2008-03-19 00:01
Sender: mic42


The errors in expr dissapear when linking with sunmath (which requires -z
textoff to the linker, otherwise LD barfs) and applying a small fix to
tclStrToD.c.

The attached patch works on opensolaris. Would be good if someone with a
regular solaris setup on x86 and sparc could check if the patch doesn't
break something.
File Added: sunmath.diff


Attached Files ( 2 )

Filename Description Download
sunmath.diff patch to use sunmath lib on x86 Download
sunmath-updated.diff Updated to head, fixed ifdeffery Download

Changes ( 20 )

Field Old Value Date By
close_date - 2009-10-22 17:34 dgp
allow_comments 1 2009-10-22 17:34 dgp
assigned_to andreas_kupries 2009-10-22 17:34 dgp
resolution_id Fixed 2009-10-22 17:34 dgp
status_id Open 2009-10-22 17:34 dgp
assigned_to dgp 2009-05-05 16:26 dgp
assigned_to kennykb 2009-05-02 05:06 dgp
status_id Closed 2008-08-15 14:17 dgp
close_date 2008-04-01 20:13 2008-08-15 14:17 dgp
assigned_to andreas_kupries 2008-08-15 14:17 dgp
category_id 16. Commands A-H 2008-08-15 14:17 dgp
status_id Open 2008-04-01 20:13 andreas_kupries
close_date - 2008-04-01 20:13 andreas_kupries
resolution_id None 2008-04-01 20:13 andreas_kupries
assigned_to hobbs 2008-04-01 18:02 andreas_kupries
priority 5 2008-04-01 18:02 andreas_kupries
File Added 272776: sunmath-updated.diff 2008-04-01 17:59 andreas_kupries
assigned_to kennykb 2008-03-30 05:02 kennykb
File Added 270966: sunmath.diff 2008-03-19 00:01 mic42
assigned_to dkf 2007-11-26 23:45 mic42