Ahh, I didn't notice that our C++ Language Runtime is already called the Itanium ABI Runtime. Kind of unfortunate.
I wonder how it would work if a process had modules loaded with different languages. Right now we seem to assume 1 language runtime per process, but really it's more like 1 per module. On Fri, Mar 25, 2016 at 4:49 PM Enrico Granata <egran...@apple.com> wrote: > On Mar 25, 2016, at 4:39 PM, Zachary Turner <ztur...@google.com> wrote: > > Any particular reason this has the word Itanium baked into the name of the > class > > > The name of the C++ language runtime is ItaniumABI > I don’t think we have a language runtime for the C++ MSVC ABI > We can revisit where this command lives at that time > > and description? > > > It shouldn’t - it should be “language cplusplus demangle”, no mention of > Itanium > If you are referring to the description of the plugin overall, that is > correct, and should stay as-is > > Again, the hierarchy can be revisited when a C++ MSVC ABI runtime plugin > exists. > > MSVC doesn't use the Itanium ABI, but but AFAICT from looking at this > code, it should work for MSVC's abi as well. > > > I have no way to test it, but I would assume so, yes. > > Sicne this command isn't actually Itanium ABI specific, I don't think it > should make references to Itanium ABI in its C++ class name > > > This seems nitpicking to me, since the entire file is named > ItaniumABILanguageRuntime.cpp > > or help / description > > > I don’t think it does > > > On Fri, Mar 25, 2016 at 4:19 PM Enrico Granata via lldb-commits < > lldb-commits@lists.llvm.org> wrote: > >> Author: enrico >> Date: Fri Mar 25 18:14:24 2016 >> New Revision: 264474 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=264474&view=rev >> Log: >> Add a 'language cplusplus demangle' command. This can be useful to >> provide a low-friction reproduction for issues with the LLDB demangling of >> C++ symbols >> >> Modified: >> >> lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp >> >> 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=264474&r1=264473&r2=264474&view=diff >> >> ============================================================================== >> --- >> lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp >> (original) >> +++ >> lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp >> Fri Mar 25 18:14:24 2016 >> @@ -13,11 +13,15 @@ >> #include "lldb/Core/ConstString.h" >> #include "lldb/Core/Error.h" >> #include "lldb/Core/Log.h" >> +#include "lldb/Core/Mangled.h" >> #include "lldb/Core/Module.h" >> #include "lldb/Core/PluginManager.h" >> #include "lldb/Core/Scalar.h" >> #include "lldb/Core/ValueObject.h" >> #include "lldb/Core/ValueObjectMemory.h" >> +#include "lldb/Interpreter/CommandObject.h" >> +#include "lldb/Interpreter/CommandObjectMultiword.h" >> +#include "lldb/Interpreter/CommandReturnObject.h" >> #include "lldb/Symbol/ClangASTContext.h" >> #include "lldb/Symbol/Symbol.h" >> #include "lldb/Symbol/SymbolFile.h" >> @@ -340,12 +344,96 @@ ItaniumABILanguageRuntime::CreateInstanc >> return NULL; >> } >> >> +class CommandObjectMultiwordItaniumABI_Demangle : public >> CommandObjectParsed >> +{ >> +public: >> + CommandObjectMultiwordItaniumABI_Demangle (CommandInterpreter >> &interpreter) : >> + CommandObjectParsed (interpreter, >> + "demangle", >> + "Demangle a C++ mangled name.", >> + "language cplusplus demangle") >> + { >> + CommandArgumentEntry arg; >> + CommandArgumentData index_arg; >> + >> + // Define the first (and only) variant of this arg. >> + index_arg.arg_type = eArgTypeSymbol; >> + index_arg.arg_repetition = eArgRepeatPlus; >> + >> + // There is only one variant this argument could be; put it into >> the argument entry. >> + arg.push_back (index_arg); >> + >> + // Push the data for the first argument into the m_arguments >> vector. >> + m_arguments.push_back (arg); >> + } >> + >> + ~CommandObjectMultiwordItaniumABI_Demangle() override = default; >> + >> +protected: >> + bool >> + DoExecute(Args& command, CommandReturnObject &result) override >> + { >> + bool demangled_any = false; >> + bool error_any = false; >> + for (size_t i = 0; i < command.GetArgumentCount(); i++) >> + { >> + auto arg = command.GetArgumentAtIndex(i); >> + if (arg && *arg) >> + { >> + ConstString mangled_cs(arg); >> + >> + // the actual Mangled class should be strict about this, >> but on the command line >> + // if you're copying mangled names out of 'nm' on >> Darwin, they will come out with >> + // an extra underscore - be willing to strip this on >> behalf of the user >> + // This is the moral equivalent of the -_/-n options to >> c++filt >> + if (mangled_cs.GetStringRef().startswith("__Z")) >> + mangled_cs.SetCString(arg+1); >> + >> + Mangled mangled(mangled_cs, true); >> + if (mangled.GuessLanguage() == >> lldb::eLanguageTypeC_plus_plus) >> + { >> + ConstString >> demangled(mangled.GetDisplayDemangledName(lldb::eLanguageTypeC_plus_plus)); >> + demangled_any = true; >> + result.AppendMessageWithFormat("%s ---> %s\n", arg, >> demangled.GetCString()); >> + } >> + else >> + { >> + error_any = true; >> + result.AppendErrorWithFormat("%s is not a valid C++ >> mangled name\n", arg); >> + } >> + } >> + } >> + >> + result.SetStatus(error_any ? lldb::eReturnStatusFailed : >> + (demangled_any ? >> lldb::eReturnStatusSuccessFinishResult : >> lldb::eReturnStatusSuccessFinishNoResult)); >> + return result.Succeeded(); >> + } >> +}; >> + >> +class CommandObjectMultiwordItaniumABI : public CommandObjectMultiword >> +{ >> +public: >> + CommandObjectMultiwordItaniumABI (CommandInterpreter &interpreter) : >> + CommandObjectMultiword (interpreter, >> + "cplusplus", >> + "A set of commands for operating on the C++ >> Language Runtime.", >> + "cplusplus <subcommand> >> [<subcommand-options>]") >> + { >> + LoadSubCommand ("demangle", CommandObjectSP (new >> CommandObjectMultiwordItaniumABI_Demangle (interpreter))); >> + } >> + >> + ~CommandObjectMultiwordItaniumABI() override = default; >> +}; >> + >> void >> ItaniumABILanguageRuntime::Initialize() >> { >> PluginManager::RegisterPlugin (GetPluginNameStatic(), >> "Itanium ABI for the C++ language", >> - CreateInstance); >> + CreateInstance, >> + [] (CommandInterpreter& interpreter) >> -> lldb::CommandObjectSP { >> + return CommandObjectSP(new >> CommandObjectMultiwordItaniumABI(interpreter)); >> + }); >> } >> >> void >> >> >> _______________________________________________ >> lldb-commits mailing list >> lldb-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits >> > > > Thanks, > *- Enrico* > 📩 egranata@.com ☎️ 27683 > >
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits