Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/compile: arm64 fatal error when compiling docker #13854

Closed
vijaykilari opened this issue Jan 7, 2016 · 40 comments
Closed

cmd/compile: arm64 fatal error when compiling docker #13854

vijaykilari opened this issue Jan 7, 2016 · 40 comments
Milestone

Comments

@vijaykilari
Copy link

While generating docker binary for arm64, I face below fatal error reported from
go compiler as below.

I have shared my docker source code at https://github.com/vijaykilari/docker
clone to arm64 platform and issue command 'sudo make build'
This issue occurs 1 in 10 times

---> Making bundle: dynbinary (in bundles/1.10.0-dev/dynbinary)
fatal error: unlock of unlocked lock
runtime stack:
runtime.SetFinalizer.func2()
        /usr/local/go/src/runtime/mfinal.go:368 +0x48

goroutine 116 [running]:
runtime.systemstack_switch()
        /usr/local/go/src/runtime/asm_arm64.s:186 +0x8 fp=0x48206ce930 sp=0x48206ce920
runtime.SetFinalizer(0x86d5c0, 0x48204f99b0, 0x7feac0, 0x9fdc70)
        /usr/local/go/src/runtime/mfinal.go:371 +0x510 fp=0x48206ceab0 sp=0x48206ce930
os.NewFile(0x12, 0x92c700, 0x9, 0x0)
        /usr/local/go/src/os/file_unix.go:55 +0x10c fp=0x48206ceb10 sp=0x48206ceab0
