go get ... fails with SIGILL on armhf

Bug #1200255 reported by James Page
16
This bug affects 2 people
Affects Status Importance Assigned to Milestone
golang (Debian)
Fix Released
Unknown
golang (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

jamespage@winehouse:~/go$ go get -v launchpad.net/juju-core/...
SIGILL: illegal instruction
PC=0x6854e

net._C2func_getaddrinfo(0xb6935138, 0x0, 0x10723300, 0x106f3190, 0xb6a7509c, ...)
        net/_obj/_cgo_defun.c:43 +0x30
net.cgoLookupIPCNAME(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
        net/_obj/_cgo_gotypes.go:180 +0xfc
net.cgoLookupIP(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
        net/_obj/_cgo_gotypes.go:226 +0x54
net.cgoLookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
        net/_obj/_cgo_gotypes.go:104 +0x54
net.lookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
        /usr/lib/go/src/pkg/net/lookup_unix.go:56 +0x4c
net.lookupHostDeadline(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
        /usr/lib/go/src/pkg/net/lookup.go:19 +0xf4
net.resolveInternetAddr(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
        /usr/lib/go/src/pkg/net/ipsock.go:210 +0x344
net.resolveAddr(0x309890, 0x4, 0x3044f0, 0x3, 0x10723200, ...)
        /usr/lib/go/src/pkg/net/dial.go:97 +0x3b0
net.resolveAndDial(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
        /usr/lib/go/src/pkg/net/fd_unix.go:45 +0x74
net.(*Dialer).Dial(0xb6a40e70, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
        /usr/lib/go/src/pkg/net/dial.go:146 +0xa4
net.Dial(0x3044f0, 0x3, 0x10723200, 0x16, 0x1197e0, ...)
        /usr/lib/go/src/pkg/net/dial.go:131 +0x60
net/http.(*Transport).dial(0x1069b4e0, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
        /usr/lib/go/src/pkg/net/http/transport.go:384 +0xb0
net/http.(*Transport).dialConn(0x1069b4e0, 0x10723220, 0x106f30f0, 0x2, 0xb6a7500c, ...)
        /usr/lib/go/src/pkg/net/http/transport.go:427 +0x68
net/http.func·012()
        /usr/lib/go/src/pkg/net/http/transport.go:402 +0x40
created by net/http.(*Transport).getConn
        /usr/lib/go/src/pkg/net/http/transport.go:404 +0x114

goroutine 1 [select]:
net/http.(*Transport).getConn(0x1069b4e0, 0x10723220, 0x10723220, 0x0, 0x0, ...)
        /usr/lib/go/src/pkg/net/http/transport.go:407 +0x224
net/http.(*Transport).RoundTrip(0x1069b4e0, 0x10745700, 0x16bac0, 0x0, 0x0, ...)
        /usr/lib/go/src/pkg/net/http/transport.go:181 +0x2b8
net/http.send(0x10745700, 0x1066bf40, 0x1069b4e0, 0x0, 0x0, ...)
        /usr/lib/go/src/pkg/net/http/client.go:166 +0x340
net/http.(*Client).send(0x4ddae8, 0x10745700, 0x3b, 0x2, 0x10735d06, ...)
        /usr/lib/go/src/pkg/net/http/client.go:100 +0x10c
net/http.(*Client).doFollowingRedirects(0x4ddae8, 0x10745700, 0x35cd10, 0x0, 0x0, ...)
        /usr/lib/go/src/pkg/net/http/client.go:282 +0x5c8
net/http.(*Client).Get(0x4ddae8, 0x10735d00, 0x3b, 0x3, 0x0, ...)
        /usr/lib/go/src/pkg/net/http/client.go:236 +0xac
main.httpGET(0x10735d00, 0x3b, 0x0, 0x0, 0x0, ...)
        /usr/lib/go/src/cmd/go/http.go:29 +0x58
main.launchpadVCS(0x107231c0, 0x107231c0, 0x30b990)
        /usr/lib/go/src/cmd/go/vcs.go:681 +0xdc
main.repoRootForImportPathStatic(0xbef9a6f9, 0x1b, 0x301db0, 0x0, 0x141bcb1, ...)
        /usr/lib/go/src/cmd/go/vcs.go:397 +0x6b4
main.repoRootForImportPath(0xbef9a6f9, 0x1b, 0xbef9a6f9, 0x1b, 0xbef9a6f9, ...)
        /usr/lib/go/src/cmd/go/vcs.go:332 +0x48
main.downloadPackage(0x1068b8c0, 0x106ba700, 0xbef9a6f9)
        /usr/lib/go/src/cmd/go/get.go:278 +0xdf0
main.download(0xbef9a6f9, 0x1b, 0x10691d30)
        /usr/lib/go/src/cmd/go/get.go:161 +0x678
main.runGet(0x4d8228, 0x1066b018, 0x1, 0x1)
        /usr/lib/go/src/cmd/go/get.go:68 +0xc4
main.main()
        /usr/lib/go/src/cmd/go/main.go:156 +0x4ec

goroutine 2 [syscall]:

goroutine 4 [syscall]:
created by os/signal.init·1
        /usr/lib/go/src/pkg/os/signal/signal_unix.go:27 +0x44

trap 0x6
error 0x0
oldmask 0x0
r0 0x0
r1 0xb6f816d5
r2 0x5
r3 0x1070d000
r4 0x6f
r5 0xbef9a118
r6 0x0
r7 0xbef9a118
r8 0x2
r9 0x4e1958
r10 0x1070d000
fp 0xbef9a11d
ip 0xe81eff09
sp 0xbef9a0d8
lr 0xb6f15a2a
pc 0x6854e
cpsr 0x400f0130
fault 0x1bc

ProblemType: Bug
DistroRelease: Ubuntu 13.10
Package: golang 2:1.1.1-0ubuntu1
ProcVersionSignature: Ubuntu 3.5.0-223.34-omap4 3.5.7.9
Uname: Linux 3.5.0-223-omap4 armv7l
ApportVersion: 2.10.2-0ubuntu4
Architecture: armhf
Date: Thu Jul 11 15:46:53 2013
MarkForUpload: True
PackageArchitecture: all
SourcePackage: golang
UpgradeStatus: Upgraded to saucy on 2013-02-28 (133 days ago)

Revision history for this message
James Page (james-page) wrote :
James Page (james-page)
summary: - go get ... fails with SIGILL
+ go get ... fails with SIGILL on armhf
Revision history for this message
Robie Basak (racb) wrote :

Confirmed. I did:

apt-get install golang bzr
GOPATH=~/gocode go get -u launchpad.net/gocheck

I get SIGSEGV. It seems to get further sometimes. It worked one time.

Changed in golang (Ubuntu):
status: New → Confirmed
Revision history for this message
Dave Cheney (dave-cheney) wrote :

I'm guessing either

a. it really is an illegal instruction, but that is unlikely
b. unaligned dword mul or something like that

can you please, a upload the juju binary and i'll try it on my machine, or the binary and the core dump, or at least the gdb backtrace and disasm.

c. outside possibility - i gave up on the 3.5.0 series of kernels on my pandaboard back in Q, this could be a kernel bug. Running the archlinuxarm kernel resolved the issue.

Revision history for this message
Robie Basak (racb) wrote : Re: [Bug 1200255] Re: go get ... fails with SIGILL on armhf

Dave,

Thanks for looking. You should be able to reproduce straight from the archive in Saucy. You just needed golang from Saucy and bzr installed. See my steps above - I believe only that one line is needed. Let me know if this is a problem for you and I'll extract the binary for you on Monday.

Revision history for this message
Dave Cheney (dave-cheney) wrote :

It'll take me a while to reproduce this build environment. My pandaboard does not run saucy. Can anyone provide me with the binary and .core file ?

Revision history for this message
Robie Basak (racb) wrote :
  • go Edit (4.8 MiB, application/octet-stream)

go binary from saucy attached (/usr/bin/go from 2:1.1.1-0ubuntu1). I couldn't get it to give me a core file - it seems to trap SEGV with golang-specific handling. Any hints?

Revision history for this message
Dave Cheney (dave-cheney) wrote :
Download full text (5.5 KiB)

We are stripping the binaries.

alarm(~) % file ./go.1
./go.1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV),
dynamically linked (uses shared libs), stripped

That is why it falis.

On Tue, Jul 16, 2013 at 12:46 AM, Robie Basak
<email address hidden> wrote:
> go binary from saucy attached (/usr/bin/go from 2:1.1.1-0ubuntu1). I
> couldn't get it to give me a core file - it seems to trap SEGV with
> golang-specific handling. Any hints?
>
> ** Attachment added: "go"
> https://bugs.launchpad.net/ubuntu/+source/golang/+bug/1200255/+attachment/3737603/+files/go
>
> --
> You received this bug notification because you are subscribed to the bug
> report.
> https://bugs.launchpad.net/bugs/1200255
>
> Title:
> go get ... fails with SIGILL on armhf
>
> Status in “golang” package in Ubuntu:
> Confirmed
>
> Bug description:
> jamespage@winehouse:~/go$ go get -v launchpad.net/juju-core/...
> SIGILL: illegal instruction
> PC=0x6854e
>
> net._C2func_getaddrinfo(0xb6935138, 0x0, 0x10723300, 0x106f3190, 0xb6a7509c, ...)
> net/_obj/_cgo_defun.c:43 +0x30
> net.cgoLookupIPCNAME(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> net/_obj/_cgo_gotypes.go:180 +0xfc
> net.cgoLookupIP(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> net/_obj/_cgo_gotypes.go:226 +0x54
> net.cgoLookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> net/_obj/_cgo_gotypes.go:104 +0x54
> net.lookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/lookup_unix.go:56 +0x4c
> net.lookupHostDeadline(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/lookup.go:19 +0xf4
> net.resolveInternetAddr(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
> /usr/lib/go/src/pkg/net/ipsock.go:210 +0x344
> net.resolveAddr(0x309890, 0x4, 0x3044f0, 0x3, 0x10723200, ...)
> /usr/lib/go/src/pkg/net/dial.go:97 +0x3b0
> net.resolveAndDial(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
> /usr/lib/go/src/pkg/net/fd_unix.go:45 +0x74
> net.(*Dialer).Dial(0xb6a40e70, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
> /usr/lib/go/src/pkg/net/dial.go:146 +0xa4
> net.Dial(0x3044f0, 0x3, 0x10723200, 0x16, 0x1197e0, ...)
> /usr/lib/go/src/pkg/net/dial.go:131 +0x60
> net/http.(*Transport).dial(0x1069b4e0, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:384 +0xb0
> net/http.(*Transport).dialConn(0x1069b4e0, 0x10723220, 0x106f30f0, 0x2, 0xb6a7500c, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:427 +0x68
> net/http.func·012()
> /usr/lib/go/src/pkg/net/http/transport.go:402 +0x40
> created by net/http.(*Transport).getConn
> /usr/lib/go/src/pkg/net/http/transport.go:404 +0x114
>
> goroutine 1 [select]:
> net/http.(*Transport).getConn(0x1069b4e0, 0x10723220, 0x10723220, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:407 +0x224
> net/http.(*Transport).RoundTrip(0x1069b4e0, 0x10745700, 0x16bac0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:181 +0x2b8
> net/http.send(0x10745700, 0x1066bf40, 0x1069b4e0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/http...

Read more...

Revision history for this message
Dave Cheney (dave-cheney) wrote :
Download full text (6.4 KiB)

To quote myself: "Please do not strip Go binaries, it is not
supported, not tested, is often broken, and doesn't do what you want"

To unpack that a bit

* not supported, as in, we don't support it, and recommend against it when asked
* not tested, we don't test stripped binaries as part of the build CI process
* is often broken, stripping a go binary will produce anywhere from
no, to subtle, to outright execution failure, see above
* doesn't do what you want, we have a flag called -g, but the
information it stores in the elf sections is a superset of what strip
thinks it is removing, in short, strip does not strip out the debug
data, we hide it too well.

On Tue, Jul 16, 2013 at 8:53 AM, David Cheney
<email address hidden> wrote:
> We are stripping the binaries.
>
> alarm(~) % file ./go.1
> ./go.1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV),
> dynamically linked (uses shared libs), stripped
>
> That is why it falis.
>
> On Tue, Jul 16, 2013 at 12:46 AM, Robie Basak
> <email address hidden> wrote:
>> go binary from saucy attached (/usr/bin/go from 2:1.1.1-0ubuntu1). I
>> couldn't get it to give me a core file - it seems to trap SEGV with
>> golang-specific handling. Any hints?
>>
>> ** Attachment added: "go"
>> https://bugs.launchpad.net/ubuntu/+source/golang/+bug/1200255/+attachment/3737603/+files/go
>>
>> --
>> You received this bug notification because you are subscribed to the bug
>> report.
>> https://bugs.launchpad.net/bugs/1200255
>>
>> Title:
>> go get ... fails with SIGILL on armhf
>>
>> Status in “golang” package in Ubuntu:
>> Confirmed
>>
>> Bug description:
>> jamespage@winehouse:~/go$ go get -v launchpad.net/juju-core/...
>> SIGILL: illegal instruction
>> PC=0x6854e
>>
>> net._C2func_getaddrinfo(0xb6935138, 0x0, 0x10723300, 0x106f3190, 0xb6a7509c, ...)
>> net/_obj/_cgo_defun.c:43 +0x30
>> net.cgoLookupIPCNAME(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
>> net/_obj/_cgo_gotypes.go:180 +0xfc
>> net.cgoLookupIP(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
>> net/_obj/_cgo_gotypes.go:226 +0x54
>> net.cgoLookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
>> net/_obj/_cgo_gotypes.go:104 +0x54
>> net.lookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
>> /usr/lib/go/src/pkg/net/lookup_unix.go:56 +0x4c
>> net.lookupHostDeadline(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
>> /usr/lib/go/src/pkg/net/lookup.go:19 +0xf4
>> net.resolveInternetAddr(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
>> /usr/lib/go/src/pkg/net/ipsock.go:210 +0x344
>> net.resolveAddr(0x309890, 0x4, 0x3044f0, 0x3, 0x10723200, ...)
>> /usr/lib/go/src/pkg/net/dial.go:97 +0x3b0
>> net.resolveAndDial(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
>> /usr/lib/go/src/pkg/net/fd_unix.go:45 +0x74
>> net.(*Dialer).Dial(0xb6a40e70, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
>> /usr/lib/go/src/pkg/net/dial.go:146 +0xa4
>> net.Dial(0x3044f0, 0x3, 0x10723200, 0x16, 0x1197e0, ...)
>> /usr/lib/go/src/pkg/net/dial.go:131 +0x60
>> net/http.(*Transport).dial(0x1069b4e0, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
>> /usr/lib/go/src/pkg/net/http/tran...

Read more...

Revision history for this message
Robie Basak (racb) wrote :

Thanks Dave.

Debian policy says that binaries should be stripped, which is why we're doing it: http://www.debian.org/doc/debian-policy/ch-files.html#s-binaries

I'll certainly try building the package without stripping to verify that this fixes the problem.

I'm not sure whether not stripping the go binaries will be acceptable for Debian/Ubuntu due to the policy violation. I'm not well versed enough in this stuff to comment.

Revision history for this message
Robie Basak (racb) wrote :

Though it does say "should", not "must".

Revision history for this message
Robie Basak (racb) wrote :

Indeed, dropping dh_strip appears to fix the issue.

Revision history for this message
Robie Basak (racb) wrote :
tags: added: patch
Revision history for this message
Dave Cheney (dave-cheney) wrote :

To clarify my previous statements.

* I do not disagree with the debian policy, it is there for a good reason
* Having said that, it stripping Go binaries doesn't work, and nobody is looking at making it work, so there is that.

Thanks for patching the build formula.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package golang - 2:1.1.1-3ubuntu3

---------------
golang (2:1.1.1-3ubuntu3) saucy; urgency=low

  * Disable upstream-unsupported stripping of binaries to fix go crash
    (LP: #1200255).
 -- Robie Basak <email address hidden> Wed, 17 Jul 2013 10:43:11 +0000

Changed in golang (Ubuntu):
status: Confirmed → Fix Released
Revision history for this message
Robie Basak (racb) wrote :

I have verified that this fixes the issue by upgrading an armhf LXC machine that was reproducing the problem. The problem went away.

Revision history for this message
Paul Tagliamonte (paultag) wrote :

Not stripping should be fine if it causes an issue like this. It's a should in policy

Changed in golang (Debian):
status: Unknown → New
Revision history for this message
Dave Cheney (dave-cheney) wrote :
Download full text (5.2 KiB)

Excellent. Thanks for getting this sorted.

On Thu, Jul 18, 2013 at 12:44 AM, Bug Watch Updater
<email address hidden> wrote:
> ** Changed in: golang (Debian)
> Status: Unknown => New
>
> --
> You received this bug notification because you are subscribed to the bug
> report.
> https://bugs.launchpad.net/bugs/1200255
>
> Title:
> go get ... fails with SIGILL on armhf
>
> Status in “golang” package in Ubuntu:
> Fix Released
> Status in “golang” package in Debian:
> New
>
> Bug description:
> jamespage@winehouse:~/go$ go get -v launchpad.net/juju-core/...
> SIGILL: illegal instruction
> PC=0x6854e
>
> net._C2func_getaddrinfo(0xb6935138, 0x0, 0x10723300, 0x106f3190, 0xb6a7509c, ...)
> net/_obj/_cgo_defun.c:43 +0x30
> net.cgoLookupIPCNAME(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> net/_obj/_cgo_gotypes.go:180 +0xfc
> net.cgoLookupIP(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> net/_obj/_cgo_gotypes.go:226 +0x54
> net.cgoLookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> net/_obj/_cgo_gotypes.go:104 +0x54
> net.lookupHost(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/lookup_unix.go:56 +0x4c
> net.lookupHostDeadline(0x10723200, 0x12, 0x0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/lookup.go:19 +0xf4
> net.resolveInternetAddr(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
> /usr/lib/go/src/pkg/net/ipsock.go:210 +0x344
> net.resolveAddr(0x309890, 0x4, 0x3044f0, 0x3, 0x10723200, ...)
> /usr/lib/go/src/pkg/net/dial.go:97 +0x3b0
> net.resolveAndDial(0x3044f0, 0x3, 0x10723200, 0x16, 0x0, ...)
> /usr/lib/go/src/pkg/net/fd_unix.go:45 +0x74
> net.(*Dialer).Dial(0xb6a40e70, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
> /usr/lib/go/src/pkg/net/dial.go:146 +0xa4
> net.Dial(0x3044f0, 0x3, 0x10723200, 0x16, 0x1197e0, ...)
> /usr/lib/go/src/pkg/net/dial.go:131 +0x60
> net/http.(*Transport).dial(0x1069b4e0, 0x3044f0, 0x3, 0x10723200, 0x16, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:384 +0xb0
> net/http.(*Transport).dialConn(0x1069b4e0, 0x10723220, 0x106f30f0, 0x2, 0xb6a7500c, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:427 +0x68
> net/http.func·012()
> /usr/lib/go/src/pkg/net/http/transport.go:402 +0x40
> created by net/http.(*Transport).getConn
> /usr/lib/go/src/pkg/net/http/transport.go:404 +0x114
>
> goroutine 1 [select]:
> net/http.(*Transport).getConn(0x1069b4e0, 0x10723220, 0x10723220, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:407 +0x224
> net/http.(*Transport).RoundTrip(0x1069b4e0, 0x10745700, 0x16bac0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/http/transport.go:181 +0x2b8
> net/http.send(0x10745700, 0x1066bf40, 0x1069b4e0, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/http/client.go:166 +0x340
> net/http.(*Client).send(0x4ddae8, 0x10745700, 0x3b, 0x2, 0x10735d06, ...)
> /usr/lib/go/src/pkg/net/http/client.go:100 +0x10c
> net/http.(*Client).doFollowingRedirects(0x4ddae8, 0x10745700, 0x35cd10, 0x0, 0x0, ...)
> /usr/lib/go/src/pkg/net/http/client.go:282 +0x5c8
> net/http.(*Cli...

Read more...

Changed in golang (Debian):
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.