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