runtime, testing/internal/testdeps: fixes for cgo
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 20 Jan 2017 21:18:37 +0000 (21:18 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 20 Jan 2017 21:18:37 +0000 (21:18 +0000)
    Some fixes that permit misc/cgo/test in the master gc repository to
    pass using the current gccgo.

    Install testing/internal/testdeps.gox; it is needed by `go test`.

    Export runtime.lockedOSThread to enable calling via go:linkname; it is
    used by misc/cgo/test.

    Loop on EAGAIN when creating a new thread; this is what the gc code
    does, and misc/cgo/test tests that it works.

    Reviewed-on: https://go-review.googlesource.com/35479

From-SVN: r244733

gcc/go/gofrontend/MERGE
libgo/Makefile.am
libgo/Makefile.in
libgo/go/runtime/proc.go
libgo/runtime/proc.c

index df9be07d95e93aea7e6740c179e3ee9e293abcd6..b4e7b71517553a41c7457fb2d7d2f59bdcb4c064 100644 (file)
@@ -1,4 +1,4 @@
-907f6e31975443993c47fa45e09cf85d0709b7e6
+b573d4756096523d8bd4bf7b11e56383e5a2cca4
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 14ee9bec2113b9a85b2da90235e258967bc54ef5..515b61b71e4d15f4a18f06d6614b8cfc418f527f 100644 (file)
@@ -360,6 +360,11 @@ toolexeclibgotesting_DATA = \
        testing/iotest.gox \
        testing/quick.gox
 
+toolexeclibgotestinginternaldir = $(toolexeclibgotestingdir)/internal
+
+toolexeclibgotestinginternal_DATA = \
+       testing/internal/testdeps.gox
+
 toolexeclibgotextdir = $(toolexeclibgodir)/text
 
 toolexeclibgotext_DATA = \
index e3e396caaebba6da1b1196935d890a2091db6c5b..d6e3eace40cee4f8635613176d47019b6eba7fd8 100644 (file)
@@ -146,6 +146,7 @@ am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \
        "$(DESTDIR)$(toolexeclibgoruntimedir)" \
        "$(DESTDIR)$(toolexeclibgosyncdir)" \
        "$(DESTDIR)$(toolexeclibgotestingdir)" \
+       "$(DESTDIR)$(toolexeclibgotestinginternaldir)" \
        "$(DESTDIR)$(toolexeclibgotextdir)" \
        "$(DESTDIR)$(toolexeclibgotexttemplatedir)" \
        "$(DESTDIR)$(toolexeclibgounicodedir)"
@@ -265,7 +266,8 @@ DATA = $(noinst_DATA) $(toolexeclibgo_DATA) \
        $(toolexeclibgonetrpc_DATA) $(toolexeclibgoos_DATA) \
        $(toolexeclibgopath_DATA) $(toolexeclibgoregexp_DATA) \
        $(toolexeclibgoruntime_DATA) $(toolexeclibgosync_DATA) \
-       $(toolexeclibgotesting_DATA) $(toolexeclibgotext_DATA) \
+       $(toolexeclibgotesting_DATA) \
+       $(toolexeclibgotestinginternal_DATA) $(toolexeclibgotext_DATA) \
        $(toolexeclibgotexttemplate_DATA) $(toolexeclibgounicode_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
@@ -740,6 +742,10 @@ toolexeclibgotesting_DATA = \
        testing/iotest.gox \
        testing/quick.gox
 
+toolexeclibgotestinginternaldir = $(toolexeclibgotestingdir)/internal
+toolexeclibgotestinginternal_DATA = \
+       testing/internal/testdeps.gox
+
 toolexeclibgotextdir = $(toolexeclibgodir)/text
 toolexeclibgotext_DATA = \
        text/scanner.gox \
@@ -2645,6 +2651,27 @@ uninstall-toolexeclibgotestingDATA:
        @list='$(toolexeclibgotesting_DATA)'; test -n "$(toolexeclibgotestingdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
        dir='$(DESTDIR)$(toolexeclibgotestingdir)'; $(am__uninstall_files_from_dir)
+install-toolexeclibgotestinginternalDATA: $(toolexeclibgotestinginternal_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(toolexeclibgotestinginternal_DATA)'; test -n "$(toolexeclibgotestinginternaldir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(toolexeclibgotestinginternaldir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(toolexeclibgotestinginternaldir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(toolexeclibgotestinginternaldir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(toolexeclibgotestinginternaldir)" || exit $$?; \
+       done
+
+uninstall-toolexeclibgotestinginternalDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(toolexeclibgotestinginternal_DATA)'; test -n "$(toolexeclibgotestinginternaldir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(toolexeclibgotestinginternaldir)'; $(am__uninstall_files_from_dir)
 install-toolexeclibgotextDATA: $(toolexeclibgotext_DATA)
        @$(NORMAL_INSTALL)
        @list='$(toolexeclibgotext_DATA)'; test -n "$(toolexeclibgotextdir)" || list=; \
@@ -2849,7 +2876,7 @@ all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) all-multi $(DATA) \
                config.h
 installdirs: installdirs-recursive
 installdirs-am:
-       for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(toolexeclibgodir)" "$(DESTDIR)$(toolexeclibgoarchivedir)" "$(DESTDIR)$(toolexeclibgocompressdir)" "$(DESTDIR)$(toolexeclibgocontainerdir)" "$(DESTDIR)$(toolexeclibgocryptodir)" "$(DESTDIR)$(toolexeclibgocryptox509dir)" "$(DESTDIR)$(toolexeclibgodatabasedir)" "$(DESTDIR)$(toolexeclibgodatabasesqldir)" "$(DESTDIR)$(toolexeclibgodebugdir)" "$(DESTDIR)$(toolexeclibgoencodingdir)" "$(DESTDIR)$(toolexeclibgoexpdir)" "$(DESTDIR)$(toolexeclibgogodir)" "$(DESTDIR)$(toolexeclibgohashdir)" "$(DESTDIR)$(toolexeclibgohtmldir)" "$(DESTDIR)$(toolexeclibgoimagedir)" "$(DESTDIR)$(toolexeclibgoimagecolordir)" "$(DESTDIR)$(toolexeclibgoindexdir)" "$(DESTDIR)$(toolexeclibgoiodir)" "$(DESTDIR)$(toolexeclibgologdir)" "$(DESTDIR)$(toolexeclibgomathdir)" "$(DESTDIR)$(toolexeclibgomimedir)" "$(DESTDIR)$(toolexeclibgonetdir)" "$(DESTDIR)$(toolexeclibgonethttpdir)" "$(DESTDIR)$(toolexeclibgonetrpcdir)" "$(DESTDIR)$(toolexeclibgoosdir)" "$(DESTDIR)$(toolexeclibgopathdir)" "$(DESTDIR)$(toolexeclibgoregexpdir)" "$(DESTDIR)$(toolexeclibgoruntimedir)" "$(DESTDIR)$(toolexeclibgosyncdir)" "$(DESTDIR)$(toolexeclibgotestingdir)" "$(DESTDIR)$(toolexeclibgotextdir)" "$(DESTDIR)$(toolexeclibgotexttemplatedir)" "$(DESTDIR)$(toolexeclibgounicodedir)"; do \
+       for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(toolexeclibgodir)" "$(DESTDIR)$(toolexeclibgoarchivedir)" "$(DESTDIR)$(toolexeclibgocompressdir)" "$(DESTDIR)$(toolexeclibgocontainerdir)" "$(DESTDIR)$(toolexeclibgocryptodir)" "$(DESTDIR)$(toolexeclibgocryptox509dir)" "$(DESTDIR)$(toolexeclibgodatabasedir)" "$(DESTDIR)$(toolexeclibgodatabasesqldir)" "$(DESTDIR)$(toolexeclibgodebugdir)" "$(DESTDIR)$(toolexeclibgoencodingdir)" "$(DESTDIR)$(toolexeclibgoexpdir)" "$(DESTDIR)$(toolexeclibgogodir)" "$(DESTDIR)$(toolexeclibgohashdir)" "$(DESTDIR)$(toolexeclibgohtmldir)" "$(DESTDIR)$(toolexeclibgoimagedir)" "$(DESTDIR)$(toolexeclibgoimagecolordir)" "$(DESTDIR)$(toolexeclibgoindexdir)" "$(DESTDIR)$(toolexeclibgoiodir)" "$(DESTDIR)$(toolexeclibgologdir)" "$(DESTDIR)$(toolexeclibgomathdir)" "$(DESTDIR)$(toolexeclibgomimedir)" "$(DESTDIR)$(toolexeclibgonetdir)" "$(DESTDIR)$(toolexeclibgonethttpdir)" "$(DESTDIR)$(toolexeclibgonetrpcdir)" "$(DESTDIR)$(toolexeclibgoosdir)" "$(DESTDIR)$(toolexeclibgopathdir)" "$(DESTDIR)$(toolexeclibgoregexpdir)" "$(DESTDIR)$(toolexeclibgoruntimedir)" "$(DESTDIR)$(toolexeclibgosyncdir)" "$(DESTDIR)$(toolexeclibgotestingdir)" "$(DESTDIR)$(toolexeclibgotestinginternaldir)" "$(DESTDIR)$(toolexeclibgotextdir)" "$(DESTDIR)$(toolexeclibgotexttemplatedir)" "$(DESTDIR)$(toolexeclibgounicodedir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
 install: install-recursive
@@ -2935,7 +2962,9 @@ install-exec-am: install-multi install-toolexeclibLIBRARIES \
        install-toolexeclibgonetrpcDATA install-toolexeclibgoosDATA \
        install-toolexeclibgopathDATA install-toolexeclibgoregexpDATA \
        install-toolexeclibgoruntimeDATA install-toolexeclibgosyncDATA \
-       install-toolexeclibgotestingDATA install-toolexeclibgotextDATA \
+       install-toolexeclibgotestingDATA \
+       install-toolexeclibgotestinginternalDATA \
+       install-toolexeclibgotextDATA \
        install-toolexeclibgotexttemplateDATA \
        install-toolexeclibgounicodeDATA
 
@@ -3005,6 +3034,7 @@ uninstall-am: uninstall-toolexeclibLIBRARIES \
        uninstall-toolexeclibgoruntimeDATA \
        uninstall-toolexeclibgosyncDATA \
        uninstall-toolexeclibgotestingDATA \
+       uninstall-toolexeclibgotestinginternalDATA \
        uninstall-toolexeclibgotextDATA \
        uninstall-toolexeclibgotexttemplateDATA \
        uninstall-toolexeclibgounicodeDATA
@@ -3046,7 +3076,9 @@ uninstall-am: uninstall-toolexeclibLIBRARIES \
        install-toolexeclibgonetrpcDATA install-toolexeclibgoosDATA \
        install-toolexeclibgopathDATA install-toolexeclibgoregexpDATA \
        install-toolexeclibgoruntimeDATA install-toolexeclibgosyncDATA \
-       install-toolexeclibgotestingDATA install-toolexeclibgotextDATA \
+       install-toolexeclibgotestingDATA \
+       install-toolexeclibgotestinginternalDATA \
+       install-toolexeclibgotextDATA \
        install-toolexeclibgotexttemplateDATA \
        install-toolexeclibgounicodeDATA installcheck installcheck-am \
        installdirs installdirs-am maintainer-clean \
@@ -3080,6 +3112,7 @@ uninstall-am: uninstall-toolexeclibLIBRARIES \
        uninstall-toolexeclibgoruntimeDATA \
        uninstall-toolexeclibgosyncDATA \
        uninstall-toolexeclibgotestingDATA \
+       uninstall-toolexeclibgotestinginternalDATA \
        uninstall-toolexeclibgotextDATA \
        uninstall-toolexeclibgotexttemplateDATA \
        uninstall-toolexeclibgounicodeDATA
index 958b56e0ecd4c244584326b579db4fd91bf58fe1..ea7f84e9b7088a2d9c99a54c910b8aea9bead4e6 100644 (file)
@@ -43,6 +43,9 @@ import (
 //go:linkname runqempty runtime.runqempty
 //go:linkname runqput runtime.runqput
 
+// Function called by misc/cgo/test.
+//go:linkname lockedOSThread runtime.lockedOSThread
+
 // Functions temporarily in C that have not yet been ported.
 func allocm(*p, bool, *unsafe.Pointer, *uintptr) *m
 func malg(bool, bool, *unsafe.Pointer, *uintptr) *g
index 0ed7ebe0860a294f40646c22143580936858d1e0..60d5bdbc6124abe342b73d6224d11b8923ee6669 100644 (file)
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+#include <errno.h>
 #include <limits.h>
 #include <signal.h>
 #include <stdlib.h>
@@ -216,6 +217,7 @@ runtime_newosproc(M *mp)
        pthread_attr_t attr;
        sigset_t clear, old;
        pthread_t tid;
+       int tries;
        int ret;
 
        if(pthread_attr_init(&attr) != 0)
@@ -234,11 +236,21 @@ runtime_newosproc(M *mp)
 
        sigemptyset(&old);
        pthread_sigmask(SIG_BLOCK, &clear, &old);
-       ret = pthread_create(&tid, &attr, runtime_mstart, mp);
+
+       for (tries = 0; tries < 20; tries++) {
+               ret = pthread_create(&tid, &attr, runtime_mstart, mp);
+               if (ret != EAGAIN) {
+                       break;
+               }
+               runtime_usleep((tries + 1) * 1000); // Milliseconds.
+       }
+
        pthread_sigmask(SIG_SETMASK, &old, nil);
 
-       if (ret != 0)
+       if (ret != 0) {
+               runtime_printf("pthread_create failed: %d\n", ret);
                runtime_throw("pthread_create");
+       }
 }
 
 // First function run by a new goroutine.  This replaces gogocall.