diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-12-07 12:44:45 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-12-07 12:44:45 +0100 |
| commit | 9e8a45fe27025af392abd366d8d31a9be4661ea9 (patch) | |
| tree | 4a4494c1fb70a51d788d7f2e74fe5a4eb8d8d7d2 /prog/target.go | |
| parent | 413e41473838fb74ccc081784afd6ddbbd44b797 (diff) | |
tools/syz-trace2syz/proggen: replace memoryTracker with prog.memAlloc
Diffstat (limited to 'prog/target.go')
| -rw-r--r-- | prog/target.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/prog/target.go b/prog/target.go index db8b1835e..f99c45c5b 100644 --- a/prog/target.go +++ b/prog/target.go @@ -236,3 +236,42 @@ func (g *Gen) MutateArg(arg0 Arg) (calls []*Call) { } return calls } + +type ProgGen struct { + target *Target + ma *memAlloc + p *Prog +} + +func MakeProgGen(target *Target) *ProgGen { + return &ProgGen{ + target: target, + ma: newMemAlloc(target.NumPages * target.PageSize), + p: &Prog{ + Target: target, + }, + } +} + +func (pg *ProgGen) Append(c *Call) error { + pg.target.assignSizesCall(c) + pg.target.SanitizeCall(c) + pg.p.Calls = append(pg.p.Calls, c) + return nil +} + +func (pg *ProgGen) Allocate(size uint64) uint64 { + return pg.ma.alloc(nil, size) +} + +func (pg *ProgGen) Finalize() (*Prog, error) { + if err := pg.p.validate(); err != nil { + return nil, err + } + if _, err := pg.p.SerializeForExec(make([]byte, ExecBufferSize)); err != nil { + return nil, err + } + p := pg.p + pg.p = nil + return p, nil +} |
