aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-09-13 15:15:36 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-09-15 16:02:37 +0200
commit4a7f7fab1ecf47d82fc2b403b57d3cf9b5836398 (patch)
tree8828c9db4ddb928000a869963ec72a9b19a9e5cc
parent96b8e3997297d822c17c8281ec2ac94cc478db2d (diff)
prog: allow more than 1 target
-rw-r--r--prog/target.go19
-rw-r--r--sys/init.go1
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 (