Author: Augusto Noronha
Date: 2025-10-01T10:50:59-07:00
New Revision: 5a80fb9177e3c831c9c574400a13d77393397f2a

URL: 
https://github.com/llvm/llvm-project/commit/5a80fb9177e3c831c9c574400a13d77393397f2a
DIFF: 
https://github.com/llvm/llvm-project/commit/5a80fb9177e3c831c9c574400a13d77393397f2a.diff

LOG: Revert "[lldb][MachO][NFC] Extract ObjC metadata symbol parsing into 
helper function (#161536)"

This reverts commit 23e081524fd9f64fb3430822e879b6dc36a1d3f1.

Added: 
    

Modified: 
    lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp 
b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index e8bbefe27f47f..91c93be1b8cfd 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -2067,43 +2067,6 @@ static bool ParseTrieEntries(DataExtractor &data, 
lldb::offset_t offset,
   return true;
 }
 
-static bool
-TryParseV2ObjCMetadataSymbol(const char *&symbol_name,
-                             const char *&symbol_name_non_abi_mangled,
-                             SymbolType &type) {
-  static constexpr llvm::StringLiteral 
g_objc_v2_prefix_class("_OBJC_CLASS_$_");
-  static constexpr llvm::StringLiteral g_objc_v2_prefix_metaclass(
-      "_OBJC_METACLASS_$_");
-  static constexpr llvm::StringLiteral g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
-
-  llvm::StringRef symbol_name_ref(symbol_name);
-  if (symbol_name_ref.empty())
-    return false;
-
-  if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
-    symbol_name_non_abi_mangled = symbol_name + 1;
-    symbol_name = symbol_name + g_objc_v2_prefix_class.size();
-    type = eSymbolTypeObjCClass;
-    return true;
-  }
-
-  if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
-    symbol_name_non_abi_mangled = symbol_name + 1;
-    symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
-    type = eSymbolTypeObjCMetaClass;
-    return true;
-  }
-
-  if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
-    symbol_name_non_abi_mangled = symbol_name + 1;
-    symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
-    type = eSymbolTypeObjCIVar;
-    return true;
-  }
-
-  return false;
-}
-
 static SymbolType GetSymbolType(const char *&symbol_name,
                                 bool &demangled_is_synthesized,
                                 const SectionSP &text_section_sp,
@@ -2220,6 +2183,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
   lldb::offset_t offset = MachHeaderSizeFromMagic(m_header.magic);
   uint32_t i;
   FileSpecList dylib_files;
+  llvm::StringRef g_objc_v2_prefix_class("_OBJC_CLASS_$_");
+  llvm::StringRef g_objc_v2_prefix_metaclass("_OBJC_METACLASS_$_");
+  llvm::StringRef g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
   UUID image_uuid;
 
   for (i = 0; i < m_header.ncmds; ++i) {
@@ -2839,13 +2805,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
                         is_gsym = true;
                         sym[sym_idx].SetExternal(true);
 
-                        if (TryParseV2ObjCMetadataSymbol(
-                                symbol_name, symbol_name_non_abi_mangled,
-                                type)) {
+                        llvm::StringRef symbol_name_ref(symbol_name);
+                        if (symbol_name_ref.starts_with(
+                                g_objc_v2_prefix_class)) {
+                          symbol_name_non_abi_mangled = symbol_name + 1;
+                          symbol_name =
+                              symbol_name + g_objc_v2_prefix_class.size();
+                          type = eSymbolTypeObjCClass;
                           demangled_is_synthesized = true;
-                        } else if (nlist.n_value != 0) {
-                          symbol_section = section_info.GetSection(
-                              nlist.n_sect, nlist.n_value);
+
+                        } else if (symbol_name_ref.starts_with(
+                                       g_objc_v2_prefix_metaclass)) {
+                          symbol_name_non_abi_mangled = symbol_name + 1;
+                          symbol_name =
+                              symbol_name + g_objc_v2_prefix_metaclass.size();
+                          type = eSymbolTypeObjCMetaClass;
+                          demangled_is_synthesized = true;
+                        } else if (symbol_name_ref.starts_with(
+                                       g_objc_v2_prefix_ivar)) {
+                          symbol_name_non_abi_mangled = symbol_name + 1;
+                          symbol_name =
+                              symbol_name + g_objc_v2_prefix_ivar.size();
+                          type = eSymbolTypeObjCIVar;
+                          demangled_is_synthesized = true;
+                        } else {
+                          if (nlist.n_value != 0)
+                            symbol_section = section_info.GetSection(
+                                nlist.n_sect, nlist.n_value);
                           type = eSymbolTypeData;
                         }
                         break;
@@ -3330,10 +3316,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
                                   ::strstr(symbol_sect_name, "__objc") ==
                                       symbol_sect_name) {
                                 type = eSymbolTypeRuntime;
-                                demangled_is_synthesized =
-                                    TryParseV2ObjCMetadataSymbol(
-                                        symbol_name,
-                                        symbol_name_non_abi_mangled, type);
+
+                                if (symbol_name) {
+                                  llvm::StringRef symbol_name_ref(symbol_name);
+                                  if (symbol_name_ref.starts_with("_OBJC_")) {
+                                    llvm::StringRef
+                                        g_objc_v2_prefix_class(
+                                            "_OBJC_CLASS_$_");
+                                    llvm::StringRef
+                                        g_objc_v2_prefix_metaclass(
+                                            "_OBJC_METACLASS_$_");
+                                    llvm::StringRef
+                                        g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
+                                    if (symbol_name_ref.starts_with(
+                                            g_objc_v2_prefix_class)) {
+                                      symbol_name_non_abi_mangled =
+                                          symbol_name + 1;
+                                      symbol_name =
+                                          symbol_name +
+                                          g_objc_v2_prefix_class.size();
+                                      type = eSymbolTypeObjCClass;
+                                      demangled_is_synthesized = true;
+                                    } else if (
+                                        symbol_name_ref.starts_with(
+                                            g_objc_v2_prefix_metaclass)) {
+                                      symbol_name_non_abi_mangled =
+                                          symbol_name + 1;
+                                      symbol_name =
+                                          symbol_name +
+                                          g_objc_v2_prefix_metaclass.size();
+                                      type = eSymbolTypeObjCMetaClass;
+                                      demangled_is_synthesized = true;
+                                    } else if (symbol_name_ref.starts_with(
+                                                   g_objc_v2_prefix_ivar)) {
+                                      symbol_name_non_abi_mangled =
+                                          symbol_name + 1;
+                                      symbol_name =
+                                          symbol_name +
+                                          g_objc_v2_prefix_ivar.size();
+                                      type = eSymbolTypeObjCIVar;
+                                      demangled_is_synthesized = true;
+                                    }
+                                  }
+                                }
                               } else if (symbol_sect_name &&
                                          ::strstr(symbol_sect_name,
                                                   "__gcc_except_tab") ==
@@ -3640,12 +3665,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
           is_gsym = true;
           sym[sym_idx].SetExternal(true);
 
-          if (TryParseV2ObjCMetadataSymbol(symbol_name,
-                                           symbol_name_non_abi_mangled, type)) 
{
+          llvm::StringRef symbol_name_ref(symbol_name);
+          if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
+            symbol_name_non_abi_mangled = symbol_name + 1;
+            symbol_name = symbol_name + g_objc_v2_prefix_class.size();
+            type = eSymbolTypeObjCClass;
             demangled_is_synthesized = true;
-          } else if (nlist.n_value != 0) {
-            symbol_section =
-                section_info.GetSection(nlist.n_sect, nlist.n_value);
+
+          } else if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
+            symbol_name_non_abi_mangled = symbol_name + 1;
+            symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
+            type = eSymbolTypeObjCMetaClass;
+            demangled_is_synthesized = true;
+          } else if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
+            symbol_name_non_abi_mangled = symbol_name + 1;
+            symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
+            type = eSymbolTypeObjCIVar;
+            demangled_is_synthesized = true;
+          } else {
+            if (nlist.n_value != 0)
+              symbol_section =
+                  section_info.GetSection(nlist.n_sect, nlist.n_value);
             type = eSymbolTypeData;
           }
         } break;
