@@ -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,
@@ -2094,20 +2131,20 @@ static SymbolType GetSymbolType(const char *&symbol_name,
20942131 if (symbol_name) {
20952132 llvm::StringRef symbol_name_ref (symbol_name);
20962133 if (symbol_name_ref.starts_with (" OBJC_" )) {
2097- static const llvm::StringRef g_objc_v2_prefix_class (" OBJC_CLASS_$_" );
2098- static const llvm::StringRef g_objc_v2_prefix_metaclass (
2134+ static const llvm::StringRef s_objc_v2_prefix_class (" OBJC_CLASS_$_" );
2135+ static const llvm::StringRef s_objc_v2_prefix_metaclass (
20992136 " OBJC_METACLASS_$_" );
2100- static const llvm::StringRef g_objc_v2_prefix_ivar (" OBJC_IVAR_$_" );
2101- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class )) {
2102- symbol_name = symbol_name + g_objc_v2_prefix_class .size ();
2137+ static const llvm::StringRef s_objc_v2_prefix_ivar (" OBJC_IVAR_$_" );
2138+ if (symbol_name_ref.starts_with (s_objc_v2_prefix_class )) {
2139+ symbol_name = symbol_name + s_objc_v2_prefix_class .size ();
21032140 type = eSymbolTypeObjCClass;
21042141 demangled_is_synthesized = true ;
2105- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass )) {
2106- symbol_name = symbol_name + g_objc_v2_prefix_metaclass .size ();
2142+ } else if (symbol_name_ref.starts_with (s_objc_v2_prefix_metaclass )) {
2143+ symbol_name = symbol_name + s_objc_v2_prefix_metaclass .size ();
21072144 type = eSymbolTypeObjCMetaClass;
21082145 demangled_is_synthesized = true ;
2109- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar )) {
2110- symbol_name = symbol_name + g_objc_v2_prefix_ivar .size ();
2146+ } else if (symbol_name_ref.starts_with (s_objc_v2_prefix_ivar )) {
2147+ symbol_name = symbol_name + s_objc_v2_prefix_ivar .size ();
21112148 type = eSymbolTypeObjCIVar;
21122149 demangled_is_synthesized = true ;
21132150 }
@@ -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,28 +2839,9 @@ 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 )
@@ -3316,49 +3331,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33163331 ::strstr (symbol_sect_name, " __objc" ) ==
33173332 symbol_sect_name) {
33183333 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- }
3334+ demangled_is_synthesized =
3335+ TryParseV2ObjCMetadataSymbol (
3336+ symbol_name,
3337+ symbol_name_non_abi_mangled, type);
33623338 } else if (symbol_sect_name &&
33633339 ::strstr (symbol_sect_name,
33643340 " __gcc_except_tab" ) ==
@@ -3665,22 +3641,8 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36653641 is_gsym = true ;
36663642 sym[sym_idx].SetExternal (true );
36673643
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;
3644+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3645+ symbol_name_non_abi_mangled, type)) {
36843646 demangled_is_synthesized = true ;
36853647 } else {
36863648 if (nlist.n_value != 0 )
@@ -4123,39 +4085,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41234085 if (symbol_sect_name &&
41244086 ::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
41254087 type = eSymbolTypeRuntime;
4088+ demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4089+ symbol_name, symbol_name_non_abi_mangled, type);
41264090
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- }
41594091 } else if (symbol_sect_name &&
41604092 ::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
41614093 symbol_sect_name) {
0 commit comments