From 29849c91e41478ce7c86d5fe4f1582179b845ef8 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 19 Oct 2016 16:53:13 +0000 Subject: [PATCH] runtime, syscall: force EPOLLET to be positive The C definition is 1U << 31. Reportedly on some systems GCC's -fgo-dump-spec can print this as -2147483648. Reviewed-on: https://go-review.googlesource.com/31448 From-SVN: r241347 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/runtime/netpoll_epoll.go | 2 +- libgo/mkrsysinfo.sh | 6 ++++++ libgo/mksysinfo.sh | 8 ++++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 40f91ced442..5c125c7aec1 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -68bb6a9875499037d3eccb79a1f92e1c7a476d58 +5346c7d15362a16efa0defaaeca63b1fce1c1523 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/runtime/netpoll_epoll.go b/libgo/go/runtime/netpoll_epoll.go index 777150eb7ab..247692ef042 100644 --- a/libgo/go/runtime/netpoll_epoll.go +++ b/libgo/go/runtime/netpoll_epoll.go @@ -49,7 +49,7 @@ func netpollinit() { func netpollopen(fd uintptr, pd *pollDesc) int32 { var ev epollevent - ev.events = _EPOLLIN | _EPOLLOUT | _EPOLLRDHUP | _EPOLLET + ev.events = _EPOLLIN | _EPOLLOUT | _EPOLLRDHUP | _EPOLLETpos *(**pollDesc)(unsafe.Pointer(&ev.data)) = pd if epollctl(epfd, _EPOLL_CTL_ADD, int32(fd), &ev) < 0 { return int32(errno()) diff --git a/libgo/mkrsysinfo.sh b/libgo/mkrsysinfo.sh index d05e5ecaffb..ffbbcea39a6 100755 --- a/libgo/mkrsysinfo.sh +++ b/libgo/mkrsysinfo.sh @@ -77,6 +77,12 @@ if grep '^const _epoll_data_offset ' ${OUT} >/dev/null 2>&1; then exit 1 fi fi +# Make sure EPOLLET is positive. +if grep '^const _EPOLLET = [0-9]' gen-sysinfo.go; then + echo "const _EPOLLETpos = _EPOLLET" >> ${OUT} +else + echo "const _EPOLLETpos = 0x80000000" >> ${OUT} +fi # Make sure EPOLLRDHUP and EPOLL_CLOEXEC are defined. if ! grep '^const _EPOLLRDHUP' ${OUT} >/dev/null 2>&1; then echo "const _EPOLLRDHUP = 0x2000" >> ${OUT} diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh index f79b5cfd7d8..3640476a434 100755 --- a/libgo/mksysinfo.sh +++ b/libgo/mksysinfo.sh @@ -185,7 +185,15 @@ fi # epoll constants. grep '^const _EPOLL' gen-sysinfo.go | + grep -v EPOLLET | sed -e 's/^\(const \)_\(EPOLL[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} +# Make sure EPOLLET is positive. +if grep '^const _EPOLLET = [0-9]' gen-sysinfo.go; then + grep '^const _EPOLLET ' gen-sysinfo.go | + sed -e 's/^\(const \)_\(EPOLL[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} +else + echo "const EPOLLET = 0x80000000" >> ${OUT} +fi # Make sure EPOLLRDHUP and EPOLL_CLOEXEC are defined. if ! grep '^const EPOLLRDHUP' ${OUT} >/dev/null 2>&1; then echo "const EPOLLRDHUP = 0x2000" >> ${OUT} -- 2.30.2