@@ -2072,43 +2072,6 @@ 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- 
21122075static  SymbolType GetSymbolType (const  char  *&symbol_name,
21132076                                bool  &demangled_is_synthesized,
21142077                                const  SectionSP &text_section_sp,
@@ -2225,6 +2188,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
22252188  lldb::offset_t  offset = MachHeaderSizeFromMagic (m_header.magic );
22262189  uint32_t  i;
22272190  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_$_" 
22282194  UUID image_uuid;
22292195
22302196  for  (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2846,13 +2812,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28462812                        is_gsym = true ;
28472813                        sym[sym_idx].SetExternal (true );
28482814
2849-                         if  (TryParseV2ObjCMetadataSymbol (
2850-                                 symbol_name, symbol_name_non_abi_mangled,
2851-                                 type)) {
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;
28522822                          demangled_is_synthesized = true ;
2853-                         } else  if  (nlist.n_value  != 0 ) {
2854-                           symbol_section = section_info.GetSection (
2855-                               nlist.n_sect , nlist.n_value );
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;
2830+                           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 );
28562842                          type = eSymbolTypeData;
28572843                        }
28582844                        break ;
@@ -3337,10 +3323,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33373323                                  ::strstr (symbol_sect_name, " __objc" 
33383324                                      symbol_sect_name) {
33393325                                type = eSymbolTypeRuntime;
3340-                                 demangled_is_synthesized =
3341-                                     TryParseV2ObjCMetadataSymbol (
3342-                                         symbol_name,
3343-                                         symbol_name_non_abi_mangled, type);
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+                                 }
33443369                              } else  if  (symbol_sect_name &&
33453370                                         ::strstr (symbol_sect_name,
33463371                                                  " __gcc_except_tab" 
@@ -3713,12 +3738,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
37133738          is_gsym = true ;
37143739          sym[sym_idx].SetExternal (true );
37153740
3716-           if  (TryParseV2ObjCMetadataSymbol (symbol_name,
3717-                                            symbol_name_non_abi_mangled, type)) {
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;
37183746            demangled_is_synthesized = true ;
3719-           } else  if  (nlist.n_value  != 0 ) {
3720-             symbol_section =
3721-                 section_info.GetSection (nlist.n_sect , nlist.n_value );
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;
3752+             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 );
37223762            type = eSymbolTypeData;
37233763          }
37243764        } break ;
@@ -4161,9 +4201,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41614201                if  (symbol_sect_name &&
41624202                    ::strstr (symbol_sect_name, " __objc" 
41634203                  type = eSymbolTypeRuntime;
4164-                   demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4165-                       symbol_name, symbol_name_non_abi_mangled, type);
41664204
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+                   }
41674237                } else  if  (symbol_sect_name &&
41684238                           ::strstr (symbol_sect_name, " __gcc_except_tab" 
41694239                               symbol_sect_name) {
0 commit comments