@@ -2067,6 +2067,43 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
20672067  return  true ;
20682068}
20692069
2070+ static  bool 
2071+ TryParseV2ObjCMetadataSymbol (const  char  *&symbol_name,
2072+                              const  char  *&symbol_name_non_abi_mangled,
2073+                              SymbolType &type) {
2074+   static  constexpr  llvm::StringLiteral g_objc_v2_prefix_class (" _OBJC_CLASS_$_"  );
2075+   static  constexpr  llvm::StringLiteral g_objc_v2_prefix_metaclass (
2076+       " _OBJC_METACLASS_$_"  );
2077+   static  constexpr  llvm::StringLiteral g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_"  );
2078+ 
2079+   llvm::StringRef symbol_name_ref (symbol_name);
2080+   if  (symbol_name_ref.empty ())
2081+     return  false ;
2082+ 
2083+   if  (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
2084+     symbol_name_non_abi_mangled = symbol_name + 1 ;
2085+     symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
2086+     type = eSymbolTypeObjCClass;
2087+     return  true ;
2088+   }
2089+ 
2090+   if  (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
2091+     symbol_name_non_abi_mangled = symbol_name + 1 ;
2092+     symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
2093+     type = eSymbolTypeObjCMetaClass;
2094+     return  true ;
2095+   }
2096+ 
2097+   if  (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
2098+     symbol_name_non_abi_mangled = symbol_name + 1 ;
2099+     symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
2100+     type = eSymbolTypeObjCIVar;
2101+     return  true ;
2102+   }
2103+ 
2104+   return  false ;
2105+ }
2106+ 
20702107static  SymbolType GetSymbolType (const  char  *&symbol_name,
20712108                                bool  &demangled_is_synthesized,
20722109                                const  SectionSP &text_section_sp,
@@ -2183,9 +2220,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
21832220  lldb::offset_t  offset = MachHeaderSizeFromMagic (m_header.magic );
21842221  uint32_t  i;
21852222  FileSpecList dylib_files;
2186-   llvm::StringRef g_objc_v2_prefix_class (" _OBJC_CLASS_$_"  );
2187-   llvm::StringRef g_objc_v2_prefix_metaclass (" _OBJC_METACLASS_$_"  );
2188-   llvm::StringRef g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_"  );
21892223  UUID image_uuid;
21902224
21912225  for  (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2805,33 +2839,15 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28052839                        is_gsym = true ;
28062840                        sym[sym_idx].SetExternal (true );
28072841
2808-                         llvm::StringRef symbol_name_ref (symbol_name);
2809-                         if  (symbol_name_ref.starts_with (
2810-                                 g_objc_v2_prefix_class)) {
2811-                           symbol_name_non_abi_mangled = symbol_name + 1 ;
2812-                           symbol_name =
2813-                               symbol_name + g_objc_v2_prefix_class.size ();
2814-                           type = eSymbolTypeObjCClass;
2815-                           demangled_is_synthesized = true ;
2816- 
2817-                         } else  if  (symbol_name_ref.starts_with (
2818-                                        g_objc_v2_prefix_metaclass)) {
2819-                           symbol_name_non_abi_mangled = symbol_name + 1 ;
2820-                           symbol_name =
2821-                               symbol_name + g_objc_v2_prefix_metaclass.size ();
2822-                           type = eSymbolTypeObjCMetaClass;
2823-                           demangled_is_synthesized = true ;
2824-                         } else  if  (symbol_name_ref.starts_with (
2825-                                        g_objc_v2_prefix_ivar)) {
2826-                           symbol_name_non_abi_mangled = symbol_name + 1 ;
2827-                           symbol_name =
2828-                               symbol_name + g_objc_v2_prefix_ivar.size ();
2829-                           type = eSymbolTypeObjCIVar;
2842+                         if  (TryParseV2ObjCMetadataSymbol (
2843+                                 symbol_name, symbol_name_non_abi_mangled,
2844+                                 type)) {
28302845                          demangled_is_synthesized = true ;
28312846                        } else  {
28322847                          if  (nlist.n_value  != 0 )
28332848                            symbol_section = section_info.GetSection (
28342849                                nlist.n_sect , nlist.n_value );
2850+ 
28352851                          type = eSymbolTypeData;
28362852                        }
28372853                        break ;
@@ -3317,48 +3333,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33173333                                      symbol_sect_name) {
33183334                                type = eSymbolTypeRuntime;
33193335
3320-                                 if  (symbol_name) {
3321-                                   llvm::StringRef symbol_name_ref (symbol_name);
3322-                                   if  (symbol_name_ref.starts_with (" _OBJC_"  )) {
3323-                                     llvm::StringRef
3324-                                         g_objc_v2_prefix_class (
3325-                                             " _OBJC_CLASS_$_"  );
3326-                                     llvm::StringRef
3327-                                         g_objc_v2_prefix_metaclass (
3328-                                             " _OBJC_METACLASS_$_"  );
3329-                                     llvm::StringRef
3330-                                         g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_"  );
3331-                                     if  (symbol_name_ref.starts_with (
3332-                                             g_objc_v2_prefix_class)) {
3333-                                       symbol_name_non_abi_mangled =
3334-                                           symbol_name + 1 ;
3335-                                       symbol_name =
3336-                                           symbol_name +
3337-                                           g_objc_v2_prefix_class.size ();
3338-                                       type = eSymbolTypeObjCClass;
3339-                                       demangled_is_synthesized = true ;
3340-                                     } else  if  (
3341-                                         symbol_name_ref.starts_with (
3342-                                             g_objc_v2_prefix_metaclass)) {
3343-                                       symbol_name_non_abi_mangled =
3344-                                           symbol_name + 1 ;
3345-                                       symbol_name =
3346-                                           symbol_name +
3347-                                           g_objc_v2_prefix_metaclass.size ();
3348-                                       type = eSymbolTypeObjCMetaClass;
3349-                                       demangled_is_synthesized = true ;
3350-                                     } else  if  (symbol_name_ref.starts_with (
3351-                                                    g_objc_v2_prefix_ivar)) {
3352-                                       symbol_name_non_abi_mangled =
3353-                                           symbol_name + 1 ;
3354-                                       symbol_name =
3355-                                           symbol_name +
3356-                                           g_objc_v2_prefix_ivar.size ();
3357-                                       type = eSymbolTypeObjCIVar;
3358-                                       demangled_is_synthesized = true ;
3359-                                     }
3360-                                   }
3361-                                 }
3336+                                 if  (TryParseV2ObjCMetadataSymbol (
3337+                                         symbol_name,
3338+                                         symbol_name_non_abi_mangled, type))
3339+                                   demangled_is_synthesized = true ;
33623340                              } else  if  (symbol_sect_name &&
33633341                                         ::strstr (symbol_sect_name,
33643342                                                  " __gcc_except_tab"  ) ==
@@ -3665,27 +3643,14 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36653643          is_gsym = true ;
36663644          sym[sym_idx].SetExternal (true );
36673645
3668-           llvm::StringRef symbol_name_ref (symbol_name);
3669-           if  (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3670-             symbol_name_non_abi_mangled = symbol_name + 1 ;
3671-             symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3672-             type = eSymbolTypeObjCClass;
3673-             demangled_is_synthesized = true ;
3674- 
3675-           } else  if  (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
3676-             symbol_name_non_abi_mangled = symbol_name + 1 ;
3677-             symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
3678-             type = eSymbolTypeObjCMetaClass;
3679-             demangled_is_synthesized = true ;
3680-           } else  if  (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
3681-             symbol_name_non_abi_mangled = symbol_name + 1 ;
3682-             symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
3683-             type = eSymbolTypeObjCIVar;
3646+           if  (TryParseV2ObjCMetadataSymbol (symbol_name,
3647+                                            symbol_name_non_abi_mangled, type)) {
36843648            demangled_is_synthesized = true ;
36853649          } else  {
36863650            if  (nlist.n_value  != 0 )
36873651              symbol_section =
36883652                  section_info.GetSection (nlist.n_sect , nlist.n_value );
3653+ 
36893654            type = eSymbolTypeData;
36903655          }
36913656        } break ;
@@ -4124,38 +4089,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41244089                    ::strstr (symbol_sect_name, " __objc"  ) == symbol_sect_name) {
41254090                  type = eSymbolTypeRuntime;
41264091
4127-                   if  (symbol_name) {
4128-                     llvm::StringRef symbol_name_ref (symbol_name);
4129-                     if  (symbol_name_ref.starts_with (" _OBJC_"  )) {
4130-                       llvm::StringRef g_objc_v2_prefix_class (
4131-                           " _OBJC_CLASS_$_"  );
4132-                       llvm::StringRef g_objc_v2_prefix_metaclass (
4133-                           " _OBJC_METACLASS_$_"  );
4134-                       llvm::StringRef g_objc_v2_prefix_ivar (
4135-                           " _OBJC_IVAR_$_"  );
4136-                       if  (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
4137-                         symbol_name_non_abi_mangled = symbol_name + 1 ;
4138-                         symbol_name =
4139-                             symbol_name + g_objc_v2_prefix_class.size ();
4140-                         type = eSymbolTypeObjCClass;
4141-                         demangled_is_synthesized = true ;
4142-                       } else  if  (symbol_name_ref.starts_with (
4143-                                      g_objc_v2_prefix_metaclass)) {
4144-                         symbol_name_non_abi_mangled = symbol_name + 1 ;
4145-                         symbol_name =
4146-                             symbol_name + g_objc_v2_prefix_metaclass.size ();
4147-                         type = eSymbolTypeObjCMetaClass;
4148-                         demangled_is_synthesized = true ;
4149-                       } else  if  (symbol_name_ref.starts_with (
4150-                                      g_objc_v2_prefix_ivar)) {
4151-                         symbol_name_non_abi_mangled = symbol_name + 1 ;
4152-                         symbol_name =
4153-                             symbol_name + g_objc_v2_prefix_ivar.size ();
4154-                         type = eSymbolTypeObjCIVar;
4155-                         demangled_is_synthesized = true ;
4156-                       }
4157-                     }
4158-                   }
4092+                   if  (TryParseV2ObjCMetadataSymbol (
4093+                           symbol_name, symbol_name_non_abi_mangled, type))
4094+                     demangled_is_synthesized = true ;
41594095                } else  if  (symbol_sect_name &&
41604096                           ::strstr (symbol_sect_name, " __gcc_except_tab"  ) ==
41614097                               symbol_sect_name) {
0 commit comments