in pkg/elfparser/elf.go [348:398]
func (e *elfLoader) parseSection() error {
for index, section := range e.elfFile.Sections {
if section.Name == "license" {
data, err := section.Data()
if err != nil {
return fmt.Errorf("failed to read data for section %s", section.Name)
}
e.license = string(data)
log.Infof("Found license - %s", e.license)
} else if section.Name == "maps" {
log.Infof("Found maps Section at Index %v", index)
e.mapSection = section
e.mapSectionIndex = index
} else if section.Type == elf.SHT_PROGBITS {
log.Infof("Found PROG Section at Index %v and Name %s", index, section.Name)
splitProgType := strings.Split(section.Name, "/")
progEntryType := strings.ToLower(splitProgType[0])
subProgEntryType, progEntrySubSystem, err := parseProgType(splitProgType)
if err != nil {
log.Info("Invalid prog type and subtype, supported is progtype such as tc or kprobe/progName or tracepoint/progType/progName")
return fmt.Errorf("invalid progType or subType")
}
log.Infof("Found the progType %s", progEntryType)
if !isProgTypeSupported(progEntryType) {
log.Infof("Not supported program %s", progEntryType)
continue
}
pEntry := progEntry{
progType: progEntryType,
subSystem: progEntrySubSystem,
subProgType: subProgEntryType,
progSection: section,
}
e.progSectionMap[uint32(index)] = pEntry
} else if section.Type == elf.SHT_REL {
log.Infof("Found a relocation section; Info:%v; Name: %s, Type: %s; Size: %v", section.Info,
section.Name, section.Type, section.Size)
e.reloSectionMap[section.Info] = section
}
}
if len(e.license) == 0 {
return fmt.Errorf("license missing in elf file")
}
return nil
}