cmd/go: fix -buildmode={c-archive,c-shared,pie} for gccgo
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 29 Jun 2017 15:14:05 +0000 (15:14 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 29 Jun 2017 15:14:05 +0000 (15:14 +0000)
    The tests are misc/cgo tests that are not currently run but will be
    run soon.

    Reviewed-on: https://go-review.googlesource.com/47037

From-SVN: r249794

gcc/go/gofrontend/MERGE
libgo/go/cmd/go/build.go

index b52320bc4b072023f5a815900cbe16b78db72669..fb28b1a1c7642a3a60c7e49a8b96c7095c7d528a 100644 (file)
@@ -1,4 +1,4 @@
-66d14d95a5a453682fe387319c80bc4fc40d96ad
+8c4d6fd19f6d5dc9b41be384c60507f2236f05ec
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 7e98379675f94ca9c12343348d4b8c6e275c4560..72265efae3141c66047fa11423c851f23dab07ed 100644 (file)
@@ -342,16 +342,20 @@ func buildModeInit() {
                        }
                        return p
                }
-               switch platform {
-               case "darwin/arm", "darwin/arm64":
-                       codegenArg = "-shared"
-               default:
-                       switch goos {
-                       case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris":
-                               // Use -shared so that the result is
-                               // suitable for inclusion in a PIE or
-                               // shared library.
+               if gccgo {
+                       codegenArg = "-fPIC"
+               } else {
+                       switch platform {
+                       case "darwin/arm", "darwin/arm64":
                                codegenArg = "-shared"
+                       default:
+                               switch goos {
+                               case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris":
+                                       // Use -shared so that the result is
+                                       // suitable for inclusion in a PIE or
+                                       // shared library.
+                                       codegenArg = "-shared"
+                               }
                        }
                }
                exeSuffix = ".a"
@@ -374,10 +378,14 @@ func buildModeInit() {
        case "default":
                switch platform {
                case "android/arm", "android/arm64", "android/amd64", "android/386":
-                       codegenArg = "-shared"
+                       if !gccgo {
+                               codegenArg = "-shared"
+                       }
                        ldBuildmode = "pie"
                case "darwin/arm", "darwin/arm64":
-                       codegenArg = "-shared"
+                       if !gccgo {
+                               codegenArg = "-shared"
+                       }
                        fallthrough
                default:
                        ldBuildmode = "exe"
@@ -387,7 +395,7 @@ func buildModeInit() {
                ldBuildmode = "exe"
        case "pie":
                if gccgo {
-                       fatalf("-buildmode=pie not supported by gccgo")
+                       codegenArg = "-fPIE"
                } else {
                        switch platform {
                        case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x",
@@ -1053,7 +1061,7 @@ func (b *builder) action1(mode buildMode, depMode buildMode, p *Package, looksha
                // Install header for cgo in c-archive and c-shared modes.
                if p.usesCgo() && (buildBuildmode == "c-archive" || buildBuildmode == "c-shared") {
                        hdrTarget := a.target[:len(a.target)-len(filepath.Ext(a.target))] + ".h"
-                       if buildContext.Compiler == "gccgo" {
+                       if buildContext.Compiler == "gccgo" && *buildO == "" {
                                // For the header file, remove the "lib"
                                // added by go/build, so we generate pkg.h
                                // rather than libpkg.h.
@@ -3025,6 +3033,8 @@ func (tools gccgoToolchain) link(b *builder, root *action, out string, allaction
                ldflags = append(ldflags, "-shared", "-nostdlib", "-Wl,--whole-archive", "-lgolibbegin", "-Wl,--no-whole-archive", "-lgo", "-lgcc_s", "-lgcc", "-lc", "-lgcc")
        case "shared":
                ldflags = append(ldflags, "-zdefs", "-shared", "-nostdlib", "-lgo", "-lgcc_s", "-lgcc", "-lc")
+       case "pie":
+               ldflags = append(ldflags, "-pie")
 
        default:
                fatalf("-buildmode=%s not supported for gccgo", buildmode)
@@ -3100,7 +3110,7 @@ func (tools gccgoToolchain) cc(b *builder, p *Package, objdir, ofile, cfile stri
 // maybePIC adds -fPIC to the list of arguments if needed.
 func (tools gccgoToolchain) maybePIC(args []string) []string {
        switch buildBuildmode {
-       case "c-shared", "shared", "plugin":
+       case "c-archive", "c-shared", "shared", "plugin":
                args = append(args, "-fPIC")
        }
        return args