@@ -2812,29 +2812,32 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
2812
2812
is_gsym = true ;
2813
2813
sym[sym_idx].SetExternal (true );
2814
2814
2815
- llvm::StringRef symbol_name_ref (symbol_name);
2816
- if (symbol_name_ref.starts_with (
2817
- g_objc_v2_prefix_class)) {
2818
- symbol_name_non_abi_mangled = symbol_name + 1 ;
2819
- symbol_name =
2820
- symbol_name + g_objc_v2_prefix_class.size ();
2821
- type = eSymbolTypeObjCClass;
2822
- demangled_is_synthesized = true ;
2823
-
2824
- } else if (symbol_name_ref.starts_with (
2825
- g_objc_v2_prefix_metaclass)) {
2826
- symbol_name_non_abi_mangled = symbol_name + 1 ;
2827
- symbol_name =
2828
- symbol_name + g_objc_v2_prefix_metaclass.size ();
2829
- type = eSymbolTypeObjCMetaClass;
2830
- demangled_is_synthesized = true ;
2831
- } else if (symbol_name_ref.starts_with (
2832
- g_objc_v2_prefix_ivar)) {
2833
- symbol_name_non_abi_mangled = symbol_name + 1 ;
2834
- symbol_name =
2835
- symbol_name + g_objc_v2_prefix_ivar.size ();
2836
- type = eSymbolTypeObjCIVar;
2837
- demangled_is_synthesized = true ;
2815
+ if (symbol_name && symbol_name[0 ] == ' _' &&
2816
+ symbol_name[1 ] == ' O' ) {
2817
+ llvm::StringRef symbol_name_ref (symbol_name);
2818
+ if (symbol_name_ref.starts_with (
2819
+ g_objc_v2_prefix_class)) {
2820
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
2821
+ symbol_name =
2822
+ symbol_name + g_objc_v2_prefix_class.size ();
2823
+ type = eSymbolTypeObjCClass;
2824
+ demangled_is_synthesized = true ;
2825
+
2826
+ } else if (symbol_name_ref.starts_with (
2827
+ g_objc_v2_prefix_metaclass)) {
2828
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
2829
+ symbol_name =
2830
+ symbol_name + g_objc_v2_prefix_metaclass.size ();
2831
+ type = eSymbolTypeObjCMetaClass;
2832
+ demangled_is_synthesized = true ;
2833
+ } else if (symbol_name_ref.starts_with (
2834
+ g_objc_v2_prefix_ivar)) {
2835
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
2836
+ symbol_name =
2837
+ symbol_name + g_objc_v2_prefix_ivar.size ();
2838
+ type = eSymbolTypeObjCIVar;
2839
+ demangled_is_synthesized = true ;
2840
+ }
2838
2841
} else {
2839
2842
if (nlist.n_value != 0 )
2840
2843
symbol_section = section_info.GetSection (
@@ -3722,7 +3725,7 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3722
3725
3723
3726
if (is_debug) {
3724
3727
switch (nlist.n_type ) {
3725
- case N_GSYM: {
3728
+ case N_GSYM:
3726
3729
// global symbol: name,,NO_SECT,type,0
3727
3730
// Sometimes the N_GSYM value contains the address.
3728
3731
@@ -3738,30 +3741,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
3738
3741
is_gsym = true ;
3739
3742
sym[sym_idx].SetExternal (true );
3740
3743
3741
- llvm::StringRef symbol_name_ref (symbol_name);
3742
- if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3743
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3744
- symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3745
- type = eSymbolTypeObjCClass;
3746
- demangled_is_synthesized = true ;
3747
-
3748
- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_metaclass)) {
3749
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3750
- symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
3751
- type = eSymbolTypeObjCMetaClass;
3752
- demangled_is_synthesized = true ;
3753
- } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
3754
- symbol_name_non_abi_mangled = symbol_name + 1 ;
3755
- symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
3756
- type = eSymbolTypeObjCIVar;
3757
- demangled_is_synthesized = true ;
3744
+ if (symbol_name && symbol_name[0 ] == ' _' && symbol_name[1 ] == ' O' ) {
3745
+ llvm::StringRef symbol_name_ref (symbol_name);
3746
+ if (symbol_name_ref.starts_with (g_objc_v2_prefix_class)) {
3747
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
3748
+ symbol_name = symbol_name + g_objc_v2_prefix_class.size ();
3749
+ type = eSymbolTypeObjCClass;
3750
+ demangled_is_synthesized = true ;
3751
+
3752
+ } else if (symbol_name_ref.starts_with (
3753
+ g_objc_v2_prefix_metaclass)) {
3754
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
3755
+ symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size ();
3756
+ type = eSymbolTypeObjCMetaClass;
3757
+ demangled_is_synthesized = true ;
3758
+ } else if (symbol_name_ref.starts_with (g_objc_v2_prefix_ivar)) {
3759
+ symbol_name_non_abi_mangled = symbol_name + 1 ;
3760
+ symbol_name = symbol_name + g_objc_v2_prefix_ivar.size ();
3761
+ type = eSymbolTypeObjCIVar;
3762
+ demangled_is_synthesized = true ;
3763
+ }
3758
3764
} else {
3759
3765
if (nlist.n_value != 0 )
3760
3766
symbol_section =
3761
3767
section_info.GetSection (nlist.n_sect , nlist.n_value );
3762
3768
type = eSymbolTypeData;
3763
3769
}
3764
- } break ;
3770
+ break ;
3765
3771
3766
3772
case N_FNAME:
3767
3773
// procedure name (f77 kludge): name,,NO_SECT,0,0
0 commit comments