unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc"
@ 2021-08-07  5:04 Sarah Morgensen
  2021-09-02 18:47 ` Sarah Morgensen
  2021-12-14 19:29 ` Leo Famulari
  0 siblings, 2 replies; 7+ messages in thread
From: Sarah Morgensen @ 2021-08-07  5:04 UTC (permalink / raw)
  To: 49921

[-- Attachment #1: Type: text/plain, Size: 515 bytes --]

Hello Guix,

I just noticed go-1.16 is failing on aarch64 [0]. I am not having any
success tracking down the cause. It looks like the error is the same as
was happening for go-1.14 circa 11 Mar [1], which was fixed by 9 Apr
[2], but I cannot tell what resolved the issue. I've attached the
relevant part of the build log; the full log is available at [0].

Any ideas?

[0] https://ci.guix.gnu.org/build/949823/details
[1] https://ci.guix.gnu.org/build/71004/details
[2] https://ci.guix.gnu.org/build/19478/details


[-- Attachment #2: go-1.16.7.log --]
[-- Type: text/plain, Size: 3107 bytes --]

starting phase `build'
runtime: failed to create new OS thread (have 2 already; errno=22)
fatal error: runtime.newosproc

runtime stack:
runtime.throw(0x5342c6)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/panic.go:491 +0xa4
runtime.newosproc(0x10722000, 0x10732000)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/os_linux.c:170 +0xec
newm(0xa4080, 0x0)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.c:1157 +0xbc
runtime.newsysmon()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.c:169 +0x2c
runtime.onM(0x54c228)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/asm_arm.s:256 +0x74
runtime.mstart()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.c:818

goroutine 1 [running]:
runtime.switchtoM()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/asm_arm.s:193 +0x4 fp=0x1071c7c0 sp=0x1071c7bc
runtime.main()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.go:32 +0x4c fp=0x1071c7e4 sp=0x1071c7c0
runtime.goexit()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/asm_arm.s:1322 +0x4 fp=0x1071c7e4 sp=0x1071c7e4
Building Go cmd/dist using /gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003. ()
runtime: failed to create new OS thread (have 2 already; errno=22)
fatal error: runtime.newosproc

runtime stack:
runtime.throw(0x5342c6)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/panic.go:491 +0xa4
runtime.newosproc(0x10722000, 0x10732000)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/os_linux.c:170 +0xec
newm(0xa4080, 0x0)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.c:1157 +0xbc
runtime.newsysmon()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.c:169 +0x2c
runtime.onM(0x54c228)
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/asm_arm.s:256 +0x74
runtime.mstart()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.c:818

goroutine 1 [running]:
runtime.switchtoM()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/asm_arm.s:193 +0x4 fp=0x1071c7c0 sp=0x1071c7bc
runtime.main()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/proc.go:32 +0x4c fp=0x1071c7e4 sp=0x1071c7c0
runtime.goexit()
	/gnu/store/ax3zhpkysy3nl5ipw3qb9yh2g04a0f1s-go-1.4-bootstrap-20171003/src/runtime/asm_arm.s:1322 +0x4 fp=0x1071c7e4 sp=0x1071c7e4
command "sh" "make.bash" "--no-banner" failed with status 2
builder for `/gnu/store/dfqww60vr4gykvz3fz4mj9sgk0x4jypz-go-1.16.7.drv' failed with exit code 1
@ build-failed /gnu/store/dfqww60vr4gykvz3fz4mj9sgk0x4jypz-go-1.16.7.drv - 1 builder for `/gnu/store/dfqww60vr4gykvz3fz4mj9sgk0x4jypz-go-1.16.7.drv' failed with exit code 1

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc"
  2021-08-07  5:04 bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc" Sarah Morgensen
@ 2021-09-02 18:47 ` Sarah Morgensen
  2021-09-10  1:49   ` Sarah Morgensen
                     ` (2 more replies)
  2021-12-14 19:29 ` Leo Famulari
  1 sibling, 3 replies; 7+ messages in thread
From: Sarah Morgensen @ 2021-09-02 18:47 UTC (permalink / raw)
  To: 49921

Sarah Morgensen <iskarian@mgsn.dev> writes:

> Hello Guix,
>
> I just noticed go-1.16 is failing on aarch64 [0]. I am not having any
> success tracking down the cause. It looks like the error is the same as
> was happening for go-1.14 circa 11 Mar [1], which was fixed by 9 Apr
> [2], but I cannot tell what resolved the issue. I've attached the
> relevant part of the build log; the full log is available at [0].
>
> Any ideas?
>
> [0] https://ci.guix.gnu.org/build/949823/details
> [1] https://ci.guix.gnu.org/build/71004/details
> [2] https://ci.guix.gnu.org/build/19478/details
>
> starting phase `build'
> runtime: failed to create new OS thread (have 2 already; errno=22)
> fatal error: runtime.newosproc

I think this might be related to [0], although if it's true that CI uses
native builders for aarch64 now, I have no idea.

I've been able to reproduce this with both go-1.14 and go-1.16 when
building with --system=aarch64-linux from an amd64 system.  I tried to
apply the patch in the thread I mentioned, but go-1.4 won't build at all
with QEMU.

[0] <https://github.com/golang/go/issues/20763> runtime: cannot run
cross compiled ARM binary on QEMU

--
Sarah





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc"
  2021-09-02 18:47 ` Sarah Morgensen
@ 2021-09-10  1:49   ` Sarah Morgensen
  2021-09-10 22:06   ` Thiago Jung Bauermann via Bug reports for GNU Guix
  2021-09-10 22:14   ` iskarian
  2 siblings, 0 replies; 7+ messages in thread
From: Sarah Morgensen @ 2021-09-10  1:49 UTC (permalink / raw)
  To: 49921

[-- Attachment #1: Type: text/plain, Size: 1475 bytes --]

Sarah Morgensen <iskarian@mgsn.dev> writes:

> Sarah Morgensen <iskarian@mgsn.dev> writes:
>
>> Hello Guix,
>>
>> I just noticed go-1.16 is failing on aarch64 [0]. I am not having any
>> success tracking down the cause. It looks like the error is the same as
>> was happening for go-1.14 circa 11 Mar [1], which was fixed by 9 Apr
>> [2], but I cannot tell what resolved the issue. I've attached the
>> relevant part of the build log; the full log is available at [0].
>>
>> Any ideas?
>>
>> [0] https://ci.guix.gnu.org/build/949823/details
>> [1] https://ci.guix.gnu.org/build/71004/details
>> [2] https://ci.guix.gnu.org/build/19478/details
>>
>> starting phase `build'
>> runtime: failed to create new OS thread (have 2 already; errno=22)
>> fatal error: runtime.newosproc
>
> I think this might be related to [0], although if it's true that CI uses
> native builders for aarch64 now, I have no idea.
>
> I've been able to reproduce this with both go-1.14 and go-1.16 when
> building with --system=aarch64-linux from an amd64 system.  I tried to
> apply the patch in the thread I mentioned, but go-1.4 won't build at all
> with QEMU.
>
> [0] <https://github.com/golang/go/issues/20763> runtime: cannot run
> cross compiled ARM binary on QEMU
>
> --
> Sarah

I've written this up into a patch (attached below); I don't think
there's much of a way to test this other than just letting CI build it.
It's a backport, so it shouldn't hurt even if it doesn't fix it.

--
Sarah


[-- Attachment #2: 0001-gnu-go-1.4-Fix-running-with-qemu-aarch64.patch --]
[-- Type: text/x-patch, Size: 4063 bytes --]

From a5824c2495f5a547499ab200cd5b270b38f571d6 Mon Sep 17 00:00:00 2001
Message-Id: <a5824c2495f5a547499ab200cd5b270b38f571d6.1631237116.git.iskarian@mgsn.dev>
From: Sarah Morgensen <iskarian@mgsn.dev>
Date: Thu, 9 Sep 2021 18:23:10 -0700
Subject: [PATCH core-updates] gnu: go-1.4: Fix running with qemu-aarch64.

Backport the fix for running go with qemu-aarch64.

* gnu/packages/patches/go-1.4-fix-running-with-qemu.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/golang.scm (go-1.4)[origin]: Apply patch.
---
This might fix #49921, but I can't test it as there are a number of issues
preventing go-1.4 from compiling on qemu-aarch64.

It builds fine on x86_64, so it didn't break anything there.

--
Sarah

 gnu/local.mk                                  |  1 +
 gnu/packages/golang.scm                       |  4 +-
 .../go-1.4-fix-running-with-qemu.patch        | 38 +++++++++++++++++++
 3 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/go-1.4-fix-running-with-qemu.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 20f0b8f081..39e17bb3bc 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1144,6 +1144,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \
   %D%/packages/patches/gobject-introspection-cc.patch		\
   %D%/packages/patches/gobject-introspection-girepository.patch	\
+  %D%/packages/patches/go-1.4-fix-running-with-qemu.patch	\
   %D%/packages/patches/go-fix-script-tests.patch			\
   %D%/packages/patches/go-skip-gc-test.patch			\
   %D%/packages/patches/gpm-glibc-2.26.patch			\
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index d3ef39a2e6..33f3120a09 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -1035,7 +1035,9 @@ your Go binary to be later served from an http.FileSystem.")
                                   name version ".tar.gz"))
               (sha256
                (base32
-                "0liybk5z00hizsb5ypkbhqcawnwwa6mkwgvjjg4y3jm3ndg5pzzl"))))
+                "0liybk5z00hizsb5ypkbhqcawnwwa6mkwgvjjg4y3jm3ndg5pzzl"))
+              (patches
+               (search-patches "go-1.4-fix-running-with-qemu.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"
diff --git a/gnu/packages/patches/go-1.4-fix-running-with-qemu.patch b/gnu/packages/patches/go-1.4-fix-running-with-qemu.patch
new file mode 100644
index 0000000000..52914c71a5
--- /dev/null
+++ b/gnu/packages/patches/go-1.4-fix-running-with-qemu.patch
@@ -0,0 +1,38 @@
+Backport from upstream: https://github/golang/go/commit/2673f9ed
+
+Original header:
+
+From 2673f9ed23348c634f6331ee589d489e4d9c7a9b Mon Sep 17 00:00:00 2001
+From: Austin Clements <austin@google.com>
+Date: Wed, 12 Jul 2017 10:12:50 -0600
+Subject: [PATCH] runtime: pass CLONE_SYSVSEM to clone
+
+SysV semaphore undo lists should be shared by threads, just like
+several other resources listed in cloneFlags. Currently we don't do
+this, but it probably doesn't affect anything because 1) probably
+nobody uses SysV semaphores from Go and 2) Go-created threads never
+exit until the process does. Beyond being the right thing to do,
+user-level QEMU requires this flag because it depends on glibc to
+create new threads and glibc uses this flag.
+
+Fixes #20763.
+
+---
+ src/runtime/os_linux.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/runtime/os_linux.c b/src/runtime/os_linux.c
+index 0d8ffc9..573be7c 100644
+--- a/src/runtime/os_linux.c
++++ b/src/runtime/os_linux.c
+@@ -150,6 +150,7 @@ runtime·newosproc(M *mp, void *stk)
+ 		| CLONE_FS	/* share cwd, etc */
+ 		| CLONE_FILES	/* share fd table */
+ 		| CLONE_SIGHAND	/* share sig handler table */
++		| CLONE_SYSVSEM /* share SysV semaphore undo lists (see issue #20763) */
+ 		| CLONE_THREAD	/* revisit - okay for now */
+ 		;
+ 
+-- 
+2.31.1
+

base-commit: 22f7d4bce1e694b7ac38e62410d76a6d46d96c5d
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc"
  2021-09-02 18:47 ` Sarah Morgensen
  2021-09-10  1:49   ` Sarah Morgensen
@ 2021-09-10 22:06   ` Thiago Jung Bauermann via Bug reports for GNU Guix
  2021-09-10 22:14   ` iskarian
  2 siblings, 0 replies; 7+ messages in thread
From: Thiago Jung Bauermann via Bug reports for GNU Guix @ 2021-09-10 22:06 UTC (permalink / raw)
  To: Sarah Morgensen; +Cc: 49921

Hello Sarah,

Em quinta-feira, 2 de setembro de 2021, às 15:47:08 -03, Sarah Morgensen 
escreveu:
> I think this might be related to [0], although if it's true that CI uses
> native builders for aarch64 now, I have no idea.

The CI has two native aarch64 builders (which also do armhf, despite bugs 
43513 and 43591): dover and overdrive1.

It also uses half of the x86_64 builders (hydra-guix-*) for emulated builds 
of aarch64 and armhf, as can be seen here:

https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/berlin-nodes.scm#n143

-- 
Thanks,
Thiago






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc"
  2021-09-02 18:47 ` Sarah Morgensen
  2021-09-10  1:49   ` Sarah Morgensen
  2021-09-10 22:06   ` Thiago Jung Bauermann via Bug reports for GNU Guix
@ 2021-09-10 22:14   ` iskarian
  2021-09-10 23:06     ` Thiago Jung Bauermann via Bug reports for GNU Guix
  2 siblings, 1 reply; 7+ messages in thread
From: iskarian @ 2021-09-10 22:14 UTC (permalink / raw)
  To: Thiago Jung Bauermann; +Cc: 49921

Hi Thiago,

(Re-sent due to missing Cc.)

September 10, 2021 3:06 PM, "Thiago Jung Bauermann" <bauermann@kolabnow.com> wrote:

> Hello Sarah,
> 
> Em quinta-feira, 2 de setembro de 2021, às 15:47:08 -03, Sarah Morgensen 
> escreveu:
> 
>> I think this might be related to [0], although if it's true that CI uses
>> native builders for aarch64 now, I have no idea.
> 
> The CI has two native aarch64 builders (which also do armhf, despite bugs
> 43513 and 43591): dover and overdrive1.
> 
> It also uses half of the x86_64 builders (hydra-guix-*) for emulated builds
> of aarch64 and armhf, as can be seen here:
> 
> https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/berlin-nodes.scm#n143

Thanks for the explanation.  Is there a way to tell CI (or Guix itself) that certain packages
shouldn't be built under emulation?

--
Sarah




^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc"
  2021-09-10 22:14   ` iskarian
@ 2021-09-10 23:06     ` Thiago Jung Bauermann via Bug reports for GNU Guix
  0 siblings, 0 replies; 7+ messages in thread
From: Thiago Jung Bauermann via Bug reports for GNU Guix @ 2021-09-10 23:06 UTC (permalink / raw)
  To: iskarian; +Cc: 49921

Hello Sarah,

Em sexta-feira, 10 de setembro de 2021, às 19:14:06 -03, iskarian@mgsn.dev 
escreveu:
> Hi Thiago,
> 
> (Re-sent due to missing Cc.)
> 
> September 10, 2021 3:06 PM, "Thiago Jung Bauermann" 
<bauermann@kolabnow.com> wrote:
> > Hello Sarah,
> > 
> > Em quinta-feira, 2 de setembro de 2021, às 15:47:08 -03, Sarah
> > Morgensen
> > 
> > escreveu:
> >> I think this might be related to [0], although if it's true that CI
> >> uses
> >> native builders for aarch64 now, I have no idea.
> > 
> > The CI has two native aarch64 builders (which also do armhf, despite
> > bugs 43513 and 43591): dover and overdrive1.
> > 
> > It also uses half of the x86_64 builders (hydra-guix-*) for emulated
> > builds of aarch64 and armhf, as can be seen here:
> > 
> > https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/berli
> > n-nodes.scm#n143
> Thanks for the explanation.  Is there a way to tell CI (or Guix itself)
> that certain packages shouldn't be built under emulation?

I don’t know. That would certainly be useful, though.

To be honest, my experience in the past couple of months with emulated 
builds for powerpc64le-linux wasn’t good, so I asked for it to be turned 
off.

-- 
Thanks,
Thiago






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc"
  2021-08-07  5:04 bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc" Sarah Morgensen
  2021-09-02 18:47 ` Sarah Morgensen
@ 2021-12-14 19:29 ` Leo Famulari
  1 sibling, 0 replies; 7+ messages in thread
From: Leo Famulari @ 2021-12-14 19:29 UTC (permalink / raw)
  To: Sarah Morgensen; +Cc: 49921-done

On Fri, Aug 06, 2021 at 10:04:19PM -0700, Sarah Morgensen wrote:
> I just noticed go-1.16 is failing on aarch64 [0]. I am not having any
> success tracking down the cause. It looks like the error is the same as
> was happening for go-1.14 circa 11 Mar [1], which was fixed by 9 Apr
> [2], but I cannot tell what resolved the issue. I've attached the
> relevant part of the build log; the full log is available at [0].

I was able to build Go 1.16 on aarch64-linux, by building this
derivation "by hand" on the Berlin server. It was offloaded to real
aarch64 hardware.

/gnu/store/jgbp8bpi86is2y620wqais904lvjmvj8-go-1.16.11.drv
https://ci.guix.gnu.org/build/1952349/details

If I understand correctly, we have totally disabled the aarch64 emulated
builds. They were problematic and I think that we should not re-enable
them. So, I'm closing this bug. Please let us know if you think it
should be re-opened.




^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-12-14 19:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-07  5:04 bug#49921: go-1.16 build failing on aarch64: "fatal error: runtime.newosproc" Sarah Morgensen
2021-09-02 18:47 ` Sarah Morgensen
2021-09-10  1:49   ` Sarah Morgensen
2021-09-10 22:06   ` Thiago Jung Bauermann via Bug reports for GNU Guix
2021-09-10 22:14   ` iskarian
2021-09-10 23:06     ` Thiago Jung Bauermann via Bug reports for GNU Guix
2021-12-14 19:29 ` Leo Famulari

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).