syscalls.go 668 B

12345678910111213141516171819202122232425262728293031
  1. package btf
  2. import (
  3. "fmt"
  4. "unsafe"
  5. "github.com/cilium/ebpf/internal"
  6. )
  7. type bpfBTFInfo struct {
  8. btf internal.Pointer
  9. btfSize uint32
  10. id uint32
  11. name internal.Pointer
  12. nameLen uint32
  13. kernelBTF uint32
  14. }
  15. func bpfGetBTFInfoByFD(fd *internal.FD, btf, name []byte) (*bpfBTFInfo, error) {
  16. info := bpfBTFInfo{
  17. btf: internal.NewSlicePointer(btf),
  18. btfSize: uint32(len(btf)),
  19. name: internal.NewSlicePointer(name),
  20. nameLen: uint32(len(name)),
  21. }
  22. if err := internal.BPFObjGetInfoByFD(fd, unsafe.Pointer(&info), unsafe.Sizeof(info)); err != nil {
  23. return nil, fmt.Errorf("can't get program info: %w", err)
  24. }
  25. return &info, nil
  26. }