]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go, cmd/link: enable -buildmode=c-shared on linux/386
authorHyang-Ah Hana Kim <hyangah@gmail.com>
Thu, 19 Nov 2015 23:18:03 +0000 (18:18 -0500)
committerHyang-Ah Hana Kim <hyangah@gmail.com>
Fri, 20 Nov 2015 03:49:13 +0000 (03:49 +0000)
All the heavy lifting was done by Michael Hudson-Doyle.

Change-Id: I176f15581055078854c2ad9a5807c4dcf0f8d8c5
Reviewed-on: https://go-review.googlesource.com/17074
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/go/build.go
src/cmd/link/internal/ld/lib.go
src/cmd/link/internal/x86/asm.go

index b980a6b9d35239672c23a83b3ba524d4584f120e..11ad561c4633713f2f60b6eadf95b474ab8970d6 100644 (file)
@@ -350,7 +350,7 @@ func buildModeInit() {
                        codegenArg = "-fPIC"
                } else {
                        switch platform {
-                       case "linux/amd64", "linux/arm", "linux/arm64",
+                       case "linux/amd64", "linux/arm", "linux/arm64", "linux/386",
                                "android/amd64", "android/arm":
                                codegenArg = "-shared"
                        case "darwin/amd64":
index 4289455252a2c4dcabc561dc327ec7ff507945fa..40c784851aff32140b50721c749daf84adc60ebd 100644 (file)
@@ -318,7 +318,9 @@ func (mode *BuildMode) Set(s string) error {
                }
                *mode = BuildmodeCArchive
        case "c-shared":
-               if goarch != "amd64" && goarch != "arm" && goarch != "arm64" {
+               switch goarch {
+               case "386", "amd64", "arm", "arm64":
+               default:
                        return badmode()
                }
                *mode = BuildmodeCShared
@@ -1696,7 +1698,8 @@ func stkcheck(up *Chain, depth int) int {
                // should never be called directly.
                // only diagnose the direct caller.
                // TODO(mwhudson): actually think about this.
-               if depth == 1 && s.Type != obj.SXREF && !DynlinkingGo() && Buildmode != BuildmodePIE {
+               if depth == 1 && s.Type != obj.SXREF && !DynlinkingGo() &&
+                       Buildmode != BuildmodePIE && Buildmode != BuildmodeCShared {
                        Diag("call to external function %s", s.Name)
                }
                return -1
index b41c3514b43764ac2a6905fe36c95ec350eaa69e..830a7e6af93a8c3dbef1fdc1ec817b6224ea099c 100644 (file)
@@ -51,7 +51,7 @@ func addcall(ctxt *ld.Link, s *ld.LSym, t *ld.LSym) {
 }
 
 func gentext() {
-       if !ld.DynlinkingGo() && ld.Buildmode != ld.BuildmodePIE {
+       if !ld.DynlinkingGo() && ld.Buildmode != ld.BuildmodePIE && ld.Buildmode != ld.BuildmodeCShared {
                return
        }