================ @@ -2472,48 +2429,47 @@ size_t ObjectFileELF::ParseDynamicSymbols() { if (m_dynamic_symbols.size()) return m_dynamic_symbols.size(); - SectionList *section_list = GetSectionList(); - if (!section_list) + std::optional<DataExtractor> dynamic_data = GetDynamicData(); + if (!dynamic_data) return 0; - // Find the SHT_DYNAMIC section. - Section *dynsym = - section_list->FindSectionByType(eSectionTypeELFDynamicLinkInfo, true) - .get(); - if (!dynsym) - return 0; - assert(dynsym->GetObjectFile() == this); - - ELFDynamic symbol; - DataExtractor dynsym_data; - if (ReadSectionData(dynsym, dynsym_data)) { - const lldb::offset_t section_size = dynsym_data.GetByteSize(); - lldb::offset_t cursor = 0; - - while (cursor < section_size) { - if (!symbol.Parse(dynsym_data, &cursor)) + ELFDynamicWithName e; + lldb::offset_t cursor = 0; + while (e.symbol.Parse(*dynamic_data, &cursor)) { + m_dynamic_symbols.push_back(e); + if (e.symbol.d_tag == DT_NULL) + break; + } + if (std::optional<DataExtractor> dynstr_data = GetDynstrData()) { + for (ELFDynamicWithName &entry : m_dynamic_symbols) { + switch (entry.symbol.d_tag) { + case DT_NEEDED: + case DT_SONAME: + case DT_RPATH: + case DT_RUNPATH: + case DT_AUXILIARY: + case DT_FILTER: { + lldb::offset_t cursor = entry.symbol.d_val; + const char *name = dynstr_data->GetCStr(&cursor); + if (name) + entry.name = name; ---------------- labath wrote:
```suggestion if (const char *name = dynstr_data->GetCStr(&cursor)) entry.name = std::string(name); ``` (using the std::string as a subtle cue to the reader that the lhs is a string.) https://github.com/llvm/llvm-project/pull/101237 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits