@@ -2306,6 +2306,43 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
23062306 return true ;
23072307}
23082308
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+
23092346static SymbolType GetSymbolType (const char *&symbol_name,
23102347 bool &demangled_is_synthesized,
23112348 const SectionSP &text_section_sp,
@@ -2422,9 +2459,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
24222459 lldb::offset_t offset = MachHeaderSizeFromMagic (m_header.magic );
24232460 uint32_t i;
24242461 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_$_" );
24282462 UUID image_uuid;
24292463
24302464 for (i = 0 ; i < m_header.ncmds ; ++i) {
@@ -3057,33 +3091,15 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
30573091 is_gsym = true ;
30583092 sym[sym_idx].SetExternal (true );
30593093
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;
3075- 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;
3094+ if (TryParseV2ObjCMetadataSymbol (
3095+ symbol_name, symbol_name_non_abi_mangled,
3096+ type)) {
30823097 demangled_is_synthesized = true ;
30833098 } else {
30843099 if (nlist.n_value != 0 )
30853100 symbol_section = section_info.GetSection (
30863101 nlist.n_sect , nlist.n_value );
3102+
30873103 type = eSymbolTypeData;
30883104 }
30893105 break ;
@@ -3569,48 +3585,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
35693585 symbol_sect_name) {
35703586 type = eSymbolTypeRuntime;
35713587
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- }
3588+ if (TryParseV2ObjCMetadataSymbol (
3589+ symbol_name,
3590+ symbol_name_non_abi_mangled, type))
3591+ demangled_is_synthesized = true ;
36143592 } else if (symbol_sect_name &&
36153593 ::strstr (symbol_sect_name,
36163594 " __gcc_except_tab" ) ==
@@ -3983,27 +3961,14 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
39833961 is_gsym = true ;
39843962 sym[sym_idx].SetExternal (true );
39853963
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;
3997- 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;
3964+ if (TryParseV2ObjCMetadataSymbol (symbol_name,
3965+ symbol_name_non_abi_mangled, type)) {
40023966 demangled_is_synthesized = true ;
40033967 } else {
40043968 if (nlist.n_value != 0 )
40053969 symbol_section =
40063970 section_info.GetSection (nlist.n_sect , nlist.n_value );
3971+
40073972 type = eSymbolTypeData;
40083973 }
40093974 } break ;
@@ -4447,38 +4412,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
44474412 ::strstr (symbol_sect_name, " __objc" ) == symbol_sect_name) {
44484413 type = eSymbolTypeRuntime;
44494414
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- }
4415+ if (TryParseV2ObjCMetadataSymbol (
4416+ symbol_name, symbol_name_non_abi_mangled, type))
4417+ demangled_is_synthesized = true ;
44824418 } else if (symbol_sect_name &&
44834419 ::strstr (symbol_sect_name, " __gcc_except_tab" ) ==
44844420 symbol_sect_name) {
0 commit comments