Skip to content

Commit

Permalink
Backport from mainline:
Browse files Browse the repository at this point in the history
    syscall:  Add ioctl consts from if_tun.h
    
    During the gccgo build define constants from
    some header files are processed by mksysinfo.sh and
    added to syscall.go.  In some cases the constants
    are based on macros which are not processed
    correctly by mksysinfo.sh.  This adds the support
    to generate the correct values for the TUN* constants
    from linux/if_tun.h.
    
    Fixes golang/go#11707
    
    Reviewed-on: https://go-review.googlesource.com/12491

    syscall:  Fix to libgo/mksysinfo.sh
    
    In a recent change to mksysinfo.sh, a space was missing on
    some lines which caused the libgo build to hang on some
    systems.  This corrects that problem.
    
    Fixes golang/go#11924
    
    Reviewed-on: https://go-review.googlesource.com/12835

    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


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@226595 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
ian committed Aug 4, 2015
1 parent aca4ecd commit dfbaa3b
Show file tree
Hide file tree
Showing 6 changed files with 231 additions and 5 deletions.
11 changes: 11 additions & 0 deletions libgo/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -1676,7 +1676,17 @@ endif # !LIBGO_IS_LINUX
# Define socket sizes and types.
if LIBGO_IS_LINUX
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
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
syscall_socket_file = go/syscall/socket_solaris.go
else
Expand Down Expand Up @@ -1762,6 +1772,7 @@ go_base_syscall_files = \
$(syscall_size_file) \
$(syscall_socket_file) \
$(syscall_socket_os_file) \
$(syscall_socket_type_file) \
$(syscall_uname_file) \
$(syscall_netlink_file) \
$(syscall_lsf_file) \
Expand Down
5 changes: 5 additions & 0 deletions libgo/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -1848,6 +1848,10 @@ go_unicode_utf8_files = \

# Define socket sizes and types.
@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

# Define socket functions.
Expand Down Expand Up @@ -1898,6 +1902,7 @@ go_base_syscall_files = \
$(syscall_size_file) \
$(syscall_socket_file) \
$(syscall_socket_os_file) \
$(syscall_socket_type_file) \
$(syscall_uname_file) \
$(syscall_netlink_file) \
$(syscall_lsf_file) \
Expand Down
5 changes: 0 additions & 5 deletions libgo/go/syscall/socket_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,11 +136,6 @@ type RawSockaddrNetlink struct {
Groups uint32
}

type RawSockaddr struct {
Family uint16
Data [14]int8
}

// BindToDevice binds the socket associated with fd to device.
func BindToDevice(fd int, device string) (err error) {
return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device)
Expand Down
14 changes: 14 additions & 0 deletions libgo/go/syscall/socket_linux_ppc64x_type.go
Original file line number Diff line number Diff line change
@@ -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
}
14 changes: 14 additions & 0 deletions libgo/go/syscall/socket_linux_type.go
Original file line number Diff line number Diff line change
@@ -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
}
187 changes: 187 additions & 0 deletions libgo/mksysinfo.sh
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,67 @@ enum {
#ifdef TCSETS
TCSETS_val = TCSETS,
#endif
#ifdef TUNSETIFF
TUNSETIFF_val = TUNSETIFF,
#endif
#ifdef TUNSETNOCSUM
TUNSETNOCSUM_val = TUNSETNOCSUM,
#endif
#ifdef TUNSETDEBUG
TUNSETDEBUG_val = TUNSETDEBUG,
#endif
#ifdef TUNSETPERSIST
TUNSETPERSIST_val = TUNSETPERSIST,
#endif
#ifdef TUNSETOWNER
TUNSETOWNER_val = TUNSETOWNER,
#endif
#ifdef TUNSETLINK
TUNSETLINK_val = TUNSETLINK,
#endif
#ifdef TUNSETGROUP
TUNSETGROUP_val = TUNSETGROUP,
#endif
#ifdef TUNGETFEATURES
TUNGETFEATURES_val = TUNGETFEATURES,
#endif
#ifdef TUNSETOFFLOAD
TUNSETOFFLOAD_val = TUNSETOFFLOAD,
#endif
#ifdef TUNSETTXFILTER
TUNSETTXFILTER_val = TUNSETTXFILTER,
#endif
#ifdef TUNGETIFF
TUNGETIFF_val = TUNGETIFF,
#endif
#ifdef TUNGETSNDBUF
TUNGETSNDBUF_val = TUNGETSNDBUF,
#endif
#ifdef TUNSETSNDBUF
TUNSETSNDBUF_val = TUNSETSNDBUF,
#endif
#ifdef TUNATTACHFILTER
TUNATTACHFILTER_val = TUNATTACHFILTER,
#endif
#ifdef TUNDETACHFILTER
TUNDETACHFILTER_val = TUNDETACHFILTER,
#endif
#ifdef TUNGETVNETHDRSZ
TUNGETVNETHDRSZ_val = TUNGETVNETHDRSZ,
#endif
#ifdef TUNSETVNETHDRSZ
TUNSETVNETHDRSZ_val = TUNSETVNETHDRSZ,
#endif
#ifdef TUNSETQUEUE
TUNSETQUEUE_val = TUNSETQUEUE,
#endif
#ifdef TUNSETIFINDEX
TUNSETIFINDEX_val = TUNSETIFINDEX,
#endif
#ifdef TUNGETFILTER
TUNGETFILTER_val = TUNGETFILTER,
#endif
};
EOF

