aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-check
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-04-25 10:06:37 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-04-26 05:58:31 +0200
commit0ce7569ee76fda7e5a68b0fe14c93a3e8eb7d108 (patch)
tree79adf4f1b16a3d58c2b436dceaff2e873e2f51bd /tools/syz-check
parent99b258ddc33e296f07588a15397ae426c6ed236c (diff)
pkg/compiler: deduplicate Types in descriptions
Add prog.Ref Type that serves as a proxy for real types and allows to deduplicate Types in generated descriptions. The Ref type is effectively an index in an array of types. Just before serialization pkg/compiler replaces real types with the Ref types and prepares corresponding array of real types. When a Target is registered in prog package, we do the opposite operation and replace Ref's with the corresponding real types. This brings improvements across the board: compiler memory consumption is reduced by 15%, test building time by 25%, descriptions size by 33%. Before: $ du -h sys/linux/gen 54M sys/linux/gen $ time GOMAXPROCS=1 go test -p=1 -c ./prog real 0m54.200s real 0m53.883s $ time GOMAXPROCS=1 go install -p=1 ./tools/syz-execprog real 0m27.911s real 0m27.767s $ TIME="%e %P %M" GOMAXPROCS=1 time go tool compile ./sys/linux/gen 20.59 100% 3200016 20.97 100% 3445976 20.25 100% 3209684 After: $ du -h sys/linux/gen 36M sys/linux/gen $ time GOMAXPROCS=1 go test -p=1 -c ./prog real 0m42.290s real 0m43.230s $ time GOMAXPROCS=1 go install -p=1 ./tools/syz-execprog real 0m24.337s real 0m24.727s $ TIME="%e %P %M" GOMAXPROCS=1 time go tool compile ./sys/linux/gen 19.11 100% 2764952 19.66 100% 2787624 19.35 100% 2749376 Update #1580
Diffstat (limited to 'tools/syz-check')
-rw-r--r--tools/syz-check/check.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/tools/syz-check/check.go b/tools/syz-check/check.go
index 8cfc20294..76a52c50d 100644
--- a/tools/syz-check/check.go
+++ b/tools/syz-check/check.go
@@ -351,7 +351,7 @@ func parseDescriptions(OS, arch string) ([]*prog.KeyedStruct, map[string]*ast.St
if prg == nil {
return nil, nil, nil, fmt.Errorf("failed to compile descriptions:\n%s", errorBuf.Bytes())
}
- prog.RestoreLinks(prg.Syscalls, prg.Resources, prg.StructDescs)
+ prog.RestoreLinks(prg.Syscalls, prg.Resources, prg.StructDescs, prg.Types)
locs := make(map[string]*ast.Struct)
for _, decl := range top.Nodes {
switch n := decl.(type) {