github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/compiler/gnu/objdump.go (about)

     1  package gnu
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/metux/go-metabuild/util"
     7  	"github.com/metux/go-metabuild/util/cmd"
     8  )
     9  
    10  const (
    11  	ErrArchUnknown = util.Error("objdump - unknown architecture")
    12  )
    13  
    14  func RunObjdump(c []string, args []string) (string, error) {
    15  	if len(c) == 0 {
    16  		c = []string{"objdump"}
    17  	}
    18  	c = append(c, args...)
    19  	return cmd.RunOut(c, true)
    20  }
    21  
    22  func ArchXlate(a string) (string, error) {
    23  	if strings.HasSuffix(a, "i386") {
    24  		return "i386", nil
    25  	}
    26  	return a, ErrArchUnknown
    27  }
    28  
    29  func ELFDepends(cmd []string, fn string) ([]string, error) {
    30  	out, err := RunObjdump(cmd, []string{"-x", fn})
    31  	return util.StrLinesFieldX(util.StrLinesGrep(out, "NEEDED "), 1), err
    32  }
    33  
    34  func ELFArch(cmd []string, fn string) (string, error) {
    35  	out, err := RunObjdump(cmd, []string{"-a", fn})
    36  	if err != nil {
    37  		return "", err
    38  	}
    39  	return util.StrLinesFieldX(util.StrLinesGrep(out, "file format "), 3)[0], nil
    40  }