cmd/go, go/internal/gccgoimporter: pass -X to ar on AIX
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 23 Nov 2017 00:24:21 +0000 (00:24 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 23 Nov 2017 00:24:21 +0000 (00:24 +0000)
    Reviewed-on: https://go-review.googlesource.com/72930

From-SVN: r255090

gcc/go/gofrontend/MERGE
libgo/go/cmd/go/internal/work/build.go
libgo/go/go/internal/gccgoimporter/importer.go

index 0bd1dab7de3d3ea7d342d60008d4977507419f19..8141a4efa691322793deb93edc29cc2f6336ef74 100644 (file)
@@ -1,4 +1,4 @@
-1db7dc97d01ee230ff4874ce1c9775a24ffd16ac
+57adb928c3cc61ac8fa47554394670a1c455afc2
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 562730bb6929c485cb1a1f5a58ea8dd4210d0596..75f3c1a5058da38e675ed728d363341fa106cbe4 100644 (file)
@@ -2757,7 +2757,14 @@ func (gccgoToolchain) pack(b *Builder, p *load.Package, objDir, afile string, of
        absAfile := mkAbs(objDir, afile)
        // Try with D modifier first, then without if that fails.
        if b.run(p.Dir, p.ImportPath, nil, "ar", "rcD", absAfile, absOfiles) != nil {
-               return b.run(p.Dir, p.ImportPath, nil, "ar", "rc", absAfile, absOfiles)
+               if cfg.Goos == "aix" && cfg.Goarch == "ppc64" {
+                       // AIX puts both 32-bit and 64-bit objects in the same archive.
+                       // Tell the AIX "ar" command to only care about 64-bit objects.
+                       // AIX "ar" command does not know D option.
+                       return b.run(p.Dir, p.ImportPath, nil, "ar", "-X64", "rc", absAfile, absOfiles)
+               } else {
+                       return b.run(p.Dir, p.ImportPath, nil, "ar", "rc", absAfile, absOfiles)
+               }
        }
        return nil
 }
index ee573ff64f985ab52ef072e17804415777e7a0f1..923f3689011b3f1a1ab309abb26d5978e54dd94b 100644 (file)
@@ -104,12 +104,14 @@ func openExportFile(fpath string) (reader io.ReadSeeker, closer io.Closer, err e
                // TODO(pcc): Read the archive directly instead of using "ar".
                f.Close()
                closer = nil
+               var cmd *exec.Cmd
 
-               cmd := exec.Command("ar", "p", fpath)
                if runtime.GOOS == "aix" && runtime.GOARCH == "ppc64" {
                        // AIX puts both 32-bit and 64-bit objects in the same archive.
                        // Tell the AIX "ar" command to only care about 64-bit objects.
-                       cmd.Env = append(os.Environ(), "OBJECT_MODE=64")
+                       cmd = exec.Command("ar", "-X64", "p", fpath)
+               } else {
+                       cmd = exec.Command("ar", "p", fpath)
                }
                var out []byte
                out, err = cmd.Output()