Author: Jonas Devlieghere Date: 2025-01-20T15:38:04-08:00 New Revision: 06c54bc1a200fd87bbf4b81db70f52159c79f5bf
URL: https://github.com/llvm/llvm-project/commit/06c54bc1a200fd87bbf4b81db70f52159c79f5bf DIFF: https://github.com/llvm/llvm-project/commit/06c54bc1a200fd87bbf4b81db70f52159c79f5bf.diff LOG: [lldb] Implement ${target.file} format variable (#123431) Implements a format variable to print the basename and full path to the current target. Added: Modified: lldb/docs/use/formatting.rst lldb/include/lldb/Core/FormatEntity.h lldb/source/Core/FormatEntity.cpp lldb/unittests/Core/FormatEntityTest.cpp Removed: ################################################################################ diff --git a/lldb/docs/use/formatting.rst b/lldb/docs/use/formatting.rst index 970bacfd8807a7..7b3f01eebc8917 100644 --- a/lldb/docs/use/formatting.rst +++ b/lldb/docs/use/formatting.rst @@ -113,11 +113,11 @@ A complete list of currently supported format string variables is listed below: +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``module.file.basename`` | The basename of the current module (shared library or executable) | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``module.file.fullpath`` | The basename of the current module (shared library or executable) | +| ``module.file.fullpath`` | The path of the current module (shared library or executable) | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``process.file.basename`` | The basename of the file for the process | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``process.file.fullpath`` | The fullname of the file for the process | +| ``process.file.fullpath`` | The path of the file for the process | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``process.id`` | The process ID native to the system on which the inferior runs. | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -141,6 +141,10 @@ A complete list of currently supported format string variables is listed below: +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``target.arch`` | The architecture of the current target | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``target.file.basename`` | The basename of the current target | ++---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``target.file.fullpath`` | The path of the current target | ++---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``script.target:python_func`` | Use a Python function to generate a piece of textual output | +---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``script.process:python_func`` | Use a Python function to generate a piece of textual output | diff --git a/lldb/include/lldb/Core/FormatEntity.h b/lldb/include/lldb/Core/FormatEntity.h index 36f6df4118c21f..c9d5af1f31673b 100644 --- a/lldb/include/lldb/Core/FormatEntity.h +++ b/lldb/include/lldb/Core/FormatEntity.h @@ -67,6 +67,7 @@ struct Entry { ScriptThread, ThreadInfo, TargetArch, + TargetFile, ScriptTarget, ModuleFile, File, diff --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp index e13284832cf571..fb7043ac74b8dd 100644 --- a/lldb/source/Core/FormatEntity.cpp +++ b/lldb/source/Core/FormatEntity.cpp @@ -162,7 +162,9 @@ constexpr Definition g_thread_child_entries[] = { Definition("completed-expression", EntryType::ThreadCompletedExpression)}; constexpr Definition g_target_child_entries[] = { - Definition("arch", EntryType::TargetArch)}; + Definition("arch", EntryType::TargetArch), + Entry::DefinitionWithChildren("file", EntryType::TargetFile, + g_file_child_entries)}; #define _TO_STR2(_val) #_val #define _TO_STR(_val) _TO_STR2(_val) @@ -322,6 +324,7 @@ const char *FormatEntity::Entry::TypeToCString(Type t) { ENUM_TO_CSTR(ScriptThread); ENUM_TO_CSTR(ThreadInfo); ENUM_TO_CSTR(TargetArch); + ENUM_TO_CSTR(TargetFile); ENUM_TO_CSTR(ScriptTarget); ENUM_TO_CSTR(ModuleFile); ENUM_TO_CSTR(File); @@ -1469,6 +1472,17 @@ bool FormatEntity::Format(const Entry &entry, Stream &s, } return false; + case Entry::Type::TargetFile: + if (exe_ctx) { + if (Target *target = exe_ctx->GetTargetPtr()) { + if (Module *exe_module = target->GetExecutableModulePointer()) { + if (DumpFile(s, exe_module->GetFileSpec(), (FileKind)entry.number)) + return true; + } + } + } + return false; + case Entry::Type::ScriptTarget: if (exe_ctx) { Target *target = exe_ctx->GetTargetPtr(); diff --git a/lldb/unittests/Core/FormatEntityTest.cpp b/lldb/unittests/Core/FormatEntityTest.cpp index 0a68c9340b77ae..5983c9de99ef78 100644 --- a/lldb/unittests/Core/FormatEntityTest.cpp +++ b/lldb/unittests/Core/FormatEntityTest.cpp @@ -148,6 +148,9 @@ constexpr llvm::StringRef lookupStrings[] = { "${thread.return-value}", "${thread.completed-expression}", "${target.arch}", + "${target.file.basename}", + "${target.file.dirname}", + "${target.file.fullpath}", "${var.dummy-var-to-test-wildcard}"}; TEST(FormatEntity, LookupAllEntriesInTree) { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits