Skip to content

Commit 5655900

Browse files
augusto2112mahesh-attarde
authored andcommitted
Revert "[lldb][MachO][NFC] Extract ObjC metadata symbol parsing into helper function (llvm#161536)"
This reverts commit 23e0815.
1 parent f6ff891 commit 5655900

File tree

1 file changed

+124
-54
lines changed

1 file changed

+124
-54
lines changed

lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Lines changed: 124 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2067,43 +2067,6 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
20672067
return true;
20682068
}
20692069

2070-
static bool
2071-
TryParseV2ObjCMetadataSymbol(const char *&symbol_name,
2072-
const char *&symbol_name_non_abi_mangled,
2073-
SymbolType &type) {
2074-
static constexpr llvm::StringLiteral g_objc_v2_prefix_class("_OBJC_CLASS_$_");
2075-
static constexpr llvm::StringLiteral g_objc_v2_prefix_metaclass(
2076-
"_OBJC_METACLASS_$_");
2077-
static constexpr llvm::StringLiteral g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
2078-
2079-
llvm::StringRef symbol_name_ref(symbol_name);
2080-
if (symbol_name_ref.empty())
2081-
return false;
2082-
2083-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
2084-
symbol_name_non_abi_mangled = symbol_name + 1;
2085-
symbol_name = symbol_name + g_objc_v2_prefix_class.size();
2086-
type = eSymbolTypeObjCClass;
2087-
return true;
2088-
}
2089-
2090-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
2091-
symbol_name_non_abi_mangled = symbol_name + 1;
2092-
symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
2093-
type = eSymbolTypeObjCMetaClass;
2094-
return true;
2095-
}
2096-
2097-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
2098-
symbol_name_non_abi_mangled = symbol_name + 1;
2099-
symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
2100-
type = eSymbolTypeObjCIVar;
2101-
return true;
2102-
}
2103-
2104-
return false;
2105-
}
2106-
21072070
static SymbolType GetSymbolType(const char *&symbol_name,
21082071
bool &demangled_is_synthesized,
21092072
const SectionSP &text_section_sp,
@@ -2220,6 +2183,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
22202183
lldb::offset_t offset = MachHeaderSizeFromMagic(m_header.magic);
22212184
uint32_t i;
22222185
FileSpecList dylib_files;
2186+
llvm::StringRef g_objc_v2_prefix_class("_OBJC_CLASS_$_");
2187+
llvm::StringRef g_objc_v2_prefix_metaclass("_OBJC_METACLASS_$_");
2188+
llvm::StringRef g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
22232189
UUID image_uuid;
22242190

22252191
for (i = 0; i < m_header.ncmds; ++i) {
@@ -2839,13 +2805,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28392805
is_gsym = true;
28402806
sym[sym_idx].SetExternal(true);
28412807

2842-
if (TryParseV2ObjCMetadataSymbol(
2843-
symbol_name, symbol_name_non_abi_mangled,
2844-
type)) {
2808+
llvm::StringRef symbol_name_ref(symbol_name);
2809+
if (symbol_name_ref.starts_with(
2810+
g_objc_v2_prefix_class)) {
2811+
symbol_name_non_abi_mangled = symbol_name + 1;
2812+
symbol_name =
2813+
symbol_name + g_objc_v2_prefix_class.size();
2814+
type = eSymbolTypeObjCClass;
28452815
demangled_is_synthesized = true;
2846-
} else if (nlist.n_value != 0) {
2847-
symbol_section = section_info.GetSection(
2848-
nlist.n_sect, nlist.n_value);
2816+
2817+
} else if (symbol_name_ref.starts_with(
2818+
g_objc_v2_prefix_metaclass)) {
2819+
symbol_name_non_abi_mangled = symbol_name + 1;
2820+
symbol_name =
2821+
symbol_name + g_objc_v2_prefix_metaclass.size();
2822+
type = eSymbolTypeObjCMetaClass;
2823+
demangled_is_synthesized = true;
2824+
} else if (symbol_name_ref.starts_with(
2825+
g_objc_v2_prefix_ivar)) {
2826+
symbol_name_non_abi_mangled = symbol_name + 1;
2827+
symbol_name =
2828+
symbol_name + g_objc_v2_prefix_ivar.size();
2829+
type = eSymbolTypeObjCIVar;
2830+
demangled_is_synthesized = true;
2831+
} else {
2832+
if (nlist.n_value != 0)
2833+
symbol_section = section_info.GetSection(
2834+
nlist.n_sect, nlist.n_value);
28492835
type = eSymbolTypeData;
28502836
}
28512837
break;
@@ -3330,10 +3316,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33303316
::strstr(symbol_sect_name, "__objc") ==
33313317
symbol_sect_name) {
33323318
type = eSymbolTypeRuntime;
3333-
demangled_is_synthesized =
3334-
TryParseV2ObjCMetadataSymbol(
3335-
symbol_name,
3336-
symbol_name_non_abi_mangled, type);
3319+
3320+
if (symbol_name) {
3321+
llvm::StringRef symbol_name_ref(symbol_name);
3322+
if (symbol_name_ref.starts_with("_OBJC_")) {
3323+
llvm::StringRef
3324+
g_objc_v2_prefix_class(
3325+
"_OBJC_CLASS_$_");
3326+
llvm::StringRef
3327+
g_objc_v2_prefix_metaclass(
3328+
"_OBJC_METACLASS_$_");
3329+
llvm::StringRef
3330+
g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
3331+
if (symbol_name_ref.starts_with(
3332+
g_objc_v2_prefix_class)) {
3333+
symbol_name_non_abi_mangled =
3334+
symbol_name + 1;
3335+
symbol_name =
3336+
symbol_name +
3337+
g_objc_v2_prefix_class.size();
3338+
type = eSymbolTypeObjCClass;
3339+
demangled_is_synthesized = true;
3340+
} else if (
3341+
symbol_name_ref.starts_with(
3342+
g_objc_v2_prefix_metaclass)) {
3343+
symbol_name_non_abi_mangled =
3344+
symbol_name + 1;
3345+
symbol_name =
3346+
symbol_name +
3347+
g_objc_v2_prefix_metaclass.size();
3348+
type = eSymbolTypeObjCMetaClass;
3349+
demangled_is_synthesized = true;
3350+
} else if (symbol_name_ref.starts_with(
3351+
g_objc_v2_prefix_ivar)) {
3352+
symbol_name_non_abi_mangled =
3353+
symbol_name + 1;
3354+
symbol_name =
3355+
symbol_name +
3356+
g_objc_v2_prefix_ivar.size();
3357+
type = eSymbolTypeObjCIVar;
3358+
demangled_is_synthesized = true;
3359+
}
3360+
}
3361+
}
33373362
} else if (symbol_sect_name &&
33383363
::strstr(symbol_sect_name,
33393364
"__gcc_except_tab") ==
@@ -3640,12 +3665,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36403665
is_gsym = true;
36413666
sym[sym_idx].SetExternal(true);
36423667

3643-
if (TryParseV2ObjCMetadataSymbol(symbol_name,
3644-
symbol_name_non_abi_mangled, type)) {
3668+
llvm::StringRef symbol_name_ref(symbol_name);
3669+
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
3670+
symbol_name_non_abi_mangled = symbol_name + 1;
3671+
symbol_name = symbol_name + g_objc_v2_prefix_class.size();
3672+
type = eSymbolTypeObjCClass;
36453673
demangled_is_synthesized = true;
3646-
} else if (nlist.n_value != 0) {
3647-
symbol_section =
3648-
section_info.GetSection(nlist.n_sect, nlist.n_value);
3674+
3675+
} else if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
3676+
symbol_name_non_abi_mangled = symbol_name + 1;
3677+
symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
3678+
type = eSymbolTypeObjCMetaClass;
3679+
demangled_is_synthesized = true;
3680+
} else if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
3681+
symbol_name_non_abi_mangled = symbol_name + 1;
3682+
symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
3683+
type = eSymbolTypeObjCIVar;
3684+
demangled_is_synthesized = true;
3685+
} else {
3686+
if (nlist.n_value != 0)
3687+
symbol_section =
3688+
section_info.GetSection(nlist.n_sect, nlist.n_value);
36493689
type = eSymbolTypeData;
36503690
}
36513691
} break;
@@ -4083,9 +4123,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
40834123
if (symbol_sect_name &&
40844124
::strstr(symbol_sect_name, "__objc") == symbol_sect_name) {
40854125
type = eSymbolTypeRuntime;
4086-
demangled_is_synthesized = TryParseV2ObjCMetadataSymbol(
4087-
symbol_name, symbol_name_non_abi_mangled, type);
40884126

4127+
if (symbol_name) {
4128+
llvm::StringRef symbol_name_ref(symbol_name);
4129+
if (symbol_name_ref.starts_with("_OBJC_")) {
4130+
llvm::StringRef g_objc_v2_prefix_class(
4131+
"_OBJC_CLASS_$_");
4132+
llvm::StringRef g_objc_v2_prefix_metaclass(
4133+
"_OBJC_METACLASS_$_");
4134+
llvm::StringRef g_objc_v2_prefix_ivar(
4135+
"_OBJC_IVAR_$_");
4136+
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
4137+
symbol_name_non_abi_mangled = symbol_name + 1;
4138+
symbol_name =
4139+
symbol_name + g_objc_v2_prefix_class.size();
4140+
type = eSymbolTypeObjCClass;
4141+
demangled_is_synthesized = true;
4142+
} else if (symbol_name_ref.starts_with(
4143+
g_objc_v2_prefix_metaclass)) {
4144+
symbol_name_non_abi_mangled = symbol_name + 1;
4145+
symbol_name =
4146+
symbol_name + g_objc_v2_prefix_metaclass.size();
4147+
type = eSymbolTypeObjCMetaClass;
4148+
demangled_is_synthesized = true;
4149+
} else if (symbol_name_ref.starts_with(
4150+
g_objc_v2_prefix_ivar)) {
4151+
symbol_name_non_abi_mangled = symbol_name + 1;
4152+
symbol_name =
4153+
symbol_name + g_objc_v2_prefix_ivar.size();
4154+
type = eSymbolTypeObjCIVar;
4155+
demangled_is_synthesized = true;
4156+
}
4157+
}
4158+
}
40894159
} else if (symbol_sect_name &&
40904160
::strstr(symbol_sect_name, "__gcc_except_tab") ==
40914161
symbol_sect_name) {

0 commit comments

Comments
 (0)