Message ID | yddob9sgouf.fsf@lokon.CeBiTec.Uni-Bielefeld.DE |
---|---|
State | New |
Headers | show |
On Wed, Jul 24, 2013 at 4:49 AM, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > Ian Lance Taylor <iant@google.com> writes: > >> On Thu, Jul 18, 2013 at 6:59 AM, Rainer Orth >> <ro@cebitec.uni-bielefeld.de> wrote: >>> Ian Lance Taylor <iant@google.com> 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: Sorry, that was really sloppy of me. I just moved those functions to runtime.c instead. I committed this patch to mainline and 4.8 branch. Ian
On Wed, Jul 24, 2013 at 4:49 AM, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > Ian Lance Taylor <iant@google.com> writes: > >> On Thu, Jul 18, 2013 at 6:59 AM, Rainer Orth >> <ro@cebitec.uni-bielefeld.de> wrote: >>> Ian Lance Taylor <iant@google.com> 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. > > > --- 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 Fixed with this patch. Committed to mainline and 4.8 branch. Ian
On Wed, Jul 24, 2013 at 4:49 AM, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > Ian Lance Taylor <iant@google.com> writes: > >> On Thu, Jul 18, 2013 at 6:59 AM, Rainer Orth >> <ro@cebitec.uni-bielefeld.de> wrote: >>> Ian Lance Taylor <iant@google.com> 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. > > The new failures are: > > 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 This patch fixes it. Looks like the Solaris linker does not define the symbol "end", and the value was being picked up from some shared library. Committed to mainline and 4.8 branch. Ian
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; +}