os.OpenFile(0x92c700, 0x9, 0x0, 0x4800000000, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:109 +0x2c4 fp=0x48206ceb80 sp=0x48206ceb10
os.Open(0x92c700, 0x9, 0x20, 0x0, 0x0)
        /usr/local/go/src/os/file.go:246 +0x48 fp=0x48206cebc0 sp=0x48206ceb80
os/exec.(*Cmd).stdin(0x48202e5cc0, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:167 +0x50 fp=0x48206cec60 sp=0x48206cebc0
os/exec.(*Cmd).Start(0x48202e5cc0, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:312 +0x298 fp=0x48206cee50 sp=0x48206cec60
os/exec.(*Cmd).Run(0x48202e5cc0, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:255 +0x28 fp=0x48206cee80 sp=0x48206cee50
main.(*builder).runOut(0x48201b6540, 0x4820467020, 0x1c, 0x482043aaf1, 0xa, 0x0, 0x0, 0x0, 0x4820148dc0, 0xd, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358 fp=0x48206cf020 sp=0x48206cee80
main.gcToolchain.gc(0x48201b6540, 0x48201f3800, 0x4820348a50, 0x23, 0x48203489f0, 0x27, 0x0, 0x48208b6b00, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288 fp=0x48206cf2f0 sp=0x48206cf020
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x48201f3800, 0x4820348a50, 0x23, 0x48203489f0, 0x27, 0x0, 0x48208b6b00, 0x2, ...)
        <autogenerated>:3 +0x124 fp=0x48206cf3a0 sp=0x48206cf2f0
main.(*builder).build(0x48201b6540, 0x48200afba0, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4 fp=0x48206cfde0 sp=0x48206cf3a0
main.(*builder).do.func1(0x48200afba0)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338 fp=0x48206cfea0 sp=0x48206cfde0
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164 fp=0x48206cff80 sp=0x48206cfea0
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1014 +0x4 fp=0x48206cff80 sp=0x48206cff80
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 1 [semacquire]:
sync.runtime_Semacquire(0x48203f406c)
        /usr/local/go/src/runtime/sema.go:43 +0x2c
sync.(*WaitGroup).Wait(0x48203f4060)
        /usr/local/go/src/sync/waitgroup.go:126 +0xdc
main.(*builder).do(0x48201b6540, 0x4820383d40)
        /usr/local/go/src/cmd/go/build.go:1196 +0x3dc
main.runBuild(0xb7a660, 0x48200ca0b0, 0x1, 0x1)
        /usr/local/go/src/cmd/go/build.go:452 +0x454
main.main()
        /usr/local/go/src/cmd/go/main.go:181 +0x70c

goroutine 17 [syscall, locked to thread]:
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1014 +0x4

goroutine 20 [syscall]:
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:22 +0x18
created by os/signal.init.1
        /usr/local/go/src/os/signal/signal_unix.go:28 +0x3c

goroutine 11 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 12 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 13 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 14 [syscall]:
syscall.Syscall6(0x104, 0xbb2, 0x48206b8c98, 0x0, 0x482037ee10, 0x0, 0x0, 0x48206b8c78, 0x4cb1e0, 0x48206b8c70)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xbb2, 0x48206b8c98, 0x0, 0x482037ee10, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xbb2, 0x48206b8ce0, 0x0, 0x482037ee10, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x48208dc020, 0x4820886fc0, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x48208dc020, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x48202ddcc0, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x48202ddcc0, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x48204db7c0, 0x1d, 0x48204bbb51, 0xb, 0x0, 0x0, 0x0, 0x48203351e0, 0x11, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x4820568400, 0x4820287470, 0x24, 0x48202873b0, 0x28, 0x0, 0x48201c9cc0, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x4820568400, 0x4820287470, 0x24, 0x48202873b0, 0x28, 0x0, 0x48201c9cc0, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x4820087d40, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x4820087d40)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 15 [syscall]:
syscall.Syscall6(0x104, 0xbb4, 0x48204c8c98, 0x0, 0x48208ae090, 0x0, 0x0, 0x48204c8c78, 0x4cb1e0, 0x48204c8c70)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xbb4, 0x48204c8c98, 0x0, 0x48208ae090, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xbb4, 0x48204c8ce0, 0x0, 0x48208ae090, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x482016eb40, 0x4820754d80, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x482016eb40, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x4820752b40, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x4820752b40, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x4820304aa0, 0x1f, 0x4820181c81, 0xd, 0x0, 0x0, 0x0, 0x48207446e0, 0xf, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x4820230400, 0x4820348330, 0x26, 0x48203482d0, 0x2a, 0x0, 0x4820219920, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x4820230400, 0x4820348330, 0x26, 0x48203482d0, 0x2a, 0x0, 0x4820219920, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x48200af110, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x48200af110)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0
goroutine 16 [syscall]:
syscall.Syscall6(0x104, 0xa75, 0x4820686c98, 0x0, 0x48208ae000, 0x0, 0x0, 0x4820686c78, 0x4c8d60, 0x3ff99fc33e8)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xa75, 0x4820686c98, 0x0, 0x48208ae000, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xa75, 0x4820686ce0, 0x0, 0x48208ae000, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x48208a6020, 0x482085a900, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x48208a6020, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x48203c7900, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x48203c7900, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x48201f9ea0, 0x4c, 0x482035cea1, 0x20, 0x0, 0x0, 0x0, 0x48207002c0, 0x17, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x48203c1800, 0x4820421b00, 0x39, 0x4820421a00, 0x3d, 0x0, 0x4820011900, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x48203c1800, 0x4820421b00, 0x39, 0x4820421a00, 0x3d, 0x0, 0x4820011900, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x4820382680, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x4820382680)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 98 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 99 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 100 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 101 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 102 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 103 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 104 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 105 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 106 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 107 [runnable]:
runtime.SetFinalizer(0x86d5c0, 0x4820875b60, 0x0, 0x0)
        /usr/local/go/src/runtime/mfinal.go:261
os.(*file).close(0x4820875b60, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:132 +0x170
os.(*File).Close(0x482044e438, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:118 +0x60
os/exec.(*Cmd).closeDescriptors(0x48208e0140, 0x48208bac60, 0x2, 0x2)
        /usr/local/go/src/os/exec/exec.go:241 +0x78
os/exec.(*Cmd).Start(0x48208e0140, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:335 +0x7f4
os/exec.(*Cmd).Run(0x48208e0140, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:255 +0x28
main.(*builder).runOut(0x48201b6540, 0x482037c180, 0x21, 0x4820218a21, 0xf, 0x0, 0x0, 0x0, 0x48208ce2c0, 0xf, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x4820386000, 0x4820348030, 0x28, 0x482035bf20, 0x2c, 0x0, 0x48208bab60, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x4820386000, 0x4820348030, 0x28, 0x482035bf20, 0x2c, 0x0, 0x48208bab60, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x48200aedd0, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x48200aedd0)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 108 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 109 [syscall]:
syscall.Syscall6(0x104, 0xa74, 0x482083ac98, 0x0, 0x482070e750, 0x0, 0x0, 0x482083ac78, 0x4cb1e0, 0x482083ac70)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xa74, 0x482083ac98, 0x0, 0x482070e750, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xa74, 0x482083ace0, 0x0, 0x482070e750, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x482086e660, 0x48208358c0, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x482086e660, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x4820816f00, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x4820816f00, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x4820258300, 0x5f, 0x4820393e41, 0x33, 0x0, 0x0, 0x0, 0x48208322c0, 0x19, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x48201f3000, 0x482049fea0, 0x4c, 0x482049fe00, 0x50, 0x0, 0x4820081c40, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x48201f3000, 0x482049fea0, 0x4c, 0x482049fe00, 0x50, 0x0, 0x4820081c40, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x48200875f0, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x48200875f0)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 110 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 111 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 112 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 113 [syscall]:
syscall.Syscall6(0x104, 0xb7e, 0x4820864c88, 0x0, 0x48207782d0, 0x0, 0x0, 0x4820864c68, 0x4cb1e0, 0x4820864c60)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xb7e, 0x4820864c88, 0x0, 0x48207782d0, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xb7e, 0x4820864cd0, 0x0, 0x48207782d0, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x4820219520, 0x4820754900, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x4820219520, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x4820752780, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x4820752780, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x48203a37a0, 0x5f, 0x482019fec1, 0x33, 0x0, 0x0, 0x0, 0x4820744580, 0xf, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x482031d000, 0x48204098b0, 0x4c, 0x48204096d0, 0x50, 0x0, 0x48202191e0, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x482031d000, 0x48204098b0, 0x4c, 0x48204096d0, 0x50, 0x0, 0x48202191e0, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x4820468c30, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x4820468c30)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 114 [syscall]:
syscall.Syscall6(0x104, 0xae2, 0x482071cc88, 0x0, 0x4820276bd0, 0x0, 0x0, 0x482071cc68, 0x4cb1e0, 0x482071cc60)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xae2, 0x482071cc88, 0x0, 0x4820276bd0, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xae2, 0x482071ccd0, 0x0, 0x4820276bd0, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x48208ba760, 0x482085afc0, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x48208ba760, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x48203c7cc0, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x48203c7cc0, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x4820259320, 0x5e, 0x4820147841, 0x32, 0x0, 0x0, 0x0, 0x48201efe40, 0x14, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x4820199400, 0x4820458c30, 0x4b, 0x4820458b40, 0x4f, 0x0, 0x48208ba460, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x4820199400, 0x4820458c30, 0x4b, 0x4820458b40, 0x4f, 0x0, 0x48208ba460, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x48203828f0, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x48203828f0)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 115 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 117 [syscall]:
syscall.Syscall6(0x104, 0xa73, 0x48206a8c98, 0x0, 0x48207a6090, 0x0, 0x0, 0x48206a8c78, 0x4cb1e0, 0x48206a8c70)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xa73, 0x48206a8c98, 0x0, 0x48207a6090, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xa73, 0x48206a8ce0, 0x0, 0x48207a6090, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x482016eb20, 0x482078a480, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x482016eb20, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x4820788280, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x4820788280, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x48200cdd60, 0x46, 0x48201c8e21, 0x1a, 0x0, 0x0, 0x0, 0x482089a000, 0x17, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x482051cc00, 0x4820283d40, 0x33, 0x4820283b80, 0x37, 0x0, 0x482016e800, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x482051cc00, 0x4820283d40, 0x33, 0x4820283b80, 0x37, 0x0, 0x482016e800, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x4820187790, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x4820187790)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 118 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 119 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 120 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 121 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 122 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 123 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 124 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 125 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 126 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 127 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 128 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 129 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 130 [syscall]:
syscall.Syscall6(0x104, 0x57e, 0x48206c0c98, 0x0, 0x4820504120, 0x0, 0x0, 0x48206c0c78, 0x4cb1e0, 0x48206c0c70)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0x57e, 0x48206c0c98, 0x0, 0x4820504120, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0x57e, 0x48206c0ce0, 0x0, 0x4820504120, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x48203e0c40, 0x48203026c0, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x48203e0c40, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x4820136640, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x4820136640, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x4820238380, 0x15, 0x48201d5361, 0x3, 0x0, 0x0, 0x0, 0x48206d2000, 0x3e, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x482052ac00, 0x4820491260, 0x1c, 0x4820491220, 0x20, 0x0, 0x48203f6e40, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x482052ac00, 0x4820491260, 0x1c, 0x4820491220, 0x20, 0x0, 0x48203f6e40, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x4820382ea0, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x4820382ea0)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 131 [runnable]:
main.gcToolchain.pack(0x48201b6540, 0x4820255800, 0x4820278640, 0x3e, 0x48202786c0, 0x3a, 0x48203f5f30, 0x1, 0x1, 0x0, ...)
        /usr/local/go/src/cmd/go/build.go:2203 +0x2b0
main.(*gcToolchain).pack(0xbb9718, 0x48201b6540, 0x4820255800, 0x4820278640, 0x3e, 0x48202786c0, 0x3a, 0x48203f5f30, 0x1, 0x1, ...)
        <autogenerated>:6 +0xf0
main.(*builder).build(0x48201b6540, 0x48204688f0, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1438 +0x36ec
main.(*builder).do.func1(0x48204688f0)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 132 [syscall]:
syscall.Syscall6(0x104, 0xa1d, 0x48206a6c98, 0x0, 0x4820276750, 0x0, 0x0, 0x48206a6c78, 0x4cb1e0, 0x48206a6c70)
        /usr/local/go/src/syscall/asm_linux_arm64.s:36 +0x8
syscall.wait4(0xa1d, 0x48206a6c98, 0x0, 0x4820276750, 0x90, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:172 +0x60
syscall.Wait4(0xa1d, 0x48206a6ce0, 0x0, 0x4820276750, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_linux.go:256 +0x54
os.(*Process).wait(0x4820011260, 0x482085a240, 0x0, 0x0)
        /usr/local/go/src/os/exec_unix.go:22 +0xe0
os.(*Process).Wait(0x4820011260, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/doc.go:45 +0x2c
os/exec.(*Cmd).Wait(0x48203c7540, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:380 +0x1e4
os/exec.(*Cmd).Run(0x48203c7540, 0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:258 +0x5c
main.(*builder).runOut(0x48201b6540, 0x48203f6ea0, 0x1f, 0x48203430e1, 0xd, 0x0, 0x0, 0x0, 0x48201efa20, 0x12, ...)
        /usr/local/go/src/cmd/go/build.go:1883 +0x358
main.gcToolchain.gc(0x48201b6540, 0x4820389c00, 0x482035ae40, 0x26, 0x482035ac90, 0x2a, 0x0, 0x4820010f20, 0x2, 0x2, ...)
        /usr/local/go/src/cmd/go/build.go:2144 +0x1288
main.(*gcToolchain).gc(0xbb9718, 0x48201b6540, 0x4820389c00, 0x482035ae40, 0x26, 0x482035ac90, 0x2a, 0x0, 0x4820010f20, 0x2, ...)
        <autogenerated>:3 +0x124
main.(*builder).build(0x48201b6540, 0x4820383a00, 0x0, 0x0)
        /usr/local/go/src/cmd/go/build.go:1363 +0x20a4
main.(*builder).do.func1(0x4820383a00)
        /usr/local/go/src/cmd/go/build.go:1130 +0x338
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1187 +0x164
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 133 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 134 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 135 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 136 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 137 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 138 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 139 [select]:
main.(*builder).do.func2(0x48203f4060, 0x48201b6540, 0x4820466480)
        /usr/local/go/src/cmd/go/build.go:1177 +0x1c0
created by main.(*builder).do
        /usr/local/go/src/cmd/go/build.go:1193 +0x3c0

goroutine 158 [syscall]:
syscall.Syscall(0x3f, 0xb, 0x4820704c00, 0x200, 0x0, 0x4820257800, 0x0)
        /usr/local/go/src/syscall/asm_linux_arm64.s:10 +0x8
syscall.read(0xb, 0x4820704c00, 0x200, 0x200, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:783 +0x68
syscall.Read(0xb, 0x4820704c00, 0x200, 0x200, 0x482026e300, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_unix.go:160 +0x48
os.(*File).read(0x482044e2e8, 0x4820704c00, 0x200, 0x200, 0x200, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:211 +0x50
os.(*File).Read(0x482044e2e8, 0x4820704c00, 0x200, 0x200, 0x1, 0x0, 0x0)
        /usr/local/go/src/os/file.go:95 +0x84
bytes.(*Buffer).ReadFrom(0x48201b7d50, 0x3ff985e4340, 0x482044e2e8, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:173 +0x200
io.copyBuffer(0x3ff99622b88, 0x48201b7d50, 0x3ff985e4340, 0x482044e2e8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:375 +0x120
io.Copy(0x3ff99622b88, 0x48201b7d50, 0x3ff985e4340, 0x482044e2e8, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:351 +0x54
os/exec.(*Cmd).writerDescriptor.func1(0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:232 +0xa8
os/exec.(*Cmd).Start.func1(0x48203c7540, 0x4820011040)
        /usr/local/go/src/os/exec/exec.go:340 +0x20
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4

goroutine 228 [syscall]:
syscall.Syscall(0x3f, 0x8, 0x4820354800, 0x200, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/asm_linux_arm64.s:10 +0x8
syscall.read(0x8, 0x4820354800, 0x200, 0x200, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:783 +0x68
syscall.Read(0x8, 0x4820354800, 0x200, 0x200, 0x4820310300, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_unix.go:160 +0x48
os.(*File).read(0x48203aa0a8, 0x4820354800, 0x200, 0x200, 0x200, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:211 +0x50
os.(*File).Read(0x48203aa0a8, 0x4820354800, 0x200, 0x200, 0x0, 0x0, 0x0)
        /usr/local/go/src/os/file.go:95 +0x84
bytes.(*Buffer).ReadFrom(0x482019ca80, 0x3ff985e4340, 0x48203aa0a8, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:173 +0x200
io.copyBuffer(0x3ff99622b88, 0x482019ca80, 0x3ff985e4340, 0x48203aa0a8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:375 +0x120
io.Copy(0x3ff99622b88, 0x482019ca80, 0x3ff985e4340, 0x48203aa0a8, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:351 +0x54
os/exec.(*Cmd).writerDescriptor.func1(0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:232 +0xa8
os/exec.(*Cmd).Start.func1(0x4820136640, 0x48203f75c0)
        /usr/local/go/src/os/exec/exec.go:340 +0x20
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4

goroutine 357 [syscall]:
syscall.Syscall(0x3f, 0x16, 0x4820355800, 0x200, 0x0, 0x48204f4a00, 0x0)
        /usr/local/go/src/syscall/asm_linux_arm64.s:10 +0x8
syscall.read(0x16, 0x4820355800, 0x200, 0x200, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:783 +0x68
syscall.Read(0x16, 0x4820355800, 0x200, 0x200, 0x48201faa80, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_unix.go:160 +0x48
os.(*File).read(0x482016c3d8, 0x4820355800, 0x200, 0x200, 0x200, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:211 +0x50
os.(*File).Read(0x482016c3d8, 0x4820355800, 0x200, 0x200, 0x1, 0x0, 0x0)
        /usr/local/go/src/os/file.go:95 +0x84
bytes.(*Buffer).ReadFrom(0x48208a0690, 0x3ff985e4340, 0x482016c3d8, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:173 +0x200
io.copyBuffer(0x3ff99622b88, 0x48208a0690, 0x3ff985e4340, 0x482016c3d8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:375 +0x120
io.Copy(0x3ff99622b88, 0x48208a0690, 0x3ff985e4340, 0x482016c3d8, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:351 +0x54
os/exec.(*Cmd).writerDescriptor.func1(0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:232 +0xa8
os/exec.(*Cmd).Start.func1(0x4820816f00, 0x4820081d60)
        /usr/local/go/src/os/exec/exec.go:340 +0x20
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4

goroutine 376 [runnable]:
bytes.makeSlice(0x200, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:195 +0x70
bytes.(*Buffer).ReadFrom(0x4820888cb0, 0x3ff985e4340, 0x482026c3e8, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:167 +0xac
io.copyBuffer(0x3ff99622b88, 0x4820888cb0, 0x3ff985e4340, 0x482026c3e8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:375 +0x120
io.Copy(0x3ff99622b88, 0x4820888cb0, 0x3ff985e4340, 0x482026c3e8, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:351 +0x54
os/exec.(*Cmd).writerDescriptor.func1(0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:232 +0xa8
os/exec.(*Cmd).Start.func1(0x48202ddcc0, 0x48201c9de0)
        /usr/local/go/src/os/exec/exec.go:340 +0x20
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4

goroutine 404 [syscall]:
syscall.Syscall(0x3f, 0x5, 0x482038f200, 0x200, 0x0, 0x4820208800, 0x0)
        /usr/local/go/src/syscall/asm_linux_arm64.s:10 +0x8
syscall.read(0x5, 0x482038f200, 0x200, 0x200, 0x0, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:783 +0x68
syscall.Read(0x5, 0x482038f200, 0x200, 0x200, 0x482023d680, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_unix.go:160 +0x48
os.(*File).read(0x482044e3e8, 0x482038f200, 0x200, 0x200, 0x200, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:211 +0x50
os.(*File).Read(0x482044e3e8, 0x482038f200, 0x200, 0x200, 0x1, 0x0, 0x0)
        /usr/local/go/src/os/file.go:95 +0x84
bytes.(*Buffer).ReadFrom(0x482087a7e0, 0x3ff985e4340, 0x482044e3e8, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:173 +0x200
io.copyBuffer(0x3ff99622b88, 0x482087a7e0, 0x3ff985e4340, 0x482044e3e8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:375 +0x120
io.Copy(0x3ff99622b88, 0x482087a7e0, 0x3ff985e4340, 0x482044e3e8, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:351 +0x54
os/exec.(*Cmd).writerDescriptor.func1(0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:232 +0xa8
os/exec.(*Cmd).Start.func1(0x48203c7cc0, 0x48208ba580)
        /usr/local/go/src/os/exec/exec.go:340 +0x20
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4

goroutine 307 [syscall]:
syscall.Syscall(0x3f, 0x13, 0x4820430c00, 0x200, 0x40, 0x8e8e20, 0xffffffff00000000)
        /usr/local/go/src/syscall/asm_linux_arm64.s:10 +0x8
syscall.read(0x13, 0x4820430c00, 0x200, 0x200, 0x4820585980, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:783 +0x68
syscall.Read(0x13, 0x4820430c00, 0x200, 0x200, 0x48207a2600, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_unix.go:160 +0x48
os.(*File).read(0x482077e070, 0x4820430c00, 0x200, 0x200, 0x200, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:211 +0x50
os.(*File).Read(0x482077e070, 0x4820430c00, 0x200, 0x200, 0x6566657220656220, 0x0, 0x0)
        /usr/local/go/src/os/file.go:95 +0x84
bytes.(*Buffer).ReadFrom(0x4820784310, 0x3ff985e4340, 0x482077e070, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:173 +0x200
io.copyBuffer(0x3ff99622b88, 0x4820784310, 0x3ff985e4340, 0x482077e070, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:375 +0x120
io.Copy(0x3ff99622b88, 0x4820784310, 0x3ff985e4340, 0x482077e070, 0x4820635f88, 0x0, 0x0)
        /usr/local/go/src/io/io.go:351 +0x54
os/exec.(*Cmd).writerDescriptor.func1(0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:232 +0xa8
os/exec.(*Cmd).Start.func1(0x4820788280, 0x482016e920)
        /usr/local/go/src/os/exec/exec.go:340 +0x20
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4

goroutine 386 [syscall]:
syscall.Syscall(0x3f, 0x19, 0x482038e800, 0x200, 0x40, 0x8e8e20, 0xffffffff00000000)
        /usr/local/go/src/syscall/asm_linux_arm64.s:10 +0x8
syscall.read(0x19, 0x482038e800, 0x200, 0x200, 0x482055db00, 0x0, 0x0)
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:783 +0x68
syscall.Read(0x19, 0x482038e800, 0x200, 0x200, 0x48208ac000, 0x0, 0x0)
        /usr/local/go/src/syscall/syscall_unix.go:160 +0x48
os.(*File).read(0x482044e368, 0x482038e800, 0x200, 0x200, 0x200, 0x0, 0x0)
        /usr/local/go/src/os/file_unix.go:211 +0x50
os.(*File).Read(0x482044e368, 0x482038e800, 0x200, 0x200, 0x7bfc20, 0x0, 0x0)
        /usr/local/go/src/os/file.go:95 +0x84
bytes.(*Buffer).ReadFrom(0x482087a0e0, 0x3ff985e4340, 0x482044e368, 0x0, 0x0, 0x0)
        /usr/local/go/src/bytes/buffer.go:173 +0x200
io.copyBuffer(0x3ff99622b88, 0x482087a0e0, 0x3ff985e4340, 0x482044e368, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:375 +0x120
io.Copy(0x3ff99622b88, 0x482087a0e0, 0x3ff985e4340, 0x482044e368, 0x4820602f88, 0x0, 0x0)
        /usr/local/go/src/io/io.go:351 +0x54
os/exec.(*Cmd).writerDescriptor.func1(0x0, 0x0)
        /usr/local/go/src/os/exec/exec.go:232 +0xa8
os/exec.(*Cmd).Start.func1(0x48203c7900, 0x4820011a20)
        /usr/local/go/src/os/exec/exec.go:340 +0x20
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4

goroutine 387 [runnable]:
os/exec.(*Cmd).Start.func1(0x4820752b40, 0x4820219a40)
        /usr/local/go/src/os/exec/exec.go:339
created by os/exec.(*Cmd).Start
        /usr/local/go/src/os/exec/exec.go:341 +0x8a4
Makefile:90: recipe for target 'test-docker-py' failed
make: *** [test-docker-py] Error 2
ubuntu@ubuntu:~/docker$
@mwhudson
Copy link
Contributor

mwhudson commented Jan 7, 2016 via email

@vijaykilari
Copy link
Author

I am running on Cavium Thunderx arm64 platform.
I don't think you will have this platform.

You can try on any arm64 platform

On Thu, Jan 7, 2016 at 2:41 PM, Michael Hudson-Doyle <
notifications@github.com> wrote:

I'll try to reproduce this tomorrow. What hardware are you running on?


Reply to this email directly or view it on GitHub
#13854 (comment).

@rsc rsc changed the title fatal error from go 1.5.2 when compiling docker for arm64 cmd/compile: arm64 fatal error when compiling docker Jan 7, 2016
@rsc
Copy link
Contributor

rsc commented Jan 7, 2016

Tentatively classifying as compiler problem although I suppose it could be linux-arm64-specific runtime code. The report is for Go 1.5.2 but we have no reason to believe the current tip is better.

@rsc rsc added this to the Go1.6 milestone Jan 7, 2016
@mwhudson
Copy link
Contributor

mwhudson commented Jan 7, 2016

Ah, can you provide reproduction instructions that don't require sudo? (I can get access to machines where I have sudo, but it takes a while)

@ianlancetaylor
Copy link
Contributor

@vijaykilari Can we get a reproduction that does not require sudo?

Can you show us a backtrace with current tip with GOTRACEBACK=2 in the environment?

Thanks.

@rsc
Copy link
Contributor

rsc commented Jan 26, 2016

The fact that this is a 1 in 10 failure suggests that it's probably not a compiler bug. I looked at the assembly for arm64 for Cas and Xchg for possible errors that might manifest only under contention. I don't see anything, but I also am not terribly familiar with the architecture. @4ad, maybe there is some subtle bug in those? Missing barriers? Incorrect behavior in Cas or Xchg if the the store-release fails? Something else? None of that is particularly well tested, although the very basic non-concurrent case does get tested at startup.

@4ad
Copy link
Member

4ad commented Jan 27, 2016

The code for all our arm64 atomics matches the code in the Linux kernel, and the code generated by GCC intrinsics. I have run the sync, sync/atomic, and runtime tests millions of times (quite literally, I've ran them in a loop for over a month) on the 48 core (or was it 2*48?) Cavium Thunderx platform (which @vijaykilari thinks we don't have access to).

However, even with all of that working, maybe I misunderstand something about the Go memory model and Go needs something stronger than C here. We can try strengthening the atomics here, and see if this problem persists.

@rsc
Copy link
Contributor

rsc commented Jan 27, 2016

I'd be surprised if Go needs more than the Linux kernel does. But since you have access to a relevant machine, @4ad, do you also have root access? If so, can you run the reproduction case that @vijaykilari suggested?

@4ad
Copy link
Member

4ad commented Jan 27, 2016

I might get root access on it again, but it might take a while. I'll put on a request.

@bradfitz
Copy link
Contributor

bradfitz commented Feb 1, 2016

@4ad, any luck?

@aclements
Copy link
Member

@4ad, which GCC intrinsics do they match? I'm wondering because they specifically have to be sequentially consistent to match the x86 atomics, and it's really easy to be less than sequentially consistent on ARM. Unfortunately, I don't know the semantics of the ARM instructions well enough to be sure, but I don't see any DMBs in the arm64 code, and my understanding is that STLR is only store-release, not sequentially consistent.

@ianlancetaylor
Copy link
Contributor

It looks to me like GCC will emit a dmb instruction for an atomic load or store that uses __ATOMIC_SEQ_CST.

@aclements
Copy link
Member

@4ad, I modeled a sequential consistency test (the same standard test TestStoreLoadSeqCst64 uses) using our current ARM64 StoreUint64/LoadUint64 implementation in the ARMMEM tool and it confirms my concern that our current implementation is not sequentially consistent. (I was't able to get TestStoreLoadSeqCst64 to fail on the one physical ARM64 I have access to, but that doesn't mean it's not broken.)

ARM SC
"PodWW Rfe PodRR Fre"
Cycle=Rfe PodRR Fre PodWW
{
%x0=x; %y0=y;
%y1=y; %x1=x;
}
 P0            | P1            ;
 MOV R0, #1    | MOV R0, #1    ;
 STLR R0, [%x0]| STLR R0, [%y0];
 LDAR R0, [%y1]| LDAR R0, [%x1];
~exists
(0:R0=0 /\ 1:R0=0)

(Unfortunately non-interactive mode fails with a stack overflow, but if you go in to interactive mode and complete either "Commit" action, then hit "Auto" it will work and prove that this snippet is not sequentially consistent.)

If I put DMBs between the two pairs of STLR and LDAR, then it passes the test.

@aclements
Copy link
Member

@vijaykilari, are you still able to reproduce this? Would you be able to try it with a small patch to the Go runtime and sync/atomic packages?

@mwhudson
Copy link
Contributor

mwhudson commented Feb 2, 2016

On 3 February 2016 at 12:08, Austin Clements notifications@github.com
wrote:

@4ad https://github.com/4ad, I modeled a sequential consistency test
(the same standard test TestStoreLoadSeqCst64 uses) using our current ARM64
StoreUint64/LoadUint64 implementation in the ARMMEM tool
https://www.cl.cam.ac.uk/%7Epes20/ppcmem/index.html#ARM and it confirms
my concern that our current implementation is not sequentially
consistent. (I was't able to get TestStoreLoadSeqCst64 to fail on the one
physical ARM64 I have access to, but that doesn't mean it's not broken.)

Which hardware do you have access to? Different implementations definitely
differ on how relaxed their memory hierarchy is, for example thunderX is
more relaxed than xgene.

Cheers,
mwh

@aclements
Copy link
Member

Which hardware do you have access to? Different implementations definitely
differ on how relaxed their memory hierarchy is, for example thunderX is
more relaxed than xgene.

Based on /proc/cpuinfo, it's an "APM X-Gene Mustang"

@bradfitz
Copy link
Contributor

bradfitz commented Feb 2, 2016

I have access to the same: Hardware name: APM X-Gene Mustang board (DT)

@rsc
Copy link
Contributor

rsc commented Feb 3, 2016

@aclements please send a CL with the barriers, in both runtime/internal/atomic and sync/atomic. Thanks.

@vijaykilari
Copy link
Author

Yes, I can test your patch. Please share the details.

On Wed, Feb 3, 2016 at 4:40 AM, Austin Clements notifications@github.com
wrote:

@vijaykilari https://github.com/vijaykilari, are you still able to
reproduce this? Would you be able to try it with a small patch to the Go
runtime and sync/atomic packages?


Reply to this email directly or view it on GitHub
#13854 (comment).

@rsc
Copy link
Contributor

rsc commented Feb 3, 2016 via email

@aclements
Copy link
Member

I spent quite a while trying to figure out what the minimal barriers are to make this work and eventually gave up. https://go-review.googlesource.com/19182 just adds full barriers all over the place. I'll keep looking in to this, but that's certainly sufficient, if overkill.

I'm also not convinced I'm using ARMMEM correctly. Or the tool has a bug. I tried a STLR a; DMB; STLR b | LDAR a; DMB; LDAR b model and it came out not sequentially consistent, even though there's nothing I could do to make it stronger. I will note that it doesn't seem to say anywhere which ARM version the tool implements, even though ARMv8 is substantially different from ARMv7.

@gopherbot
Copy link

CL https://golang.org/cl/19182 mentions this issue.

@aclements
Copy link
Member

@ianlancetaylor, when does GCC emit a DMB? I wasn't able to get it to (much to my surprise, it just emitted stlr and ldar, like we do, regardless of what loads or stores of which variables I did).

@aclements
Copy link
Member

I should add that I tried with gcc 4.8.2.

@aclements
Copy link
Member

@vijaykilari, can you try it with https://go-review.googlesource.com/19182?

@ianlancetaylor
Copy link
Contributor

Looking deeper, it looks GCC uses a dmb for the older __sync builtins, but does not for the newer __atomic builtins. I'm not sure why. This does suggest that I was mistaken, and that you can get adequate synchronization without dmb.

For example, GCC will generate dmb for this input file:

int x;
int f() {
  return __sync_val_compare_and_swap(&x, 0, 1);
}

@aclements
Copy link
Member

Hmm. That doesn't generate a dmb for me with gcc 4.8.2. Are you sure that's 64-bit ARMv8?

I've reread the ARM memory model several times now and I think the way we implement atomics on arm64 means there's a (sequentially consistent) total order over atomic operations, but allows roach-motel reordering between atomics operations and non-atomic operations. This is certainly weaker than what we implement on x86 and I believe on 32-bit arm. It's possibly also weaker than our unwritten memory model or the assumptions of the runtime. @dvyukov?

However, I've also been reading over the lock/unlock implementation and I don't see how this could lead to this particular panic.

@4ad
Copy link
Member

4ad commented Feb 3, 2016

@4ad, any luck?

@bradfitz Not yet, still working on it.

@4ad, which GCC intrinsics do they match?

@aclements the __atomic ones, like you and @ianlancetaylor eventually found out.

@ianlancetaylor
Copy link
Contributor

That is definitely arm64, and explicitly specifying -march=armv8-a doesn't change it. I'm using GCC tip, though.

Looks like it changed a few months ago after plenty of discussion at https://gcc.gnu.org/PR65697 .

@apinski-cavium
Copy link

This is be a known hardware bug with the revision of the chip Vijay is using. I did not workaround it in GCC yet because that revision was not going into production and newer versions of the chip is fixed. It is worked around in OpenJDK though: http://hg.openjdk.java.net/jdk9/dev/hotspot/rev/6e2422a230fd . I should say the only place where a DMB is needed is right before the LDAR for the errata.

@minux
Copy link
Member

minux commented Feb 4, 2016 via email

@aclements
Copy link
Member

@apinski-cavium (or anyone), any sense of how common this preproduction hardware is?

@minux, no benchmarks. I'll try to collect some this morning.

@aclements
Copy link
Member

@apinski-cavium, can you point me to the errata? I wasn't able to find it.

@apinski-cavium
Copy link

We don't have it documented in the public (yet). Here is the part of it from internal errata page (which is exactly the comment above):
For example, for this code sequence where memory locations m0 and m1
are initially 0:

      Thread 1     |    Thread 2
   ----------------+-------------------
   mov w0, #1      |   mov w1, #2
   stlr w0, [m0]   |   stlr w1, [m1]
   ldar w0, [m1]   |   ldar w1, [m0]

The allowable results (assuming sequential consistency) are:

   w0 = 2, w1 = 1
   w0 = 0, w1 = 1
   w0 = 2, w1 = 0

An issue exists where sometimes the result will be:

   w0 = 0, w1 = 0

--- CUT ---
And this is what the workaround part says:
Add a DMB SY before any LDAR.

This only happens for the following output of /proc/cpuinfo:
CPU variant : 0x0
CPU part : 0x0a1

That is when variant is 1, ThunderX chip does not have the errata.

@apinski-cavium
Copy link

Also golang is not a jit so it should not be checking /proc/cpuinfo at all unless someone says he wants a native compiling. There should be an option to enable/disable this workaround by default. Note as I mentioned this variant of the chip is not going to production, we should have the default default to be disabled.

@aclements
Copy link
Member

@apinski-cavium, thanks for the errata.

I'm inclined to simply not fix this, since it sounds like this hardware is quite rare and it's not even fixed in GCC. Also, since Go is not JITed, we would have to add a branch to all of the ARM64 atomics to implement the workaround, which would incur a (small) performance penalty on all ARM64 devices.

Also golang is not a jit so it should not be checking /proc/cpuinfo at all unless someone says he wants a native compiling.

I'm not sure what you mean by this. There is nothing but native compilation, so if we wanted to work around this, we would have to check /proc/cpuinfo (or somehow get the CPU variant and part) at runtime and optionally enable this workaround. We can't make this decision at compile time or let the user make this decision at compile time because they may compile on a machine that doesn't have this errata and then run on a machine that does. (We do this sort of thing for hardware features on ARM and x86, though so far we get everything from auxv sections or direct detection.)

@bradfitz
Copy link
Contributor

bradfitz commented Feb 4, 2016

We add codegen options incredibly sparingly. I don't think we'll add something like GO386 or GOARM for an unreleased processor.

@randall77
Copy link
Contributor

I don't think it is worth fixing either. It might be worth detecting the bad processor and failing early, though.

@bradfitz bradfitz modified the milestones: Go1.7, Go1.6 Feb 4, 2016
@ianlancetaylor
Copy link
Contributor

@aclements @apinski-cavium is a GCC developer, and the GCC approach for these issues is always another command line option.

@apinski-cavium Go takes a different approach. By comparison to GCC, the compiler has approximately zero compiler options. Instead, when essential decisions must be made based on the CPU, it is done using a runtime check and a runtime branch. The Go compiler doesn't do any sort of advanced processor-specific scheduling anyhow.

@rsc
Copy link
Contributor

rsc commented Feb 5, 2016

I am going to close this bug. It seems the right default assumption that pre-production hardware is not commonly used. People using pre-production hardware should typically expect problems (generally, not just with Go). On top of that, the arm64 port is currently only experimental. Detecting this one buggy piece of hardware not in common use in our experimental port seems to me unnecessary complexity. For @vijaykilari and others, I think Austin's CL does fix the problem. Since people using arm64 are building from source already, it seems fine to have to apply an extra software fix for the hardware bug.

At the time we decide to make the arm64 port a first-class port, if evidence has arrived that the use of this buggy hardware is in fact common, then we can revisit detection and/or mitigation. But our default should be to assume it is not common.

@rsc rsc closed this as completed Feb 5, 2016
@golang golang locked and limited conversation to collaborators Feb 28, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests