diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-11-29 09:47:55 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-11-29 11:12:47 +0100 |
| commit | 3a80fe350da4f5fc054c06fe279cc7ea734eb28b (patch) | |
| tree | 4022743a66524b3534fc30eb7ef73e2af36761e5 /prog/size.go | |
| parent | 1a6a7478c298a362d63a2f412155c70b7f97671d (diff) | |
prog: support bytesizeN for vma
I guess this is currently unused,
but ignoring bytesizeN for vma looks wrong.
If user asks for bytesizeN for vma, divide vma size by N.
Diffstat (limited to 'prog/size.go')
| -rw-r--r-- | prog/size.go | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/prog/size.go b/prog/size.go index 538b60c5d..718e0c426 100644 --- a/prog/size.go +++ b/prog/size.go @@ -7,29 +7,29 @@ import ( "fmt" ) -func (target *Target) generateSize(arg Arg, lenType *LenType) Arg { +func (target *Target) generateSize(arg Arg, lenType *LenType) uint64 { if arg == nil { // Arg is an optional pointer, set size to 0. - return MakeConstArg(lenType, 0) + return 0 } + byteSize := lenType.ByteSize + if byteSize == 0 { + byteSize = 1 + } switch arg.Type().(type) { case *VmaType: a := arg.(*PointerArg) - return MakeConstArg(lenType, a.PagesNum*target.PageSize) + return a.PagesNum * target.PageSize / byteSize case *ArrayType: a := arg.(*GroupArg) if lenType.ByteSize != 0 { - return MakeConstArg(lenType, a.Size()/lenType.ByteSize) + return a.Size() / byteSize } else { - return MakeConstArg(lenType, uint64(len(a.Inner))) + return uint64(len(a.Inner)) } default: - if lenType.ByteSize != 0 { - return MakeConstArg(lenType, arg.Size()/lenType.ByteSize) - } else { - return MakeConstArg(lenType, arg.Size()) - } + return arg.Size() / byteSize } } @@ -53,7 +53,7 @@ func (target *Target) assignSizes(args []Arg, parentsMap map[Arg]Arg) { buf, ok := argsMap[typ.Buf] if ok { - *a = *target.generateSize(InnerArg(buf), typ).(*ConstArg) + a.Val = target.generateSize(InnerArg(buf), typ) continue } |
