]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: cleanup -dynlink/-shared support check
authorMichael Munday <munday@ca.ibm.com>
Thu, 7 Apr 2016 19:31:49 +0000 (15:31 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 8 Apr 2016 14:34:31 +0000 (14:34 +0000)
Moves the list of architectures that support shared libraries into
a function. Also adds s390x to that list.

Change-Id: I99c8a9f6cd4816ce3d53abaabaf8d002e25e6b28
Reviewed-on: https://go-review.googlesource.com/21661
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Run-TryBot: Michael Munday <munday@ca.ibm.com>

src/cmd/compile/internal/gc/main.go

index c8a778c34a781841d3b64d1f111e3bea43e11f44..03143f5d0a793fff92a9d4b0c1cf928860868d07 100644 (file)
@@ -91,6 +91,12 @@ func doversion() {
        os.Exit(0)
 }
 
+// supportsDynlink reports whether or not the code generator for the given
+// architecture supports the -shared and -dynlink flags.
+func supportsDynlink(arch *sys.Arch) bool {
+       return arch.InFamily(sys.AMD64, sys.ARM, sys.ARM64, sys.I386, sys.PPC64, sys.S390X)
+}
+
 func Main() {
        defer hidePanic()
 
@@ -195,15 +201,13 @@ func Main() {
        obj.Flagcount("y", "debug declarations in canned imports (with -d)", &Debug['y'])
        var flag_shared int
        var flag_dynlink bool
-       if Thearch.LinkArch.InFamily(sys.ARM, sys.AMD64, sys.ARM64, sys.I386, sys.PPC64) {
+       if supportsDynlink(Thearch.LinkArch.Arch) {
                obj.Flagcount("shared", "generate code that can be linked into a shared library", &flag_shared)
+               flag.BoolVar(&flag_dynlink, "dynlink", false, "support references to Go symbols defined in other shared libraries")
        }
        if Thearch.LinkArch.Family == sys.AMD64 {
                obj.Flagcount("largemodel", "generate code that assumes a large memory model", &flag_largemodel)
        }
-       if Thearch.LinkArch.InFamily(sys.ARM, sys.AMD64, sys.ARM64, sys.I386, sys.PPC64) {
-               flag.BoolVar(&flag_dynlink, "dynlink", false, "support references to Go symbols defined in other shared libraries")
-       }
        obj.Flagstr("cpuprofile", "write cpu profile to `file`", &cpuprofile)
        obj.Flagstr("memprofile", "write memory profile to `file`", &memprofile)
        obj.Flagint64("memprofilerate", "set runtime.MemProfileRate to `rate`", &memprofilerate)