Skip to content

Commit a604d42

Browse files
author
git apple-llvm automerger
committed
Merge commit '23e081524fd9' from llvm.org/main into next
2 parents af9abd1 + 23e0815 commit a604d42

File tree

1 file changed

+54
-124
lines changed

1 file changed

+54
-124
lines changed

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

Lines changed: 54 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -2072,6 +2072,43 @@ 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+
20752112
static SymbolType GetSymbolType(const char *&symbol_name,
20762113
bool &demangled_is_synthesized,
20772114
const SectionSP &text_section_sp,
@@ -2188,9 +2225,6 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
21882225
lldb::offset_t offset = MachHeaderSizeFromMagic(m_header.magic);
21892226
uint32_t i;
21902227
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_$_");
21942228
UUID image_uuid;
21952229

21962230
for (i = 0; i < m_header.ncmds; ++i) {
@@ -2811,33 +2845,13 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
28112845
is_gsym = true;
28122846
sym[sym_idx].SetExternal(true);
28132847

2814-
llvm::StringRef symbol_name_ref(symbol_name);
2815-
if (symbol_name_ref.starts_with(
2816-
g_objc_v2_prefix_class)) {
2817-
symbol_name_non_abi_mangled = symbol_name + 1;
2818-
symbol_name =
2819-
symbol_name + g_objc_v2_prefix_class.size();
2820-
type = eSymbolTypeObjCClass;
2821-
demangled_is_synthesized = true;
2822-
2823-
} else if (symbol_name_ref.starts_with(
2824-
g_objc_v2_prefix_metaclass)) {
2825-
symbol_name_non_abi_mangled = symbol_name + 1;
2826-
symbol_name =
2827-
symbol_name + g_objc_v2_prefix_metaclass.size();
2828-
type = eSymbolTypeObjCMetaClass;
2848+
if (TryParseV2ObjCMetadataSymbol(
2849+
symbol_name, symbol_name_non_abi_mangled,
2850+
type)) {
28292851
demangled_is_synthesized = true;
2830-
} else if (symbol_name_ref.starts_with(
2831-
g_objc_v2_prefix_ivar)) {
2832-
symbol_name_non_abi_mangled = symbol_name + 1;
2833-
symbol_name =
2834-
symbol_name + g_objc_v2_prefix_ivar.size();
2835-
type = eSymbolTypeObjCIVar;
2836-
demangled_is_synthesized = true;
2837-
} else {
2838-
if (nlist.n_value != 0)
2839-
symbol_section = section_info.GetSection(
2840-
nlist.n_sect, nlist.n_value);
2852+
} else if (nlist.n_value != 0) {
2853+
symbol_section = section_info.GetSection(
2854+
nlist.n_sect, nlist.n_value);
28412855
type = eSymbolTypeData;
28422856
}
28432857
break;
@@ -3322,49 +3336,10 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
33223336
::strstr(symbol_sect_name, "__objc") ==
33233337
symbol_sect_name) {
33243338
type = eSymbolTypeRuntime;
3325-
3326-
if (symbol_name) {
3327-
llvm::StringRef symbol_name_ref(symbol_name);
3328-
if (symbol_name_ref.starts_with("_OBJC_")) {
3329-
llvm::StringRef
3330-
g_objc_v2_prefix_class(
3331-
"_OBJC_CLASS_$_");
3332-
llvm::StringRef
3333-
g_objc_v2_prefix_metaclass(
3334-
"_OBJC_METACLASS_$_");
3335-
llvm::StringRef
3336-
g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
3337-
if (symbol_name_ref.starts_with(
3338-
g_objc_v2_prefix_class)) {
3339-
symbol_name_non_abi_mangled =
3340-
symbol_name + 1;
3341-
symbol_name =
3342-
symbol_name +
3343-
g_objc_v2_prefix_class.size();
3344-
type = eSymbolTypeObjCClass;
3345-
demangled_is_synthesized = true;
3346-
} else if (
3347-
symbol_name_ref.starts_with(
3348-
g_objc_v2_prefix_metaclass)) {
3349-
symbol_name_non_abi_mangled =
3350-
symbol_name + 1;
3351-
symbol_name =
3352-
symbol_name +
3353-
g_objc_v2_prefix_metaclass.size();
3354-
type = eSymbolTypeObjCMetaClass;
3355-
demangled_is_synthesized = true;
3356-
} else if (symbol_name_ref.starts_with(
3357-
g_objc_v2_prefix_ivar)) {
3358-
symbol_name_non_abi_mangled =
3359-
symbol_name + 1;
3360-
symbol_name =
3361-
symbol_name +
3362-
g_objc_v2_prefix_ivar.size();
3363-
type = eSymbolTypeObjCIVar;
3364-
demangled_is_synthesized = true;
3365-
}
3366-
}
3367-
}
3339+
demangled_is_synthesized =
3340+
TryParseV2ObjCMetadataSymbol(
3341+
symbol_name,
3342+
symbol_name_non_abi_mangled, type);
33683343
} else if (symbol_sect_name &&
33693344
::strstr(symbol_sect_name,
33703345
"__gcc_except_tab") ==
@@ -3678,27 +3653,12 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
36783653
is_gsym = true;
36793654
sym[sym_idx].SetExternal(true);
36803655

3681-
llvm::StringRef symbol_name_ref(symbol_name);
3682-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
3683-
symbol_name_non_abi_mangled = symbol_name + 1;
3684-
symbol_name = symbol_name + g_objc_v2_prefix_class.size();
3685-
type = eSymbolTypeObjCClass;
3686-
demangled_is_synthesized = true;
3687-
3688-
} else if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
3689-
symbol_name_non_abi_mangled = symbol_name + 1;
3690-
symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
3691-
type = eSymbolTypeObjCMetaClass;
3656+
if (TryParseV2ObjCMetadataSymbol(symbol_name,
3657+
symbol_name_non_abi_mangled, type)) {
36923658
demangled_is_synthesized = true;
3693-
} else if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
3694-
symbol_name_non_abi_mangled = symbol_name + 1;
3695-
symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
3696-
type = eSymbolTypeObjCIVar;
3697-
demangled_is_synthesized = true;
3698-
} else {
3699-
if (nlist.n_value != 0)
3700-
symbol_section =
3701-
section_info.GetSection(nlist.n_sect, nlist.n_value);
3659+
} else if (nlist.n_value != 0) {
3660+
symbol_section =
3661+
section_info.GetSection(nlist.n_sect, nlist.n_value);
37023662
type = eSymbolTypeData;
37033663
}
37043664
} break;
@@ -4141,39 +4101,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
41414101
if (symbol_sect_name &&
41424102
::strstr(symbol_sect_name, "__objc") == symbol_sect_name) {
41434103
type = eSymbolTypeRuntime;
4104+
demangled_is_synthesized = TryParseV2ObjCMetadataSymbol(
4105+
symbol_name, symbol_name_non_abi_mangled, type);
41444106

4145-
if (symbol_name) {
4146-
llvm::StringRef symbol_name_ref(symbol_name);
4147-
if (symbol_name_ref.starts_with("_OBJC_")) {
4148-
llvm::StringRef g_objc_v2_prefix_class(
4149-
"_OBJC_CLASS_$_");
4150-
llvm::StringRef g_objc_v2_prefix_metaclass(
4151-
"_OBJC_METACLASS_$_");
4152-
llvm::StringRef g_objc_v2_prefix_ivar(
4153-
"_OBJC_IVAR_$_");
4154-
if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
4155-
symbol_name_non_abi_mangled = symbol_name + 1;
4156-
symbol_name =
4157-
symbol_name + g_objc_v2_prefix_class.size();
4158-
type = eSymbolTypeObjCClass;
4159-
demangled_is_synthesized = true;
4160-
} else if (symbol_name_ref.starts_with(
4161-
g_objc_v2_prefix_metaclass)) {
4162-
symbol_name_non_abi_mangled = symbol_name + 1;
4163-
symbol_name =
4164-
symbol_name + g_objc_v2_prefix_metaclass.size();
4165-
type = eSymbolTypeObjCMetaClass;
4166-
demangled_is_synthesized = true;
4167-
} else if (symbol_name_ref.starts_with(
4168-
g_objc_v2_prefix_ivar)) {
4169-
symbol_name_non_abi_mangled = symbol_name + 1;
4170-
symbol_name =
4171-
symbol_name + g_objc_v2_prefix_ivar.size();
4172-
type = eSymbolTypeObjCIVar;
4173-
demangled_is_synthesized = true;
4174-
}
4175-
}
4176-
}
41774107
} else if (symbol_sect_name &&
41784108
::strstr(symbol_sect_name, "__gcc_except_tab") ==
41794109
symbol_sect_name) {

0 commit comments

Comments
 (0)