1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // 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
- }
|