From 9e8a45fe27025af392abd366d8d31a9be4661ea9 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Fri, 7 Dec 2018 12:44:45 +0100 Subject: tools/syz-trace2syz/proggen: replace memoryTracker with prog.memAlloc --- prog/target.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'prog/target.go') 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 +} -- cgit mrf-deployment