Ian, > This patch updates the Go library to the most recent weekly release. I > think the only potential portability issues here are the use of the > ipv6_mreq struct. I'm not entirely sure the new exp/terminal package is > portable, but it might be.
the only issue I've found on Solaris is the use of pthread_yield, which doesn't exist even on Solaris 11. The following patch checks for this, and falls back to thr_yield if available. It allowed i386-pc-solaris2.1[01] bootstraps to complete without regressions. Rainer 2011-10-27 Rainer Orth <r...@cebitec.uni-bielefeld.de> * configure.ac: Check for <thread.h>. Check for pthread_yield, thr_yield. * configure: Regenerate. * config.h.in: Regenerate. * runtime/yield.c [HAVE_THREAD_H]: Include <thread.h>. (runtime_osyield): Call thr_yield or pthread_yield if available.
diff --git a/libgo/configure.ac b/libgo/configure.ac --- a/libgo/configure.ac +++ b/libgo/configure.ac @@ -442,7 +442,7 @@ no) ;; esac -AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h) +AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h thread.h) AC_CHECK_HEADERS([linux/filter.h linux/netlink.h linux/rtnetlink.h], [], [], [#ifdef HAVE_SYS_SOCKET_H @@ -452,7 +452,7 @@ AC_CHECK_HEADERS([linux/filter.h linux/n AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) -AC_CHECK_FUNCS(srandom random strerror_r strsignal wait4 mincore setenv) +AC_CHECK_FUNCS(srandom random strerror_r strsignal wait4 mincore setenv pthread_yield thr_yield) AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) diff --git a/libgo/runtime/yield.c b/libgo/runtime/yield.c --- a/libgo/runtime/yield.c +++ b/libgo/runtime/yield.c @@ -9,6 +9,9 @@ #include <stddef.h> #include <sys/types.h> #include <sys/time.h> +#ifdef HAVE_THREAD_H +#include <thread.h> +#endif #include <pthread.h> #include <unistd.h> @@ -38,7 +41,11 @@ runtime_procyield (uint32 cnt) void runtime_osyield (void) { +#ifdef HAVE_THR_YIELD + thr_yield (); +#elif defined(HAVE_PTHREAD_YIELD) pthread_yield (); +#endif } /* Sleep for some number of microseconds. */
-- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University