Commit 02dc624e by Ian Lance Taylor

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

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

From-SVN: r255090
parent f6f28ab8
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.
...@@ -2757,8 +2757,15 @@ func (gccgoToolchain) pack(b *Builder, p *load.Package, objDir, afile string, of ...@@ -2757,8 +2757,15 @@ 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 {
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 b.run(p.Dir, p.ImportPath, nil, "ar", "rc", absAfile, absOfiles)
} }
}
return nil return nil
} }
......
...@@ -104,12 +104,14 @@ func openExportFile(fpath string) (reader io.ReadSeeker, closer io.Closer, err e ...@@ -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()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment