@@ -2067,43 +2067,6 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
2067
2067
return true ;
2068
2068
}
2069
2069
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
-
2107
2070
static SymbolType GetSymbolType (const char *&symbol_name,
2108
2071
bool &demangled_is_synthesized,
2109
2072
const SectionSP &text_section_sp,
@@ -2220,6 +2183,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2220
2183
lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
2221
2184
uint32_t i;
2222
2185
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_$_" );
2223
2189
UUID image_uuid;
2224
2190
2225
2191
for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2839,13 +2805,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2839
2805
is_gsym = true ;
2840
2806
sym[sym_idx].SetExternal (true );
2841
2807
2842
- if (TryParseV2ObjCMetadataSymbol (
2843
- symbol_name, symbol_name_non_abi_mangled,
2844
- type)) {
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;
2845
2815
demangled_is_synthesized = true ;
2846
- } else if (nlist.n_value != 0 ) {
2847
- symbol_section = section_info.GetSection (
2848
- nlist.n_sect , nlist.n_value );
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;
2830
+ demangled_is_synthesized = true ;
2831
+ } else {
2832
+ if (nlist.n_value != 0 )
2833
+ symbol_section = section_info.GetSection (
2834
+ nlist.n_sect , nlist.n_value );
2849
2835
type = eSymbolTypeData;
2850
2836
}
2851
2837
break ;
@@ -3330,10 +3316,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3330
3316
::strstr (symbol_sect_name, " __objc" ) ==
3331
3317
symbol_sect_name) {
3332
3318
type = eSymbolTypeRuntime;
3333
- demangled_is_synthesized =
3334
- TryParseV2ObjCMetadataSymbol (
3335
- symbol_name,
3336
- symbol_name_non_abi_mangled, type);
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
+ }
3337
3362
} else if (symbol_sect_name &&
3338
3363
::strstr (symbol_sect_name,
3339
3364
" __gcc_except_tab" ) ==
@@ -3640,12 +3665,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3640
3665
is_gsym = true ;
3641
3666
sym[sym_idx].SetExternal (true );
3642
3667
3643
- if (TryParseV2ObjCMetadataSymbol (symbol_name,
3644
- symbol_name_non_abi_mangled, type)) {
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;
3645
3673
demangled_is_synthesized = true ;
3646
- } else if (nlist.n_value != 0 ) {
3647
- symbol_section =
3648
- section_info.GetSection (nlist.n_sect , nlist.n_value );
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;
3684
+ demangled_is_synthesized = true ;
3685
+ } else {
3686
+ if (nlist.n_value != 0 )
3687
+ symbol_section =
3688
+ section_info.GetSection (nlist.n_sect , nlist.n_value );
3649
3689
type = eSymbolTypeData;
3650
3690
}
3651
3691
} break ;
@@ -4083,9 +4123,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4083
4123
if (symbol_sect_name &&
4084
4124
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4085
4125
type = eSymbolTypeRuntime;
4086
- demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4087
- symbol_name, symbol_name_non_abi_mangled, type);
4088
4126
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
+ }
4089
4159
} else if (symbol_sect_name &&
4090
4160
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4091
4161
symbol_sect_name) {
0 commit comments