cmd/go, go/internal/gccgoimporter: pass -X to ar on AIX

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

From-SVN: r255090
This commit is contained in:
Ian Lance Taylor 2017-11-23 00:24:21 +00:00
parent f6f28ab807
commit 02dc624e21
3 changed files with 13 additions and 4 deletions

View File

@ -1,4 +1,4 @@
1db7dc97d01ee230ff4874ce1c9775a24ffd16ac 57adb928c3cc61ac8fa47554394670a1c455afc2
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -2757,7 +2757,14 @@ func (gccgoToolchain) pack(b *Builder, p *load.Package, objDir, afile string, of
absAfile := mkAbs(objDir, afile) absAfile := mkAbs(objDir, afile)
// Try with D modifier first, then without if that fails. // Try with D modifier first, then without if that fails.
if b.run(p.Dir, p.ImportPath, nil, "ar", "rcD", absAfile, absOfiles) != nil { 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 return nil
} }

View 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". // TODO(pcc): Read the archive directly instead of using "ar".
f.Close() f.Close()
closer = nil closer = nil
var cmd *exec.Cmd
cmd := exec.Command("ar", "p", fpath)
if runtime.GOOS == "aix" && runtime.GOARCH == "ppc64" { if runtime.GOOS == "aix" && runtime.GOARCH == "ppc64" {
// AIX puts both 32-bit and 64-bit objects in the same archive. // 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. // 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 var out []byte
out, err = cmd.Output() out, err = cmd.Output()