gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

asm.go (1267B)


      1 // Copyright 2016 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package bpf
      6 
      7 import "fmt"
      8 
      9 // Assemble converts insts into raw instructions suitable for loading
     10 // into a BPF virtual machine.
     11 //
     12 // Currently, no optimization is attempted, the assembled program flow
     13 // is exactly as provided.
     14 func Assemble(insts []Instruction) ([]RawInstruction, error) {
     15 	ret := make([]RawInstruction, len(insts))
     16 	var err error
     17 	for i, inst := range insts {
     18 		ret[i], err = inst.Assemble()
     19 		if err != nil {
     20 			return nil, fmt.Errorf("assembling instruction %d: %s", i+1, err)
     21 		}
     22 	}
     23 	return ret, nil
     24 }
     25 
     26 // Disassemble attempts to parse raw back into
     27 // Instructions. Unrecognized RawInstructions are assumed to be an
     28 // extension not implemented by this package, and are passed through
     29 // unchanged to the output. The allDecoded value reports whether insts
     30 // contains no RawInstructions.
     31 func Disassemble(raw []RawInstruction) (insts []Instruction, allDecoded bool) {
     32 	insts = make([]Instruction, len(raw))
     33 	allDecoded = true
     34 	for i, r := range raw {
     35 		insts[i] = r.Disassemble()
     36 		if _, ok := insts[i].(RawInstruction); ok {
     37 			allDecoded = false
     38 		}
     39 	}
     40 	return insts, allDecoded
     41 }