@@ -2067,43 +2067,6 @@ 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- 
21072070static  SymbolType GetSymbolType (const  char  *&symbol_name,
21082071                                bool  &demangled_is_synthesized,
21092072                                const  SectionSP &text_section_sp,
@@ -2220,6 +2183,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
22202183  lldb::offset_t  offset = MachHeaderSizeFromMagic (m_header.magic );
22212184  uint32_t  i;
22222185  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_$_" 
22232189  UUID image_uuid;
22242190
22252191  for  (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2839,13 +2805,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28392805                        is_gsym = true ;
28402806                        sym[sym_idx].SetExternal (true );
28412807
2842-                         if  (TryParseV2ObjCMetadataSymbol (
2843-                                 symbol_name, symbol_name_non_abi_mangled,
2844-                                 type)) {
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;
28452815                          demangled_is_synthesized = true ;
2846-                         } else  if  (nlist.n_value  != 0 ) {
2847-                           symbol_section = section_info.GetSection (
2848-                               nlist.n_sect , nlist.n_value );
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;
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 );
28492835                          type = eSymbolTypeData;
28502836                        }
28512837                        break ;
@@ -3330,10 +3316,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33303316                                  ::strstr (symbol_sect_name, " __objc" 
33313317                                      symbol_sect_name) {
33323318                                type = eSymbolTypeRuntime;
3333-                                 demangled_is_synthesized =
3334-                                     TryParseV2ObjCMetadataSymbol (
3335-                                         symbol_name,
3336-                                         symbol_name_non_abi_mangled, type);
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+                                 }
33373362                              } else  if  (symbol_sect_name &&
33383363                                         ::strstr (symbol_sect_name,
33393364                                                  " __gcc_except_tab" 
@@ -3640,12 +3665,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36403665          is_gsym = true ;
36413666          sym[sym_idx].SetExternal (true );
36423667
3643-           if  (TryParseV2ObjCMetadataSymbol (symbol_name,
3644-                                            symbol_name_non_abi_mangled, type)) {
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;
36453673            demangled_is_synthesized = true ;
3646-           } else  if  (nlist.n_value  != 0 ) {
3647-             symbol_section =
3648-                 section_info.GetSection (nlist.n_sect , nlist.n_value );
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;
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 );
36493689            type = eSymbolTypeData;
36503690          }
36513691        } break ;
@@ -4083,9 +4123,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
40834123                if  (symbol_sect_name &&
40844124                    ::strstr (symbol_sect_name, " __objc" 
40854125                  type = eSymbolTypeRuntime;
4086-                   demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4087-                       symbol_name, symbol_name_non_abi_mangled, type);
40884126
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+                   }
40894159                } else  if  (symbol_sect_name &&
40904160                           ::strstr (symbol_sect_name, " __gcc_except_tab" 
40914161                               symbol_sect_name) {
0 commit comments