In the update to 1.13 the mOS field of an m was embedded rather than named. This patch updates the HURD support for that change. This should fix GCC PR 92842. I built the code on x86_64-pc-linux-gnu, but that doesn't actually test this. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 279032) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -e32651d37e0c43bb7595ac94363b079610bed746 +f04751699e1a1ce98fe8bdbcce5a00f1be6a7d15 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: libgo/go/runtime/os_hurd.go =================================================================== --- libgo/go/runtime/os_hurd.go (revision 278984) +++ libgo/go/runtime/os_hurd.go (working copy) @@ -39,7 +39,7 @@ func sem_timedwait(sem *_sem_t, timeout //go:nosplit func semacreate(mp *m) { - if mp.mos.waitsema != 0 { + if mp.waitsema != 0 { return } @@ -52,7 +52,7 @@ func semacreate(mp *m) { if sem_init(sem, 0, 0) != 0 { throw("sem_init") } - mp.mos.waitsema = uintptr(unsafe.Pointer(sem)) + mp.waitsema = uintptr(unsafe.Pointer(sem)) } //go:nosplit @@ -62,7 +62,7 @@ func semasleep(ns int64) int32 { var ts timespec ts.setNsec(ns) - if sem_timedwait((*_sem_t)(unsafe.Pointer(_m_.mos.waitsema)), &ts) != 0 { + if sem_timedwait((*_sem_t)(unsafe.Pointer(_m_.waitsema)), &ts) != 0 { err := errno() if err == _ETIMEDOUT || err == _EAGAIN || err == _EINTR { return -1 @@ -72,7 +72,7 @@ func semasleep(ns int64) int32 { return 0 } for { - r1 := sem_wait((*_sem_t)(unsafe.Pointer(_m_.mos.waitsema))) + r1 := sem_wait((*_sem_t)(unsafe.Pointer(_m_.waitsema))) if r1 == 0 { break } @@ -86,7 +86,7 @@ func semasleep(ns int64) int32 { //go:nosplit func semawakeup(mp *m) { - if sem_post((*_sem_t)(unsafe.Pointer(mp.mos.waitsema))) != 0 { + if sem_post((*_sem_t)(unsafe.Pointer(mp.waitsema))) != 0 { throw("sem_post") } }