@@ -2072,6 +2072,43 @@ 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+
20752112static SymbolType GetSymbolType (const char *&symbol_name,
20762113 bool &demangled_is_synthesized,
20772114 const SectionSP &text_section_sp,
@@ -2188,9 +2225,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
21882225 lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
21892226 uint32_t i;
21902227 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_$_" );
21942228 UUID image_uuid;
21952229
21962230 for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2812,33 +2846,15 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28122846 is_gsym = true ;
28132847 sym[sym_idx].SetExternal (true );
28142848
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;
2822- demangled_is_synthesized = true ;
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;
2849+ if (TryParseV2ObjCMetadataSymbol (
2850+ symbol_name, symbol_name_non_abi_mangled,
2851+ type)) {
28372852 demangled_is_synthesized = true ;
28382853 } else {
28392854 if (nlist.n_value != 0 )
28402855 symbol_section = section_info.GetSection (
28412856 nlist.n_sect , nlist.n_value );
2857+
28422858 type = eSymbolTypeData;
28432859 }
28442860 break ;
@@ -3324,48 +3340,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33243340 symbol_sect_name) {
33253341 type = eSymbolTypeRuntime;
33263342
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- }
3343+ if (TryParseV2ObjCMetadataSymbol (
3344+ symbol_name,
3345+ symbol_name_non_abi_mangled, type))
3346+ demangled_is_synthesized = true ;
33693347 } else if (symbol_sect_name &&
33703348 ::strstr (symbol_sect_name,
33713349 " __gcc_except_tab" ) ==
@@ -3738,27 +3716,14 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
37383716 is_gsym = true ;
37393717 sym[sym_idx].SetExternal (true );
37403718
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;
3746- demangled_is_synthesized = true ;
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;
3719+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3720+ symbol_name_non_abi_mangled, type)) {
37573721 demangled_is_synthesized = true ;
37583722 } else {
37593723 if (nlist.n_value != 0 )
37603724 symbol_section =
37613725 section_info.GetSection (nlist.n_sect , nlist.n_value );
3726+
37623727 type = eSymbolTypeData;
37633728 }
37643729 } break ;
@@ -4202,38 +4167,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
42024167 ::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
42034168 type = eSymbolTypeRuntime;
42044169
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- }
4170+ if (TryParseV2ObjCMetadataSymbol (
4171+ symbol_name, symbol_name_non_abi_mangled, type))
4172+ demangled_is_synthesized = true ;
42374173 } else if (symbol_sect_name &&
42384174 ::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
42394175 symbol_sect_name) {
0 commit comments