Bug #16282 Parallel 'make -j' builds fail
Submitted: 8 Jan 2006 7:42 Modified: 4 Oct 2006 4:50
Reporter: Kristian Nielsen
Status: Closed
Category:Server: Compiling Severity:S3 (Non-critical)
Version:4.1, 5.0, 5.1 OS:Sun Solaris (Solaris 10 sparc)
Assigned to: Bugs System Target Version:

[8 Jan 2006 7:42] Kristian Nielsen
Description:
On Solaris 10 SPARC, with the Sun compiler, parallel builds (make -j4) often fail with the
error:

    cg error (as) : write error on output file "gcc.o" : No such file or directory

The reason is this line in ndb/config/common.mk.am, which puts a .cpp file on the linker
command line:

    LDADD = $(top_srcdir)/storage/ndb/src/common/portlib/gcc.cpp $(LDADD_LOC)

So if two linker commands run in parallel, they both try to write the file gcc.o
simultaneously, causing a conflict. Apparently the GNU linker tolerates this, while the
Sun linker gets the above error.

The problem is a bit silly since the file gcc.cpp no longer serves any purpose, it has no
meaningfull content:

    #if 0
    extern "C" { int __cxa_pure_virtual() { return 0;} }
    #endif

This happened in this changeset:

ChangeSet
  1.1773.251.1 05/05/04 13:29:15 joreland@mysql.com +2 -0
  bug#10330 - linking with ndb fails
    changes to handling of new/delete cxa_pure_virtual has changed in mysys
    remove "ndb"'s own impl. as they are no longer needed as we link mysys at all places

  ndb/src/common/util/new.cpp
    1.6.1.1 05/05/04 13:29:12 joreland@mysql.com +1 -1
    remove "ndb" new/delete

  ndb/src/common/portlib/gcc.cpp
    1.2.1.1 05/05/04 13:29:12 joreland@mysql.com +1 -1
    remove ndb __cxa_pure_virtual

How to repeat:
make -j4 on Solaris 10 SPARC, using the Sun compiler

Suggested fix:
I suggest simply removing the file gcc.cpp. I will commit this change for review.
[8 Jan 2006 7:46] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/748
[11 Jan 2006 14:11] Kristian Nielsen
Fix pushed for 5.0.16 and 5.1.6-alpha.

For documentation: This fixes a problem seen on Solaris (with the Solaris compiler), where
parallel make (make -j4) would fail.
[13 Jan 2006 1:37] Mike Hillyer
Added to 5.0.19 and 5.1.6 changelogs:

      <listitem>
        <para>
          Parallel builds occasionally failed on Solaris. (Bug #16282)
        </para>
      </listitem>
[11 Sep 2006 16:52] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/11695

ChangeSet@1.2535, 2006-09-11 16:49:44+02:00, knielsen@ymer.(none) +4 -0
  BUG#16282
  
  Build gcc.o as a small library, instead of passing .cpp sources to the
  linker command (causes problems with parallel make on Solaris).
  
  This fix is for 4.1. In 5.0 and up a different fix is used.
[12 Sep 2006 9:49] Kristian Nielsen
This bug also affects 4.1, but a different fix is needed than in 5.0 and 5.1.

I have committed a new 4.1 patch for review.
[21 Sep 2006 21:48] Kristian Nielsen
Pushed to mysql-4.1-maint.
Null-merged to mysql-5.0-maint.
[3 Oct 2006 22:03] Chad MILLER
Available in 5.0.26.
[3 Oct 2006 22:10] Chad MILLER
Available in 5.1.12-beta.
[3 Oct 2006 23:37] Kristian Nielsen
For documentation: just to clarify, this bug was already fixed in 5.0 and 5.1 some time
ago. There is a different fix for 4.1, this fix was null-merged to 5.0 and 5.1, but the
new changelog entry should only be for 4.1 I believe.
[4 Oct 2006 4:50] Paul DuBois
Noted in 4.1.22 changelog.

Parallel builds occasionally failed on Solaris.
[4 Oct 2006 15:57] Chad MILLER
Available in 4.1.22.