in assembler.go [146:171]
func (p *Program) Assemble() ([]bpf.Instruction, error) {
for _, jump := range p.jumps {
// This is safe since we are only accessing instructions that were inserted as bpf.JumpIf.
jumpInst := p.instructions[jump.index].(bpf.JumpIf)
skip, err := p.resolveLabel(jump, jump.trueLabel)
if err != nil {
return nil, err
}
jumpInst.SkipTrue = skip
skip, err = p.resolveLabel(jump, jump.falseLabel)
if err != nil {
return nil, err
}
jumpInst.SkipFalse = skip
if jumpInst.SkipTrue == 0 && jumpInst.SkipFalse == 0 {
return nil, fmt.Errorf("useless jump found")
}
p.instructions[jump.index] = jumpInst
}
return p.instructions, nil
}