@@ -2067,6 +2067,43 @@ 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+
20702107static SymbolType GetSymbolType (const char *&symbol_name,
20712108 bool &demangled_is_synthesized,
20722109 const SectionSP &text_section_sp,
@@ -2183,9 +2220,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
21832220 lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
21842221 uint32_t i;
21852222 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_$_" );
21892223 UUID image_uuid;
21902224
21912225 for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2805,33 +2839,13 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28052839 is_gsym = true ;
28062840 sym[sym_idx].SetExternal (true );
28072841
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;
2815- demangled_is_synthesized = true ;
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;
2842+ if (TryParseV2ObjCMetadataSymbol (
2843+ symbol_name, symbol_name_non_abi_mangled,
2844+ type)) {
28232845 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 );
2846+ } else if (nlist.n_value != 0 ) {
2847+ symbol_section = section_info.GetSection (
2848+ nlist.n_sect , nlist.n_value );
28352849 type = eSymbolTypeData;
28362850 }
28372851 break ;
@@ -3316,49 +3330,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33163330 ::strstr (symbol_sect_name, " __objc" ) ==
33173331 symbol_sect_name) {
33183332 type = eSymbolTypeRuntime;
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- }
3333+ demangled_is_synthesized =
3334+ TryParseV2ObjCMetadataSymbol (
3335+ symbol_name,
3336+ symbol_name_non_abi_mangled, type);
33623337 } else if (symbol_sect_name &&
33633338 ::strstr (symbol_sect_name,
33643339 " __gcc_except_tab" ) ==
@@ -3665,27 +3640,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36653640 is_gsym = true ;
36663641 sym[sym_idx].SetExternal (true );
36673642
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;
3673- demangled_is_synthesized = true ;
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;
3643+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3644+ symbol_name_non_abi_mangled, type)) {
36793645 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 );
3646+ } else if (nlist.n_value != 0 ) {
3647+ symbol_section =
3648+ section_info.GetSection (nlist.n_sect , nlist.n_value );
36893649 type = eSymbolTypeData;
36903650 }
36913651 } break ;
@@ -4123,39 +4083,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41234083 if (symbol_sect_name &&
41244084 ::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
41254085 type = eSymbolTypeRuntime;
4086+ demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4087+ symbol_name, symbol_name_non_abi_mangled, type);
41264088
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- }
41594089 } else if (symbol_sect_name &&
41604090 ::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
41614091 symbol_sect_name) {
0 commit comments