runtime: replace runtime1.goc with Go and C code
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 16 Nov 2016 18:33:11 +0000 (18:33 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 16 Nov 2016 18:33:11 +0000 (18:33 +0000)
    A step toward eliminating goc2c.

    Drop the exported parfor code; it was needed for tests in the past, but
    no longer is. The Go 1.7 runtime no longer uses parfor.

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

From-SVN: r242509

gcc/go/gofrontend/MERGE
libgo/Makefile.am
libgo/Makefile.in
libgo/go/runtime/debug.go
libgo/go/runtime/error.go
libgo/go/runtime/export_test.go
libgo/go/runtime/extern.go
libgo/go/runtime/stubs.go
libgo/runtime/proc.c
libgo/runtime/runtime.h
libgo/runtime/runtime1.goc [deleted file]

index 56ba8a56a0f06a167b4d2f83a6dd2576cd36bc16..20e085974c877d9e3b4ec448be3fda3d633a4a8d 100644 (file)
@@ -1,4 +1,4 @@
-31ff8c31d33c3e77cae4fd55445f12825eb92af5
+d9189ebc139ff739af956094626ccc5eb92c3091
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index b29f6c4ff5793d863d726bcb387b33e29e520e90..534a7b225c469600a07ca6d904993e437edfc9dc 100644 (file)
@@ -485,7 +485,6 @@ runtime_files = \
        runtime/yield.c \
        $(rtems_task_variable_add_file) \
        malloc.c \
-       runtime1.c \
        $(runtime_getncpu_file)
 
 goc2c.$(OBJEXT): runtime/goc2c.c
@@ -498,10 +497,6 @@ malloc.c: $(srcdir)/runtime/malloc.goc goc2c
        ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
-runtime1.c: $(srcdir)/runtime/runtime1.goc goc2c
-       ./goc2c $< > $@.tmp
-       mv -f $@.tmp $@
-
 %.c: $(srcdir)/runtime/%.goc goc2c
        ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
index 44a6999c2064eca2d5bfc0c8f3600f0dc13cedcf..9edcf37011b57f8c91c4b3c650e68f1873b196c8 100644 (file)
@@ -204,7 +204,7 @@ am__objects_5 = go-assert.lo go-breakpoint.lo go-caller.lo \
        mcentral.lo $(am__objects_1) mfixalloc.lo mgc0.lo mheap.lo \
        msize.lo panic.lo parfor.lo print.lo proc.lo runtime_c.lo \
        thread.lo $(am__objects_2) yield.lo $(am__objects_3) malloc.lo \
-       runtime1.lo $(am__objects_4)
+       $(am__objects_4)
 am_libgo_llgo_la_OBJECTS = $(am__objects_5)
 libgo_llgo_la_OBJECTS = $(am_libgo_llgo_la_OBJECTS)
 libgo_llgo_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -832,7 +832,6 @@ runtime_files = \
        runtime/yield.c \
        $(rtems_task_variable_add_file) \
        malloc.c \
-       runtime1.c \
        $(runtime_getncpu_file)
 
 noinst_DATA = zstdpkglist.go
@@ -1520,7 +1519,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtems-task-variable-add.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtime1.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtime_c.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread-linux.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread-sema.Plo@am__quote@
@@ -3161,10 +3159,6 @@ malloc.c: $(srcdir)/runtime/malloc.goc goc2c
        ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
-runtime1.c: $(srcdir)/runtime/runtime1.goc goc2c
-       ./goc2c $< > $@.tmp
-       mv -f $@.tmp $@
-
 %.c: $(srcdir)/runtime/%.goc goc2c
        ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
index 56e307fb3f553886783ec9aa9bf23dff9c9e4bde..43f6e1e00f62abf696064f396fff7dc814051a3c 100644 (file)
@@ -4,6 +4,11 @@
 
 package runtime
 
+import (
+       "runtime/internal/atomic"
+       "unsafe"
+)
+
 // GOMAXPROCS sets the maximum number of CPUs that can be executing
 // simultaneously and returns the previous setting. If n < 1, it does not
 // change the current setting.
@@ -19,10 +24,18 @@ func GOMAXPROCS(n int) int
 func NumCPU() int
 
 // NumCgoCall returns the number of cgo calls made by the current process.
-func NumCgoCall() int64
+func NumCgoCall() int64 {
+       var n int64
+       for mp := (*m)(atomic.Loadp(unsafe.Pointer(allm()))); mp != nil; mp = mp.alllink {
+               n += int64(mp.ncgocall)
+       }
+       return n
+}
 
 // NumGoroutine returns the number of goroutines that currently exist.
-func NumGoroutine() int
+func NumGoroutine() int {
+       return int(gcount())
+}
 
 // Get field tracking information.  Only fields with a tag go:"track"
 // are tracked.  This function will add every such field that is
index 36830016a5b43d1025a468f605fc60bda2e36982..d5d502c396d12d3103f539df646f87ee58335896 100644 (file)
@@ -133,7 +133,10 @@ type stringer interface {
        String() string
 }
 
-func typestring(interface{}) string
+func typestring(x interface{}) string {
+       e := efaceOf(&x)
+       return *e._type.string
+}
 
 // For calling from C.
 // Prints an argument passed to panic.
index d3443566d9204f245966e2414dd65cd41b2f9fae..b8b129d815db81171fa2cfb8fe63bbf5848c0d38 100644 (file)
@@ -21,11 +21,10 @@ import (
 //var F64toint = f64toint
 //var Sqrt = sqrt
 
-func golockedOSThread() bool
-
 var Entersyscall = entersyscall
 var Exitsyscall = exitsyscall
-var LockedOSThread = golockedOSThread
+
+// var LockedOSThread = lockedOSThread
 
 // var Xadduintptr = xadduintptr
 
@@ -44,29 +43,6 @@ func LFStackPop(head *uint64) *LFNode {
        return (*LFNode)(unsafe.Pointer(lfstackpop(head)))
 }
 
-type ParFor struct {
-       body   func(*ParFor, uint32)
-       done   uint32
-       Nthr   uint32
-       thrseq uint32
-       Cnt    uint32
-       wait   bool
-}
-
-func newParFor(nthrmax uint32) *ParFor
-func parForSetup(desc *ParFor, nthr, n uint32, wait bool, body func(*ParFor, uint32))
-func parForDo(desc *ParFor)
-func parForIters(desc *ParFor, tid uintptr) (uintptr, uintptr)
-
-var NewParFor = newParFor
-var ParForSetup = parForSetup
-var ParForDo = parForDo
-
-func ParForIters(desc *ParFor, tid uint32) (uint32, uint32) {
-       begin, end := parForIters(desc, uintptr(tid))
-       return uint32(begin), uint32(end)
-}
-
 func GCMask(x interface{}) (ret []byte) {
        return nil
 }
index e0c5aacc55a66f93bab1ac243c7af3d857b86a8e..c0746878c4f0c7f0718387a64ca07ea79f84878c 100644 (file)
@@ -274,13 +274,11 @@ func SetFinalizer(obj interface{}, finalizer interface{})
 // the actual system call.
 func KeepAlive(interface{})
 
-func getgoroot() string
-
 // GOROOT returns the root of the Go tree.
 // It uses the GOROOT environment variable, if set,
 // or else the root used during the Go build.
 func GOROOT() string {
-       s := getgoroot()
+       s := gogetenv("GOROOT")
        if s != "" {
                return s
        }
index d0641ed71503eb432c892ec8bd694f83be2a6eac..8d90cd6061f5ff1d49edf8af6283585d4c8414d5 100644 (file)
@@ -501,6 +501,7 @@ func needm()
 func dropm()
 func sigprof()
 func mcount() int32
+func gcount() int32
 
 // Signal trampoline, written in C.
 func sigtramp()
index 62abc9d238ba88697b97d7f052a693d777c63aea..43ced39c0f76b08252c3b10743b3dbbb2a7b3be3 100644 (file)
@@ -2535,15 +2535,19 @@ runtime_Gosched(void)
 
 // Implementation of runtime.GOMAXPROCS.
 // delete when scheduler is even stronger
-int32
-runtime_gomaxprocsfunc(int32 n)
+
+intgo runtime_GOMAXPROCS(intgo)
+  __asm__(GOSYM_PREFIX "runtime.GOMAXPROCS");
+
+intgo
+runtime_GOMAXPROCS(intgo n)
 {
-       int32 ret;
+       intgo ret;
 
        if(n > _MaxGomaxprocs)
                n = _MaxGomaxprocs;
        runtime_lock(&runtime_sched);
-       ret = runtime_gomaxprocs;
+       ret = (intgo)runtime_gomaxprocs;
        if(n <= 0 || n == ret) {
                runtime_unlock(&runtime_sched);
                return ret;
@@ -2553,7 +2557,7 @@ runtime_gomaxprocsfunc(int32 n)
        runtime_acquireWorldsema();
        g->m->gcing = 1;
        runtime_stopTheWorldWithSema();
-       newprocs = n;
+       newprocs = (int32)n;
        g->m->gcing = 0;
        runtime_releaseWorldsema();
        runtime_startTheWorldWithSema();
@@ -3499,6 +3503,58 @@ runtime_setmaxthreads(intgo in)
        return out;
 }
 
+static intgo
+procPin()
+{
+       M *mp;
+
+       mp = runtime_m();
+       mp->locks++;
+       return (intgo)(((P*)mp->p)->id);
+}
+
+static void
+procUnpin()
+{
+       runtime_m()->locks--;
+}
+
+intgo sync_runtime_procPin(void)
+  __asm__ (GOSYM_PREFIX "sync.runtime_procPin");
+
+intgo
+sync_runtime_procPin()
+{
+       return procPin();
+}
+
+void sync_runtime_procUnpin(void)
+  __asm__ (GOSYM_PREFIX  "sync.runtime_procUnpin");
+
+void
+sync_runtime_procUnpin()
+{
+       procUnpin();
+}
+
+intgo sync_atomic_runtime_procPin(void)
+  __asm__ (GOSYM_PREFIX "sync_atomic.runtime_procPin");
+
+intgo
+sync_atomic_runtime_procPin()
+{
+       return procPin();
+}
+
+void sync_atomic_runtime_procUnpin(void)
+  __asm__ (GOSYM_PREFIX  "sync_atomic.runtime_procUnpin");
+
+void
+sync_atomic_runtime_procUnpin()
+{
+       procUnpin();
+}
+
 void
 runtime_proc_scan(struct Workbuf** wbufp, void (*enqueue1)(struct Workbuf**, Obj))
 {
@@ -3589,3 +3645,11 @@ runtime_go_allgs()
        s.__capacity = allgcap;
        return s;
 }
+
+intgo NumCPU(void) __asm__ (GOSYM_PREFIX "runtime.NumCPU");
+
+intgo
+NumCPU()
+{
+       return (intgo)(runtime_ncpu);
+}
index 7d22631bddc802fc7943d9e64045fab463675e1a..50143fe0aaf434e5acb0c9d25acc42d519de417d 100644 (file)
@@ -315,7 +315,8 @@ void        runtime_mprofinit(void);
 #define runtime_getcallersp(p) __builtin_frame_address(0)
 int32  runtime_mcount(void)
   __asm__ (GOSYM_PREFIX "runtime.mcount");
-int32  runtime_gcount(void);
+int32  runtime_gcount(void)
+  __asm__ (GOSYM_PREFIX "runtime.gcount");
 void   runtime_mcall(void(*)(G*));
 uint32 runtime_fastrand1(void) __asm__ (GOSYM_PREFIX "runtime.fastrand1");
 int32  runtime_timediv(int64, int32, int32*)
@@ -512,7 +513,6 @@ void        runtime_semacquire(uint32 volatile *, bool)
      __asm__ (GOSYM_PREFIX "runtime.semacquire");
 void   runtime_semrelease(uint32 volatile *)
      __asm__ (GOSYM_PREFIX "runtime.semrelease");
-int32  runtime_gomaxprocsfunc(int32 n);
 void   runtime_procyield(uint32)
   __asm__(GOSYM_PREFIX "runtime.procyield");
 void   runtime_osyield(void)
diff --git a/libgo/runtime/runtime1.goc b/libgo/runtime/runtime1.goc
deleted file mode 100644 (file)
index a83b93e..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2010 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package runtime
-#include "runtime.h"
-#include "arch.h"
-#include "go-type.h"
-
-func GOMAXPROCS(n int) (ret int) {
-       ret = runtime_gomaxprocsfunc(n);
-}
-
-func NumCPU() (ret int) {
-       ret = runtime_ncpu;
-}
-
-func NumCgoCall() (ret int64) {
-       M *mp;
-
-       ret = 0;
-       for(mp=runtime_atomicloadp(&runtime_allm); mp; mp=mp->alllink)
-               ret += mp->ncgocall;
-}
-
-func newParFor(nthrmax uint32) (desc *ParFor) {
-       desc = runtime_parforalloc(nthrmax);
-}
-
-func parForSetup(desc *ParFor, nthr uint32, n uint32, wait bool, body *byte) {
-       runtime_parforsetup(desc, nthr, n, wait, (const FuncVal*) body);
-}
-
-func parForDo(desc *ParFor) {
-       runtime_parfordo(desc);
-}
-
-func parForIters(desc *ParFor, tid uintptr) (start uintptr, end uintptr) {
-       runtime_parforiters(desc, tid, &start, &end);
-}
-
-func typestring(e Eface) (s String) {
-       s = *((Type*)e._type)->__reflection;
-}
-
-func golockedOSThread() (ret bool) {
-       ret = runtime_lockedOSThread();
-}
-
-func NumGoroutine() (ret int) {
-       ret = runtime_gcount();
-}
-
-func getgoroot() (out String) {
-       out = runtime_getenv("GOROOT");
-}
-
-func sync.runtime_procPin() (p int) {
-       M *mp;
-
-       mp = runtime_m();
-       // Disable preemption.
-       mp->locks++;
-       p = ((P*)mp->p)->id;
-}
-
-func sync.runtime_procUnpin() {
-       runtime_m()->locks--;
-}
-
-func sync_atomic.runtime_procPin() (p int) {
-       M *mp;
-
-       mp = runtime_m();
-       // Disable preemption.
-       mp->locks++;
-       p = ((P*)mp->p)->id;
-}
-
-func sync_atomic.runtime_procUnpin() {
-       runtime_m()->locks--;
-}