@@ -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" ) == symbol_sect_name) {
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