This libgo patch passe the correct pointer to the system call in recvmsgRaw. The code in recvmsgRaw, introduced in CL 384695 (https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590289.html), incorrectly passed &rsa to the recvmsg system call. But in recvmsgRaw rsa is already a pointer passed by the caller. This change passes the correct pointer.
I'm guessing that this didn't show up in the testsuite because we run the tests in short mode. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian
284e13279e8c8067f7a0046a7ca8ff7a16398feb diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index b6fdf72dcec..64eb27e5e8d 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -f5c453aa726ebb509e7b8cb20df7734f0e411404 +8aab4c94f039132b270ab03968f74d24d315e141 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/syscall/socket.go b/libgo/go/syscall/socket.go index 54a4a9940c6..35665d50723 100644 --- a/libgo/go/syscall/socket.go +++ b/libgo/go/syscall/socket.go @@ -467,7 +467,7 @@ func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Name = (*byte)(unsafe.Pointer(rsa)) msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 {