@@ -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,36 +3091,15 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3057
3091
is_gsym = true ;
3058
3092
sym[sym_idx].SetExternal (true );
3059
3093
3060
- if (symbol_name && symbol_name[0 ] == ' _' &&
3061
- symbol_name[1 ] == ' O' ) {
3062
- llvm::StringRef symbol_name_ref (symbol_name);
3063
- if (symbol_name_ref.starts_with (
3064
- g_objc_v2_prefix_class)) {
3065
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3066
- symbol_name =
3067
- symbol_name + g_objc_v2_prefix_class.size ();
3068
- type = eSymbolTypeObjCClass;
3069
- demangled_is_synthesized = true ;
3070
-
3071
- } else if (symbol_name_ref.starts_with (
3072
- g_objc_v2_prefix_metaclass)) {
3073
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3074
- symbol_name =
3075
- symbol_name + g_objc_v2_prefix_metaclass.size ();
3076
- type = eSymbolTypeObjCMetaClass;
3077
- demangled_is_synthesized = true ;
3078
- } else if (symbol_name_ref.starts_with (
3079
- g_objc_v2_prefix_ivar)) {
3080
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3081
- symbol_name =
3082
- symbol_name + g_objc_v2_prefix_ivar.size ();
3083
- type = eSymbolTypeObjCIVar;
3084
- demangled_is_synthesized = true ;
3085
- }
3094
+ if (TryParseV2ObjCMetadataSymbol (
3095
+ symbol_name, symbol_name_non_abi_mangled,
3096
+ type)) {
3097
+ demangled_is_synthesized = true ;
3086
3098
} else {
3087
3099
if (nlist.n_value != 0 )
3088
3100
symbol_section = section_info.GetSection (
3089
3101
nlist.n_sect , nlist.n_value );
3102
+
3090
3103
type = eSymbolTypeData;
3091
3104
}
3092
3105
break ;
@@ -3572,48 +3585,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3572
3585
symbol_sect_name) {
3573
3586
type = eSymbolTypeRuntime;
3574
3587
3575
- if (symbol_name) {
3576
- llvm::StringRef symbol_name_ref (symbol_name);
3577
- if (symbol_name_ref.starts_with (" _OBJC_" )) {
3578
- llvm::StringRef
3579
- g_objc_v2_prefix_class (
3580
- " _OBJC_CLASS_$_" );
3581
- llvm::StringRef
3582
- g_objc_v2_prefix_metaclass (
3583
- " _OBJC_METACLASS_$_" );
3584
- llvm::StringRef
3585
- g_objc_v2_prefix_ivar (" _OBJC_IVAR_$_" );
3586
- if (symbol_name_ref.starts_with (
3587
- g_objc_v2_prefix_class)) {
3588
- symbol_name_non_abi_mangled =
3589
- symbol_name + 1 ;
3590
- symbol_name =
3591
- symbol_name +
3592
- g_objc_v2_prefix_class.size ();
3593
- type = eSymbolTypeObjCClass;
3594
- demangled_is_synthesized = true ;
3595
- } else if (
3596
- symbol_name_ref.starts_with (
3597
- g_objc_v2_prefix_metaclass)) {
3598
- symbol_name_non_abi_mangled =
3599
- symbol_name + 1 ;
3600
- symbol_name =
3601
- symbol_name +
3602
- g_objc_v2_prefix_metaclass.size ();
3603
- type = eSymbolTypeObjCMetaClass;
3604
- demangled_is_synthesized = true ;
3605
- } else if (symbol_name_ref.starts_with (
3606
- g_objc_v2_prefix_ivar)) {
3607
- symbol_name_non_abi_mangled =
3608
- symbol_name + 1 ;
3609
- symbol_name =
3610
- symbol_name +
3611
- g_objc_v2_prefix_ivar.size ();
3612
- type = eSymbolTypeObjCIVar;
3613
- demangled_is_synthesized = true ;
3614
- }
3615
- }
3616
- }
3588
+ if (TryParseV2ObjCMetadataSymbol (
3589
+ symbol_name,
3590
+ symbol_name_non_abi_mangled, type))
3591
+ demangled_is_synthesized = true ;
3617
3592
} else if (symbol_sect_name &&
3618
3593
::strstr (symbol_sect_name,
3619
3594
" __gcc_except_tab" ) ==
@@ -3970,7 +3945,7 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3970
3945
3971
3946
if (is_debug) {
3972
3947
switch (nlist.n_type ) {
3973
- case N_GSYM:
3948
+ case N_GSYM: {
3974
3949
// global symbol: name,,NO_SECT,type,0
3975
3950
// Sometimes the N_GSYM value contains the address.
3976
3951
@@ -3986,33 +3961,17 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3986
3961
is_gsym = true ;
3987
3962
sym[sym_idx].SetExternal (true );
3988
3963
3989
- if (symbol_name && symbol_name[0 ] == ' _' && symbol_name[1 ] == ' O' ) {
3990
- llvm::StringRef symbol_name_ref (symbol_name);
3991
- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3992
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3993
- symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3994
- type = eSymbolTypeObjCClass;
3995
- demangled_is_synthesized = true ;
3996
-
3997
- } else if (symbol_name_ref.starts_with (
3998
- g_objc_v2_prefix_metaclass)) {
3999
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4000
- symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
4001
- type = eSymbolTypeObjCMetaClass;
4002
- demangled_is_synthesized = true ;
4003
- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
4004
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4005
- symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
4006
- type = eSymbolTypeObjCIVar;
4007
- demangled_is_synthesized = true ;
4008
- }
3964
+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3965
+ symbol_name_non_abi_mangled, type)) {
3966
+ demangled_is_synthesized = true ;
4009
3967
} else {
4010
3968
if (nlist.n_value != 0 )
4011
3969
symbol_section =
4012
3970
section_info.GetSection (nlist.n_sect , nlist.n_value );
3971
+
4013
3972
type = eSymbolTypeData;
4014
3973
}
4015
- break ;
3974
+ } break ;
4016
3975
4017
3976
case N_FNAME:
4018
3977
// procedure name (f77 kludge): name,,NO_SECT,0,0
@@ -4453,38 +4412,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
4453
4412
::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
4454
4413
type = eSymbolTypeRuntime;
4455
4414
4456
- if (symbol_name) {
4457
- llvm::StringRef symbol_name_ref (symbol_name);
4458
- if (symbol_name_ref.starts_with (" _OBJC_" )) {
4459
- llvm::StringRef g_objc_v2_prefix_class (
4460
- " _OBJC_CLASS_$_" );
4461
- llvm::StringRef g_objc_v2_prefix_metaclass (
4462
- " _OBJC_METACLASS_$_" );
4463
- llvm::StringRef g_objc_v2_prefix_ivar (
4464
- " _OBJC_IVAR_$_" );
4465
- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
4466
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4467
- symbol_name =
4468
- symbol_name + g_objc_v2_prefix_class.size ();
4469
- type = eSymbolTypeObjCClass;
4470
- demangled_is_synthesized = true ;
4471
- } else if (symbol_name_ref.starts_with (
4472
- g_objc_v2_prefix_metaclass)) {
4473
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4474
- symbol_name =
4475
- symbol_name + g_objc_v2_prefix_metaclass.size ();
4476
- type = eSymbolTypeObjCMetaClass;
4477
- demangled_is_synthesized = true ;
4478
- } else if (symbol_name_ref.starts_with (
4479
- g_objc_v2_prefix_ivar)) {
4480
- symbol_name_non_abi_mangled = symbol_name + 1 ;
4481
- symbol_name =
4482
- symbol_name + g_objc_v2_prefix_ivar.size ();
4483
- type = eSymbolTypeObjCIVar;
4484
- demangled_is_synthesized = true ;
4485
- }
4486
- }
4487
- }
4415
+ if (TryParseV2ObjCMetadataSymbol (
4416
+ symbol_name, symbol_name_non_abi_mangled, type))
4417
+ demangled_is_synthesized = true ;
4488
4418
} else if (symbol_sect_name &&
4489
4419
::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
4490
4420
symbol_sect_name) {
0 commit comments