syscall: RawSockaddr fix for ppc64, ppc64le

The struct RawSockaddr contains a field Data which
    should be uint8 on ppc64 and ppc64le, but is declared
    as int8 in gccgo.  This change adds a two new files
    which contain the structure declaration for
    RawSockaddr, one with the correct types for for ppc64
    and ppc64le, and the other for non-ppc64 platforms.
    
    Fixes golang/go#11469
    
    Reviewed-on: https://go-review.googlesource.com/11946

From-SVN: r226533
This commit is contained in:
Ian Lance Taylor 2015-08-03 21:18:56 +00:00
parent ab977fd881
commit 1ca95ba067
6 changed files with 45 additions and 6 deletions

View File

@ -1,4 +1,4 @@
7a6089333f4ab10449f9140c4639cfe741abcb25 a850225433a66a58613c22185c3b09626f5545eb
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -1676,7 +1676,17 @@ endif # !LIBGO_IS_LINUX
# Define socket sizes and types. # Define socket sizes and types.
if LIBGO_IS_LINUX if LIBGO_IS_LINUX
syscall_socket_file = go/syscall/socket_linux.go epoll.go syscall_socket_file = go/syscall/socket_linux.go epoll.go
if LIBGO_IS_PPC64LE
syscall_socket_type_file = go/syscall/socket_linux_ppc64x_type.go
else else
if LIBGO_IS_PPC64
syscall_socket_type_file = go/syscall/socket_linux_ppc64x_type.go
else
syscall_socket_type_file = go/syscall/socket_linux_type.go
endif
endif
else
syscall_socket_type_file =
if LIBGO_IS_SOLARIS if LIBGO_IS_SOLARIS
syscall_socket_file = go/syscall/socket_solaris.go syscall_socket_file = go/syscall/socket_solaris.go
else else
@ -1762,6 +1772,7 @@ go_base_syscall_files = \
$(syscall_size_file) \ $(syscall_size_file) \
$(syscall_socket_file) \ $(syscall_socket_file) \
$(syscall_socket_os_file) \ $(syscall_socket_os_file) \
$(syscall_socket_type_file) \
$(syscall_uname_file) \ $(syscall_uname_file) \
$(syscall_netlink_file) \ $(syscall_netlink_file) \
$(syscall_lsf_file) \ $(syscall_lsf_file) \

View File

@ -1848,6 +1848,10 @@ go_unicode_utf8_files = \
# Define socket sizes and types. # Define socket sizes and types.
@LIBGO_IS_LINUX_TRUE@syscall_socket_file = go/syscall/socket_linux.go epoll.go @LIBGO_IS_LINUX_TRUE@syscall_socket_file = go/syscall/socket_linux.go epoll.go
@LIBGO_IS_LINUX_FALSE@syscall_socket_type_file =
@LIBGO_IS_LINUX_TRUE@@LIBGO_IS_PPC64LE_FALSE@@LIBGO_IS_PPC64_FALSE@syscall_socket_type_file = go/syscall/socket_linux_type.go
@LIBGO_IS_LINUX_TRUE@@LIBGO_IS_PPC64LE_FALSE@@LIBGO_IS_PPC64_TRUE@syscall_socket_type_file = go/syscall/socket_linux_ppc64x_type.go
@LIBGO_IS_LINUX_TRUE@@LIBGO_IS_PPC64LE_TRUE@syscall_socket_type_file = go/syscall/socket_linux_ppc64x_type.go
@LIBGO_IS_SOLARIS_FALSE@syscall_socket_os_file = go/syscall/socket_posix.go @LIBGO_IS_SOLARIS_FALSE@syscall_socket_os_file = go/syscall/socket_posix.go
# Define socket functions. # Define socket functions.
@ -1898,6 +1902,7 @@ go_base_syscall_files = \
$(syscall_size_file) \ $(syscall_size_file) \
$(syscall_socket_file) \ $(syscall_socket_file) \
$(syscall_socket_os_file) \ $(syscall_socket_os_file) \
$(syscall_socket_type_file) \
$(syscall_uname_file) \ $(syscall_uname_file) \
$(syscall_netlink_file) \ $(syscall_netlink_file) \
$(syscall_lsf_file) \ $(syscall_lsf_file) \

View File

@ -136,11 +136,6 @@ type RawSockaddrNetlink struct {
Groups uint32 Groups uint32
} }
type RawSockaddr struct {
Family uint16
Data [14]int8
}
// BindToDevice binds the socket associated with fd to device. // BindToDevice binds the socket associated with fd to device.
func BindToDevice(fd int, device string) (err error) { func BindToDevice(fd int, device string) (err error) {
return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device)

View File

@ -0,0 +1,14 @@
// socket_linux_ppc64x_type.go -- Socket handling specific to ppc64 GNU/Linux.
// Copyright 2015 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
// Type needed on ppc64le & ppc64
type RawSockaddr struct {
Family uint16
Data [14]uint8
}

View File

@ -0,0 +1,14 @@
// socket_linux_type.go -- Socket handling specific to GNU/Linux.
// Copyright 2015 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
// Type needed if not on ppc64le or ppc64
type RawSockaddr struct {
Family uint16
Data [14]int8
}