diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-09-13 15:15:36 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-09-15 16:02:37 +0200 |
| commit | 4a7f7fab1ecf47d82fc2b403b57d3cf9b5836398 (patch) | |
| tree | 8828c9db4ddb928000a869963ec72a9b19a9e5cc | |
| parent | 96b8e3997297d822c17c8281ec2ac94cc478db2d (diff) | |
prog: allow more than 1 target
| -rw-r--r-- | prog/target.go | 19 | ||||
| -rw-r--r-- | 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 ( |
