| From | Sent On | Attachments |
|---|---|---|
| Martin Sebor | Aug 14, 2009 12:17 pm | |
| Stefan Teleman | Aug 14, 2009 12:27 pm | |
| Martin Sebor | Aug 14, 2009 1:24 pm | |
| Stefan Teleman | Aug 17, 2009 7:27 am | |
| Martin Sebor | Aug 17, 2009 4:16 pm |
| Subject: | Re: 4.2.2 release | |
|---|---|---|
| From: | Stefan Teleman (stef...@gmail.com) | |
| Date: | Aug 14, 2009 12:27:33 pm | |
| List: | org.apache.incubator.stdcxx-dev | |
On Fri, Aug 14, 2009 at 15:18, Martin Sebor<mse...@gmail.com> wrote:
I think we should think about cutting a 4.2.2 release sometime this month. It's been embarrassingly long since 4.2.1. Farid (or anyone else), do you have anything that you'd like included in it?
Martin
Hi.
Solaris 10 10/2008 SPARC has introduced a binary incompatible change in the POSIX and Solaris threads implementation:
http://docs.sun.com/app/docs/doc/820-5245/chapter2-1000?a=view
<QUOTE>
Objects of type mutex_t and pthread_mutex_t must start at 8-byte aligned addresses. Applications that do not satisfy this requirement fail. The following error message is displayed:
*** _THREAD_ERROR_DETECTION: lock usage error detected *** ... "mutex is misaligned" OR: "condvar is misaligned"
</QUOTE>
In reality, the run-time performance is much worse than the errata above claims: misaligned mutexes or conditional variables cause the program to spuriously SEGV in sometimes hard to reproduce ways [ Heisenbug ].
You can view full details of this bug/change here:
http://bugs.opensolaris.org/view_bug.do?bug_id=6729759
To make a long story short, Solaris Kernel Update 137111-01 introduced an ABI incompatible implementation restriction, requiring that mutexes and conditional variables must be 8-byte aligned. This restriction has never been documented, nor has it ever been enforced, until Solaris 10 10/2008 [ Solaris Kernel Update 137111-01 ].
The consequence of this KU is that, the multi-threaded 32-bit SPARC version of the Apache Standard C++ Library [ 4.2.1 ] will no longer work, and will fail at run-time with seemingly unexplainable crashes [ the exact same build will work on Solaris versions prior to Kernel Update 137111-01 ].
This problem is not specific to the Apache Standard C++ Library: it will occur with any 32-bit SPARCV8 binaries which do not align mutexes or conditional variables on an 8 byte boundary.
I have created a set of patches for the Apache Standard C++ Library, Version 4.2.1, for this problem:
http://s247136804.onlinehome.us/stdcxx-upstream/4.2.1/
You can download the tarball with all the patches from the same URL:
http://s247136804.onlinehome.us/stdcxx-upstream/4.2.1/stdcxx-upstream-patches.tar.bz2
These patches force an 8-byte alignment for all objects which contain a mutex or a conditional variable, and that only for SPARC. With these patches, all the tests perform as expected.
The patch 22.locale.numpunct.cpp.43.diff is not related to the SPARCV8 ABI change -- it is simply an avoidance of a SEGV in case the variable first_non_c == NULL [ Solaris sprintf(3C) SEGV's on NULL char* arguments ].
--Stefan
-- Stefan Teleman stef...@gmail.com





