From 9e4e4272d3f686e750a13d2111b0fb7041db2f4a Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Tue, 31 Aug 2021 17:21:33 +0000 Subject: all: introduce a prog.Call constructor Create a constructor for the prog.Call type. It allows to reduce the duplication of code now and during further changes. --- sys/linux/init.go | 12 ++++-------- sys/targets/common.go | 28 ++++++++++------------------ sys/windows/init.go | 16 ++++++---------- 3 files changed, 20 insertions(+), 36 deletions(-) (limited to 'sys') diff --git a/sys/linux/init.go b/sys/linux/init.go index 1f9dcc2a7..24d978381 100644 --- a/sys/linux/init.go +++ b/sys/linux/init.go @@ -340,14 +340,10 @@ func (arch *arch) generateTimespec(g *prog.Gen, typ0 prog.Type, dir prog.Dir, ol }) var tpaddr prog.Arg tpaddr, calls = g.Alloc(ptrArgType, prog.DirIn, tp) - gettime := &prog.Call{ - Meta: meta, - Args: []prog.Arg{ - prog.MakeConstArg(meta.Args[0].Type, prog.DirIn, arch.CLOCK_REALTIME), - tpaddr, - }, - Ret: prog.MakeReturnArg(meta.Ret), - } + gettime := prog.MakeCall(meta, []prog.Arg{ + prog.MakeConstArg(meta.Args[0].Type, prog.DirIn, arch.CLOCK_REALTIME), + tpaddr, + }) calls = append(calls, gettime) sec := prog.MakeResultArg(typ.Fields[0].Type, dir, tp.Inner[0].(*prog.ResultArg), 0) nsec := prog.MakeResultArg(typ.Fields[1].Type, dir, tp.Inner[1].(*prog.ResultArg), 0) diff --git a/sys/targets/common.go b/sys/targets/common.go index 193e9dca6..f55493256 100644 --- a/sys/targets/common.go +++ b/sys/targets/common.go @@ -21,25 +21,21 @@ func MakePosixMmap(target *prog.Target, exec, contain bool) func() []*prog.Call size := target.NumPages * target.PageSize const invalidFD = ^uint64(0) makeMmap := func(addr, size, prot uint64) *prog.Call { - args := []prog.Arg{ + call := prog.MakeCall(meta, []prog.Arg{ prog.MakeVmaPointerArg(meta.Args[0].Type, prog.DirIn, addr, size), prog.MakeConstArg(meta.Args[1].Type, prog.DirIn, size), prog.MakeConstArg(meta.Args[2].Type, prog.DirIn, prot), prog.MakeConstArg(meta.Args[3].Type, prog.DirIn, flags), prog.MakeResultArg(meta.Args[4].Type, prog.DirIn, nil, invalidFD), - } - i := len(args) + }) + i := len(call.Args) // Some targets have a padding argument between fd and offset. if len(meta.Args) > 6 { - args = append(args, prog.MakeConstArg(meta.Args[i].Type, prog.DirIn, 0)) + call.Args = append(call.Args, prog.MakeConstArg(meta.Args[i].Type, prog.DirIn, 0)) i++ } - args = append(args, prog.MakeConstArg(meta.Args[i].Type, prog.DirIn, 0)) - return &prog.Call{ - Meta: meta, - Args: args, - Ret: prog.MakeReturnArg(meta.Ret), - } + call.Args = append(call.Args, prog.MakeConstArg(meta.Args[i].Type, prog.DirIn, 0)) + return call } return func() []*prog.Call { if contain { @@ -58,14 +54,10 @@ func MakeSyzMmap(target *prog.Target) func() []*prog.Call { size := target.NumPages * target.PageSize return func() []*prog.Call { return []*prog.Call{ - { - Meta: meta, - Args: []prog.Arg{ - prog.MakeVmaPointerArg(meta.Args[0].Type, prog.DirIn, 0, size), - prog.MakeConstArg(meta.Args[1].Type, prog.DirIn, size), - }, - Ret: prog.MakeReturnArg(meta.Ret), - }, + prog.MakeCall(meta, []prog.Arg{ + prog.MakeVmaPointerArg(meta.Args[0].Type, prog.DirIn, 0, size), + prog.MakeConstArg(meta.Args[1].Type, prog.DirIn, size), + }), } } } diff --git a/sys/windows/init.go b/sys/windows/init.go index ef8ba4324..0480a6946 100644 --- a/sys/windows/init.go +++ b/sys/windows/init.go @@ -32,15 +32,11 @@ func (arch *arch) makeMmap() []*prog.Call { meta := arch.virtualAllocSyscall size := arch.target.NumPages * arch.target.PageSize return []*prog.Call{ - { - Meta: meta, - Args: []prog.Arg{ - prog.MakeVmaPointerArg(meta.Args[0].Type, prog.DirIn, 0, size), - prog.MakeConstArg(meta.Args[1].Type, prog.DirIn, size), - prog.MakeConstArg(meta.Args[2].Type, prog.DirIn, arch.MEM_COMMIT|arch.MEM_RESERVE), - prog.MakeConstArg(meta.Args[3].Type, prog.DirIn, arch.PAGE_EXECUTE_READWRITE), - }, - Ret: prog.MakeReturnArg(meta.Ret), - }, + prog.MakeCall(meta, []prog.Arg{ + prog.MakeVmaPointerArg(meta.Args[0].Type, prog.DirIn, 0, size), + prog.MakeConstArg(meta.Args[1].Type, prog.DirIn, size), + prog.MakeConstArg(meta.Args[2].Type, prog.DirIn, arch.MEM_COMMIT|arch.MEM_RESERVE), + prog.MakeConstArg(meta.Args[3].Type, prog.DirIn, arch.PAGE_EXECUTE_READWRITE), + }), } } -- cgit mrf-deployment