Author: adrian Date: Wed Oct 9 09:22:14 2019 New Revision: 374180 URL: http://llvm.org/viewvc/llvm-project?rev=374180&view=rev Log: Remove the is_mangled flag from Mangled and Symbol
Testing whether a name is mangled or not is extremely cheap and can be done by looking at the first two characters. Mangled knows how to do it. On the flip side, many call sites that currently pass in an is_mangled determination do not know how to correctly do it (for example, they leave out Swift mangling prefixes). This patch removes this entry point and just forced Mangled to determine the mangledness of a string itself. Differential Revision: https://reviews.llvm.org/D68674 Modified: lldb/trunk/include/lldb/Core/Mangled.h lldb/trunk/include/lldb/Symbol/Function.h lldb/trunk/include/lldb/Symbol/Symbol.h lldb/trunk/source/API/SBType.cpp lldb/trunk/source/Core/Mangled.cpp lldb/trunk/source/Expression/IRExecutionUnit.cpp lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp lldb/trunk/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp lldb/trunk/source/Symbol/Function.cpp lldb/trunk/source/Symbol/Symbol.cpp lldb/trunk/unittests/Core/MangledTest.cpp Modified: lldb/trunk/include/lldb/Core/Mangled.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Mangled.h?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/Mangled.h (original) +++ lldb/trunk/include/lldb/Core/Mangled.h Wed Oct 9 09:22:14 2019 @@ -53,20 +53,6 @@ public: /// Construct with name. /// - /// Constructor with an optional string and a boolean indicating if it is - /// the mangled version. - /// - /// \param[in] name - /// The already const name to copy into this object. - /// - /// \param[in] is_mangled - /// If \b true then \a name is a mangled name, if \b false then - /// \a name is demangled. - Mangled(ConstString name, bool is_mangled); - Mangled(llvm::StringRef name, bool is_mangled); - - /// Construct with name. - /// /// Constructor with an optional string and auto-detect if \a name is /// mangled or not. /// @@ -76,12 +62,6 @@ public: explicit Mangled(llvm::StringRef name); - /// Destructor - /// - /// Releases its ref counts on the mangled and demangled strings that live - /// in the global string pool. - ~Mangled(); - /// Convert to pointer operator. /// /// This allows code to check a Mangled object to see if it contains a valid Modified: lldb/trunk/include/lldb/Symbol/Function.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Function.h?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/Function.h (original) +++ lldb/trunk/include/lldb/Symbol/Function.h Wed Oct 9 09:22:14 2019 @@ -140,7 +140,7 @@ public: /// \param[in] call_decl_ptr /// Optional calling location declaration information that /// describes from where this inlined function was called. - InlineFunctionInfo(const char *name, const char *mangled, + InlineFunctionInfo(const char *name, llvm::StringRef mangled, const Declaration *decl_ptr, const Declaration *call_decl_ptr); Modified: lldb/trunk/include/lldb/Symbol/Symbol.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Symbol.h?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/Symbol.h (original) +++ lldb/trunk/include/lldb/Symbol/Symbol.h Wed Oct 9 09:22:14 2019 @@ -24,9 +24,8 @@ public: // drastically different meanings and sorting requirements. Symbol(); - Symbol(uint32_t symID, const char *name, bool name_is_mangled, - lldb::SymbolType type, bool external, bool is_debug, - bool is_trampoline, bool is_artificial, + Symbol(uint32_t symID, llvm::StringRef name, lldb::SymbolType type, + bool external, bool is_debug, bool is_trampoline, bool is_artificial, const lldb::SectionSP §ion_sp, lldb::addr_t value, lldb::addr_t size, bool size_is_valid, bool contains_linker_annotations, uint32_t flags); Modified: lldb/trunk/source/API/SBType.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBType.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/API/SBType.cpp (original) +++ lldb/trunk/source/API/SBType.cpp Wed Oct 9 09:22:14 2019 @@ -799,7 +799,7 @@ const char *SBTypeMemberFunction::GetDem if (m_opaque_sp) { ConstString mangled_str = m_opaque_sp->GetMangledName(); if (mangled_str) { - Mangled mangled(mangled_str, true); + Mangled mangled(mangled_str); return mangled.GetDemangledName(mangled.GuessLanguage()).GetCString(); } } Modified: lldb/trunk/source/Core/Mangled.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Mangled.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Core/Mangled.cpp (original) +++ lldb/trunk/source/Core/Mangled.cpp Wed Oct 9 09:22:14 2019 @@ -125,19 +125,6 @@ get_demangled_name_without_arguments(Con #pragma mark Mangled -// Constructor with an optional string and a boolean indicating if it is the -// mangled version. -Mangled::Mangled(ConstString s, bool mangled) - : m_mangled(), m_demangled() { - if (s) - SetValue(s, mangled); -} - -Mangled::Mangled(llvm::StringRef name, bool is_mangled) { - if (!name.empty()) - SetValue(ConstString(name), is_mangled); -} - Mangled::Mangled(ConstString s) : m_mangled(), m_demangled() { if (s) SetValue(s); @@ -148,9 +135,6 @@ Mangled::Mangled(llvm::StringRef name) { SetValue(ConstString(name)); } -// Destructor -Mangled::~Mangled() {} - // Convert to pointer operator. This allows code to check any Mangled objects // to see if they contain anything valid using code such as: // Modified: lldb/trunk/source/Expression/IRExecutionUnit.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/IRExecutionUnit.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Expression/IRExecutionUnit.cpp (original) +++ lldb/trunk/source/Expression/IRExecutionUnit.cpp Wed Oct 9 09:22:14 2019 @@ -669,7 +669,7 @@ FindBestAlternateMangledName(ConstString std::vector<ConstString> param_matches; for (size_t i = 0; i < alternates.size(); i++) { ConstString alternate_mangled_name = alternates[i]; - Mangled mangled(alternate_mangled_name, true); + Mangled mangled(alternate_mangled_name); ConstString demangled = mangled.GetDemangledName(lang_type); CPlusPlusLanguage::MethodName alternate_cpp_name(demangled); @@ -717,7 +717,7 @@ void IRExecutionUnit::CollectCandidateCP ConstString name = C_spec.name; if (CPlusPlusLanguage::IsCPPMangledName(name.GetCString())) { - Mangled mangled(name, true); + Mangled mangled(name); ConstString demangled = mangled.GetDemangledName(lldb::eLanguageTypeC_plus_plus); Modified: lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp (original) +++ lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp Wed Oct 9 09:22:14 2019 @@ -356,7 +356,7 @@ protected: if (name.startswith("__Z")) name = name.drop_front(); - Mangled mangled(name, true); + Mangled mangled(name); if (mangled.GuessLanguage() == lldb::eLanguageTypeC_plus_plus) { ConstString demangled( mangled.GetDisplayDemangledName(lldb::eLanguageTypeC_plus_plus)); Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp (original) +++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Wed Oct 9 09:22:14 2019 @@ -2209,8 +2209,6 @@ unsigned ObjectFileELF::ParseSymbols(Sym bool is_global = symbol.getBinding() == STB_GLOBAL; uint32_t flags = symbol.st_other << 8 | symbol.st_info | additional_flags; - bool is_mangled = (symbol_name[0] == '_' && symbol_name[1] == 'Z'); - llvm::StringRef symbol_ref(symbol_name); // Symbol names may contain @VERSION suffixes. Find those and strip them @@ -2218,7 +2216,7 @@ unsigned ObjectFileELF::ParseSymbols(Sym size_t version_pos = symbol_ref.find('@'); bool has_suffix = version_pos != llvm::StringRef::npos; llvm::StringRef symbol_bare = symbol_ref.substr(0, version_pos); - Mangled mangled(ConstString(symbol_bare), is_mangled); + Mangled mangled(symbol_bare); // Now append the suffix back to mangled and unmangled names. Only do it if // the demangling was successful (string is not empty). @@ -2449,14 +2447,11 @@ static unsigned ParsePLTRelocations( break; const char *symbol_name = strtab_data.PeekCStr(symbol.st_name); - bool is_mangled = - symbol_name ? (symbol_name[0] == '_' && symbol_name[1] == 'Z') : false; uint64_t plt_index = plt_offset + i * plt_entsize; Symbol jump_symbol( i + start_id, // Symbol table index symbol_name, // symbol name. - is_mangled, // is the symbol name mangled? eSymbolTypeTrampoline, // Type of this symbol false, // Is this globally visible? false, // Is this symbol debug info? @@ -2899,7 +2894,6 @@ void ObjectFileELF::ParseUnwindSymbols(S Symbol eh_symbol( symbol_id, // Symbol table index. symbol_name, // Symbol name. - false, // Is the symbol name mangled? eSymbolTypeCode, // Type of this symbol. true, // Is this globally visible? false, // Is this symbol debug info? Modified: lldb/trunk/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp (original) +++ lldb/trunk/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp Wed Oct 9 09:22:14 2019 @@ -340,8 +340,8 @@ void SymbolFileBreakpad::AddSymbols(Symt return; } symbols.try_emplace( - address, /*symID*/ 0, Mangled(name, /*is_mangled*/ false), - eSymbolTypeCode, /*is_global*/ true, /*is_debug*/ false, + address, /*symID*/ 0, Mangled(name), eSymbolTypeCode, + /*is_global*/ true, /*is_debug*/ false, /*is_trampoline*/ false, /*is_artificial*/ false, AddressRange(section_sp, address - section_sp->GetFileAddress(), size.getValueOr(0)), Modified: lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp (original) +++ lldb/trunk/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp Wed Oct 9 09:22:14 2019 @@ -1422,7 +1422,6 @@ void SymbolFilePDB::AddSymbols(lldb_priv symtab.AddSymbol( Symbol(pub_symbol->getSymIndexId(), // symID pub_symbol->getName().c_str(), // name - true, // name_is_mangled pub_symbol->isCode() ? eSymbolTypeCode : eSymbolTypeData, // type true, // external false, // is_debug Modified: lldb/trunk/source/Symbol/Function.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Function.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Symbol/Function.cpp (original) +++ lldb/trunk/source/Symbol/Function.cpp Wed Oct 9 09:22:14 2019 @@ -59,10 +59,11 @@ size_t FunctionInfo::MemorySize() const return m_name.MemorySize() + m_declaration.MemorySize(); } -InlineFunctionInfo::InlineFunctionInfo(const char *name, const char *mangled, +InlineFunctionInfo::InlineFunctionInfo(const char *name, + llvm::StringRef mangled, const Declaration *decl_ptr, const Declaration *call_decl_ptr) - : FunctionInfo(name, decl_ptr), m_mangled(ConstString(mangled), true), + : FunctionInfo(name, decl_ptr), m_mangled(mangled), m_call_decl(call_decl_ptr) {} InlineFunctionInfo::InlineFunctionInfo(ConstString name, Modified: lldb/trunk/source/Symbol/Symbol.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Symbol.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/source/Symbol/Symbol.cpp (original) +++ lldb/trunk/source/Symbol/Symbol.cpp Wed Oct 9 09:22:14 2019 @@ -31,9 +31,8 @@ Symbol::Symbol() m_is_weak(false), m_type(eSymbolTypeInvalid), m_mangled(), m_addr_range(), m_flags() {} -Symbol::Symbol(uint32_t symID, const char *name, bool name_is_mangled, - SymbolType type, bool external, bool is_debug, - bool is_trampoline, bool is_artificial, +Symbol::Symbol(uint32_t symID, llvm::StringRef name, SymbolType type, bool external, + bool is_debug, bool is_trampoline, bool is_artificial, const lldb::SectionSP §ion_sp, addr_t offset, addr_t size, bool size_is_valid, bool contains_linker_annotations, uint32_t flags) @@ -42,9 +41,9 @@ Symbol::Symbol(uint32_t symID, const cha m_is_debug(is_debug), m_is_external(external), m_size_is_sibling(false), m_size_is_synthesized(false), m_size_is_valid(size_is_valid || size > 0), m_demangled_is_synthesized(false), - m_contains_linker_annotations(contains_linker_annotations), + m_contains_linker_annotations(contains_linker_annotations), m_is_weak(false), m_type(type), - m_mangled(ConstString(name), name_is_mangled), + m_mangled(name), m_addr_range(section_sp, offset, size), m_flags(flags) {} Symbol::Symbol(uint32_t symID, const Mangled &mangled, SymbolType type, Modified: lldb/trunk/unittests/Core/MangledTest.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Core/MangledTest.cpp?rev=374180&r1=374179&r2=374180&view=diff ============================================================================== --- lldb/trunk/unittests/Core/MangledTest.cpp (original) +++ lldb/trunk/unittests/Core/MangledTest.cpp Wed Oct 9 09:22:14 2019 @@ -29,9 +29,7 @@ using namespace lldb_private; TEST(MangledTest, ResultForValidName) { ConstString MangledName("_ZN1a1b1cIiiiEEvm"); - bool IsMangled = true; - - Mangled TheMangled(MangledName, IsMangled); + Mangled TheMangled(MangledName); ConstString TheDemangled = TheMangled.GetDemangledName(eLanguageTypeC_plus_plus); @@ -41,9 +39,7 @@ TEST(MangledTest, ResultForValidName) { TEST(MangledTest, EmptyForInvalidName) { ConstString MangledName("_ZN1a1b1cmxktpEEvm"); - bool IsMangled = true; - - Mangled TheMangled(MangledName, IsMangled); + Mangled TheMangled(MangledName); ConstString TheDemangled = TheMangled.GetDemangledName(eLanguageTypeC_plus_plus); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits