@@ -2812,29 +2812,32 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28122812 is_gsym = true ;
28132813 sym[sym_idx].SetExternal (true );
28142814
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+ }
28382841 } else {
28392842 if (nlist.n_value != 0 )
28402843 symbol_section = section_info.GetSection (
@@ -3722,7 +3725,7 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
37223725
37233726 if (is_debug) {
37243727 switch (nlist.n_type ) {
3725- case N_GSYM: {
3728+ case N_GSYM:
37263729 // global symbol: name,,NO_SECT,type,0
37273730 // Sometimes the N_GSYM value contains the address.
37283731
@@ -3738,30 +3741,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
37383741 is_gsym = true ;
37393742 sym[sym_idx].SetExternal (true );
37403743
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+ }
37583764 } else {
37593765 if (nlist.n_value != 0 )
37603766 symbol_section =
37613767 section_info.GetSection (nlist.n_sect , nlist.n_value );
37623768 type = eSymbolTypeData;
37633769 }
3764- } break ;
3770+ break ;
37653771
37663772 case N_FNAME:
37673773 // procedure name (f77 kludge): name,,NO_SECT,0,0
0 commit comments