Expand Down Expand Up @@ -830,6 +891,9 @@ grep '^type _passwd ' gen-sysinfo.go | \
grep '^const _TIOC' gen-sysinfo.go | \
grep -v '_val =' | \
sed -e 's/^\(const \)_\(TIOC[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _TUNSET' gen-sysinfo.go | \
grep -v '_val =' | \
sed -e 's/^\(const \)_\(TUNSET[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# We need TIOCGWINSZ.
if ! grep '^const TIOCGWINSZ' ${OUT} >/dev/null 2>&1; then
if grep '^const _TIOCGWINSZ_val' ${OUT} >/dev/null 2>&1; then
Expand Down Expand Up @@ -872,6 +936,129 @@ if ! grep '^const TIOCSIG' ${OUT} >/dev/null 2>&1; then
fi
fi

if ! grep '^const TUNSETNOCSUM' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETNOCSUM_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETNOCSUM = _TUNSETNOCSUM_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETDEBUG' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETDEBUG_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETDEBUG = _TUNSETDEBUG_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETIFF' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETIFF_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETIFF = _TUNSETIFF_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETPERSIST' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETPERSIST_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETPERSIST = _TUNSETPERSIST_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETOWNER' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETOWNER_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETOWNER = _TUNSETOWNER_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETLINK' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETLINK_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETLINK = _TUNSETLINK_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETGROUP' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETGROUP_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETGROUP = _TUNSETGROUP_val' >> ${OUT}
fi
fi

if ! grep '^const TUNGETFEATURES' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNGETFEATURES_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNGETFEATURES = _TUNGETFEATURES_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETOFFLOAD' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETOFFLOAD_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETOFFLOAD = _TUNSETOFFLOAD_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETTXFILTER' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETTXFILTER_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETTXFILTER = _TUNSETTXFILTER_val' >> ${OUT}
fi
fi

if ! grep '^const TUNGETIFF' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNGETIFF_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNGETIFF = _TUNGETIFF_val' >> ${OUT}
fi
fi

if ! grep '^const TUNGETSNDBUF' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNGETSNDBUF_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNGETSNDBUF = _TUNGETSNDBUF_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETSNDBUF' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETSNDBUF_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETSNDBUF = _TUNSETSNDBUF_val' >> ${OUT}
fi
fi

if ! grep '^const TUNATTACHFILTER' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNATTACHFILTER_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNATTACHFILTER = _TUNATTACHFILTER_val' >> ${OUT}
fi
fi

if ! grep '^const TUNDETACHFILTER' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNDETACHFILTER_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNDETACHFILTER = _TUNDETACHFILTER_val' >> ${OUT}
fi
fi

if ! grep '^const TUNGETVNETHDRSZ' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNGETVNETHDRSZ_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNGETVNETHDRSZ = _TUNGETVNETHDRSZ_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETVNETHDRSZ' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETVNETHDRSZ_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETVNETHDRSZ = _TUNSETVNETHDRSZ_val' >> ${OUT}
fi
fi

if ! grep '^const TUNSETQUEUE' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETQUEUE_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETQUEUE = _TUNSETQUEUE_val' >> ${OUT}
fi
fi


if ! grep '^const TUNSETIFINDEX' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNSETIFINDEX_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNSETIFINDEX = _TUNSETIFINDEX_val' >> ${OUT}
fi
fi

if ! grep '^const TUNGETFILTER' ${OUT} >/dev/null 2>&1; then
if grep '^const _TUNGETFILTER_val' ${OUT} >/dev/null 2>&1; then
echo 'const TUNGETFILTER = _TUNGETFILTER_val' >> ${OUT}
fi
fi



# The ioctl flags for terminal control
grep '^const _TC[GS]ET' gen-sysinfo.go | grep -v _val | \
sed -e 's/^\(const \)_\(TC[GS]ET[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
Expand Down

0 comments on commit dfbaa3b

Please sign in to comment.