Ian Lance Taylor <[email protected]> writes:
> On Thu, Jul 18, 2013 at 6:59 AM, Rainer Orth
> <[email protected]> wrote:
>> Ian Lance Taylor <[email protected]> writes:
>>
>>> I have committed a large patch to update libgo to the library that was
>>> part of the Go 1.1.1 release. As usual, I'm not including the entire
>>> patch in this e-mail message, because it is too large. I'm only
>>> including the changes to the files that are partially gccgo-specific.
>>> Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
>>> Committed to mainline and 4.8 branch.
>>
>> This broke the Solaris build:
>>
>> /vol/gcc/src/hg/trunk/local/libgo/go/log/syslog/syslog_libc.go:18:25: error:
>> use of undefined type 'serverConn'
>> func unixSyslog() (conn serverConn, err error) {
>> ^
>> make[6]: *** [log/syslog.lo] Error 1
>>
>> Didn't make much progress on this one.
>
> The interface I put in a while back for Solaris support got taken out
> from the master library, and I missed it. This patch restores it.
> Committed to mainline and 4.8 branch. I've also sent a patch to the
> master library to restore the interface.
Thanks, that allowed libgo.so to build on Solaris 10/x86.
Unfortunately, all tests FAIL like this:
Undefined first referenced
symbol in file
runtime_unminit
/var/gcc/regression/trunk/10-gcc/build/i386-pc-solaris2.10/amd64/libgo/.libs/libgo.so
runtime_minit
/var/gcc/regression/trunk/10-gcc/build/i386-pc-solaris2.10/amd64/libgo/.libs/libgo.so
runtime_mpreinit
/var/gcc/regression/trunk/10-gcc/build/i386-pc-solaris2.10/amd64/libgo/.libs/libgo.so
ld: fatal: symbol referencing errors. No output written to a.out
collect2: error: ld returned 1 exit status
FAIL: bufio
I've fixed this by also adding the definitions of those three functions
to runtime/thread-sema.c, although there might be a better way to handle
this:
diff --git a/libgo/runtime/thread-sema.c b/libgo/runtime/thread-sema.c
--- a/libgo/runtime/thread-sema.c
+++ b/libgo/runtime/thread-sema.c
@@ -146,3 +146,48 @@ runtime_goenvs (void)
{
runtime_goenvs_unix ();
}
+
+// Called to initialize a new m (including the bootstrap m).
+// Called on the parent thread (main thread in case of bootstrap), can allocate memory.
+void
+runtime_mpreinit(M *mp)
+{
+ mp->gsignal = runtime_malg(32*1024, &mp->gsignalstack, &mp->gsignalstacksize); // OS X wants >=8K, Linux >=2K
+}
+
+// Called to initialize a new m (including the bootstrap m).
+// Called on the new thread, can not allocate memory.
+void
+runtime_minit(void)
+{
+ M* m;
+ sigset_t sigs;
+
+ // Initialize signal handling.
+ m = runtime_m();
+ runtime_signalstack(m->gsignalstack, m->gsignalstacksize);
+ if (sigemptyset(&sigs) != 0)
+ runtime_throw("sigemptyset");
+ sigprocmask(SIG_SETMASK, &sigs, nil);
+}
+
+// Called from dropm to undo the effect of an minit.
+void
+runtime_unminit(void)
+{
+ runtime_signalstack(nil, 0);
+}
+
+void
+runtime_signalstack(byte *p, int32 n)
+{
+ stack_t st;
+
+ st.ss_sp = p;
+ st.ss_size = n;
+ st.ss_flags = 0;
+ if(p == nil)
+ st.ss_flags = SS_DISABLE;
+ if(sigaltstack(&st, nil) < 0)
+ *(int *)0xf1 = 0xf1;
+}
With that change, we're almost back to normal for Solaris testresults:
@@ -498,47 +516,63 @@
Running target unix
+FAIL: net
+FAIL: runtime
=== libgo Summary for unix ===
-# of expected passes 131
+# of expected passes 120
+# of unexpected failures 2
Running target unix/-m64
+FAIL: net
FAIL: os
-FAIL: net/http
+FAIL: runtime
FAIL: net/http/cgi
=== libgo Summary for unix/-m64 ===
-# of expected passes 128
-# of unexpected failures 3
+# of expected passes 118
+# of unexpected failures 4
The new failures are:
--- FAIL: TestReadUnixgramWithUnnamedSocket (0.00 seconds)
:0: neighbor address is @
--- FAIL: TestReadUnixgramWithZeroBytesBuffer (0.00 seconds)
:0: neighbor address is @
--- FAIL: TestUnixConnLocalAndRemoteNames (0.01 seconds)
:0: got &net.UnixAddr{Name:"@", Net:"unix"}, expected
&net.UnixAddr{Name:"", Net:"unix"}
unix_test.go:159: Listener.Accept failed: use of closed network
connection
--- FAIL: TestUnixgramConnLocalAndRemoteNames (0.00 seconds)
:0: got &net.UnixAddr{Name:"@", Net:"unixgram"}, expected
&net.UnixAddr{Name:"", Net:"unixgram"}
FAIL
FAIL: net
32-bit runtime:
runtime: memory allocated by OS (0xbd600000) not in usable range
[0xdde00000,0x5de00000)
runtime: out of memory: cannot allocate 2097152-byte block (536870912 in use)
fatal error: out of memory
goroutine 61 [running]:
:0
:0
:0
:0
:0
runtime_test.testConcurrentReadsAfterGrowth
/var/gcc/regression/trunk/10-gcc/build/i386-pc-solaris2.10/libgo/gotest29011/test/map_test.go:261
/var/gcc/regression/trunk/10-gcc/build/i386-pc-solaris2.10/libgo/gotest29011/test/map_test.go:261
:0
:0
:0
goroutine 1 [chan receive]:
main.main
/var/gcc/regression/trunk/10-gcc/build/i386-pc-solaris2.10/libgo/gotest29011/test/_testmain.go:184
FAIL: runtime
I haven't yet started looking in more detail.
Thanks.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University