aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorGreg Steuck <blackgnezdo@gmail.com>2019-02-11 02:09:05 -0800
committerDmitry Vyukov <dvyukov@google.com>2019-02-11 11:09:05 +0100
commit5e5bb28ebfd9b28ed8fcdc9def45ee0b1d8a5d4a (patch)
tree4c94f8155f108687bdbb8fa3e14fca13252590b6 /pkg
parentb4f792e401f416ff9fc75716d2500971ba63d1db (diff)
pkg/build: share extractRootCause with openbsd
* pkg/build: share extractRootCause with openbsd This should get kernel build errors reported in syz-ci console. * Add a test * lint
Diffstat (limited to 'pkg')
-rw-r--r--pkg/build/build.go42
-rw-r--r--pkg/build/build_test.go24
-rw-r--r--pkg/build/linux.go37
-rw-r--r--pkg/build/openbsd.go2
4 files changed, 67 insertions, 38 deletions
diff --git a/pkg/build/build.go b/pkg/build/build.go
index b7fdb1664..64f32f29e 100644
--- a/pkg/build/build.go
+++ b/pkg/build/build.go
@@ -5,6 +5,7 @@
package build
import (
+ "bytes"
"fmt"
"path/filepath"
"strings"
@@ -113,3 +114,44 @@ func CompilerIdentity(compiler string) (string, error) {
}
return "", fmt.Errorf("no output from compiler --version")
}
+
+func extractRootCause(err error) error {
+ verr, ok := err.(*osutil.VerboseError)
+ if !ok {
+ return err
+ }
+ cause := extractCauseInner(verr.Output)
+ if cause != nil {
+ verr.Title = string(cause)
+ }
+ return KernelBuildError{verr}
+}
+
+func extractCauseInner(s []byte) []byte {
+ var cause []byte
+ for _, line := range bytes.Split(s, []byte{'\n'}) {
+ for _, pattern := range buildFailureCauses {
+ if pattern.weak && cause != nil {
+ continue
+ }
+ if bytes.Contains(line, pattern.pattern) {
+ cause = line
+ break
+ }
+ }
+ }
+ return cause
+}
+
+type buildFailureCause struct {
+ pattern []byte
+ weak bool
+}
+
+var buildFailureCauses = [...]buildFailureCause{
+ {pattern: []byte(": error: ")},
+ {pattern: []byte(": fatal error: ")},
+ {pattern: []byte(": undefined reference to")},
+ {weak: true, pattern: []byte(": final link failed: ")},
+ {weak: true, pattern: []byte("collect2: error: ")},
+}
diff --git a/pkg/build/build_test.go b/pkg/build/build_test.go
index 1698d3bd8..830c4f39c 100644
--- a/pkg/build/build_test.go
+++ b/pkg/build/build_test.go
@@ -4,6 +4,7 @@
package build
import (
+ "bytes"
"os/exec"
"strings"
"testing"
@@ -34,3 +35,26 @@ func TestCompilerIdentity(t *testing.T) {
})
}
}
+
+func TestExtractRootCause(t *testing.T) {
+ for _, s := range []struct{ e, expect string }{
+ {`
+cc -g -Werror db_break.c
+sys/dev/kcov.c:93:6: error: use of undeclared identifier 'kcov_cold123'; did you mean 'kcov_cold'?
+ if (kcov_cold123)
+ ^~~~~~~~~~~~
+ kcov_cold
+sys/dev/kcov.c:65:5: note: 'kcov_cold' declared here
+int kcov_cold = 1;
+ ^
+1 error generated.
+`,
+ "sys/dev/kcov.c:93:6: error: use of undeclared identifier 'kcov_cold123'; did you mean 'kcov_cold'?",
+ },
+ } {
+ got := extractCauseInner([]byte(s.e))
+ if !bytes.Equal([]byte(s.expect), got) {
+ t.Errorf("Expected %s, got %s", s.expect, got)
+ }
+ }
+}
diff --git a/pkg/build/linux.go b/pkg/build/linux.go
index dbe9cfbb7..f4dff538f 100644
--- a/pkg/build/linux.go
+++ b/pkg/build/linux.go
@@ -10,7 +10,6 @@
package build
import (
- "bytes"
"fmt"
"io/ioutil"
"os"
@@ -124,39 +123,3 @@ func (linux) clean(kernelDir string) error {
_, err := osutil.Run(10*time.Minute, cmd)
return err
}
-
-func extractRootCause(err error) error {
- verr, ok := err.(*osutil.VerboseError)
- if !ok {
- return err
- }
- var cause []byte
- for _, line := range bytes.Split(verr.Output, []byte{'\n'}) {
- for _, pattern := range buildFailureCauses {
- if pattern.weak && cause != nil {
- continue
- }
- if bytes.Contains(line, pattern.pattern) {
- cause = line
- break
- }
- }
- }
- if cause != nil {
- verr.Title = string(cause)
- }
- return KernelBuildError{verr}
-}
-
-type buildFailureCause struct {
- pattern []byte
- weak bool
-}
-
-var buildFailureCauses = [...]buildFailureCause{
- {pattern: []byte(": error: ")},
- {pattern: []byte(": fatal error: ")},
- {pattern: []byte(": undefined reference to")},
- {weak: true, pattern: []byte(": final link failed: ")},
- {weak: true, pattern: []byte("collect2: error: ")},
-}
diff --git a/pkg/build/openbsd.go b/pkg/build/openbsd.go
index d7fe62f36..9c4b7f119 100644
--- a/pkg/build/openbsd.go
+++ b/pkg/build/openbsd.go
@@ -35,7 +35,7 @@ func (ctx openbsd) build(targetArch, vmType, kernelDir, outputDir, compiler, use
}
for _, tgt := range []string{"clean", "obj", "config", "all"} {
if err := ctx.make(compileDir, tgt); err != nil {
- return err
+ return extractRootCause(err)
}
}
for _, s := range []struct{ dir, src, dst string }{