From e8ddc2ae566d258db10a700b9e3a2e9548126d69 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 5 Jan 2017 14:33:44 +0100 Subject: sys: don't add clock_gettime always Currently we always enable clock_gettime in config. This is required since the call is needed for generation of timespec/timeval structs. The negative side effect is that one gets clock_gettime even if he wants to fuzz a small set of unrelated syscalls. Don't enable clock_gettime by default. Instead handle timeval/timespec as other resources. --- sys/decl.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'sys/decl.go') diff --git a/sys/decl.go b/sys/decl.go index 322158b92..d09328c91 100644 --- a/sys/decl.go +++ b/sys/decl.go @@ -437,10 +437,8 @@ func TransitivelyEnabledCalls(enabled map[*Call]bool) map[*Call]bool { } for { n := len(supported) - for c := range enabled { - if !supported[c] { - continue - } + haveGettime := supported[CallMap["clock_gettime"]] + for c := range supported { canCreate := true for _, res := range c.InputResources() { noctors := true @@ -455,6 +453,15 @@ func TransitivelyEnabledCalls(enabled map[*Call]bool) map[*Call]bool { break } } + // We need to support structs as resources, + // but for now we just special-case timespec/timeval. + if canCreate && !haveGettime { + ForeachType(c, func(typ Type) { + if a, ok := typ.(*StructType); ok && a.Dir() != DirOut && (a.Name() == "timespec" || a.Name() == "timeval") { + canCreate = false + } + }) + } if !canCreate { delete(supported, c) } -- cgit mrf-deployment