[Lldb-commits] [lldb] [lldb][AIX] Added XCOFF ParseSymtab handling (PR #141577)
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Thu May 29 05:38:39 PDT 2025
================
@@ -188,7 +188,74 @@ AddressClass ObjectFileXCOFF::GetAddressClass(addr_t file_addr) {
return AddressClass::eUnknown;
}
-void ObjectFileXCOFF::ParseSymtab(Symtab &lldb_symtab) {}
+lldb::SymbolType MapSymbolType(llvm::object::SymbolRef::Type sym_type) {
+ if (sym_type == llvm::object::SymbolRef::ST_Function)
+ return lldb::eSymbolTypeCode;
+ else if (sym_type == llvm::object::SymbolRef::ST_Data)
+ return lldb::eSymbolTypeData;
+ else if (sym_type == llvm::object::SymbolRef::ST_File)
+ return lldb::eSymbolTypeSourceFile;
+ return lldb::eSymbolTypeInvalid;
+}
+
+void ObjectFileXCOFF::ParseSymtab(Symtab &lldb_symtab) {
+ SectionList *sectionList = GetSectionList();
+
+ for (const auto &symbol_ref : m_binary->symbols()) {
+ llvm::object::XCOFFSymbolRef xcoff_sym_ref(symbol_ref);
+ llvm::Expected<llvm::StringRef> name_or_err = xcoff_sym_ref.getName();
+ if (!name_or_err) {
+ consumeError(name_or_err.takeError());
+ continue;
+ }
+ llvm::StringRef symbolName = name_or_err.get();
+ // Remove the dot prefix for demangle
+ llvm::StringRef symbol_name =
+ symbolName.starts_with(".") ? symbolName.drop_front() : symbolName;
+ auto storageClass = xcoff_sym_ref.getStorageClass();
+ if (storageClass == XCOFF::C_HIDEXT && symbolName != "TOC") {
+ if (xcoff_sym_ref.getNumberOfAuxEntries() != 1)
+ continue;
+ auto aux_csect_or_err = xcoff_sym_ref.getXCOFFCsectAuxRef();
+ if (!aux_csect_or_err) {
+ consumeError(aux_csect_or_err.takeError());
+ continue;
+ }
+ const llvm::object::XCOFFCsectAuxRef csect_aux = aux_csect_or_err.get();
+ if (csect_aux.getStorageMappingClass() != XCOFF::XMC_PR ||
+ (m_binary->is64Bit() ? (csect_aux.getAuxType64() != XCOFF::AUX_CSECT)
+ : false))
+ continue;
----------------
DavidSpickett wrote:
Yes please, my reaction was "this looks very clever but needs to be refactored" :)
https://github.com/llvm/llvm-project/pull/141577
More information about the lldb-commits
mailing list