Commit f2ee78b8 by Ian Lance Taylor

Preliminary framework for Solaris support.

Partly from Rainer Orth.

From-SVN: r168697
parent c3b5b97b
...@@ -1188,7 +1188,8 @@ libgo_go_objs = \ ...@@ -1188,7 +1188,8 @@ libgo_go_objs = \
libgo_la_SOURCES = $(runtime_files) libgo_la_SOURCES = $(runtime_files)
libgo_la_LIBADD = $(libgo_go_objs) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) libgo_la_LIBADD = \
$(libgo_go_objs) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS)
libgobegin_a_SOURCES = \ libgobegin_a_SOURCES = \
runtime/go-main.c runtime/go-main.c
...@@ -1203,8 +1204,7 @@ LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \ ...@@ -1203,8 +1204,7 @@ LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \
$(AM_GOCFLAGS) $(GOCFLAGS) $(AM_GOCFLAGS) $(GOCFLAGS)
GOLINK = $(LIBTOOL) --tag GO --mode-link $(GOC) \ GOLINK = $(LIBTOOL) --tag GO --mode-link $(GOC) \
$(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_GOCFLAGS) $(LTLDFLAGS) \ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_GOCFLAGS) $(LTLDFLAGS) -o $@
$(PTHREAD_LIBS) $(MATH_LIBS) -o $@
# Build a package. # Build a package.
BUILDARCHIVE = \ BUILDARCHIVE = \
......
...@@ -121,7 +121,8 @@ libgobegin_a_OBJECTS = $(am_libgobegin_a_OBJECTS) ...@@ -121,7 +121,8 @@ libgobegin_a_OBJECTS = $(am_libgobegin_a_OBJECTS)
LTLIBRARIES = $(toolexeclib_LTLIBRARIES) LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
am__DEPENDENCIES_1 = am__DEPENDENCIES_1 =
libgo_la_DEPENDENCIES = $(libgo_go_objs) $(am__DEPENDENCIES_1) \ libgo_la_DEPENDENCIES = $(libgo_go_objs) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am__libgo_la_SOURCES_DIST = runtime/go-append.c runtime/go-assert.c \ am__libgo_la_SOURCES_DIST = runtime/go-append.c runtime/go-assert.c \
runtime/go-assert-interface.c \ runtime/go-assert-interface.c \
runtime/go-byte-array-to-string.c runtime/go-breakpoint.c \ runtime/go-byte-array-to-string.c runtime/go-breakpoint.c \
...@@ -329,6 +330,7 @@ MAINT = @MAINT@ ...@@ -329,6 +330,7 @@ MAINT = @MAINT@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
MATH_LIBS = @MATH_LIBS@ MATH_LIBS = @MATH_LIBS@
MKDIR_P = @MKDIR_P@ MKDIR_P = @MKDIR_P@
NET_LIBS = @NET_LIBS@
NM = @NM@ NM = @NM@
NMEDIT = @NMEDIT@ NMEDIT = @NMEDIT@
OBJCOPY = @OBJCOPY@ OBJCOPY = @OBJCOPY@
...@@ -1541,7 +1543,9 @@ libgo_go_objs = \ ...@@ -1541,7 +1543,9 @@ libgo_go_objs = \
testing/libscript.la testing/libscript.la
libgo_la_SOURCES = $(runtime_files) libgo_la_SOURCES = $(runtime_files)
libgo_la_LIBADD = $(libgo_go_objs) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) libgo_la_LIBADD = \
$(libgo_go_objs) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS)
libgobegin_a_SOURCES = \ libgobegin_a_SOURCES = \
runtime/go-main.c runtime/go-main.c
...@@ -1552,8 +1556,7 @@ LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \ ...@@ -1552,8 +1556,7 @@ LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \
$(AM_GOCFLAGS) $(GOCFLAGS) $(AM_GOCFLAGS) $(GOCFLAGS)
GOLINK = $(LIBTOOL) --tag GO --mode-link $(GOC) \ GOLINK = $(LIBTOOL) --tag GO --mode-link $(GOC) \
$(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_GOCFLAGS) $(LTLDFLAGS) \ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_GOCFLAGS) $(LTLDFLAGS) -o $@
$(PTHREAD_LIBS) $(MATH_LIBS) -o $@
# Build a package. # Build a package.
......
...@@ -116,22 +116,28 @@ is_darwin=no ...@@ -116,22 +116,28 @@ is_darwin=no
is_freebsd=no is_freebsd=no
is_linux=no is_linux=no
is_rtems=no is_rtems=no
is_solaris=no
GOOS=unknown GOOS=unknown
case ${host} in case ${host} in
*-*-darwin*) is_darwin=yes; GOOS=darwin ;; *-*-darwin*) is_darwin=yes; GOOS=darwin ;;
*-*-freebsd*) is_freebsd=yes; GOOS=freebsd ;; *-*-freebsd*) is_freebsd=yes; GOOS=freebsd ;;
*-*-linux*) is_linux=yes; GOOS=linux ;; *-*-linux*) is_linux=yes; GOOS=linux ;;
*-*-rtems*) is_rtems=yes; GOOS=rtems ;; *-*-rtems*) is_rtems=yes; GOOS=rtems ;;
*-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
esac esac
AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes) AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes) AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes) AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes)
AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes) AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
AC_SUBST(GOOS) AC_SUBST(GOOS)
dnl N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch).
is_386=no is_386=no
is_x86_64=no
is_arm=no is_arm=no
is_sparc=no
is_sparcv9=no
is_x86_64=no
GOARCH=unknown GOARCH=unknown
case ${host} in case ${host} in
changequote(,)dnl changequote(,)dnl
...@@ -143,8 +149,10 @@ changequote([,])dnl ...@@ -143,8 +149,10 @@ changequote([,])dnl
#endif], #endif],
[is_386=yes], [is_x86_64=yes]) [is_386=yes], [is_x86_64=yes])
if test "$is_386" = "yes"; then if test "$is_386" = "yes"; then
is_386=yes
GOARCH=386 GOARCH=386
else else
is_x86_64=yes
GOARCH=amd64 GOARCH=amd64
fi fi
;; ;;
...@@ -152,22 +160,38 @@ changequote([,])dnl ...@@ -152,22 +160,38 @@ changequote([,])dnl
is_arm=yes is_arm=yes
GOARCH=arm GOARCH=arm
;; ;;
sparc*-*-*)
AC_PREPROC_IFELSE([
#if defined(__sparcv9) || defined(__arch64__)
#error 64-bit
#endif],
[is_sparc=yes], [is_sparcv9=yes])
if test "$is_sparc" = "yes"; then
is_sparc=yes
GOARCH=sparc
else
is_sparcv9=yes
GOARCH=sparcv9
fi
;;
esac esac
AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes) AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes)
AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes)
AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes) AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes)
AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes)
AM_CONDITIONAL(LIBGO_IS_SPARCV9, test $isv_sparcv9 = yes)
AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes)
AC_SUBST(GOARCH) AC_SUBST(GOARCH)
dnl Use -fsplit-stack when compiling C code if available. dnl Use -fsplit-stack when compiling C code if available.
AC_CACHE_CHECK([whether -fsplit-stack is supported], AC_CACHE_CHECK([whether -fsplit-stack is supported],
[ac_cv_libgo_split_stack_supported], [libgo_cv_c_split_stack_supported],
[CFLAGS_hold=$CFLAGS [CFLAGS_hold=$CFLAGS
CFLAGS="$CFLAGS -fsplit-stack" CFLAGS="$CFLAGS -fsplit-stack"
AC_COMPILE_IFELSE([[int i;]], AC_COMPILE_IFELSE([[int i;]],
[ac_cv_libgo_split_stack_supported=yes], [libgo_cv_c_split_stack_supported=yes],
[ac_cv_libgo_split_stack_supported=no]) [libgo_cv_c_split_stack_supported=no])
CFLAGS=$CFLAGS_hold]) CFLAGS=$CFLAGS_hold])
if test "$ac_cv_libgo_split_stack_supported" = yes; then if test "$libgo_cv_c_split_stack_supported" = yes; then
SPLIT_STACK=-fsplit-stack SPLIT_STACK=-fsplit-stack
AC_DEFINE(USING_SPLIT_STACK, 1, AC_DEFINE(USING_SPLIT_STACK, 1,
[Define if the compiler supports -fsplit-stack]) [Define if the compiler supports -fsplit-stack])
...@@ -176,7 +200,7 @@ else ...@@ -176,7 +200,7 @@ else
fi fi
AC_SUBST(SPLIT_STACK) AC_SUBST(SPLIT_STACK)
AM_CONDITIONAL(USING_SPLIT_STACK, AM_CONDITIONAL(USING_SPLIT_STACK,
test "$ac_cv_libgo_split_stack_supported" = yes) test "$libgo_cv_c_split_stack_supported" = yes)
dnl Check whether the linker does stack munging when calling from dnl Check whether the linker does stack munging when calling from
dnl split-stack into non-split-stack code. We check this by looking dnl split-stack into non-split-stack code. We check this by looking
...@@ -184,12 +208,12 @@ dnl at the --help output. FIXME: This is only half right: it's ...@@ -184,12 +208,12 @@ dnl at the --help output. FIXME: This is only half right: it's
dnl possible for the linker to support this for some targets but not dnl possible for the linker to support this for some targets but not
dnl others. dnl others.
AC_CACHE_CHECK([whether linker supports split stack], AC_CACHE_CHECK([whether linker supports split stack],
[ac_cv_libgo_linker_supports_split_stack], [libgo_cv_c_linker_supports_split_stack],
ac_cv_libgo_linker_supports_split_stack=no libgo_cv_c_linker_supports_split_stack=no
if $LD --help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then if $LD --help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
ac_cv_libgo_linker_supports_split_stack=yes libgo_cv_c_linker_supports_split_stack=yes
fi) fi)
if test "$ac_cv_libgo_linker_supports_split_stack" = yes; then if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1, AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
[Define if the linker support split stack adjustments]) [Define if the linker support split stack adjustments])
fi fi
...@@ -199,17 +223,48 @@ MATH_LIBS= ...@@ -199,17 +223,48 @@ MATH_LIBS=
AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm) AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
AC_SUBST(MATH_LIBS) AC_SUBST(MATH_LIBS)
dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac.
AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
[libgo_cv_lib_sockets=
libgo_check_both=no
AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
if test "$libgo_check_socket" = "yes"; then
unset ac_cv_func_connect
AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
libgo_check_both=yes)
fi
if test "$libgo_check_both" = "yes"; then
libgo_old_libs=$LIBS
LIBS="$LIBS -lsocket -lnsl"
unset ac_cv_func_accept
AC_CHECK_FUNC(accept,
[libgo_check_nsl=no
libgo_cv_lib_sockets="-lsocket -lnsl"])
unset ac_cv_func_accept
LIBS=$libgo_old_libs
fi
unset ac_cv_func_gethostbyname
libgo_old_libs="$LIBS"
AC_CHECK_FUNC(gethostbyname, ,
[AC_CHECK_LIB(nsl, main,
[libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
unset ac_cv_func_gethostbyname
LIBS=$libgo_old_libs
])
NET_LIBS="$libgo_cv_lib_sockets"
AC_SUBST(NET_LIBS)
dnl Test whether the compiler supports the -pthread option. dnl Test whether the compiler supports the -pthread option.
AC_CACHE_CHECK([whether -pthread is supported], AC_CACHE_CHECK([whether -pthread is supported],
[ac_cv_libgo_pthread_supported], [libgo_cv_lib_pthread],
[CFLAGS_hold=$CFLAGS [CFLAGS_hold=$CFLAGS
CFLAGS="$CFLAGS -pthread" CFLAGS="$CFLAGS -pthread"
AC_COMPILE_IFELSE([[int i;]], AC_COMPILE_IFELSE([[int i;]],
[ac_cv_libgo_pthread_supported=yes], [libgo_cv_lib_pthread=yes],
[ac_cv_libgo_pthread_supported=no]) [libgo_cv_lib_pthread=no])
CFLAGS=$CFLAGS_hold]) CFLAGS=$CFLAGS_hold])
PTHREAD_CFLAGS= PTHREAD_CFLAGS=
if test "$ac_cv_libgo_pthread_supported" = yes; then if test "$libgo_cv_lib_pthread" = yes; then
PTHREAD_CFLAGS=-pthread PTHREAD_CFLAGS=-pthread
fi fi
AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CFLAGS)
...@@ -230,15 +285,15 @@ AC_CHECK_FUNCS(srandom random strsignal) ...@@ -230,15 +285,15 @@ AC_CHECK_FUNCS(srandom random strsignal)
dnl For x86 we want to use the -minline-all-stringops option to avoid dnl For x86 we want to use the -minline-all-stringops option to avoid
dnl forcing a stack split when calling memcpy and friends. dnl forcing a stack split when calling memcpy and friends.
AC_CACHE_CHECK([whether compiler supports -minline-all-stringops], AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
[ac_cv_libgo_compiler_supports_inline_all_stringops], [libgo_cv_c_stringops],
[CFLAGS_hold=$CFLAGS [CFLAGS_hold=$CFLAGS
CFLAGS="$CFLAGS -minline-all-stringops" CFLAGS="$CFLAGS -minline-all-stringops"
AC_COMPILE_IFELSE([int i;], AC_COMPILE_IFELSE([int i;],
[ac_cv_libgo_compiler_supports_inline_all_stringops=yes], [libgo_cv_c_stringops=yes],
[ac_cv_libgo_compiler_supports_inline_all_stringops=no]) [libgo_cv_c_stringops=no])
CFLAGS=$CFLAGS_hold]) CFLAGS=$CFLAGS_hold])
STRINGOPS_FLAG= STRINGOPS_FLAG=
if test "$ac_cv_libgo_compiler_supports_inline_all_stringops" = yes; then if test "$libgo_cv_c_stringops" = yes; then
STRINGOPS_FLAG=-minline-all-stringops STRINGOPS_FLAG=-minline-all-stringops
fi fi
AC_SUBST(STRINGOPS_FLAG) AC_SUBST(STRINGOPS_FLAG)
......
// Copyright 2011 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 proc
import "os"
// Process tracing is not supported on Solaris yet.
func Attach(pid int) (Process, os.Error) {
return nil, os.NewError("debug/proc not implemented on Solaris")
}
func ForkExec(argv0 string, argv []string, envv []string, dir string, fd []*os.File) (Process, os.Error) {
return Attach(0)
}
// Copyright 2011 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 proc
// Copyright 2011 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 proc
// Copyright 2011 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 proc
// Copyright 2011 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 proc
// syscall_solaris.go -- Solaris 2 specific syscall interface.
// Copyright 2011 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 syscall
// syscall_solaris_386.go -- Solaris/x86 specific support
// Copyright 2011 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 syscall
import "unsafe"
const ARCH = "386"
// FIXME: ptrace(3C) has this, but exec.go expects the next.
//func libc_ptrace(request int, pid Pid_t, addr int, data int) int __asm__ ("ptrace")
func libc_ptrace(request int, pid Pid_t, addr uintptr, data *byte) int __asm__ ("ptrace")
var dummy *byte
const sizeofPtr uintptr = uintptr(unsafe.Sizeof(dummy))
// syscall_solaris_amd64.go -- Solaris/x64 specific support
// Copyright 2011 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 syscall
import "unsafe"
const ARCH = "amd64"
// FIXME: ptrace(3C) has this, but exec.go expects the next.
//func libc_ptrace(request int, pid Pid_t, addr int, data int) int __asm__ ("ptrace")
// 64-bit ptrace(3C) doesn't exist
func libc_ptrace(request int, pid Pid_t, addr uintptr, data *byte) int {
errno := ENOSYS
return -1
}
var dummy *byte
const sizeofPtr uintptr = uintptr(unsafe.Sizeof(dummy))
// syscall_solaris_sparc.go -- Solaris SPARC specific support
// Copyright 2011 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 syscall
// syscall_solaris_v9.go -- Solaris sparc9v specific support
// Copyright 2011 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 syscall
...@@ -105,6 +105,7 @@ MAINT = @MAINT@ ...@@ -105,6 +105,7 @@ MAINT = @MAINT@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
MATH_LIBS = @MATH_LIBS@ MATH_LIBS = @MATH_LIBS@
MKDIR_P = @MKDIR_P@ MKDIR_P = @MKDIR_P@
NET_LIBS = @NET_LIBS@
NM = @NM@ NM = @NM@
NMEDIT = @NMEDIT@ NMEDIT = @NMEDIT@
OBJCOPY = @OBJCOPY@ OBJCOPY = @OBJCOPY@
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment