if (symbol_table_entry->st_size)
            symbols.push_back(symbol);
        updateResources(info->dlpi_addr, info->dlpi_name, symbol.name, symbol.address_begin, resources);
    }
}
bool searchAndCollectSymbolsFromELFSymbolTable(
    dl_phdr_info * info,
    const Elf & elf,
    unsigned section_header_type,
    const char * string_table_name,
    std::vector<SymbolIndex::Symbol> & symbols,
    SymbolIndex::Resources & resources)
{
    std::optional<Elf::Section> symbol_table;
    std::optional<Elf::Section> string_table;
    if (!elf.iterateSections([&](const Elf::Section & section, size_t)
        {
            if (section.header.sh_type == section_header_type)
                symbol_table.emplace(section);
            else if (section.header.sh_type == SHT_STRTAB && 0 == strcmp(section.name(), string_table_name))
                string_table.emplace(section);
            return (symbol_table && string_table);
        }))
    {
        return false;
    }
    collectSymbolsFromELFSymbolTable(info, elf, *symbol_table, *string_table, symbols, resources);
    return true;
}
void collectSymbolsFromELF(