@@ -4083,9 +4123,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
                 if (symbol_sect_name &&
                     ::strstr(symbol_sect_name, "__objc") == symbol_sect_name) {
                   type = eSymbolTypeRuntime;
-                  demangled_is_synthesized = TryParseV2ObjCMetadataSymbol(
-                      symbol_name, symbol_name_non_abi_mangled, type);
 
+                  if (symbol_name) {
+                    llvm::StringRef symbol_name_ref(symbol_name);
+                    if (symbol_name_ref.starts_with("_OBJC_")) {
+                      llvm::StringRef g_objc_v2_prefix_class(
+                          "_OBJC_CLASS_$_");
+                      llvm::StringRef g_objc_v2_prefix_metaclass(
+                          "_OBJC_METACLASS_$_");
+                      llvm::StringRef g_objc_v2_prefix_ivar(
+                          "_OBJC_IVAR_$_");
+                      if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) 
{
+                        symbol_name_non_abi_mangled = symbol_name + 1;
+                        symbol_name =
+                            symbol_name + g_objc_v2_prefix_class.size();
+                        type = eSymbolTypeObjCClass;
+                        demangled_is_synthesized = true;
+                      } else if (symbol_name_ref.starts_with(
+                                     g_objc_v2_prefix_metaclass)) {
+                        symbol_name_non_abi_mangled = symbol_name + 1;
+                        symbol_name =
+                            symbol_name + g_objc_v2_prefix_metaclass.size();
+                        type = eSymbolTypeObjCMetaClass;
+                        demangled_is_synthesized = true;
+                      } else if (symbol_name_ref.starts_with(
+                                     g_objc_v2_prefix_ivar)) {
+                        symbol_name_non_abi_mangled = symbol_name + 1;
+                        symbol_name =
+                            symbol_name + g_objc_v2_prefix_ivar.size();
+                        type = eSymbolTypeObjCIVar;
+                        demangled_is_synthesized = true;
+                      }
+                    }
+                  }
                 } else if (symbol_sect_name &&
                            ::strstr(symbol_sect_name, "__gcc_except_tab") ==
                                symbol_sect_name) {


        
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to