MCPcopy
hub / github.com/cilium/ebpf / loadCollectionFromNativeImage

Function loadCollectionFromNativeImage

collection_windows.go:13–136  ·  view source on GitHub ↗
(file string)

Source from the content-addressed store, hash-verified

11)
12
13func loadCollectionFromNativeImage(file string) (_ *Collection, err error) {
14 mapFds := make([]efw.FD, 32)
15 programFds := make([]efw.FD, 32)
16 var maps map[string]*Map
17 var programs map[string]*Program
18
19 defer func() {
20 if err == nil {
21 return
22 }
23
24 for _, fd := range append(mapFds, programFds...) {
25 // efW never uses fd 0.
26 if fd != 0 {
27 _ = efw.EbpfCloseFd(int(fd))
28 }
29 }
30
31 for _, m := range maps {
32 _ = m.Close()
33 }
34
35 for _, p := range programs {
36 _ = p.Close()
37 }
38 }()
39
40 nMaps, nPrograms, err := efw.EbpfObjectLoadNativeFds(file, mapFds, programFds)
41 if errors.Is(err, efw.EBPF_NO_MEMORY) && (nMaps > len(mapFds) || nPrograms > len(programFds)) {
42 mapFds = make([]efw.FD, nMaps)
43 programFds = make([]efw.FD, nPrograms)
44
45 nMaps, nPrograms, err = efw.EbpfObjectLoadNativeFds(file, mapFds, programFds)
46 }
47 if err != nil {
48 return nil, err
49 }
50
51 mapFds = mapFds[:nMaps]
52 programFds = programFds[:nPrograms]
53
54 // The maximum length of a name is only 16 bytes on Linux, longer names
55 // are truncated. This is not a problem when loading from an ELF, since
56 // we get the full object name from the symbol table.
57 // When loading a native image we do not have this luxury. Use an efW native
58 // API to retrieve up to 64 bytes of the object name.
59
60 maps = make(map[string]*Map, len(mapFds))
61 for _, raw := range mapFds {
62 fd, err := sys.NewFD(int(raw))
63 if err != nil {
64 return nil, err
65 }
66
67 m, mapErr := newMapFromFD(fd)
68 if mapErr != nil {
69 _ = fd.Close()
70 return nil, mapErr

Callers

nothing calls this directly

Calls 13

CloseMethod · 0.95
EbpfCloseFdFunction · 0.92
EbpfObjectLoadNativeFdsFunction · 0.92
NewFDFunction · 0.92
EbpfObjectGetInfoByFdFunction · 0.92
ByteSliceToStringFunction · 0.92
newMapFromFDFunction · 0.85
newProgramFromFDFunction · 0.85
SizeofMethod · 0.80
PointerMethod · 0.80
CloseMethod · 0.65
FDMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…