[Lldb-commits] [lldb] 5a80fb9 - Revert "[lldb][MachO][NFC] Extract ObjC metadata symbol parsing into helper function (#161536)"
Augusto Noronha via lldb-commits
lldb-commits at lists.llvm.org
Wed Oct 1 10:53:06 PDT 2025
Author: Augusto Noronha
Date: 2025-10-01T10:50:59-07:00
New Revision: 5a80fb9177e3c831c9c574400a13d77393397f2a
URL: https://github.com/llvm/llvm-project/commit/5a80fb9177e3c831c9c574400a13d77393397f2a
DIFF: https://github.com/llvm/llvm-project/commit/5a80fb9177e3c831c9c574400a13d77393397f2a.diff
LOG: Revert "[lldb][MachO][NFC] Extract ObjC metadata symbol parsing into helper function (#161536)"
This reverts commit 23e081524fd9f64fb3430822e879b6dc36a1d3f1.
Added:
Modified:
lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index e8bbefe27f47f..91c93be1b8cfd 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -2067,43 +2067,6 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
return true;
}
-static bool
-TryParseV2ObjCMetadataSymbol(const char *&symbol_name,
- const char *&symbol_name_non_abi_mangled,
- SymbolType &type) {
- static constexpr llvm::StringLiteral g_objc_v2_prefix_class("_OBJC_CLASS_$_");
- static constexpr llvm::StringLiteral g_objc_v2_prefix_metaclass(
- "_OBJC_METACLASS_$_");
- static constexpr llvm::StringLiteral g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
-
- llvm::StringRef symbol_name_ref(symbol_name);
- if (symbol_name_ref.empty())
- return false;
-
- if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
- symbol_name_non_abi_mangled = symbol_name + 1;
- symbol_name = symbol_name + g_objc_v2_prefix_class.size();
- type = eSymbolTypeObjCClass;
- return true;
- }
-
- if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
- symbol_name_non_abi_mangled = symbol_name + 1;
- symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
- type = eSymbolTypeObjCMetaClass;
- return true;
- }
-
- if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
- symbol_name_non_abi_mangled = symbol_name + 1;
- symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
- type = eSymbolTypeObjCIVar;
- return true;
- }
-
- return false;
-}
-
static SymbolType GetSymbolType(const char *&symbol_name,
bool &demangled_is_synthesized,
const SectionSP &text_section_sp,
@@ -2220,6 +2183,9 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
lldb::offset_t offset = MachHeaderSizeFromMagic(m_header.magic);
uint32_t i;
FileSpecList dylib_files;
+ llvm::StringRef g_objc_v2_prefix_class("_OBJC_CLASS_$_");
+ llvm::StringRef g_objc_v2_prefix_metaclass("_OBJC_METACLASS_$_");
+ llvm::StringRef g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
UUID image_uuid;
for (i = 0; i < m_header.ncmds; ++i) {
@@ -2839,13 +2805,33 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
is_gsym = true;
sym[sym_idx].SetExternal(true);
- if (TryParseV2ObjCMetadataSymbol(
- symbol_name, symbol_name_non_abi_mangled,
- type)) {
+ llvm::StringRef symbol_name_ref(symbol_name);
+ if (symbol_name_ref.starts_with(
+ g_objc_v2_prefix_class)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name =
+ symbol_name + g_objc_v2_prefix_class.size();
+ type = eSymbolTypeObjCClass;
demangled_is_synthesized = true;
- } else if (nlist.n_value != 0) {
- symbol_section = section_info.GetSection(
- nlist.n_sect, nlist.n_value);
+
+ } else if (symbol_name_ref.starts_with(
+ g_objc_v2_prefix_metaclass)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name =
+ symbol_name + g_objc_v2_prefix_metaclass.size();
+ type = eSymbolTypeObjCMetaClass;
+ demangled_is_synthesized = true;
+ } else if (symbol_name_ref.starts_with(
+ g_objc_v2_prefix_ivar)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name =
+ symbol_name + g_objc_v2_prefix_ivar.size();
+ type = eSymbolTypeObjCIVar;
+ demangled_is_synthesized = true;
+ } else {
+ if (nlist.n_value != 0)
+ symbol_section = section_info.GetSection(
+ nlist.n_sect, nlist.n_value);
type = eSymbolTypeData;
}
break;
@@ -3330,10 +3316,49 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
::strstr(symbol_sect_name, "__objc") ==
symbol_sect_name) {
type = eSymbolTypeRuntime;
- demangled_is_synthesized =
- TryParseV2ObjCMetadataSymbol(
- symbol_name,
- symbol_name_non_abi_mangled, type);
+
+ if (symbol_name) {
+ llvm::StringRef symbol_name_ref(symbol_name);
+ if (symbol_name_ref.starts_with("_OBJC_")) {
+ llvm::StringRef
+ g_objc_v2_prefix_class(
+ "_OBJC_CLASS_$_");
+ llvm::StringRef
+ g_objc_v2_prefix_metaclass(
+ "_OBJC_METACLASS_$_");
+ llvm::StringRef
+ g_objc_v2_prefix_ivar("_OBJC_IVAR_$_");
+ if (symbol_name_ref.starts_with(
+ g_objc_v2_prefix_class)) {
+ symbol_name_non_abi_mangled =
+ symbol_name + 1;
+ symbol_name =
+ symbol_name +
+ g_objc_v2_prefix_class.size();
+ type = eSymbolTypeObjCClass;
+ demangled_is_synthesized = true;
+ } else if (
+ symbol_name_ref.starts_with(
+ g_objc_v2_prefix_metaclass)) {
+ symbol_name_non_abi_mangled =
+ symbol_name + 1;
+ symbol_name =
+ symbol_name +
+ g_objc_v2_prefix_metaclass.size();
+ type = eSymbolTypeObjCMetaClass;
+ demangled_is_synthesized = true;
+ } else if (symbol_name_ref.starts_with(
+ g_objc_v2_prefix_ivar)) {
+ symbol_name_non_abi_mangled =
+ symbol_name + 1;
+ symbol_name =
+ symbol_name +
+ g_objc_v2_prefix_ivar.size();
+ type = eSymbolTypeObjCIVar;
+ demangled_is_synthesized = true;
+ }
+ }
+ }
} else if (symbol_sect_name &&
::strstr(symbol_sect_name,
"__gcc_except_tab") ==
@@ -3640,12 +3665,27 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
is_gsym = true;
sym[sym_idx].SetExternal(true);
- if (TryParseV2ObjCMetadataSymbol(symbol_name,
- symbol_name_non_abi_mangled, type)) {
+ llvm::StringRef symbol_name_ref(symbol_name);
+ if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name = symbol_name + g_objc_v2_prefix_class.size();
+ type = eSymbolTypeObjCClass;
demangled_is_synthesized = true;
- } else if (nlist.n_value != 0) {
- symbol_section =
- section_info.GetSection(nlist.n_sect, nlist.n_value);
+
+ } else if (symbol_name_ref.starts_with(g_objc_v2_prefix_metaclass)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name = symbol_name + g_objc_v2_prefix_metaclass.size();
+ type = eSymbolTypeObjCMetaClass;
+ demangled_is_synthesized = true;
+ } else if (symbol_name_ref.starts_with(g_objc_v2_prefix_ivar)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name = symbol_name + g_objc_v2_prefix_ivar.size();
+ type = eSymbolTypeObjCIVar;
+ demangled_is_synthesized = true;
+ } else {
+ if (nlist.n_value != 0)
+ symbol_section =
+ section_info.GetSection(nlist.n_sect, nlist.n_value);
type = eSymbolTypeData;
}
} break;
@@ -4083,9 +4123,39 @@ void ObjectFileMachO::ParseSymtab(Symtab &symtab) {
if (symbol_sect_name &&
::strstr(symbol_sect_name, "__objc") == symbol_sect_name) {
type = eSymbolTypeRuntime;
- demangled_is_synthesized = TryParseV2ObjCMetadataSymbol(
- symbol_name, symbol_name_non_abi_mangled, type);
+ if (symbol_name) {
+ llvm::StringRef symbol_name_ref(symbol_name);
+ if (symbol_name_ref.starts_with("_OBJC_")) {
+ llvm::StringRef g_objc_v2_prefix_class(
+ "_OBJC_CLASS_$_");
+ llvm::StringRef g_objc_v2_prefix_metaclass(
+ "_OBJC_METACLASS_$_");
+ llvm::StringRef g_objc_v2_prefix_ivar(
+ "_OBJC_IVAR_$_");
+ if (symbol_name_ref.starts_with(g_objc_v2_prefix_class)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name =
+ symbol_name + g_objc_v2_prefix_class.size();
+ type = eSymbolTypeObjCClass;
+ demangled_is_synthesized = true;
+ } else if (symbol_name_ref.starts_with(
+ g_objc_v2_prefix_metaclass)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name =
+ symbol_name + g_objc_v2_prefix_metaclass.size();
+ type = eSymbolTypeObjCMetaClass;
+ demangled_is_synthesized = true;
+ } else if (symbol_name_ref.starts_with(
+ g_objc_v2_prefix_ivar)) {
+ symbol_name_non_abi_mangled = symbol_name + 1;
+ symbol_name =
+ symbol_name + g_objc_v2_prefix_ivar.size();
+ type = eSymbolTypeObjCIVar;
+ demangled_is_synthesized = true;
+ }
+ }
+ }
} else if (symbol_sect_name &&
::strstr(symbol_sect_name, "__gcc_except_tab") ==
symbol_sect_name) {
More information about the lldb-commits
mailing list