OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / net / bpf / asm.go
diff --git a/vendor/golang.org/x/net/bpf/asm.go b/vendor/golang.org/x/net/bpf/asm.go
new file mode 100644 (file)
index 0000000..15e21b1
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bpf
+
+import "fmt"
+
+// Assemble converts insts into raw instructions suitable for loading
+// into a BPF virtual machine.
+//
+// Currently, no optimization is attempted, the assembled program flow
+// is exactly as provided.
+func Assemble(insts []Instruction) ([]RawInstruction, error) {
+       ret := make([]RawInstruction, len(insts))
+       var err error
+       for i, inst := range insts {
+               ret[i], err = inst.Assemble()
+               if err != nil {
+                       return nil, fmt.Errorf("assembling instruction %d: %s", i+1, err)
+               }
+       }
+       return ret, nil
+}
+
+// Disassemble attempts to parse raw back into
+// Instructions. Unrecognized RawInstructions are assumed to be an
+// extension not implemented by this package, and are passed through
+// unchanged to the output. The allDecoded value reports whether insts
+// contains no RawInstructions.
+func Disassemble(raw []RawInstruction) (insts []Instruction, allDecoded bool) {
+       insts = make([]Instruction, len(raw))
+       allDecoded = true
+       for i, r := range raw {
+               insts[i] = r.Disassemble()
+               if _, ok := insts[i].(RawInstruction); ok {
+                       allDecoded = false
+               }
+       }
+       return insts, allDecoded
+}