@@ -2067,6 +2067,43 @@ 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
+
2070
2107
static SymbolType GetSymbolType (const char *&symbol_name,
2071
2108
bool &demangled_is_synthesized,
2072
2109
const SectionSP &text_section_sp,
@@ -2183,9 +2220,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2183
2220
lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
2184
2221
uint32_t i;
2185
2222
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_$_" );
2189
2223
UUID image_uuid;
2190
2224
2191
2225
for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -2805,33 +2839,15 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2805
2839
is_gsym = true ;
2806
2840
sym[sym_idx].SetExternal (true );
2807
2841
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;
2815
- demangled_is_synthesized = true ;
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;
2842
+ if (TryParseV2ObjCMetadataSymbol (
2843
+ symbol_name, symbol_name_non_abi_mangled,
2844
+ type)) {
2830
2845
demangled_is_synthesized = true ;
2831
2846
} else {
2832
2847
if (nlist.n_value != 0 )
2833
2848
symbol_section = section_info.GetSection (
2834
2849
nlist.n_sect , nlist.n_value );
2850
+
2835
2851
type = eSymbolTypeData;
2836
2852
}
2837
2853
break ;
@@ -3317,48 +3333,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3317
3333
symbol_sect_name) {
3318
3334
type = eSymbolTypeRuntime;
3319
3335
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
- }
3336
+ if (TryParseV2ObjCMetadataSymbol (
3337
+ symbol_name,
3338
+ symbol_name_non_abi_mangled, type))
3339
+ demangled_is_synthesized = true ;
3362
3340
} else if (symbol_sect_name &&
3363
3341
::strstr (symbol_sect_name,
3364
3342
" __gcc_except_tab" ) ==
@@ -3665,27 +3643,14 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3665
3643
is_gsym = true ;
3666
3644
sym[sym_idx].SetExternal (true );
3667
3645
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;
3673
- demangled_is_synthesized = true ;
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;
3646
+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3647
+ symbol_name_non_abi_mangled, type)) {
3684
3648
demangled_is_synthesized = true ;
3685
3649
} else {
3686
3650
if (nlist.n_value != 0 )
3687
3651
symbol_section =
3688
3652
section_info.GetSection (nlist.n_sect , nlist.n_value );
3653
+
3689
3654
type = eSymbolTypeData;
3690
3655
}
3691
3656
} break ;
@@ -4124,38 +4089,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4124
4089
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4125
4090
type = eSymbolTypeRuntime;
4126
4091
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
- }
4092
+ if (TryParseV2ObjCMetadataSymbol (
4093
+ symbol_name, symbol_name_non_abi_mangled, type))
4094
+ demangled_is_synthesized = true ;
4159
4095
} else if (symbol_sect_name &&
4160
4096
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4161
4097
symbol_sect_name) {
0 commit comments