@@ -2072,6 +2072,43 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
2072
2072
return true ;
2073
2073
}
2074
2074
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
+
2075
2112
static SymbolType GetSymbolType (const char *&symbol_name,
2076
2113
bool &demangled_is_synthesized,
2077
2114
const SectionSP &text_section_sp,
@@ -2188,9 +2225,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2188
2225
lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
2189
2226
uint32_t i;
2190
2227
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_$_" );
2194
2228
UUID image_uuid;
2195
2229
2196
2230
for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2811,33 +2845,13 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2811
2845
is_gsym = true ;
2812
2846
sym[sym_idx].SetExternal (true );
2813
2847
2814
- llvm::StringRef symbol_name_ref (symbol_name);
2815
- if (symbol_name_ref.starts_with (
2816
- g_objc_v2_prefix_class)) {
2817
- symbol_name_non_abi_mangled = symbol_name + 1 ;
2818
- symbol_name =
2819
- symbol_name + g_objc_v2_prefix_class.size ();
2820
- type = eSymbolTypeObjCClass;
2821
- demangled_is_synthesized = true ;
2822
-
2823
- } else if (symbol_name_ref.starts_with (
2824
- g_objc_v2_prefix_metaclass)) {
2825
- symbol_name_non_abi_mangled = symbol_name + 1 ;
2826
- symbol_name =
2827
- symbol_name + g_objc_v2_prefix_metaclass.size ();
2828
- type = eSymbolTypeObjCMetaClass;
2848
+ if (TryParseV2ObjCMetadataSymbol (
2849
+ symbol_name, symbol_name_non_abi_mangled,
2850
+ type)) {
2829
2851
demangled_is_synthesized = true ;
2830
- } else if (symbol_name_ref.starts_with (
2831
- g_objc_v2_prefix_ivar)) {
2832
- symbol_name_non_abi_mangled = symbol_name + 1 ;
2833
- symbol_name =
2834
- symbol_name + g_objc_v2_prefix_ivar.size ();
2835
- type = eSymbolTypeObjCIVar;
2836
- demangled_is_synthesized = true ;
2837
- } else {
2838
- if (nlist.n_value != 0 )
2839
- symbol_section = section_info.GetSection (
2840
- nlist.n_sect , nlist.n_value );
2852
+ } else if (nlist.n_value != 0 ) {
2853
+ symbol_section = section_info.GetSection (
2854
+ nlist.n_sect , nlist.n_value );
2841
2855
type = eSymbolTypeData;
2842
2856
}
2843
2857
break ;
@@ -3322,49 +3336,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3322
3336
::strstr (symbol_sect_name, " __objc" ) ==
3323
3337
symbol_sect_name) {
3324
3338
type = eSymbolTypeRuntime;
3325
-
3326
- if (symbol_name) {
3327
- llvm::StringRef symbol_name_ref (symbol_name);
3328
- if (symbol_name_ref.starts_with (" _OBJC_" )) {
3329
- llvm::StringRef
3330
- g_objc_v2_prefix_class (
3331
- " _OBJC_CLASS_$_" );
3332
- llvm::StringRef
3333
- g_objc_v2_prefix_metaclass (
3334
- " _OBJC_METACLASS_$_" );
3335
- llvm::StringRef
3336
- g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" );
3337
- if (symbol_name_ref.starts_with (
3338
- g_objc_v2_prefix_class)) {
3339
- symbol_name_non_abi_mangled =
3340
- symbol_name + 1 ;
3341
- symbol_name =
3342
- symbol_name +
3343
- g_objc_v2_prefix_class.size ();
3344
- type = eSymbolTypeObjCClass;
3345
- demangled_is_synthesized = true ;
3346
- } else if (
3347
- symbol_name_ref.starts_with (
3348
- g_objc_v2_prefix_metaclass)) {
3349
- symbol_name_non_abi_mangled =
3350
- symbol_name + 1 ;
3351
- symbol_name =
3352
- symbol_name +
3353
- g_objc_v2_prefix_metaclass.size ();
3354
- type = eSymbolTypeObjCMetaClass;
3355
- demangled_is_synthesized = true ;
3356
- } else if (symbol_name_ref.starts_with (
3357
- g_objc_v2_prefix_ivar)) {
3358
- symbol_name_non_abi_mangled =
3359
- symbol_name + 1 ;
3360
- symbol_name =
3361
- symbol_name +
3362
- g_objc_v2_prefix_ivar.size ();
3363
- type = eSymbolTypeObjCIVar;
3364
- demangled_is_synthesized = true ;
3365
- }
3366
- }
3367
- }
3339
+ demangled_is_synthesized =
3340
+ TryParseV2ObjCMetadataSymbol (
3341
+ symbol_name,
3342
+ symbol_name_non_abi_mangled, type);
3368
3343
} else if (symbol_sect_name &&
3369
3344
::strstr (symbol_sect_name,
3370
3345
" __gcc_except_tab" ) ==
@@ -3678,27 +3653,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3678
3653
is_gsym = true ;
3679
3654
sym[sym_idx].SetExternal (true );
3680
3655
3681
- llvm::StringRef symbol_name_ref (symbol_name);
3682
- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3683
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3684
- symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3685
- type = eSymbolTypeObjCClass;
3686
- demangled_is_synthesized = true ;
3687
-
3688
- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
3689
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3690
- symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
3691
- type = eSymbolTypeObjCMetaClass;
3656
+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3657
+ symbol_name_non_abi_mangled, type)) {
3692
3658
demangled_is_synthesized = true ;
3693
- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
3694
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3695
- symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
3696
- type = eSymbolTypeObjCIVar;
3697
- demangled_is_synthesized = true ;
3698
- } else {
3699
- if (nlist.n_value != 0 )
3700
- symbol_section =
3701
- section_info.GetSection (nlist.n_sect , nlist.n_value );
3659
+ } else if (nlist.n_value != 0 ) {
3660
+ symbol_section =
3661
+ section_info.GetSection (nlist.n_sect , nlist.n_value );
3702
3662
type = eSymbolTypeData;
3703
3663
}
3704
3664
} break ;
@@ -4141,39 +4101,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4141
4101
if (symbol_sect_name &&
4142
4102
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4143
4103
type = eSymbolTypeRuntime;
4104
+ demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4105
+ symbol_name, symbol_name_non_abi_mangled, type);
4144
4106
4145
- if (symbol_name) {
4146
- llvm::StringRef symbol_name_ref (symbol_name);
4147
- if (symbol_name_ref.starts_with (" _OBJC_" )) {
4148
- llvm::StringRef g_objc_v2_prefix_class (
4149
- " _OBJC_CLASS_$_" );
4150
- llvm::StringRef g_objc_v2_prefix_metaclass (
4151
- " _OBJC_METACLASS_$_" );
4152
- llvm::StringRef g_objc_v2_prefix_ivar (
4153
- " _OBJC_IVAR_$_" );
4154
- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
4155
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4156
- symbol_name =
4157
- symbol_name + g_objc_v2_prefix_class.size ();
4158
- type = eSymbolTypeObjCClass;
4159
- demangled_is_synthesized = true ;
4160
- } else if (symbol_name_ref.starts_with (
4161
- g_objc_v2_prefix_metaclass)) {
4162
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4163
- symbol_name =
4164
- symbol_name + g_objc_v2_prefix_metaclass.size ();
4165
- type = eSymbolTypeObjCMetaClass;
4166
- demangled_is_synthesized = true ;
4167
- } else if (symbol_name_ref.starts_with (
4168
- g_objc_v2_prefix_ivar)) {
4169
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4170
- symbol_name =
4171
- symbol_name + g_objc_v2_prefix_ivar.size ();
4172
- type = eSymbolTypeObjCIVar;
4173
- demangled_is_synthesized = true ;
4174
- }
4175
- }
4176
- }
4177
4107
} else if (symbol_sect_name &&
4178
4108
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4179
4109
symbol_sect_name) {
0 commit comments