From 4a7f7fab1ecf47d82fc2b403b57d3cf9b5836398 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Wed, 13 Sep 2017 15:15:36 +0200 Subject: prog: allow more than 1 target --- prog/target.go | 19 +++++++++++++++---- sys/init.go | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/prog/target.go b/prog/target.go index a6ac657c6..3200a14bb 100644 --- a/prog/target.go +++ b/prog/target.go @@ -57,12 +57,21 @@ func RegisterTarget(target *Target) { } initTarget(target) targets[key] = target +} - // For now we copy target to global vars - // because majority of the code is not prepared for multiple targets. - if len(targets) > 1 { - panic("only 1 target is supported") +// SetDefaultTarget sets default target for prog package. +// Majority of the code is not prepared for multiple targets, +// so we use default target as a temporary measure. +func SetDefaultTarget(OS, arch string) error { + key := OS + "/" + arch + target := targets[key] + if target == nil { + return fmt.Errorf("unknown target: %v", key) + } + if len(Syscalls) != 0 { + return fmt.Errorf("default target is already set") } + Syscalls = target.Syscalls SyscallMap = target.syscallMap Resources = target.resourceMap @@ -76,6 +85,8 @@ func RegisterTarget(target *Target) { sanitizeCall = target.SanitizeCall specialStructs = target.SpecialStructs stringDictionary = target.StringDictionary + + return nil } func initTarget(target *Target) { diff --git a/sys/init.go b/sys/init.go index 1b6c7b661..f4974f51b 100644 --- a/sys/init.go +++ b/sys/init.go @@ -29,6 +29,7 @@ func init() { StringDictionary: stringDictionary, } prog.RegisterTarget(target) + prog.SetDefaultTarget(runtime.GOOS, runtime.GOARCH) } const ( -- cgit mrf-deployment