@@ -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,13 @@ 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;
2842
+ if (TryParseV2ObjCMetadataSymbol (
2843
+ symbol_name, symbol_name_non_abi_mangled,
2844
+ type)) {
2823
2845
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 );
2846
+ } else if (nlist.n_value != 0 ) {
2847
+ symbol_section = section_info.GetSection (
2848
+ nlist.n_sect , nlist.n_value );
2835
2849
type = eSymbolTypeData;
2836
2850
}
2837
2851
break ;
@@ -3316,49 +3330,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3316
3330
::strstr (symbol_sect_name, " __objc" ) ==
3317
3331
symbol_sect_name) {
3318
3332
type = eSymbolTypeRuntime;
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
- }
3333
+ demangled_is_synthesized =
3334
+ TryParseV2ObjCMetadataSymbol (
3335
+ symbol_name,
3336
+ symbol_name_non_abi_mangled, type);
3362
3337
} else if (symbol_sect_name &&
3363
3338
::strstr (symbol_sect_name,
3364
3339
" __gcc_except_tab" ) ==
@@ -3665,27 +3640,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3665
3640
is_gsym = true ;
3666
3641
sym[sym_idx].SetExternal (true );
3667
3642
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;
3643
+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3644
+ symbol_name_non_abi_mangled, type)) {
3679
3645
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 );
3646
+ } else if (nlist.n_value != 0 ) {
3647
+ symbol_section =
3648
+ section_info.GetSection (nlist.n_sect , nlist.n_value );
3689
3649
type = eSymbolTypeData;
3690
3650
}
3691
3651
} break ;
@@ -4123,39 +4083,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4123
4083
if (symbol_sect_name &&
4124
4084
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4125
4085
type = eSymbolTypeRuntime;
4086
+ demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4087
+ symbol_name, symbol_name_non_abi_mangled, type);
4126
4088
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
- }
4159
4089
} else if (symbol_sect_name &&
4160
4090
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4161
4091
symbol_sect_name) {
0 commit comments