[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#726794: simple program compiled with gccgo segfaults



Package: gccgo
Version: 4:4.8.1-3
Severity: important

I wanted to compile a program using gccgo to see how much faster it is.
However, the program segfaults. A minimum example that segfaults is
this:

    package main
    
    import (
        "flag"
        "fmt"
        "log"
        "os"
        "strings"
    )
    
    var aflag = flag.String("a", "b", "c")
    
    func verifyExtract(filename string) {
        u, err2 := os.Create("/tmp/ex")
        if err2 != nil {
            log.Fatal(err2)
        }
        fmt.Printf("%v\n", u)
    
        strings.HasSuffix(filename, ".bz2")
        log.Printf("bz2\n")
        strings.HasSuffix(filename, ".gzip")
        log.Printf("gz\n")
    }
    
    func main() {
        fmt.Println("This example compiles but segfaults")
        b := []string{
            "/tmp/bench/audacity_2.0.4.orig.tar.xz",
            "/tmp/bench/ardour3_3.4~dfsg.orig.tar.xz",
            "/tmp/bench/anjuta_3.8.4.orig.tar.xz",
            "/tmp/bench/apache2_2.4.6.orig.tar.bz2",
            "/tmp/bench/afterstep_2.2.12.orig.tar.bz2",
            "/tmp/bench/abtransfers_0.0.4.1.orig.tar.bz2",
            "/tmp/bench/aces3_3.0.6.orig.tar.gz",
            "/tmp/bench/9base_6.orig.tar.gz",
            "/tmp/bench/3depict_0.0.13.orig.tar.gz",
        }
    
        for _, f := range b {
            fmt.Printf("f = %v\n", f)
            verifyExtract(f)
        }
    }

$ go build 
$ ./helloworld.O 
This example compiles but segfaults
f = /tmp/bench/audacity_2.0.4.orig.tar.xz
&{0xc2000662a0}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/ardour3_3.4~dfsg.orig.tar.xz
&{0xc200066480}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/anjuta_3.8.4.orig.tar.xz
&{0xc2000664b0}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/apache2_2.4.6.orig.tar.bz2
&{0xc2000664e0}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/afterstep_2.2.12.orig.tar.bz2
&{0xc200066510}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/abtransfers_0.0.4.1.orig.tar.bz2
&{0xc200066540}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/aces3_3.0.6.orig.tar.gz
&{0xc200066570}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/9base_6.orig.tar.gz
&{0xc2000665a0}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
f = /tmp/bench/3depict_0.0.13.orig.tar.gz
&{0xc2000665d0}
2013/10/19 12:11:05 bz2
2013/10/19 12:11:05 gz
$ go build -compiler gccgo
$ ulimit -c unlimited
$ ./helloworld.O     
zsh: segmentation fault (core dumped)  ./helloworld.O
$ gdb helloworld.O /tmp/helloworld.O.core.18748 
Reading symbols from /home/michael/gocode/src/helloworld.O/helloworld.O...done.
[New LWP 18748]

warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fffb3dfe000
Core was generated by `./helloworld.O'.
Program terminated with signal 11, Segmentation fault.
#0  0x00007fd957f2f124 in read_uint32 () from /usr/lib/x86_64-linux-gnu/libgo.so.4
gdb $ bt
#0  0x00007fd957f2f124 in read_uint32 () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#1  0x00007fd957f31c14 in backtrace_dwarf_add () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#2  0x00007fd957f33a97 in elf_add () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#3  0x00007fd957f33e5f in backtrace_initialize () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#4  0x00007fd957f32be5 in fileline_initialize () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#5  0x00007fd957f32ce2 in backtrace_pcinfo () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#6  0x00007fd957f33051 in unwind () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#7  0x00007fd9572f3ea9 in _Unwind_Backtrace () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#8  0x00007fd957f330a5 in backtrace_full () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#9  0x00007fd957ce15e6 in runtime_callers () from /usr/lib/x86_64-linux-gnu/libgo.so.4
#10 0x00007fd957cf1eeb in mcommoninit () at ../../../src/libgo/runtime/proc.c:666
#11 0x00007fd957cf31c3 in runtime_schedinit () at ../../../src/libgo/runtime/proc.c:476
#12 0x0000000000401c61 in main ()
gdb $ quit
$ ldd helloworld.O
	linux-vdso.so.1 (0x00007fff373fe000)
	libgo.so.4 => /usr/lib/x86_64-linux-gnu/libgo.so.4 (0x00007ff338c4f000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff338951000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff33873a000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff33838d000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff339998000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff338171000)
$ dpkg -S /usr/lib/x86_64-linux-gnu/libgo.so.4      
libgo4:amd64: /usr/lib/x86_64-linux-gnu/libgo.so.4

$ dpkg -S /lib/x86_64-linux-gnu/libm.so.6     
libc6:amd64: /lib/x86_64-linux-gnu/libm.so.6

$ dpkg -S /lib/x86_64-linux-gnu/libgcc_s.so.1
libgcc1:amd64: /lib/x86_64-linux-gnu/libgcc_s.so.1

$ dpkg -S /lib/x86_64-linux-gnu/libc.so.6    
libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6

$ dpkg -S /lib/x86_64-linux-gnu/libpthread.so.0
libc6:amd64: /lib/x86_64-linux-gnu/libpthread.so.0

$ dpkg -l libc6 libgo4 libgcc1
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                Version                Architecture           Description
+++-===================================-======================-======================-===========================================================================
ii  libc6:amd64                         2.17-2                 amd64                  Embedded GNU C Library: Shared libraries
rc  libc6:armel                         2.13-38                armel                  Embedded GNU C Library: Shared libraries
rc  libc6:i386                          2.13-38                i386                   Embedded GNU C Library: Shared libraries
ii  libgcc1:amd64                       1:4.8.1-10             amd64                  GCC support library
rc  libgcc1:armel                       1:4.7.2-5              armel                  GCC support library
rc  libgcc1:i386                        1:4.7.2-5              i386                   GCC support library
ii  libgo4:amd64                        4.8.1-10               amd64                  Runtime library for GNU Go applications


Let me know if you need more information.

-- System Information:
Debian Release: 7.0
  APT prefers testing
  APT policy: (990, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: armel
i386

Kernel: Linux 3.8.3 (SMP w/8 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages gccgo depends on:
ii  cpp        4:4.8.1-3
ii  gcc        4:4.8.1-3
ii  gccgo-4.8  4.8.1-10

gccgo recommends no packages.

Versions of packages gccgo suggests:
pn  gccgo-multilib  <none>

-- no debconf information


Reply to: