Uploaded image for project: 'C++ Standard Library'
  1. C++ Standard Library
  2. STDCXX-1040

Solaris 10 Kernel Update 137111-01 patches



    • Improvement
    • Status: Closed
    • Critical
    • Resolution: Duplicate
    • 4.2.0, 4.2.1
    • 4.2.2
    • Build and Installation
    • None
    • Solaris 10 10/2008 SPARC, Kernel Update 137111-01

    • Patch Available
    • Binary Incompatibility


      Quoting from this post :

      Solaris 10 10/2008 SPARC has introduced a binary incompatible change
      in the POSIX and Solaris threads implementation:


      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"
      "condvar is misaligned"

      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:


      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:


      You can download the tarball with all the patches from the same URL:


      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 ].


        Issue Links



              sebor Martin Sebor
              sebor Martin Sebor
              0 Vote for this issue
              1 Start watching this issue