@@ -2306,6 +2306,43 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
2306
2306
return true ;
2307
2307
}
2308
2308
2309
+ static bool
2310
+ TryParseV2ObjCMetadataSymbol (const char *&symbol_name,
2311
+ const char *&symbol_name_non_abi_mangled,
2312
+ SymbolType &type) {
2313
+ static constexpr llvm::StringLiteral g_objc_v2_prefix_class (" _OBJC_CLASS_$_" );
2314
+ static constexpr llvm::StringLiteral g_objc_v2_prefix_metaclass (
2315
+ " _OBJC_METACLASS_$_" );
2316
+ static constexpr llvm::StringLiteral g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" );
2317
+
2318
+ llvm::StringRef symbol_name_ref (symbol_name);
2319
+ if (symbol_name_ref.empty ())
2320
+ return false ;
2321
+
2322
+ if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
2323
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
2324
+ symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
2325
+ type = eSymbolTypeObjCClass;
2326
+ return true ;
2327
+ }
2328
+
2329
+ if (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
2330
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
2331
+ symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
2332
+ type = eSymbolTypeObjCMetaClass;
2333
+ return true ;
2334
+ }
2335
+
2336
+ if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
2337
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
2338
+ symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
2339
+ type = eSymbolTypeObjCIVar;
2340
+ return true ;
2341
+ }
2342
+
2343
+ return false ;
2344
+ }
2345
+
2309
2346
static SymbolType GetSymbolType (const char *&symbol_name,
2310
2347
bool &demangled_is_synthesized,
2311
2348
const SectionSP &text_section_sp,
@@ -2422,9 +2459,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2422
2459
lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
2423
2460
uint32_t i;
2424
2461
FileSpecList dylib_files;
2425
- llvm::StringRef g_objc_v2_prefix_class (" _OBJC_CLASS_$_" );
2426
- llvm::StringRef g_objc_v2_prefix_metaclass (" _OBJC_METACLASS_$_" );
2427
- llvm::StringRef g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" );
2428
2462
UUID image_uuid;
2429
2463
2430
2464
for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -3057,33 +3091,13 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3057
3091
is_gsym = true ;
3058
3092
sym[sym_idx].SetExternal (true );
3059
3093
3060
- llvm::StringRef symbol_name_ref (symbol_name);
3061
- if (symbol_name_ref.starts_with (
3062
- g_objc_v2_prefix_class)) {
3063
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3064
- symbol_name =
3065
- symbol_name + g_objc_v2_prefix_class.size ();
3066
- type = eSymbolTypeObjCClass;
3067
- demangled_is_synthesized = true ;
3068
-
3069
- } else if (symbol_name_ref.starts_with (
3070
- g_objc_v2_prefix_metaclass)) {
3071
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3072
- symbol_name =
3073
- symbol_name + g_objc_v2_prefix_metaclass.size ();
3074
- type = eSymbolTypeObjCMetaClass;
3094
+ if (TryParseV2ObjCMetadataSymbol (
3095
+ symbol_name, symbol_name_non_abi_mangled,
3096
+ type)) {
3075
3097
demangled_is_synthesized = true ;
3076
- } else if (symbol_name_ref.starts_with (
3077
- g_objc_v2_prefix_ivar)) {
3078
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3079
- symbol_name =
3080
- symbol_name + g_objc_v2_prefix_ivar.size ();
3081
- type = eSymbolTypeObjCIVar;
3082
- demangled_is_synthesized = true ;
3083
- } else {
3084
- if (nlist.n_value != 0 )
3085
- symbol_section = section_info.GetSection (
3086
- nlist.n_sect , nlist.n_value );
3098
+ } else if (nlist.n_value != 0 ) {
3099
+ symbol_section = section_info.GetSection (
3100
+ nlist.n_sect , nlist.n_value );
3087
3101
type = eSymbolTypeData;
3088
3102
}
3089
3103
break ;
@@ -3568,49 +3582,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3568
3582
::strstr (symbol_sect_name, " __objc" ) ==
3569
3583
symbol_sect_name) {
3570
3584
type = eSymbolTypeRuntime;
3571
-
3572
- if (symbol_name) {
3573
- llvm::StringRef symbol_name_ref (symbol_name);
3574
- if (symbol_name_ref.starts_with (" _OBJC_" )) {
3575
- llvm::StringRef
3576
- g_objc_v2_prefix_class (
3577
- " _OBJC_CLASS_$_" );
3578
- llvm::StringRef
3579
- g_objc_v2_prefix_metaclass (
3580
- " _OBJC_METACLASS_$_" );
3581
- llvm::StringRef
3582
- g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" );
3583
- if (symbol_name_ref.starts_with (
3584
- g_objc_v2_prefix_class)) {
3585
- symbol_name_non_abi_mangled =
3586
- symbol_name + 1 ;
3587
- symbol_name =
3588
- symbol_name +
3589
- g_objc_v2_prefix_class.size ();
3590
- type = eSymbolTypeObjCClass;
3591
- demangled_is_synthesized = true ;
3592
- } else if (
3593
- symbol_name_ref.starts_with (
3594
- g_objc_v2_prefix_metaclass)) {
3595
- symbol_name_non_abi_mangled =
3596
- symbol_name + 1 ;
3597
- symbol_name =
3598
- symbol_name +
3599
- g_objc_v2_prefix_metaclass.size ();
3600
- type = eSymbolTypeObjCMetaClass;
3601
- demangled_is_synthesized = true ;
3602
- } else if (symbol_name_ref.starts_with (
3603
- g_objc_v2_prefix_ivar)) {
3604
- symbol_name_non_abi_mangled =
3605
- symbol_name + 1 ;
3606
- symbol_name =
3607
- symbol_name +
3608
- g_objc_v2_prefix_ivar.size ();
3609
- type = eSymbolTypeObjCIVar;
3610
- demangled_is_synthesized = true ;
3611
- }
3612
- }
3613
- }
3585
+ demangled_is_synthesized =
3586
+ TryParseV2ObjCMetadataSymbol (
3587
+ symbol_name,
3588
+ symbol_name_non_abi_mangled, type);
3614
3589
} else if (symbol_sect_name &&
3615
3590
::strstr (symbol_sect_name,
3616
3591
" __gcc_except_tab" ) ==
@@ -3983,27 +3958,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3983
3958
is_gsym = true ;
3984
3959
sym[sym_idx].SetExternal (true );
3985
3960
3986
- llvm::StringRef symbol_name_ref (symbol_name);
3987
- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3988
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3989
- symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3990
- type = eSymbolTypeObjCClass;
3991
- demangled_is_synthesized = true ;
3992
-
3993
- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
3994
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3995
- symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
3996
- type = eSymbolTypeObjCMetaClass;
3961
+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3962
+ symbol_name_non_abi_mangled, type)) {
3997
3963
demangled_is_synthesized = true ;
3998
- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
3999
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4000
- symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
4001
- type = eSymbolTypeObjCIVar;
4002
- demangled_is_synthesized = true ;
4003
- } else {
4004
- if (nlist.n_value != 0 )
4005
- symbol_section =
4006
- section_info.GetSection (nlist.n_sect , nlist.n_value );
3964
+ } else if (nlist.n_value != 0 ) {
3965
+ symbol_section =
3966
+ section_info.GetSection (nlist.n_sect , nlist.n_value );
4007
3967
type = eSymbolTypeData;
4008
3968
}
4009
3969
} break ;
@@ -4446,39 +4406,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4446
4406
if (symbol_sect_name &&
4447
4407
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4448
4408
type = eSymbolTypeRuntime;
4409
+ demangled_is_synthesized = TryParseV2ObjCMetadataSymbol (
4410
+ symbol_name, symbol_name_non_abi_mangled, type);
4449
4411
4450
- if (symbol_name) {
4451
- llvm::StringRef symbol_name_ref (symbol_name);
4452
- if (symbol_name_ref.starts_with (" _OBJC_" )) {
4453
- llvm::StringRef g_objc_v2_prefix_class (
4454
- " _OBJC_CLASS_$_" );
4455
- llvm::StringRef g_objc_v2_prefix_metaclass (
4456
- " _OBJC_METACLASS_$_" );
4457
- llvm::StringRef g_objc_v2_prefix_ivar (
4458
- " _OBJC_IVAR_$_" );
4459
- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
4460
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4461
- symbol_name =
4462
- symbol_name + g_objc_v2_prefix_class.size ();
4463
- type = eSymbolTypeObjCClass;
4464
- demangled_is_synthesized = true ;
4465
- } else if (symbol_name_ref.starts_with (
4466
- g_objc_v2_prefix_metaclass)) {
4467
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4468
- symbol_name =
4469
- symbol_name + g_objc_v2_prefix_metaclass.size ();
4470
- type = eSymbolTypeObjCMetaClass;
4471
- demangled_is_synthesized = true ;
4472
- } else if (symbol_name_ref.starts_with (
4473
- g_objc_v2_prefix_ivar)) {
4474
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4475
- symbol_name =
4476
- symbol_name + g_objc_v2_prefix_ivar.size ();
4477
- type = eSymbolTypeObjCIVar;
4478
- demangled_is_synthesized = true ;
4479
- }
4480
- }
4481
- }
4482
4412
} else if (symbol_sect_name &&
4483
4413
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4484
4414
symbol_sect_name) {
0 commit comments