re PR go/68255 (cgo-generated constructor not being called)

PR go/68255
    cmd/go: always use --whole-archive for gccgo packages
    
    This is a backport of https://golang.org/cl/16775.
    
    This is, in effect, what the gc toolchain does.  It fixes cases where Go
    code refers to a C global variable; without this, if the global variable
    was the only thing visible in the C code, the generated cgo file might
    not get pulled in from the archive, leaving the Go variable
    uninitialized.
    
    This was reported against gccgo as https://gcc.gnu.org/PR68255 .
    
    Reviewed-on: https://go-review.googlesource.com/16778

From-SVN: r230120
This commit is contained in:
Ian Lance Taylor 2015-11-10 20:31:11 +00:00
parent c5a237e923
commit ea5c200338
2 changed files with 3 additions and 11 deletions

View file

@ -1,4 +1,4 @@
012ab5cb2ef1c26e8023ce90d3a2bba174da7b30
0c07751d139ef90a43ef7f299f925622a8792a9f
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View file

@ -2555,17 +2555,9 @@ func (tools gccgoToolchain) ld(b *builder, root *action, out string, allactions
}
}
switch ldBuildmode {
case "c-archive", "c-shared":
ldflags = append(ldflags, "-Wl,--whole-archive")
}
ldflags = append(ldflags, "-Wl,--whole-archive")
ldflags = append(ldflags, afiles...)
switch ldBuildmode {
case "c-archive", "c-shared":
ldflags = append(ldflags, "-Wl,--no-whole-archive")
}
ldflags = append(ldflags, "-Wl,--no-whole-archive")
ldflags = append(ldflags, cgoldflags...)
ldflags = append(ldflags, envList("CGO_LDFLAGS", "")...)