@@ -2072,43 +2072,6 @@ 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
-
2112
2075
static SymbolType GetSymbolType (const char *&symbol_name,
2113
2076
bool &demangled_is_synthesized,
2114
2077
const SectionSP &text_section_sp,
@@ -2225,6 +2188,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2225
2188
lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
2226
2189
uint32_t i;
2227
2190
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_$_" );
2228
2194
UUID image_uuid;
2229
2195
2230
2196
for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2846,13 +2812,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2846
2812
is_gsym = true ;
2847
2813
sym[sym_idx].SetExternal (true );
2848
2814
2849
- if (TryParseV2ObjCMetadataSymbol (
2850
- symbol_name, symbol_name_non_abi_mangled,
2851
- type)) {
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;
2852
2822
demangled_is_synthesized = true ;
2853
- } else if (nlist.n_value != 0 ) {
2854
- symbol_section = section_info.GetSection (
2855
- nlist.n_sect , nlist.n_value );
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;
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 );
2856
2842
type = eSymbolTypeData;
2857
2843
}
2858
2844
break ;
@@ -3337,10 +3323,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3337
3323
::strstr (symbol_sect_name, " __objc" ) ==
3338
3324
symbol_sect_name) {
3339
3325
type = eSymbolTypeRuntime;
3340
- demangled_is_synthesized =
3341
- TryParseV2ObjCMetadataSymbol (
3342
- symbol_name,
3343
- symbol_name_non_abi_mangled, type);
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
+ }
3344
3369
} else if (symbol_sect_name &&
3345
3370
::strstr (symbol_sect_name,
3346
3371
" __gcc_except_tab" ) ==
@@ -3713,12 +3738,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3713
3738
is_gsym = true ;
3714
3739
sym[sym_idx].SetExternal (true );
3715
3740
3716
- if (TryParseV2ObjCMetadataSymbol (symbol_name,
3717
- symbol_name_non_abi_mangled, type)) {
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;
3718
3746
demangled_is_synthesized = true ;
3719
- } else if (nlist.n_value != 0 ) {
3720
- symbol_section =
3721
- section_info.GetSection (nlist.n_sect , nlist.n_value );
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;
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 );
3722
3762
type = eSymbolTypeData;
3723
3763
}
3724
3764
} break ;
@@ -4161,9 +4201,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4161
4201
if (symbol_sect_name &&
4162
4202
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4163
4203
type = eSymbolTypeRuntime;
4164
- demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4165
- symbol_name, symbol_name_non_abi_mangled, type);
4166
4204
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
+ }
4167
4237
} else if (symbol_sect_name &&
4168
4238
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4169
4239
symbol_sect_name) {
0 commit comments