@@ -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) {
@@ -2811,33 +2845,13 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28112845 is_gsym = true ;
28122846 sym[sym_idx].SetExternal (true );
28132847
2814- llvm::StringRef symbol_name_ref (symbol_name);
2815- if (symbol_name_ref.starts_with (
2816- g_objc_v2_prefix_class)) {
2817- symbol_name_non_abi_mangled = symbol_name + 1 ;
2818- symbol_name =
2819- symbol_name + g_objc_v2_prefix_class.size ();
2820- type = eSymbolTypeObjCClass;
2821- demangled_is_synthesized = true ;
2822-
2823- } else if (symbol_name_ref.starts_with (
2824- g_objc_v2_prefix_metaclass)) {
2825- symbol_name_non_abi_mangled = symbol_name + 1 ;
2826- symbol_name =
2827- symbol_name + g_objc_v2_prefix_metaclass.size ();
2828- type = eSymbolTypeObjCMetaClass;
2848+ if (TryParseV2ObjCMetadataSymbol (
2849+ symbol_name, symbol_name_non_abi_mangled,
2850+ type)) {
28292851 demangled_is_synthesized = true ;
2830- } else if (symbol_name_ref.starts_with (
2831- g_objc_v2_prefix_ivar)) {
2832- symbol_name_non_abi_mangled = symbol_name + 1 ;
2833- symbol_name =
2834- symbol_name + g_objc_v2_prefix_ivar.size ();
2835- type = eSymbolTypeObjCIVar;
2836- demangled_is_synthesized = true ;
2837- } else {
2838- if (nlist.n_value != 0 )
2839- symbol_section = section_info.GetSection (
2840- nlist.n_sect , nlist.n_value );
2852+ } else if (nlist.n_value != 0 ) {
2853+ symbol_section = section_info.GetSection (
2854+ nlist.n_sect , nlist.n_value );
28412855 type = eSymbolTypeData;
28422856 }
28432857 break ;
@@ -3322,49 +3336,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33223336 ::strstr (symbol_sect_name, " __objc" ) ==
33233337 symbol_sect_name) {
33243338 type = eSymbolTypeRuntime;
3325-
3326- if (symbol_name) {
3327- llvm::StringRef symbol_name_ref (symbol_name);
3328- if (symbol_name_ref.starts_with (" _OBJC_" )) {
3329- llvm::StringRef
3330- g_objc_v2_prefix_class (
3331- " _OBJC_CLASS_$_" );
3332- llvm::StringRef
3333- g_objc_v2_prefix_metaclass (
3334- " _OBJC_METACLASS_$_" );
3335- llvm::StringRef
3336- g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" );
3337- if (symbol_name_ref.starts_with (
3338- g_objc_v2_prefix_class)) {
3339- symbol_name_non_abi_mangled =
3340- symbol_name + 1 ;
3341- symbol_name =
3342- symbol_name +
3343- g_objc_v2_prefix_class.size ();
3344- type = eSymbolTypeObjCClass;
3345- demangled_is_synthesized = true ;
3346- } else if (
3347- symbol_name_ref.starts_with (
3348- g_objc_v2_prefix_metaclass)) {
3349- symbol_name_non_abi_mangled =
3350- symbol_name + 1 ;
3351- symbol_name =
3352- symbol_name +
3353- g_objc_v2_prefix_metaclass.size ();
3354- type = eSymbolTypeObjCMetaClass;
3355- demangled_is_synthesized = true ;
3356- } else if (symbol_name_ref.starts_with (
3357- g_objc_v2_prefix_ivar)) {
3358- symbol_name_non_abi_mangled =
3359- symbol_name + 1 ;
3360- symbol_name =
3361- symbol_name +
3362- g_objc_v2_prefix_ivar.size ();
3363- type = eSymbolTypeObjCIVar;
3364- demangled_is_synthesized = true ;
3365- }
3366- }
3367- }
3339+ demangled_is_synthesized =
3340+ TryParseV2ObjCMetadataSymbol (
3341+ symbol_name,
3342+ symbol_name_non_abi_mangled, type);
33683343 } else if (symbol_sect_name &&
33693344 ::strstr (symbol_sect_name,
33703345 " __gcc_except_tab" ) ==
@@ -3678,27 +3653,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36783653 is_gsym = true ;
36793654 sym[sym_idx].SetExternal (true );
36803655
3681- llvm::StringRef symbol_name_ref (symbol_name);
3682- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3683- symbol_name_non_abi_mangled = symbol_name + 1 ;
3684- symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3685- type = eSymbolTypeObjCClass;
3686- demangled_is_synthesized = true ;
3687-
3688- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
3689- symbol_name_non_abi_mangled = symbol_name + 1 ;
3690- symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
3691- type = eSymbolTypeObjCMetaClass;
3656+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3657+ symbol_name_non_abi_mangled, type)) {
36923658 demangled_is_synthesized = true ;
3693- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
3694- symbol_name_non_abi_mangled = symbol_name + 1 ;
3695- symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
3696- type = eSymbolTypeObjCIVar;
3697- demangled_is_synthesized = true ;
3698- } else {
3699- if (nlist.n_value != 0 )
3700- symbol_section =
3701- section_info.GetSection (nlist.n_sect , nlist.n_value );
3659+ } else if (nlist.n_value != 0 ) {
3660+ symbol_section =
3661+ section_info.GetSection (nlist.n_sect , nlist.n_value );
37023662 type = eSymbolTypeData;
37033663 }
37043664 } break ;
@@ -4141,39 +4101,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41414101 if (symbol_sect_name &&
41424102 ::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
41434103 type = eSymbolTypeRuntime;
4104+ demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4105+ symbol_name, symbol_name_non_abi_mangled, type);
41444106
4145- if (symbol_name) {
4146- llvm::StringRef symbol_name_ref (symbol_name);
4147- if (symbol_name_ref.starts_with (" _OBJC_" )) {
4148- llvm::StringRef g_objc_v2_prefix_class (
4149- " _OBJC_CLASS_$_" );
4150- llvm::StringRef g_objc_v2_prefix_metaclass (
4151- " _OBJC_METACLASS_$_" );
4152- llvm::StringRef g_objc_v2_prefix_ivar (
4153- " _OBJC_IVAR_$_" );
4154- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
4155- symbol_name_non_abi_mangled = symbol_name + 1 ;
4156- symbol_name =
4157- symbol_name + g_objc_v2_prefix_class.size ();
4158- type = eSymbolTypeObjCClass;
4159- demangled_is_synthesized = true ;
4160- } else if (symbol_name_ref.starts_with (
4161- g_objc_v2_prefix_metaclass)) {
4162- symbol_name_non_abi_mangled = symbol_name + 1 ;
4163- symbol_name =
4164- symbol_name + g_objc_v2_prefix_metaclass.size ();
4165- type = eSymbolTypeObjCMetaClass;
4166- demangled_is_synthesized = true ;
4167- } else if (symbol_name_ref.starts_with (
4168- g_objc_v2_prefix_ivar)) {
4169- symbol_name_non_abi_mangled = symbol_name + 1 ;
4170- symbol_name =
4171- symbol_name + g_objc_v2_prefix_ivar.size ();
4172- type = eSymbolTypeObjCIVar;
4173- demangled_is_synthesized = true ;
4174- }
4175- }
4176- }
41774107 } else if (symbol_sect_name &&
41784108 ::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
41794109 symbol_sect_name) {
0 commit comments