@@ -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,13 @@ 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;
2842+                         if  (TryParseV2ObjCMetadataSymbol (
2843+                                 symbol_name, symbol_name_non_abi_mangled,
2844+                                 type)) {
28232845                          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;
2830-                           demangled_is_synthesized = true ;
2831-                         } else  {
2832-                           if  (nlist.n_value  != 0 )
2833-                             symbol_section = section_info.GetSection (
2834-                                 nlist.n_sect , nlist.n_value );
2846+                         } else  if  (nlist.n_value  != 0 ) {
2847+                           symbol_section = section_info.GetSection (
2848+                               nlist.n_sect , nlist.n_value );
28352849                          type = eSymbolTypeData;
28362850                        }
28372851                        break ;
@@ -3316,49 +3330,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33163330                                  ::strstr (symbol_sect_name, " __objc" 
33173331                                      symbol_sect_name) {
33183332                                type = eSymbolTypeRuntime;
3319- 
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-                                 }
3333+                                 demangled_is_synthesized =
3334+                                     TryParseV2ObjCMetadataSymbol (
3335+                                         symbol_name,
3336+                                         symbol_name_non_abi_mangled, type);
33623337                              } else  if  (symbol_sect_name &&
33633338                                         ::strstr (symbol_sect_name,
33643339                                                  " __gcc_except_tab" 
@@ -3665,27 +3640,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36653640          is_gsym = true ;
36663641          sym[sym_idx].SetExternal (true );
36673642
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;
3643+           if  (TryParseV2ObjCMetadataSymbol (symbol_name,
3644+                                            symbol_name_non_abi_mangled, type)) {
36793645            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;
3684-             demangled_is_synthesized = true ;
3685-           } else  {
3686-             if  (nlist.n_value  != 0 )
3687-               symbol_section =
3688-                   section_info.GetSection (nlist.n_sect , nlist.n_value );
3646+           } else  if  (nlist.n_value  != 0 ) {
3647+             symbol_section =
3648+                 section_info.GetSection (nlist.n_sect , nlist.n_value );
36893649            type = eSymbolTypeData;
36903650          }
36913651        } break ;
@@ -4123,39 +4083,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41234083                if  (symbol_sect_name &&
41244084                    ::strstr (symbol_sect_name, " __objc" 
41254085                  type = eSymbolTypeRuntime;
4086+                   demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4087+                       symbol_name, symbol_name_non_abi_mangled, type);
41264088
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-                   }
41594089                } else  if  (symbol_sect_name &&
41604090                           ::strstr (symbol_sect_name, " __gcc_except_tab" 
41614091                               symbol_sect_name) {
0 commit comments