Skip to content

Replace internal.NativeEndian with stdlib (1/2) #1669

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions asm/instruction.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"sort"
"strings"

"github.com/cilium/ebpf/internal"
"github.com/cilium/ebpf/internal/sys"
)

Expand Down Expand Up @@ -51,7 +52,7 @@ func (ins *Instruction) Unmarshal(r io.Reader, bo binary.ByteOrder) (uint64, err
ins.OpCode = OpCode(data[0])

regs := data[1]
switch bo {
switch internal.NormalizeByteOrder(bo) {
case binary.LittleEndian:
ins.Dst, ins.Src = Register(regs&0xF), Register(regs>>4)
case binary.BigEndian:
Expand Down Expand Up @@ -934,7 +935,7 @@ func (iter *InstructionIterator) Next() bool {
type bpfRegisters uint8

func newBPFRegisters(dst, src Register, bo binary.ByteOrder) (bpfRegisters, error) {
switch bo {
switch internal.NormalizeByteOrder(bo) {
case binary.LittleEndian:
return bpfRegisters((src << 4) | (dst & 0xF)), nil
case binary.BigEndian:
Expand Down
9 changes: 6 additions & 3 deletions btf/core.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"strings"

"github.com/cilium/ebpf/asm"
"github.com/cilium/ebpf/internal"
)

// Code in this file is derived from libbpf, which is available under a BSD
Expand Down Expand Up @@ -205,8 +206,10 @@ func CORERelocate(relos []*CORERelocation, targets []*Spec, bo binary.ByteOrder,
resolveTargetTypeID := targets[0].TypeID

for _, target := range targets {
if bo != target.imm.byteOrder {
return nil, fmt.Errorf("can't relocate %s against %s", bo, target.imm.byteOrder)
if !internal.EqualByteOrder(bo, target.imm.byteOrder) {
return nil, fmt.Errorf("can't relocate %s against %s",
internal.NormalizeByteOrder(bo),
internal.NormalizeByteOrder(target.imm.byteOrder))
}
}

Expand Down Expand Up @@ -488,7 +491,7 @@ func coreCalculateFixup(relo *CORERelocation, target Type, bo binary.ByteOrder,

case reloFieldLShiftU64:
var target uint64
if bo == binary.LittleEndian {
if internal.EqualByteOrder(bo, binary.LittleEndian) {
targetSize, err := targetField.sizeBits()
if err != nil {
return zero, err
Expand Down
4 changes: 2 additions & 2 deletions elf_reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ func TestLoadCollectionSpec(t *testing.T) {
t.Errorf("MapSpec mismatch (-want +got):\n%s", diff)
}

if have.ByteOrder != internal.NativeEndian {
if !internal.EqualByteOrder(have.ByteOrder, binary.NativeEndian) {
return
}

Expand Down Expand Up @@ -445,7 +445,7 @@ func TestLoadInitializedBTFMap(t *testing.T) {
}

t.Run("NewCollection", func(t *testing.T) {
if coll.ByteOrder != internal.NativeEndian {
if !internal.EqualByteOrder(coll.ByteOrder, binary.NativeEndian) {
t.Skipf("Skipping %s collection", coll.ByteOrder)
}

Expand Down
25 changes: 25 additions & 0 deletions internal/endian.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package internal

import (
"encoding/binary"

"golang.org/x/sys/cpu"
)

var NativeEndian = binary.NativeEndian

func EqualByteOrder(bo1, bo2 binary.ByteOrder) bool {
return NormalizeByteOrder(bo1) == NormalizeByteOrder(bo2)
}

// NormalizeByteOrder replaces binary.NativeEndian with the underlying
// byte order (BigEndian or LittleEndian).
func NormalizeByteOrder(bo binary.ByteOrder) binary.ByteOrder {
if bo != binary.NativeEndian {
return bo
}
if cpu.IsBigEndian {
return binary.BigEndian
}
return binary.LittleEndian
}
9 changes: 0 additions & 9 deletions internal/endian_be.go

This file was deleted.

9 changes: 0 additions & 9 deletions internal/endian_le.go

This file was deleted.

6 changes: 4 additions & 2 deletions prog.go
Original file line number Diff line number Diff line change
Expand Up @@ -263,8 +263,10 @@ func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions) (*Program, er
return nil, errors.New("can't load program of unspecified type")
}

if spec.ByteOrder != nil && spec.ByteOrder != internal.NativeEndian {
return nil, fmt.Errorf("can't load %s program on %s", spec.ByteOrder, internal.NativeEndian)
if spec.ByteOrder != nil && !internal.EqualByteOrder(spec.ByteOrder, binary.NativeEndian) {
return nil, fmt.Errorf("can't load %s program on %s",
internal.NormalizeByteOrder(spec.ByteOrder),
internal.NormalizeByteOrder(binary.NativeEndian))
}

// Kernels before 5.0 (6c4fc209fcf9 "bpf: remove useless version check for prog load")
Expand Down
2 changes: 1 addition & 1 deletion prog_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -726,7 +726,7 @@ func TestProgramRejectIncorrectByteOrder(t *testing.T) {
spec := socketFilterSpec.Copy()

spec.ByteOrder = binary.BigEndian
if spec.ByteOrder == internal.NativeEndian {
if internal.EqualByteOrder(spec.ByteOrder, binary.NativeEndian) {
spec.ByteOrder = binary.LittleEndian
}

Expand Down
Loading