]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: allow buildmode c-archive for aix/ppc64
authorClément Chigot <clement.chigot@atos.net>
Mon, 25 Mar 2019 09:33:49 +0000 (10:33 +0100)
committerIan Lance Taylor <iant@golang.org>
Wed, 27 Mar 2019 17:39:13 +0000 (17:39 +0000)
Change-Id: Ia268b0d64dc89866aa09bfffcaa109741088a904
Reviewed-on: https://go-review.googlesource.com/c/go/+/169119
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/link/internal/ld/config.go
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/lib.go

index 5d59d4067b91e740ff22d61dd767c4b33e83edbe..85842f2fa24719a1a41e6f0350ca6be1d4e36558 100644 (file)
@@ -51,7 +51,7 @@ func (mode *BuildMode) Set(s string) error {
                *mode = BuildModePIE
        case "c-archive":
                switch objabi.GOOS {
-               case "darwin", "linux":
+               case "aix", "darwin", "linux":
                case "freebsd":
                        switch objabi.GOARCH {
                        case "amd64":
index 717597dfd555ffb4662fbc3def05c679d9f28f53..da75ce8dc4502c4765df97338b234e31df594a36 100644 (file)
@@ -1000,7 +1000,7 @@ func dosymtype(ctxt *Link) {
                for _, s := range ctxt.Syms.Allsym {
                        // Create a new entry in the .init_array section that points to the
                        // library initializer function.
-                       if s.Name == *flagEntrySymbol {
+                       if s.Name == *flagEntrySymbol && ctxt.HeadType != objabi.Haix {
                                addinitarrdata(ctxt, s)
                        }
                }
@@ -1380,6 +1380,13 @@ func (ctxt *Link) dodata() {
        case BuildModeCArchive, BuildModeCShared, BuildModeShared, BuildModePlugin:
                hasinitarr = true
        }
+
+       if ctxt.HeadType == objabi.Haix {
+               if len(data[sym.SINITARR]) > 0 {
+                       Errorf(nil, "XCOFF format doesn't allow .init_array section")
+               }
+       }
+
        if hasinitarr && len(data[sym.SINITARR]) > 0 {
                sect := addsection(ctxt.Arch, &Segdata, ".init_array", 06)
                sect.Align = dataMaxAlign[sym.SINITARR]
index b331e39fe3e896fd1122bdcb9746c751139bdc20..f53e0273c6db43f1e7785e201eeafe94b0f2ec02 100644 (file)
@@ -1102,7 +1102,11 @@ func (ctxt *Link) archive() {
        }
        ctxt.Out.f = nil
 
-       argv := []string{*flagExtar, "-q", "-c", "-s", *flagOutfile}
+       argv := []string{*flagExtar, "-q", "-c", "-s"}
+       if ctxt.HeadType == objabi.Haix {
+               argv = append(argv, "-X64")
+       }
+       argv = append(argv, *flagOutfile)
        argv = append(argv, filepath.Join(*flagTmpdir, "go.o"))
        argv = append(argv, hostobjCopy()...)