@@ -2072,6 +2072,43 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
20722072  return  true ;
20732073}
20742074
2075+ static  bool 
2076+ TryParseV2ObjCMetadataSymbol (const  char  *&symbol_name,
2077+                              const  char  *&symbol_name_non_abi_mangled,
2078+                              SymbolType &type) {
2079+   static  constexpr  llvm::StringLiteral g_objc_v2_prefix_class (" _OBJC_CLASS_$_" 
2080+   static  constexpr  llvm::StringLiteral g_objc_v2_prefix_metaclass (
2081+       " _OBJC_METACLASS_$_" 
2082+   static  constexpr  llvm::StringLiteral g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" 
2083+ 
2084+   llvm::StringRef symbol_name_ref (symbol_name);
2085+   if  (symbol_name_ref.empty ())
2086+     return  false ;
2087+ 
2088+   if  (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
2089+     symbol_name_non_abi_mangled = symbol_name + 1 ;
2090+     symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
2091+     type = eSymbolTypeObjCClass;
2092+     return  true ;
2093+   }
2094+ 
2095+   if  (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
2096+     symbol_name_non_abi_mangled = symbol_name + 1 ;
2097+     symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
2098+     type = eSymbolTypeObjCMetaClass;
2099+     return  true ;
2100+   }
2101+ 
2102+   if  (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
2103+     symbol_name_non_abi_mangled = symbol_name + 1 ;
2104+     symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
2105+     type = eSymbolTypeObjCIVar;
2106+     return  true ;
2107+   }
2108+ 
2109+   return  false ;
2110+ }
2111+ 
20752112static  SymbolType GetSymbolType (const  char  *&symbol_name,
20762113                                bool  &demangled_is_synthesized,
20772114                                const  SectionSP &text_section_sp,
@@ -2188,9 +2225,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
21882225  lldb::offset_t  offset = MachHeaderSizeFromMagic (m_header.magic );
21892226  uint32_t  i;
21902227  FileSpecList dylib_files;
2191-   llvm::StringRef g_objc_v2_prefix_class (" _OBJC_CLASS_$_" 
2192-   llvm::StringRef g_objc_v2_prefix_metaclass (" _OBJC_METACLASS_$_" 
2193-   llvm::StringRef g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" 
21942228  UUID image_uuid;
21952229
21962230  for  (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2812,33 +2846,13 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28122846                        is_gsym = true ;
28132847                        sym[sym_idx].SetExternal (true );
28142848
2815-                         llvm::StringRef symbol_name_ref (symbol_name);
2816-                         if  (symbol_name_ref.starts_with (
2817-                                 g_objc_v2_prefix_class)) {
2818-                           symbol_name_non_abi_mangled = symbol_name + 1 ;
2819-                           symbol_name =
2820-                               symbol_name + g_objc_v2_prefix_class.size ();
2821-                           type = eSymbolTypeObjCClass;
2822-                           demangled_is_synthesized = true ;
2823- 
2824-                         } else  if  (symbol_name_ref.starts_with (
2825-                                        g_objc_v2_prefix_metaclass)) {
2826-                           symbol_name_non_abi_mangled = symbol_name + 1 ;
2827-                           symbol_name =
2828-                               symbol_name + g_objc_v2_prefix_metaclass.size ();
2829-                           type = eSymbolTypeObjCMetaClass;
2849+                         if  (TryParseV2ObjCMetadataSymbol (
2850+                                 symbol_name, symbol_name_non_abi_mangled,
2851+                                 type)) {
28302852                          demangled_is_synthesized = true ;
2831-                         } else  if  (symbol_name_ref.starts_with (
2832-                                        g_objc_v2_prefix_ivar)) {
2833-                           symbol_name_non_abi_mangled = symbol_name + 1 ;
2834-                           symbol_name =
2835-                               symbol_name + g_objc_v2_prefix_ivar.size ();
2836-                           type = eSymbolTypeObjCIVar;
2837-                           demangled_is_synthesized = true ;
2838-                         } else  {
2839-                           if  (nlist.n_value  != 0 )
2840-                             symbol_section = section_info.GetSection (
2841-                                 nlist.n_sect , nlist.n_value );
2853+                         } else  if  (nlist.n_value  != 0 ) {
2854+                           symbol_section = section_info.GetSection (
2855+                               nlist.n_sect , nlist.n_value );
28422856                          type = eSymbolTypeData;
28432857                        }
28442858                        break ;
@@ -3323,49 +3337,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33233337                                  ::strstr (symbol_sect_name, " __objc" 
33243338                                      symbol_sect_name) {
33253339                                type = eSymbolTypeRuntime;
3326- 
3327-                                 if  (symbol_name) {
3328-                                   llvm::StringRef symbol_name_ref (symbol_name);
3329-                                   if  (symbol_name_ref.starts_with (" _OBJC_" 
3330-                                     llvm::StringRef
3331-                                         g_objc_v2_prefix_class (
3332-                                             " _OBJC_CLASS_$_" 
3333-                                     llvm::StringRef
3334-                                         g_objc_v2_prefix_metaclass (
3335-                                             " _OBJC_METACLASS_$_" 
3336-                                     llvm::StringRef
3337-                                         g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" 
3338-                                     if  (symbol_name_ref.starts_with (
3339-                                             g_objc_v2_prefix_class)) {
3340-                                       symbol_name_non_abi_mangled =
3341-                                           symbol_name + 1 ;
3342-                                       symbol_name =
3343-                                           symbol_name +
3344-                                           g_objc_v2_prefix_class.size ();
3345-                                       type = eSymbolTypeObjCClass;
3346-                                       demangled_is_synthesized = true ;
3347-                                     } else  if  (
3348-                                         symbol_name_ref.starts_with (
3349-                                             g_objc_v2_prefix_metaclass)) {
3350-                                       symbol_name_non_abi_mangled =
3351-                                           symbol_name + 1 ;
3352-                                       symbol_name =
3353-                                           symbol_name +
3354-                                           g_objc_v2_prefix_metaclass.size ();
3355-                                       type = eSymbolTypeObjCMetaClass;
3356-                                       demangled_is_synthesized = true ;
3357-                                     } else  if  (symbol_name_ref.starts_with (
3358-                                                    g_objc_v2_prefix_ivar)) {
3359-                                       symbol_name_non_abi_mangled =
3360-                                           symbol_name + 1 ;
3361-                                       symbol_name =
3362-                                           symbol_name +
3363-                                           g_objc_v2_prefix_ivar.size ();
3364-                                       type = eSymbolTypeObjCIVar;
3365-                                       demangled_is_synthesized = true ;
3366-                                     }
3367-                                   }
3368-                                 }
3340+                                 demangled_is_synthesized =
3341+                                     TryParseV2ObjCMetadataSymbol (
3342+                                         symbol_name,
3343+                                         symbol_name_non_abi_mangled, type);
33693344                              } else  if  (symbol_sect_name &&
33703345                                         ::strstr (symbol_sect_name,
33713346                                                  " __gcc_except_tab" 
@@ -3738,27 +3713,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
37383713          is_gsym = true ;
37393714          sym[sym_idx].SetExternal (true );
37403715
3741-           llvm::StringRef symbol_name_ref (symbol_name);
3742-           if  (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3743-             symbol_name_non_abi_mangled = symbol_name + 1 ;
3744-             symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3745-             type = eSymbolTypeObjCClass;
3746-             demangled_is_synthesized = true ;
3747- 
3748-           } else  if  (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
3749-             symbol_name_non_abi_mangled = symbol_name + 1 ;
3750-             symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
3751-             type = eSymbolTypeObjCMetaClass;
3716+           if  (TryParseV2ObjCMetadataSymbol (symbol_name,
3717+                                            symbol_name_non_abi_mangled, type)) {
37523718            demangled_is_synthesized = true ;
3753-           } else  if  (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
3754-             symbol_name_non_abi_mangled = symbol_name + 1 ;
3755-             symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
3756-             type = eSymbolTypeObjCIVar;
3757-             demangled_is_synthesized = true ;
3758-           } else  {
3759-             if  (nlist.n_value  != 0 )
3760-               symbol_section =
3761-                   section_info.GetSection (nlist.n_sect , nlist.n_value );
3719+           } else  if  (nlist.n_value  != 0 ) {
3720+             symbol_section =
3721+                 section_info.GetSection (nlist.n_sect , nlist.n_value );
37623722            type = eSymbolTypeData;
37633723          }
37643724        } break ;
@@ -4201,39 +4161,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
42014161                if  (symbol_sect_name &&
42024162                    ::strstr (symbol_sect_name, " __objc" 
42034163                  type = eSymbolTypeRuntime;
4164+                   demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4165+                       symbol_name, symbol_name_non_abi_mangled, type);
42044166
4205-                   if  (symbol_name) {
4206-                     llvm::StringRef symbol_name_ref (symbol_name);
4207-                     if  (symbol_name_ref.starts_with (" _OBJC_" 
4208-                       llvm::StringRef g_objc_v2_prefix_class (
4209-                           " _OBJC_CLASS_$_" 
4210-                       llvm::StringRef g_objc_v2_prefix_metaclass (
4211-                           " _OBJC_METACLASS_$_" 
4212-                       llvm::StringRef g_objc_v2_prefix_ivar (
4213-                           " _OBJC_IVAR_$_" 
4214-                       if  (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
4215-                         symbol_name_non_abi_mangled = symbol_name + 1 ;
4216-                         symbol_name =
4217-                             symbol_name + g_objc_v2_prefix_class.size ();
4218-                         type = eSymbolTypeObjCClass;
4219-                         demangled_is_synthesized = true ;
4220-                       } else  if  (symbol_name_ref.starts_with (
4221-                                      g_objc_v2_prefix_metaclass)) {
4222-                         symbol_name_non_abi_mangled = symbol_name + 1 ;
4223-                         symbol_name =
4224-                             symbol_name + g_objc_v2_prefix_metaclass.size ();
4225-                         type = eSymbolTypeObjCMetaClass;
4226-                         demangled_is_synthesized = true ;
4227-                       } else  if  (symbol_name_ref.starts_with (
4228-                                      g_objc_v2_prefix_ivar)) {
4229-                         symbol_name_non_abi_mangled = symbol_name + 1 ;
4230-                         symbol_name =
4231-                             symbol_name + g_objc_v2_prefix_ivar.size ();
4232-                         type = eSymbolTypeObjCIVar;
4233-                         demangled_is_synthesized = true ;
4234-                       }
4235-                     }
4236-                   }
42374167                } else  if  (symbol_sect_name &&
42384168                           ::strstr (symbol_sect_name, " __gcc_except_tab" 
42394169                               symbol_sect_name) {
0 commit comments