@@ -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,15 @@ 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;
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;
2842+ if (TryParseV2ObjCMetadataSymbol (
2843+ symbol_name, symbol_name_non_abi_mangled,
2844+ type)) {
28302845 demangled_is_synthesized = true ;
28312846 } else {
28322847 if (nlist.n_value != 0 )
28332848 symbol_section = section_info.GetSection (
28342849 nlist.n_sect , nlist.n_value );
2850+
28352851 type = eSymbolTypeData;
28362852 }
28372853 break ;
@@ -3317,48 +3333,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33173333 symbol_sect_name) {
33183334 type = eSymbolTypeRuntime;
33193335
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- }
3336+ if (TryParseV2ObjCMetadataSymbol (
3337+ symbol_name,
3338+ symbol_name_non_abi_mangled, type))
3339+ demangled_is_synthesized = true ;
33623340 } else if (symbol_sect_name &&
33633341 ::strstr (symbol_sect_name,
33643342 " __gcc_except_tab" ) ==
@@ -3665,27 +3643,14 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36653643 is_gsym = true ;
36663644 sym[sym_idx].SetExternal (true );
36673645
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;
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;
3646+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3647+ symbol_name_non_abi_mangled, type)) {
36843648 demangled_is_synthesized = true ;
36853649 } else {
36863650 if (nlist.n_value != 0 )
36873651 symbol_section =
36883652 section_info.GetSection (nlist.n_sect , nlist.n_value );
3653+
36893654 type = eSymbolTypeData;
36903655 }
36913656 } break ;
@@ -4124,38 +4089,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41244089 ::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
41254090 type = eSymbolTypeRuntime;
41264091
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- }
4092+ if (TryParseV2ObjCMetadataSymbol (
4093+ symbol_name, symbol_name_non_abi_mangled, type))
4094+ demangled_is_synthesized = true ;
41594095 } else if (symbol_sect_name &&
41604096 ::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
41614097 symbol_sect_name) {
0 commit comments