@@ -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) {
@@ -2812,33 +2846,13 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2812
2846
is_gsym = true ;
2813
2847
sym[sym_idx].SetExternal (true );
2814
2848
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;
2849
+ if (TryParseV2ObjCMetadataSymbol (
2850
+ symbol_name, symbol_name_non_abi_mangled,
2851
+ type)) {
2830
2852
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;
2837
- demangled_is_synthesized = true ;
2838
- } else {
2839
- if (nlist.n_value != 0 )
2840
- symbol_section = section_info.GetSection (
2841
- nlist.n_sect , nlist.n_value );
2853
+ } else if (nlist.n_value != 0 ) {
2854
+ symbol_section = section_info.GetSection (
2855
+ nlist.n_sect , nlist.n_value );
2842
2856
type = eSymbolTypeData;
2843
2857
}
2844
2858
break ;
@@ -3323,49 +3337,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3323
3337
::strstr (symbol_sect_name, " __objc" ) ==
3324
3338
symbol_sect_name) {
3325
3339
type = eSymbolTypeRuntime;
3326
-
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
- }
3340
+ demangled_is_synthesized =
3341
+ TryParseV2ObjCMetadataSymbol (
3342
+ symbol_name,
3343
+ symbol_name_non_abi_mangled, type);
3369
3344
} else if (symbol_sect_name &&
3370
3345
::strstr (symbol_sect_name,
3371
3346
" __gcc_except_tab" ) ==
@@ -3738,27 +3713,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3738
3713
is_gsym = true ;
3739
3714
sym[sym_idx].SetExternal (true );
3740
3715
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;
3716
+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3717
+ symbol_name_non_abi_mangled, type)) {
3752
3718
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;
3757
- demangled_is_synthesized = true ;
3758
- } else {
3759
- if (nlist.n_value != 0 )
3760
- symbol_section =
3761
- section_info.GetSection (nlist.n_sect , nlist.n_value );
3719
+ } else if (nlist.n_value != 0 ) {
3720
+ symbol_section =
3721
+ section_info.GetSection (nlist.n_sect , nlist.n_value );
3762
3722
type = eSymbolTypeData;
3763
3723
}
3764
3724
} break ;
@@ -4201,39 +4161,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4201
4161
if (symbol_sect_name &&
4202
4162
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4203
4163
type = eSymbolTypeRuntime;
4164
+ demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4165
+ symbol_name, symbol_name_non_abi_mangled, type);
4204
4166
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
- }
4237
4167
} else if (symbol_sect_name &&
4238
4168
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4239
4169
symbol_sect_name) {
0 commit comments