exitIfErrors()
if *flagExtar == "" {
- const printProgName = "--print-prog-name=ar"
- cc := ctxt.extld()
*flagExtar = "ar"
- if linkerFlagSupported(ctxt.Arch, cc[0], "", printProgName) {
- *flagExtar = ctxt.findExtLinkTool("ar")
- }
}
mayberemoveoutfile()
if combineDwarf {
// Find "dsymutils" and "strip" tools using CC --print-prog-name.
- dsymutilCmd := ctxt.findExtLinkTool("dsymutil")
- stripCmd := ctxt.findExtLinkTool("dsymutil")
+ var cc []string
+ cc = append(cc, ctxt.extld()...)
+ cc = append(cc, hostlinkArchArgs(ctxt.Arch)...)
+ cc = append(cc, "--print-prog-name", "dsymutil")
+ out, err := exec.Command(cc[0], cc[1:]...).CombinedOutput()
+ if err != nil {
+ Exitf("%s: finding dsymutil failed: %v\n%s", os.Args[0], err, out)
+ }
+ dsymutilCmd := strings.TrimSuffix(string(out), "\n")
+
+ cc[len(cc)-1] = "strip"
+ out, err = exec.Command(cc[0], cc[1:]...).CombinedOutput()
+ if err != nil {
+ Exitf("%s: finding strip failed: %v\n%s", os.Args[0], err, out)
+ }
+ stripCmd := strings.TrimSuffix(string(out), "\n")
dsym := filepath.Join(*flagTmpdir, "go.dwarf")
if out, err := exec.Command(dsymutilCmd, "-f", *flagOutfile, "-o", dsym).CombinedOutput(); err != nil {
fmt.Fprintf(os.Stderr, "link: info: captured host object %s to %s\n",
h.file, opath)
}
-
-// findExtLinkTool invokes the external linker CC with --print-prog-name
-// passing the name of the tool we're interested in, such as "strip",
-// "ar", or "dsymutil", and returns the path passed back from the command.
-func (ctxt *Link) findExtLinkTool(toolname string) string {
- var cc []string
- cc = append(cc, ctxt.extld()...)
- cc = append(cc, hostlinkArchArgs(ctxt.Arch)...)
- cc = append(cc, "--print-prog-name", toolname)
- out, err := exec.Command(cc[0], cc[1:]...).CombinedOutput()
- if err != nil {
- Exitf("%s: finding %s failed: %v\n%s", os.Args[0], toolname, err, out)
- }
- cmdpath := strings.TrimSuffix(string(out), "\n")
- return cmdpath
-}