Skip to content

Commit 6e4c686

Browse files
committed
Revert "[lldb][MachO][NFC] Extract ObjC metadata symbol parsing into helper function (llvm#161536)"
This reverts commit a561221.
1 parent 133bbff commit 6e4c686

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
@@ -2072,43 +2072,6 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
20722072
return true;
20732073
}
20742074

2075-
static bool
2076-
TryParseV2ObjCMetadataSymbol(const char *&symbol_name,
2077-
const char *&symbol_name_non_abi_mangled,
2078-
SymbolType &type) {
2079-
static constexpr llvm::StringLiteral g_objc_v2_prefix_class("_OBJC_CLASS_$_");
2080-
static constexpr llvm::StringLiteral g_objc_v2_prefix_metaclass(
2081-
"_OBJC_METACLASS_$_");
2082-
static constexpr llvm::StringLiteral g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
2083-
2084-
llvm::StringRef symbol_name_ref(symbol_name);
2085-
if (symbol_name_ref.empty())
2086-
return false;
2087-
2088-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
2089-
symbol_name_non_abi_mangled = symbol_name + 1;
2090-
symbol_name = symbol_name + g_objc_v2_prefix_class.size();
2091-
type = eSymbolTypeObjCClass;
2092-
return true;
2093-
}
2094-
2095-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
2096-
symbol_name_non_abi_mangled = symbol_name + 1;
2097-
symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
2098-
type = eSymbolTypeObjCMetaClass;
2099-
return true;
2100-
}
2101-
2102-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
2103-
symbol_name_non_abi_mangled = symbol_name + 1;
2104-
symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
2105-
type = eSymbolTypeObjCIVar;
2106-
return true;
2107-
}
2108-
2109-
return false;
2110-
}
2111-
21122075
static SymbolType GetSymbolType(const char *&symbol_name,
21132076
bool &demangled_is_synthesized,
21142077
const SectionSP &text_section_sp,
@@ -2225,6 +2188,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
22252188
lldb::offset_t offset = MachHeaderSizeFromMagic(m_header.magic);
22262189
uint32_t i;
22272190
FileSpecList dylib_files;
2191+
llvm::StringRef g_objc_v2_prefix_class("_OBJC_CLASS_$_");
2192+
llvm::StringRef g_objc_v2_prefix_metaclass("_OBJC_METACLASS_$_");
2193+
llvm::StringRef g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
22282194
UUID image_uuid;
22292195

22302196
for (i = 0; i < m_header.ncmds; ++i) {
@@ -2846,13 +2812,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28462812
is_gsym = true;
28472813
sym[sym_idx].SetExternal(true);
28482814

2849-
if (TryParseV2ObjCMetadataSymbol(
2850-
symbol_name, symbol_name_non_abi_mangled,
2851-
type)) {
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;
28522822
demangled_is_synthesized = true;
2853-
} else if (nlist.n_value != 0) {
2854-
symbol_section = section_info.GetSection(
2855-
nlist.n_sect, nlist.n_value);
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;
2838+
} else {
2839+
if (nlist.n_value != 0)
2840+
symbol_section = section_info.GetSection(
2841+
nlist.n_sect, nlist.n_value);
28562842
type = eSymbolTypeData;
28572843
}
28582844
break;
@@ -3337,10 +3323,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33373323
::strstr(symbol_sect_name, "__objc") ==
33383324
symbol_sect_name) {
33393325
type = eSymbolTypeRuntime;
3340-
demangled_is_synthesized =
3341-
TryParseV2ObjCMetadataSymbol(
3342-
symbol_name,
3343-
symbol_name_non_abi_mangled, type);
3326+
3327+
if (symbol_name) {
3328+
llvm::StringRef symbol_name_ref(symbol_name);
3329+
if (symbol_name_ref.starts_with("_OBJC_")) {
3330+
llvm::StringRef
3331+
g_objc_v2_prefix_class(
3332+
"_OBJC_CLASS_$_");
3333+
llvm::StringRef
3334+
g_objc_v2_prefix_metaclass(
3335+
"_OBJC_METACLASS_$_");
3336+
llvm::StringRef
3337+
g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
3338+
if (symbol_name_ref.starts_with(
3339+
g_objc_v2_prefix_class)) {
3340+
symbol_name_non_abi_mangled =
3341+
symbol_name + 1;
3342+
symbol_name =
3343+
symbol_name +
3344+
g_objc_v2_prefix_class.size();
3345+
type = eSymbolTypeObjCClass;
3346+
demangled_is_synthesized = true;
3347+
} else if (
3348+
symbol_name_ref.starts_with(
3349+
g_objc_v2_prefix_metaclass)) {
3350+
symbol_name_non_abi_mangled =
3351+
symbol_name + 1;
3352+
symbol_name =
3353+
symbol_name +
3354+
g_objc_v2_prefix_metaclass.size();
3355+
type = eSymbolTypeObjCMetaClass;
3356+
demangled_is_synthesized = true;
3357+
} else if (symbol_name_ref.starts_with(
3358+
g_objc_v2_prefix_ivar)) {
3359+
symbol_name_non_abi_mangled =
3360+
symbol_name + 1;
3361+
symbol_name =
3362+
symbol_name +
3363+
g_objc_v2_prefix_ivar.size();
3364+
type = eSymbolTypeObjCIVar;
3365+
demangled_is_synthesized = true;
3366+
}
3367+
}
3368+
}
33443369
} else if (symbol_sect_name &&
33453370
::strstr(symbol_sect_name,
33463371
"__gcc_except_tab") ==
@@ -3713,12 +3738,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
37133738
is_gsym = true;
37143739
sym[sym_idx].SetExternal(true);
37153740

3716-
if (TryParseV2ObjCMetadataSymbol(symbol_name,
3717-
symbol_name_non_abi_mangled, type)) {
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;
37183746
demangled_is_synthesized = true;
3719-
} else if (nlist.n_value != 0) {
3720-
symbol_section =
3721-
section_info.GetSection(nlist.n_sect, nlist.n_value);
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;
3758+
} else {
3759+
if (nlist.n_value != 0)
3760+
symbol_section =
3761+
section_info.GetSection(nlist.n_sect, nlist.n_value);
37223762
type = eSymbolTypeData;
37233763
}
37243764
} break;
@@ -4161,9 +4201,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41614201
if (symbol_sect_name &&
41624202
::strstr(symbol_sect_name, "__objc") == symbol_sect_name) {
41634203
type = eSymbolTypeRuntime;
4164-
demangled_is_synthesized = TryParseV2ObjCMetadataSymbol(
4165-
symbol_name, symbol_name_non_abi_mangled, type);
41664204

4205+
if (symbol_name) {
4206+
llvm::StringRef symbol_name_ref(symbol_name);
4207+
if (symbol_name_ref.starts_with("_OBJC_")) {
4208+
llvm::StringRef g_objc_v2_prefix_class(
4209+
"_OBJC_CLASS_$_");
4210+
llvm::StringRef g_objc_v2_prefix_metaclass(
4211+
"_OBJC_METACLASS_$_");
4212+
llvm::StringRef g_objc_v2_prefix_ivar(
4213+
"_OBJC_IVAR_$_");
4214+
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
4215+
symbol_name_non_abi_mangled = symbol_name + 1;
4216+
symbol_name =
4217+
symbol_name + g_objc_v2_prefix_class.size();
4218+
type = eSymbolTypeObjCClass;
4219+
demangled_is_synthesized = true;
4220+
} else if (symbol_name_ref.starts_with(
4221+
g_objc_v2_prefix_metaclass)) {
4222+
symbol_name_non_abi_mangled = symbol_name + 1;
4223+
symbol_name =
4224+
symbol_name + g_objc_v2_prefix_metaclass.size();
4225+
type = eSymbolTypeObjCMetaClass;
4226+
demangled_is_synthesized = true;
4227+
} else if (symbol_name_ref.starts_with(
4228+
g_objc_v2_prefix_ivar)) {
4229+
symbol_name_non_abi_mangled = symbol_name + 1;
4230+
symbol_name =
4231+
symbol_name + g_objc_v2_prefix_ivar.size();
4232+
type = eSymbolTypeObjCIVar;
4233+
demangled_is_synthesized = true;
4234+
}
4235+
}
4236+
}
41674237
} else if (symbol_sect_name &&
41684238
::strstr(symbol_sect_name, "__gcc_except_tab") ==
41694239
symbol_sect_name) {

0 commit comments

Comments
 (0)