fix(cmd): usage exit codes, asm output file and cross-arch ground truth
Assisted-by: GLM 5.3
This commit is contained in:
+10
-3
@@ -63,7 +63,7 @@ the encodability backlog by frequency rather than by table order.
|
||||
archName := "amd64"
|
||||
switch n := len(fs.Args()); {
|
||||
case n > 1:
|
||||
return fmt.Errorf("audit-instructions takes at most one architecture argument")
|
||||
return &usageError{fmt.Errorf("audit-instructions takes at most one architecture argument")}
|
||||
case n == 1:
|
||||
archName = strings.ToLower(fs.Arg(0))
|
||||
}
|
||||
@@ -136,7 +136,7 @@ func auditArch(name string) (arch.Arch, error) {
|
||||
case "loong64", "loong":
|
||||
return arch.LOONG64, nil
|
||||
}
|
||||
return arch.Unknown, fmt.Errorf("unknown architecture %q: want amd64, arm64, riscv64 or loong64", name)
|
||||
return arch.Unknown, &usageError{fmt.Errorf("unknown architecture %q: want amd64, arm64, riscv64 or loong64", name)}
|
||||
}
|
||||
|
||||
// goarchName maps an arch identifier onto its GOARCH spelling.
|
||||
@@ -217,6 +217,13 @@ func probeGoAsm(goarch string, names []string) (map[string]bool, error) {
|
||||
cmd := exec.Command(asmBin, "-p", "probe", "-o", filepath.Join(dir, "probe.o"), probePath)
|
||||
cmd.Env = append(os.Environ(), "GOARCH="+goarch, "GOOS="+runtime.GOOS)
|
||||
out, _ := cmd.CombinedOutput()
|
||||
// The expected failure mode is a non-zero exit with compiler diagnostics
|
||||
// on stdout; empty output means the probe broke at the exec level (a
|
||||
// killed child, a tool that would not start), and seeding every name as
|
||||
// recognized on that silence would fake a clean audit.
|
||||
if len(out) == 0 {
|
||||
return nil, fmt.Errorf("go tool asm probe for GOARCH=%s produced no output", goarch)
|
||||
}
|
||||
|
||||
result := map[string]bool{}
|
||||
for _, name := range names {
|
||||
@@ -344,7 +351,7 @@ func (t *corpusTally) fail(path, reason string) {
|
||||
// cmdAuditCorpus implements audit-instructions --corpus.
|
||||
func cmdAuditCorpus(args []string) error {
|
||||
if len(args) > 1 {
|
||||
return fmt.Errorf("audit-instructions --corpus takes at most one directory argument")
|
||||
return &usageError{fmt.Errorf("audit-instructions --corpus takes at most one directory argument")}
|
||||
}
|
||||
root := ""
|
||||
if len(args) == 1 {
|
||||
|
||||
Reference in New Issue
Block a user