[Lldb-commits] [lldb] [llvm] LLDB Debuginfod usage tests (with fixes) (PR #79181)
Kevin Frei via lldb-commits
lldb-commits at lists.llvm.org
Mon Mar 4 15:48:50 PST 2024
https://github.com/kevinfrei updated https://github.com/llvm/llvm-project/pull/79181
>From 1d547214df856c3ed34fa715313c7a33c990ee76 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Thu, 18 Jan 2024 09:09:50 -0800
Subject: [PATCH 01/15] Added settings for cache location and timeout
---
llvm/lib/Debuginfod/Debuginfod.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/llvm/lib/Debuginfod/Debuginfod.cpp b/llvm/lib/Debuginfod/Debuginfod.cpp
index 1cf550721000eb..066f0c27bb9ffb 100644
--- a/llvm/lib/Debuginfod/Debuginfod.cpp
+++ b/llvm/lib/Debuginfod/Debuginfod.cpp
@@ -159,6 +159,10 @@ Expected<std::string> getCachedOrDownloadDebuginfo(BuildIDRef ID) {
return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath);
}
+Expected<std::string> getCachedOrDownloadDebuginfo(BuildIDRef ID) {
+ std::string UrlPath = getDebuginfodDebuginfoUrlPath(ID);
+ return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath);
+}
// General fetching function.
Expected<std::string> getCachedOrDownloadArtifact(StringRef UniqueKey,
StringRef UrlPath) {
>From dedfc28219d83d4e5cdd2edee5081b51f6166495 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Fri, 19 Jan 2024 07:11:17 -0800
Subject: [PATCH 02/15] Continuing to pick my changes apart a little bit
---
.../SymbolFile/DWARF/SymbolFileDWARF.cpp | 18 ++
.../SymbolFile/DWARF/SymbolFileDWARF.h | 3 +
.../Plugins/SymbolLocator/CMakeLists.txt | 7 +-
.../Debuginfod/SymbolLocatorDebuginfod.cpp | 6 +-
.../SymbolVendor/ELF/SymbolVendorELF.cpp | 13 +-
.../Shell/Debuginfod/Inputs/main-dbg.yaml | 211 +++++++++++++++++
.../Shell/Debuginfod/Inputs/main-dwp.yaml | 50 ++++
.../Shell/Debuginfod/Inputs/main-full.yaml | 212 +++++++++++++++++
.../Shell/Debuginfod/Inputs/main-nodbg.yaml | 146 ++++++++++++
.../Debuginfod/Inputs/main-split-dbg.yaml | 216 +++++++++++++++++
.../Debuginfod/Inputs/main-split-nodbg.yaml | 146 ++++++++++++
.../Shell/Debuginfod/Inputs/main-split.yaml | 217 ++++++++++++++++++
.../Debuginfod/Inputs/main-stripped.yaml | 146 ++++++++++++
lldb/test/Shell/Debuginfod/Inputs/main.c | 82 +++++++
lldb/test/Shell/Debuginfod/Inputs/mk | 51 ++++
.../Shell/Debuginfod/okd-split-negative.test | 31 +++
.../Shell/Debuginfod/okd-split-positive.test | 40 ++++
.../Debuginfod/okd-stripped-negative.test | 32 +++
.../Debuginfod/okd-stripped-positive.test | 35 +++
.../Shell/Debuginfod/simple-dwp-negative.test | 32 +++
.../Shell/Debuginfod/simple-dwp-positive.test | 37 +++
.../Debuginfod/simple-stripped-negative.test | 32 +++
.../Debuginfod/simple-stripped-positive.test | 38 +++
lldb/test/Shell/Debuginfod/tests.md | 61 +++++
llvm/lib/Debuginfod/Debuginfod.cpp | 41 +++-
.../gn/build/write_library_dependencies.py | 1 +
llvm/utils/lldbDataFormatters.py | 2 +
27 files changed, 1893 insertions(+), 13 deletions(-)
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-dbg.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-dwp.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-full.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-split-dbg.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-split-nodbg.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-split.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-stripped.yaml
create mode 100644 lldb/test/Shell/Debuginfod/Inputs/main.c
create mode 100755 lldb/test/Shell/Debuginfod/Inputs/mk
create mode 100644 lldb/test/Shell/Debuginfod/okd-split-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/okd-split-positive.test
create mode 100644 lldb/test/Shell/Debuginfod/okd-stripped-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/okd-stripped-positive.test
create mode 100644 lldb/test/Shell/Debuginfod/simple-dwp-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/simple-dwp-positive.test
create mode 100644 lldb/test/Shell/Debuginfod/simple-stripped-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/simple-stripped-positive.test
create mode 100644 lldb/test/Shell/Debuginfod/tests.md
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 84ff4c2565a050..12541e929a12da 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -39,6 +39,7 @@
#include "lldb/Interpreter/OptionValueProperties.h"
#include "Plugins/ExpressionParser/Clang/ClangUtil.h"
+#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
#include "Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h"
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
#include "lldb/Symbol/Block.h"
@@ -4347,6 +4348,23 @@ SymbolFileDWARFDebugMap *SymbolFileDWARF::GetDebugMapSymfile() {
return m_debug_map_symfile;
}
+bool SymbolFileDWARF::IsDwpSymbolFile(const lldb::ModuleSP &module_sp,
+ const FileSpec &file_spec) {
+ DataBufferSP dwp_file_data_sp;
+ lldb::offset_t dwp_file_data_offset = 0;
+ // Try to create an ObjectFileELF frorm the filespace
+ ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
+ module_sp, &file_spec, 0, FileSystem::Instance().GetByteSize(file_spec),
+ dwp_file_data_sp, dwp_file_data_offset);
+ if (!ObjectFileELF::classof(dwp_obj_file.get()))
+ return false;
+ static ConstString sect_name_debug_cu_index(".debug_cu_index");
+ if (!dwp_obj_file || !dwp_obj_file->GetSectionList()->FindSectionByName(
+ sect_name_debug_cu_index))
+ return false;
+ return true;
+}
+
const std::shared_ptr<SymbolFileDWARFDwo> &SymbolFileDWARF::GetDwpSymbolFile() {
llvm::call_once(m_dwp_symfile_once_flag, [this]() {
// Create a list of files to try and append .dwp to.
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
index 2f8f80f8765cb8..7c59252f9cdbea 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
@@ -280,6 +280,9 @@ class SymbolFileDWARF : public SymbolFileCommon {
DWARFContext &GetDWARFContext() { return m_context; }
+ static bool IsDwpSymbolFile(const lldb::ModuleSP &module_sp,
+ const FileSpec &file_spec);
+
const std::shared_ptr<SymbolFileDWARFDwo> &GetDwpSymbolFile();
FileSpec GetFile(DWARFUnit &unit, size_t file_idx);
diff --git a/lldb/source/Plugins/SymbolLocator/CMakeLists.txt b/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
index ca969626f4ffc4..f536760d8feb0e 100644
--- a/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
+++ b/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
@@ -1,5 +1,10 @@
+# Order matters here, as the first symbol locator will prevent further
+# searching. For DWARF binaries that are both stripped & split, the Default
+# plugin will return the stripped binary when asked for the ObjectFile,
+# preventing an unstripped binary from being requested from the Debuginfod
+# provider
+add_subdirectory(Debuginfod)
add_subdirectory(Default)
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_subdirectory(DebugSymbols)
endif()
-add_subdirectory(Debuginfod)
diff --git a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
index 2cd7bbbb244902..81406654092b3c 100644
--- a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
+++ b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
@@ -96,13 +96,13 @@ class PluginProperties : public Properties {
Args m_server_urls;
};
-} // namespace
-
-static PluginProperties &GetGlobalPluginProperties() {
+PluginProperties &GetGlobalPluginProperties() {
static PluginProperties g_settings;
return g_settings;
}
+} // namespace
+
SymbolLocatorDebuginfod::SymbolLocatorDebuginfod() : SymbolLocator() {}
void SymbolLocatorDebuginfod::Initialize() {
diff --git a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
index b5fe35d71032a8..aeacf9c78ea70f 100644
--- a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
+++ b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
@@ -11,6 +11,7 @@
#include <cstring>
#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
+#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/ModuleSpec.h"
#include "lldb/Core/PluginManager.h"
@@ -87,8 +88,16 @@ SymbolVendorELF::CreateInstance(const lldb::ModuleSP &module_sp,
FileSpecList search_paths = Target::GetDefaultDebugFileSearchPaths();
FileSpec dsym_fspec =
PluginManager::LocateExecutableSymbolFile(module_spec, search_paths);
- if (!dsym_fspec)
- return nullptr;
+ if (!dsym_fspec ||
+ plugin::dwarf::SymbolFileDWARF::IsDwpSymbolFile(module_sp, dsym_fspec)) {
+ // If we have a stripped binary or if we got a DWP file, we should prefer
+ // symbols in the executable acquired through a plugin.
+ ModuleSpec unstripped_spec =
+ PluginManager::LocateExecutableObjectFile(module_spec);
+ if (!unstripped_spec)
+ return nullptr;
+ dsym_fspec = unstripped_spec.GetFileSpec();
+ }
DataBufferSP dsym_file_data_sp;
lldb::offset_t dsym_file_data_offset = 0;
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-dbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-dbg.yaml
new file mode 100644
index 00000000000000..1cc8bffc59ce3a
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-dbg.yaml
@@ -0,0 +1,211 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+ Entry: 0x401030
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x400000
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .text
+ LastSec: .text
+ VAddr: 0x401000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x402000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Align: 0x1000
+ Offset: 0x1FF8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x4001C8
+ Align: 0x4
+ Offset: 0x1C8
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Offset: 0x1FF8
+Sections:
+ - Name: .note.gnu.build-id
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4001C8
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: B4927EA09A08EE63313299CF347043010D03CC5E
+ Type: NT_PRPSINFO
+ - Name: .text
+ Type: SHT_NOBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x401000
+ AddressAlign: 0x10
+ Offset: 0x1000
+ Size: 0x64
+ - Name: .rodata
+ Type: SHT_NOBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ Address: 0x402000
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Size: 0x1
+ - Name: .eh_frame
+ Type: SHT_NOBITS
+ Flags: [ SHF_ALLOC ]
+ Address: 0x402008
+ AddressAlign: 0x8
+ Size: 0x54
+ - Name: .data.rel.ro
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x403FF8
+ AddressAlign: 0x8
+ Offset: 0x1FF8
+ Size: 0x8
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ - Name: .debug_info
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 9A000000050001080000000001001D0001080000000000000002016400000008000000022D000000004C02A1000339000000043D0000000100050306010604080707012800000001560500447E0000000802917C0800447E00000008029170090044820000000009023400000001560700480A02770809004C9100000000050605040B870000000B8C0000000C390000000387000000043D000000010000
+ - Name: .debug_abbrev
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 011101252513050325721710171B25111B12067317000002340049133A0B3B0B02180000030101491300000421004913370B000005240003253E0B0B0B000006240003250B0B3E0B0000072E01111B1206401803253A0B3B0B271949133F190000080500021803253A0B3B0B49130000092E01111B1206401803253A0B3B0B27193F1900000A3400021803253A0B3B0B491300000B0F00491300000C26004913000000
+ - Name: .debug_line
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ - Name: .debug_line_str
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 2F686F6D652F667265696B2F6C6C766D2D73616E642F6C6C766D2F6C6C64622F746573742F5368656C6C2F4465627567696E666F642F496E70757473006D61696E2E6300
+ - Name: .debug_str_offsets
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 2C00000005000000000000006B00000072000000AF000000B4000000C8000000CD000000D1000000D8000000DD000000
+Symbols:
+ - Name: .note.gnu.build-id
+ Type: STT_SECTION
+ Section: .note.gnu.build-id
+ Value: 0x4001C8
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x401000
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x402000
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x402008
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x403FF8
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .debug_info
+ Type: STT_SECTION
+ Section: .debug_info
+ - Name: .debug_abbrev
+ Type: STT_SECTION
+ Section: .debug_abbrev
+ - Name: .debug_line
+ Type: STT_SECTION
+ Section: .debug_line
+ - Name: .debug_str
+ Type: STT_SECTION
+ Section: .debug_str
+ - Name: .debug_addr
+ Type: STT_SECTION
+ Section: .debug_addr
+ - Name: .debug_line_str
+ Type: STT_SECTION
+ Section: .debug_line_str
+ - Name: .debug_str_offsets
+ Type: STT_SECTION
+ Section: .debug_str_offsets
+ - Name: main.c
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401030
+ Size: 0x34
+ - Name: __bss_start
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401000
+ Size: 0x28
+ - Name: _edata
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: _end
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+DWARF:
+ debug_str:
+ - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git 936cbb55363f8cc626d0a036fa840e87713572d9)'
+ - main.c
+ - '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
+ - char
+ - __ARRAY_SIZE_TYPE__
+ - func
+ - int
+ - _start
+ - argc
+ - argv
+ debug_addr:
+ - Length: 0x1C
+ Version: 0x5
+ AddressSize: 0x8
+ Entries:
+ - Address: 0x402000
+ - Address: 0x401000
+ - Address: 0x401030
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-dwp.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-dwp.yaml
new file mode 100644
index 00000000000000..60b086adf1d633
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-dwp.yaml
@@ -0,0 +1,50 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+ SectionHeaderStringTable: .strtab
+Sections:
+ - Name: .debug_abbrev.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE ]
+ AddressAlign: 0x1
+ Content: 0111012525130503257625000002340049133A0B3B0B02180000030101491300000421004913370B000005240003253E0B0B0B000006240003250B0B3E0B0000072E01111B1206401803253A0B3B0B271949133F190000080500021803253A0B3B0B49130000092E015523401803253A0B3B0B27193F1900000A3400021803253A0B3B0B491300000B0F00491300000C26004913000000
+ - Name: .debug_rnglists.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE ]
+ AddressAlign: 0x1
+ Content: '1000000005000800010000000400000004306400'
+ - Name: .debug_str.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 63686172005F5F41525241595F53495A455F545950455F5F0066756E6300696E74005F7374617274006172676300617267760046616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E676974203933366362623535333633663863633632366430613033366661383430653837373133353732643929006D61696E2E630067656E2F6D61696E2D73706C69742E64776F00
+ - Name: .debug_str_offsets.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE ]
+ AddressAlign: 0x1
+ Content: 2C000000050000000000000005000000190000001E00000022000000290000002E000000330000009E000000A5000000
+ - Name: .debug_info.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE ]
+ AddressAlign: 0x1
+ Content: 8D00000005000508000000008094E89A08DB62C101071D0008090224000000004C02A10003300000000434000000010005000601060108070701280000000156020044710000000802917C05004471000000080291700600447500000000090001560400480A02770806004C8400000000050305040B7A0000000B7F0000000C30000000037A0000000434000000010000
+ - Name: .debug_cu_index
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 050000000400000001000000020000008094E89A08DB62C100000000000000000100000000000000010000000300000006000000080000000000000000000000000000000000000091000000970000003000000014000000
+ - Type: SectionHeaderTable
+ Sections:
+ - Name: .strtab
+ - Name: .debug_abbrev.dwo
+ - Name: .debug_rnglists.dwo
+ - Name: .debug_str.dwo
+ - Name: .debug_str_offsets.dwo
+ - Name: .debug_info.dwo
+ - Name: .debug_cu_index
+ - Name: .symtab
+Symbols: []
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-full.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-full.yaml
new file mode 100644
index 00000000000000..bcaa7502895426
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-full.yaml
@@ -0,0 +1,212 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+ Entry: 0x401030
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x400000
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .text
+ LastSec: .text
+ VAddr: 0x401000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x402000
+ Align: 0x1000
+ Offset: 0x2000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Align: 0x1000
+ Offset: 0x2FF8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x4001C8
+ Align: 0x4
+ Offset: 0x1C8
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Offset: 0x2FF8
+Sections:
+ - Name: .note.gnu.build-id
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4001C8
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: B4927EA09A08EE63313299CF347043010D03CC5E
+ Type: NT_PRPSINFO
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x401000
+ AddressAlign: 0x10
+ Offset: 0x1000
+ Content: 554889E5897DFC488975F08B45FC83C001488B4DF0486355FC488B0CD10FBE0983C1020FAFC15DC30F1F840000000000554889E54883E4F04883EC10488B05B52F00004889442408488D74240831FFE8ACFFFFFF48C7C03C00000048C7C7000000000F05
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ Address: 0x402000
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Offset: 0x2000
+ Content: '00'
+ - Name: .eh_frame
+ Type: SHT_X86_64_UNWIND
+ Flags: [ SHF_ALLOC ]
+ Address: 0x402008
+ AddressAlign: 0x8
+ Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000D8EFFFFF2800000000410E108602430D06630C0708000000180000003C000000E8EFFFFF3400000000410E108602430D06000000
+ - Name: .data.rel.ro
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x403FF8
+ AddressAlign: 0x8
+ Offset: 0x2FF8
+ Content: '0020400000000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ - Name: .debug_info
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 9A000000050001080000000001001D0001080000000000000002016400000008000000022D000000004C02A1000339000000043D0000000100050306010604080707012800000001560500447E0000000802917C0800447E00000008029170090044820000000009023400000001560700480A02770809004C9100000000050605040B870000000B8C0000000C390000000387000000043D000000010000
+ - Name: .debug_abbrev
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 011101252513050325721710171B25111B12067317000002340049133A0B3B0B02180000030101491300000421004913370B000005240003253E0B0B0B000006240003250B0B3E0B0000072E01111B1206401803253A0B3B0B271949133F190000080500021803253A0B3B0B49130000092E01111B1206401803253A0B3B0B27193F1900000A3400021803253A0B3B0B491300000B0F00491300000C26004913000000
+ - Name: .debug_line
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ - Name: .debug_line_str
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 2F686F6D652F667265696B2F6C6C766D2D73616E642F6C6C766D2F6C6C64622F746573742F5368656C6C2F4465627567696E666F642F496E70757473006D61696E2E6300
+ - Name: .debug_str_offsets
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 2C00000005000000000000006B00000072000000AF000000B4000000C8000000CD000000D1000000D8000000DD000000
+Symbols:
+ - Name: .note.gnu.build-id
+ Type: STT_SECTION
+ Section: .note.gnu.build-id
+ Value: 0x4001C8
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x401000
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x402000
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x402008
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x403FF8
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .debug_info
+ Type: STT_SECTION
+ Section: .debug_info
+ - Name: .debug_abbrev
+ Type: STT_SECTION
+ Section: .debug_abbrev
+ - Name: .debug_line
+ Type: STT_SECTION
+ Section: .debug_line
+ - Name: .debug_str
+ Type: STT_SECTION
+ Section: .debug_str
+ - Name: .debug_addr
+ Type: STT_SECTION
+ Section: .debug_addr
+ - Name: .debug_line_str
+ Type: STT_SECTION
+ Section: .debug_line_str
+ - Name: .debug_str_offsets
+ Type: STT_SECTION
+ Section: .debug_str_offsets
+ - Name: main.c
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401030
+ Size: 0x34
+ - Name: __bss_start
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401000
+ Size: 0x28
+ - Name: _edata
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: _end
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+DWARF:
+ debug_str:
+ - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git 936cbb55363f8cc626d0a036fa840e87713572d9)'
+ - main.c
+ - '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
+ - char
+ - __ARRAY_SIZE_TYPE__
+ - func
+ - int
+ - _start
+ - argc
+ - argv
+ debug_addr:
+ - Length: 0x1C
+ Version: 0x5
+ AddressSize: 0x8
+ Entries:
+ - Address: 0x402000
+ - Address: 0x401000
+ - Address: 0x401030
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml
new file mode 100644
index 00000000000000..a4465d75fa6daf
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml
@@ -0,0 +1,146 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+ Entry: 0x401030
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x400000
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .text
+ LastSec: .text
+ VAddr: 0x401000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x402000
+ Align: 0x1000
+ Offset: 0x2000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Align: 0x1000
+ Offset: 0x2FF8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x4001C8
+ Align: 0x4
+ Offset: 0x1C8
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Offset: 0x2FF8
+Sections:
+ - Name: .note.gnu.build-id
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4001C8
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: B4927EA09A08EE63313299CF347043010D03CC5E
+ Type: NT_PRPSINFO
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x401000
+ AddressAlign: 0x10
+ Offset: 0x1000
+ Content: 554889E5897DFC488975F08B45FC83C001488B4DF0486355FC488B0CD10FBE0983C1020FAFC15DC30F1F840000000000554889E54883E4F04883EC10488B05B52F00004889442408488D74240831FFE8ACFFFFFF48C7C03C00000048C7C7000000000F05
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ Address: 0x402000
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Offset: 0x2000
+ Content: '00'
+ - Name: .eh_frame
+ Type: SHT_X86_64_UNWIND
+ Flags: [ SHF_ALLOC ]
+ Address: 0x402008
+ AddressAlign: 0x8
+ Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000D8EFFFFF2800000000410E108602430D06630C0708000000180000003C000000E8EFFFFF3400000000410E108602430D06000000
+ - Name: .data.rel.ro
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x403FF8
+ AddressAlign: 0x8
+ Offset: 0x2FF8
+ Content: '0020400000000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+Symbols:
+ - Name: .note.gnu.build-id
+ Type: STT_SECTION
+ Section: .note.gnu.build-id
+ Value: 0x4001C8
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x401000
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x402000
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x402008
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x403FF8
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401030
+ Size: 0x34
+ - Name: __bss_start
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401000
+ Size: 0x28
+ - Name: _edata
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: _end
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-split-dbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-split-dbg.yaml
new file mode 100644
index 00000000000000..34d157b66c6b79
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-split-dbg.yaml
@@ -0,0 +1,216 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+ Entry: 0x401030
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x400000
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .text
+ LastSec: .text
+ VAddr: 0x401000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x402000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Align: 0x1000
+ Offset: 0x1FF8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x4001C8
+ Align: 0x4
+ Offset: 0x1C8
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Offset: 0x1FF8
+Sections:
+ - Name: .note.gnu.build-id
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4001C8
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: 8B5B6416F61ADC140AE457E208F1699F89BFDA86
+ Type: NT_PRPSINFO
+ - Name: .text
+ Type: SHT_NOBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x401000
+ AddressAlign: 0x10
+ Offset: 0x1000
+ Size: 0x64
+ - Name: .rodata
+ Type: SHT_NOBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ Address: 0x402000
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Size: 0x1
+ - Name: .eh_frame
+ Type: SHT_NOBITS
+ Flags: [ SHF_ALLOC ]
+ Address: 0x402008
+ AddressAlign: 0x8
+ Size: 0x54
+ - Name: .data.rel.ro
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x403FF8
+ AddressAlign: 0x8
+ Offset: 0x1FF8
+ Size: 0x8
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ - Name: .debug_info
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 2400000005000408000000008094E89A08DB62C10100000000080000000001016400000008000000
+ - Name: .debug_abbrev
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 014A00101772171B25B442197625111B12067317000000
+ - Name: .debug_line
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ - Name: .debug_line_str
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 2F686F6D652F667265696B2F6C6C766D2D73616E642F6C6C766D2F6C6C64622F746573742F5368656C6C2F4465627567696E666F642F496E70757473006D61696E2E6300
+ - Name: .debug_str_offsets
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 0C00000005000000000000003D000000
+ - Name: .debug_gnu_pubnames
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 2A000000020000000000280000001A000000A000380000003066756E63005E000000305F73746172740000000000
+ - Name: .debug_gnu_pubtypes
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: '2100000002000000000028000000300000009063686172007100000090696E740000000000'
+Symbols:
+ - Name: .note.gnu.build-id
+ Type: STT_SECTION
+ Section: .note.gnu.build-id
+ Value: 0x4001C8
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x401000
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x402000
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x402008
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x403FF8
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .debug_info
+ Type: STT_SECTION
+ Section: .debug_info
+ - Name: .debug_abbrev
+ Type: STT_SECTION
+ Section: .debug_abbrev
+ - Name: .debug_line
+ Type: STT_SECTION
+ Section: .debug_line
+ - Name: .debug_str
+ Type: STT_SECTION
+ Section: .debug_str
+ - Name: .debug_addr
+ Type: STT_SECTION
+ Section: .debug_addr
+ - Name: .debug_line_str
+ Type: STT_SECTION
+ Section: .debug_line_str
+ - Name: .debug_str_offsets
+ Type: STT_SECTION
+ Section: .debug_str_offsets
+ - Name: .debug_gnu_pubnames
+ Type: STT_SECTION
+ Section: .debug_gnu_pubnames
+ - Name: .debug_gnu_pubtypes
+ Type: STT_SECTION
+ Section: .debug_gnu_pubtypes
+ - Name: main.c
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401030
+ Size: 0x34
+ - Name: __bss_start
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401000
+ Size: 0x28
+ - Name: _edata
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: _end
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+DWARF:
+ debug_str:
+ - '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
+ - 'gen/main-split.dwo'
+ debug_addr:
+ - Length: 0x14
+ Version: 0x5
+ AddressSize: 0x8
+ Entries:
+ - Address: 0x402000
+ - Address: 0x401000
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-split-nodbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-split-nodbg.yaml
new file mode 100644
index 00000000000000..11798976f5c15a
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-split-nodbg.yaml
@@ -0,0 +1,146 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+ Entry: 0x401030
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x400000
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .text
+ LastSec: .text
+ VAddr: 0x401000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x402000
+ Align: 0x1000
+ Offset: 0x2000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Align: 0x1000
+ Offset: 0x2FF8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x4001C8
+ Align: 0x4
+ Offset: 0x1C8
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Offset: 0x2FF8
+Sections:
+ - Name: .note.gnu.build-id
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4001C8
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: 8B5B6416F61ADC140AE457E208F1699F89BFDA86
+ Type: NT_PRPSINFO
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x401000
+ AddressAlign: 0x10
+ Offset: 0x1000
+ Content: 554889E5897DFC488975F08B45FC83C001488B4DF0486355FC488B0CD10FBE0983C1020FAFC15DC30F1F840000000000554889E54883E4F04883EC10488B05B52F00004889442408488D74240831FFE8ACFFFFFF48C7C03C00000048C7C7000000000F05
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ Address: 0x402000
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Offset: 0x2000
+ Content: '00'
+ - Name: .eh_frame
+ Type: SHT_X86_64_UNWIND
+ Flags: [ SHF_ALLOC ]
+ Address: 0x402008
+ AddressAlign: 0x8
+ Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000D8EFFFFF2800000000410E108602430D06630C0708000000180000003C000000E8EFFFFF3400000000410E108602430D06000000
+ - Name: .data.rel.ro
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x403FF8
+ AddressAlign: 0x8
+ Offset: 0x2FF8
+ Content: '0020400000000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+Symbols:
+ - Name: .note.gnu.build-id
+ Type: STT_SECTION
+ Section: .note.gnu.build-id
+ Value: 0x4001C8
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x401000
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x402000
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x402008
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x403FF8
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401030
+ Size: 0x34
+ - Name: __bss_start
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401000
+ Size: 0x28
+ - Name: _edata
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: _end
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-split.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-split.yaml
new file mode 100644
index 00000000000000..e03ff90187f40d
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-split.yaml
@@ -0,0 +1,217 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+ Entry: 0x401030
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x400000
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .text
+ LastSec: .text
+ VAddr: 0x401000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x402000
+ Align: 0x1000
+ Offset: 0x2000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Align: 0x1000
+ Offset: 0x2FF8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x4001C8
+ Align: 0x4
+ Offset: 0x1C8
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Offset: 0x2FF8
+Sections:
+ - Name: .note.gnu.build-id
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4001C8
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: 8B5B6416F61ADC140AE457E208F1699F89BFDA86
+ Type: NT_PRPSINFO
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x401000
+ AddressAlign: 0x10
+ Offset: 0x1000
+ Content: 554889E5897DFC488975F08B45FC83C001488B4DF0486355FC488B0CD10FBE0983C1020FAFC15DC30F1F840000000000554889E54883E4F04883EC10488B05B52F00004889442408488D74240831FFE8ACFFFFFF48C7C03C00000048C7C7000000000F05
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ Address: 0x402000
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Offset: 0x2000
+ Content: '00'
+ - Name: .eh_frame
+ Type: SHT_X86_64_UNWIND
+ Flags: [ SHF_ALLOC ]
+ Address: 0x402008
+ AddressAlign: 0x8
+ Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000D8EFFFFF2800000000410E108602430D06630C0708000000180000003C000000E8EFFFFF3400000000410E108602430D06000000
+ - Name: .data.rel.ro
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x403FF8
+ AddressAlign: 0x8
+ Offset: 0x2FF8
+ Content: '0020400000000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ - Name: .debug_info
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 2400000005000408000000008094E89A08DB62C10100000000080000000001016400000008000000
+ - Name: .debug_abbrev
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 014A00101772171B25B442197625111B12067317000000
+ - Name: .debug_line
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ - Name: .debug_line_str
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 2F686F6D652F667265696B2F6C6C766D2D73616E642F6C6C766D2F6C6C64622F746573742F5368656C6C2F4465627567696E666F642F496E70757473006D61696E2E6300
+ - Name: .debug_str_offsets
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 0C00000005000000000000003D000000
+ - Name: .debug_gnu_pubnames
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 2A000000020000000000280000001A000000A000380000003066756E63005E000000305F73746172740000000000
+ - Name: .debug_gnu_pubtypes
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: '2100000002000000000028000000300000009063686172007100000090696E740000000000'
+Symbols:
+ - Name: .note.gnu.build-id
+ Type: STT_SECTION
+ Section: .note.gnu.build-id
+ Value: 0x4001C8
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x401000
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x402000
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x402008
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x403FF8
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .debug_info
+ Type: STT_SECTION
+ Section: .debug_info
+ - Name: .debug_abbrev
+ Type: STT_SECTION
+ Section: .debug_abbrev
+ - Name: .debug_line
+ Type: STT_SECTION
+ Section: .debug_line
+ - Name: .debug_str
+ Type: STT_SECTION
+ Section: .debug_str
+ - Name: .debug_addr
+ Type: STT_SECTION
+ Section: .debug_addr
+ - Name: .debug_line_str
+ Type: STT_SECTION
+ Section: .debug_line_str
+ - Name: .debug_str_offsets
+ Type: STT_SECTION
+ Section: .debug_str_offsets
+ - Name: .debug_gnu_pubnames
+ Type: STT_SECTION
+ Section: .debug_gnu_pubnames
+ - Name: .debug_gnu_pubtypes
+ Type: STT_SECTION
+ Section: .debug_gnu_pubtypes
+ - Name: main.c
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401030
+ Size: 0x34
+ - Name: __bss_start
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401000
+ Size: 0x28
+ - Name: _edata
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: _end
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+DWARF:
+ debug_str:
+ - '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
+ - 'gen/main-split.dwo'
+ debug_addr:
+ - Length: 0x14
+ Version: 0x5
+ AddressSize: 0x8
+ Entries:
+ - Address: 0x402000
+ - Address: 0x401000
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-stripped.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-stripped.yaml
new file mode 100644
index 00000000000000..a4465d75fa6daf
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main-stripped.yaml
@@ -0,0 +1,146 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+ Entry: 0x401030
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x400000
+ Align: 0x1000
+ Offset: 0x0
+ - Type: PT_LOAD
+ Flags: [ PF_X, PF_R ]
+ FirstSec: .text
+ LastSec: .text
+ VAddr: 0x401000
+ Align: 0x1000
+ Offset: 0x1000
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+ FirstSec: .rodata
+ LastSec: .eh_frame
+ VAddr: 0x402000
+ Align: 0x1000
+ Offset: 0x2000
+ - Type: PT_LOAD
+ Flags: [ PF_W, PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Align: 0x1000
+ Offset: 0x2FF8
+ - Type: PT_NOTE
+ Flags: [ PF_R ]
+ FirstSec: .note.gnu.build-id
+ LastSec: .note.gnu.build-id
+ VAddr: 0x4001C8
+ Align: 0x4
+ Offset: 0x1C8
+ - Type: PT_GNU_STACK
+ Flags: [ PF_W, PF_R ]
+ Align: 0x10
+ Offset: 0x0
+ - Type: PT_GNU_RELRO
+ Flags: [ PF_R ]
+ FirstSec: .data.rel.ro
+ LastSec: .data.rel.ro
+ VAddr: 0x403FF8
+ Offset: 0x2FF8
+Sections:
+ - Name: .note.gnu.build-id
+ Type: SHT_NOTE
+ Flags: [ SHF_ALLOC ]
+ Address: 0x4001C8
+ AddressAlign: 0x4
+ Notes:
+ - Name: GNU
+ Desc: B4927EA09A08EE63313299CF347043010D03CC5E
+ Type: NT_PRPSINFO
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Address: 0x401000
+ AddressAlign: 0x10
+ Offset: 0x1000
+ Content: 554889E5897DFC488975F08B45FC83C001488B4DF0486355FC488B0CD10FBE0983C1020FAFC15DC30F1F840000000000554889E54883E4F04883EC10488B05B52F00004889442408488D74240831FFE8ACFFFFFF48C7C03C00000048C7C7000000000F05
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ Address: 0x402000
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Offset: 0x2000
+ Content: '00'
+ - Name: .eh_frame
+ Type: SHT_X86_64_UNWIND
+ Flags: [ SHF_ALLOC ]
+ Address: 0x402008
+ AddressAlign: 0x8
+ Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000D8EFFFFF2800000000410E108602430D06630C0708000000180000003C000000E8EFFFFF3400000000410E108602430D06000000
+ - Name: .data.rel.ro
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ Address: 0x403FF8
+ AddressAlign: 0x8
+ Offset: 0x2FF8
+ Content: '0020400000000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+Symbols:
+ - Name: .note.gnu.build-id
+ Type: STT_SECTION
+ Section: .note.gnu.build-id
+ Value: 0x4001C8
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x401000
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Value: 0x402000
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x402008
+ - Name: .data.rel.ro
+ Type: STT_SECTION
+ Section: .data.rel.ro
+ Value: 0x403FF8
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401030
+ Size: 0x34
+ - Name: __bss_start
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x401000
+ Size: 0x28
+ - Name: _edata
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+ - Name: _end
+ Section: .data.rel.ro
+ Binding: STB_GLOBAL
+ Value: 0x404000
+...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main.c b/lldb/test/Shell/Debuginfod/Inputs/main.c
new file mode 100644
index 00000000000000..661e5771fcbeeb
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/main.c
@@ -0,0 +1,82 @@
+/*
+
+script to (re)create the .yaml files:
+---------------------------------------------------------------------------
+#!/bin/sh
+
+# I need 4 different scenarios:
+# 1 - A stripped binary with it's corresponding unstripped binary:
+# 2 - A stripped binary with a corresponding -only-keep-debug symbols file
+# 3 - A split binary with it's corresponding DWP file
+# 4 - A stripped, split binary with an unstripped binary and a DWP file
+
+# Note: gnu-debuglink has to be added from the yaml2obj output,
+# as the CRC's are slightly different from the original binary
+
+mkdir -p gen
+mkdir -p run
+
+# First, compile & link the binary itself
+${builddir}/bin/clang -g -o gen/main-full.o -O0 -c main.c
+ld -nostdlib gen/main-full.o --build-id=sha1 -o gen/main-full
+${builddir}/bin/clang -g -gsplit-dwarf -o gen/main-split.o -O0 -c main.c
+ld -nostdlib gen/main-split.o --build-id=sha1 -o gen/main-split
+${builddir}/bin/llvm-dwp -e gen/main-split -o gen/main-split.dwp
+
+# Scenario 1: main-strip -> main-full (both executable and debuginfo)
+${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-stripped
+${builddir}/bin/obj2yaml gen/main-full > main-full.yaml
+${builddir}/bin/obj2yaml gen/main-stripped > main-stripped.yaml
+${builddir}/bin/yaml2obj main-full.yaml > run/main-full
+${builddir}/bin/yaml2obj main-stripped.yaml > run/main-stripped
+
+# Scenario 2: main-nodbg -> main-dbg (debuginfo)
+${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-full gen/main-dbg
+${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-nodbg
+${builddir}/bin/obj2yaml gen/main-nodbg > main-nodbg.yaml
+${builddir}/bin/obj2yaml gen/main-dbg > main-dbg.yaml
+${builddir}/bin/yaml2obj main-nodbg.yaml > gen/main-nodbg.tmp
+${builddir}/bin/yaml2obj main-dbg.yaml > run/main-dbg
+${builddir}/bin/llvm-objcopy gen/main-nodbg.tmp --add-gnu-debuglink=run/main-dbg run/main-nodbg
+
+# Scenario 3: main-split, main-split.dwp (debuginfo)
+${builddir}/bin/obj2yaml gen/main-split > main-split.yaml
+${builddir}/bin/obj2yaml gen/main-split.dwp > main-dwp.yaml
+${builddir}/bin/yaml2obj main-split.yaml > run/main-split
+${builddir}/bin/yaml2obj main-dwp.yaml > run/main-split.dwp
+
+# Scenario 4: main-split-nodbg, main-split-dbg (executable), main-split.dwp (debuginfo)
+${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-split gen/main-split-dbg
+${builddir}/bin/llvm-objcopy --strip-debug gen/main-split gen/main-split-nodbg
+${builddir}/bin/obj2yaml gen/main-split-nodbg > main-split-nodbg.yaml
+${builddir}/bin/obj2yaml gen/main-split-dbg > main-split-dbg.yaml
+${builddir}/bin/yaml2obj main-split-nodbg.yaml > gen/main-split-nodbg.tmp
+${builddir}/bin/yaml2obj main-split-dbg.yaml > run/main-split-dbg
+${builddir}/bin/llvm-objcopy gen/main-split-nodbg.tmp --add-gnu-debuglink=run/main-split-dbg run/main-split-nodbg
+# the main-dwp.yaml should be the same for both Scenario 3 and 4
+
+chmod a+x 'run/'*
+
+---------------------------------------------------------------------------
+You need to re-generate the gnu-debuglinks after the yaml2obj step (in the test)
+
+You can find the build id's in the yaml files under "NT_PRPSINFO" from the YAML files
+(grep for 'Desc')
+
+*/
+
+int func(int argc, const char **argv) {
+ return (argc + 1) * (argv[argc][0] + 2);
+}
+
+__attribute__((force_align_arg_pointer)) void _start(void) {
+
+ /* main body of program: call main(), etc */
+
+ const char *argv[] = {""};
+ func(0, argv);
+
+ /* exit system call */
+ asm("mov $60,%rax; mov $0,%rdi; syscall");
+ __builtin_unreachable(); // tell the compiler to make sure side effects are done before the asm statement
+}
diff --git a/lldb/test/Shell/Debuginfod/Inputs/mk b/lldb/test/Shell/Debuginfod/Inputs/mk
new file mode 100755
index 00000000000000..a66f4a641b4275
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/Inputs/mk
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+# I need 4 different scenarios:
+# 1 - A stripped binary with it's corresponding unstripped binary:
+# 2 - A stripped binary with a corresponding -only-keep-debug symbols file
+# 3 - A split binary with it's corresponding DWP file
+# 4 - A stripped, split binary with an unstripped binary and a DWP file
+
+mkdir -p gen
+mkdir -p run
+
+# First, compile & link the binary itself
+${builddir}/bin/clang -g -o gen/main-full.o -O0 -c main.c
+ld -nostdlib gen/main-full.o --build-id=sha1 -o gen/main-full
+${builddir}/bin/clang -g -gsplit-dwarf -o gen/main-split.o -O0 -c main.c
+ld -nostdlib gen/main-split.o --build-id=sha1 -o gen/main-split
+${builddir}/bin/llvm-dwp -e gen/main-split -o gen/main-split.dwp
+
+# Scenario 1: main-strip -> main-full (both executable and debuginfo)
+${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-stripped
+${builddir}/bin/obj2yaml gen/main-full > main-full.yaml
+${builddir}/bin/obj2yaml gen/main-stripped > main-stripped.yaml
+# MAKE: ${builddir}/bin/yaml2obj main-full.yaml > run/main-full
+# MAKE: ${builddir}/bin/yaml2obj main-stripped.yaml > run/main-stripped
+
+# Scenario 2: main-nodbg -> main-dbg (debuginfo)
+${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-full gen/main-dbg
+${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-nodbg
+${builddir}/bin/obj2yaml gen/main-nodbg > main-nodbg.yaml
+${builddir}/bin/obj2yaml gen/main-dbg > main-dbg.yaml
+# MAKE: ${builddir}/bin/yaml2obj main-nodbg.yaml > gen/main-nodbg.tmp
+# MAKE: ${builddir}/bin/yaml2obj main-dbg.yaml > run/main-dbg
+# MAKE: ${builddir}/bin/llvm-objcopy gen/main-nodbg.tmp --add-gnu-debuglink=run/main-dbg run/main-nodbg
+
+# Scenario 3: main-split, main-split.dwp (debuginfo)
+${builddir}/bin/obj2yaml gen/main-split > main-split.yaml
+${builddir}/bin/obj2yaml gen/main-split.dwp > main-dwp.yaml
+# MAKE: ${builddir}/bin/yaml2obj main-split.yaml > run/main-split
+# MAKE: ${builddir}/bin/yaml2obj main-dwp.yaml > run/main-split.dwp
+
+# Scenario 4: main-split-nodbg, main-split-dbg (executable), main-split.dwp (debuginfo)
+${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-split gen/main-split-dbg
+${builddir}/bin/llvm-objcopy --strip-debug gen/main-split gen/main-split-nodbg
+${builddir}/bin/obj2yaml gen/main-split-nodbg > main-split-nodbg.yaml
+${builddir}/bin/obj2yaml gen/main-split-dbg > main-split-dbg.yaml
+# MAKE: ${builddir}/bin/yaml2obj main-split-nodbg.yaml > gen/main-split-nodbg.tmp
+# MAKE: ${builddir}/bin/yaml2obj main-split-dbg.yaml > run/main-split-dbg
+# MAKE: ${builddir}/bin/llvm-objcopy gen/main-split-nodbg.tmp --add-gnu-debuglink=run/main-split-dbg run/main-split-nodbg
+# the main-dwp.yaml should be the same, I believe
+
+# MAKE: chmod a+x run/*
diff --git a/lldb/test/Shell/Debuginfod/okd-split-negative.test b/lldb/test/Shell/Debuginfod/okd-split-negative.test
new file mode 100644
index 00000000000000..5d5ed250c4cc1d
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okd-split-negative.test
@@ -0,0 +1,31 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
+
+# Scenario 4
+# A stripped binary/split-dwarf combination
+# LLDB should ask Debuginfod for both it's executable AND it's symbols
+
+# RUN: yaml2obj %p/Inputs/main-split-nodbg.yaml -o %t/tmpstuff/main-split-nodbg.tmp
+# RUN: yaml2obj %p/Inputs/main-split-dbg.yaml -o %t/tmpstuff/main-split-dbg
+# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
+# RUN: llvm-objcopy %t/tmpstuff/main-split-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-split-dbg %t/output/main-split-nodbg
+# RUN: mv %t/tmpstuff/main-split-dbg %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/executable
+# RUN: chmod a+x %t/output/main-split-nodbg
+
+# Verify that we -don't- find symbols when not using the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/main-split-nodbg" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should NOT have source file information:
+# CHECK: Breakpoint 1: where = main-split-nodbg`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okd-split-positive.test b/lldb/test/Shell/Debuginfod/okd-split-positive.test
new file mode 100644
index 00000000000000..3a3f20a5c82c4b
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okd-split-positive.test
@@ -0,0 +1,40 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
+
+# Scenario 4
+# A stripped binary/split-dwarf combination
+# LLDB should ask Debuginfod for both it's executable AND it's symbols
+
+# RUN: yaml2obj %p/Inputs/main-split-nodbg.yaml -o %t/tmpstuff/main-split-nodbg.tmp
+# RUN: yaml2obj %p/Inputs/main-split-dbg.yaml -o %t/tmpstuff/main-split-dbg
+# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
+# RUN: llvm-objcopy %t/tmpstuff/main-split-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-split-dbg %t/output/main-split-nodbg
+# RUN: mv %t/tmpstuff/main-split-dbg %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/executable
+# RUN: chmod a+x %t/output/main-split-nodbg
+
+# Verify that we find symbols from the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/main-split-nodbg" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "b main.c:69" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should have source file information:
+# CHECK: Symbol file: {{.*}}/main-split-nodbg
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK-NEXT: {{^[- ]+$}}
+# CHECK-NEXT: 0x{{[0-9a-f]+.*}} {{.*}}/cache/llvmcache-9657596136574283768
+# CHECK: Breakpoint 1: address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okd-stripped-negative.test b/lldb/test/Shell/Debuginfod/okd-stripped-negative.test
new file mode 100644
index 00000000000000..f110db39c11ae7
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okd-stripped-negative.test
@@ -0,0 +1,32 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
+
+# Scenario 2
+# A stripped binary, with an "-only-keep-debug" symbols file
+# Debuginfo has the 'okd' file as the 'debuginfo' item
+# LLDB should ask Debuginfod for it's symbols
+
+# RUN: yaml2obj %p/Inputs/main-nodbg.yaml -o %t/tmpstuff/main-nodbg.tmp
+# RUN: yaml2obj %p/Inputs/main-dbg.yaml -o %t/tmpstuff/main-dbg
+# RUN: llvm-objcopy %t/tmpstuff/main-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-dbg %t/output/main-nodbg
+# RUN: mv %t/tmpstuff/main-dbg %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/debuginfo
+# RUN: chmod a+x %t/output/main-nodbg
+
+# Negative test (We don't find symbols without the Debuginfod service)
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/main-nodbg" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should NOT have source file information:
+
+# CHECK: Breakpoint 1: where = main-nodbg`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okd-stripped-positive.test b/lldb/test/Shell/Debuginfod/okd-stripped-positive.test
new file mode 100644
index 00000000000000..67d55a16041d34
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okd-stripped-positive.test
@@ -0,0 +1,35 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
+
+# Scenario 2
+# A stripped binary, with an "-only-keep-debug" symbols file
+# Debuginfo has the 'okd' file as the 'debuginfo' item
+# LLDB should ask Debuginfod for it's symbols
+
+# RUN: yaml2obj %p/Inputs/main-nodbg.yaml -o %t/tmpstuff/main-nodbg.tmp
+# RUN: yaml2obj %p/Inputs/main-dbg.yaml -o %t/tmpstuff/main-dbg
+# RUN: llvm-objcopy %t/tmpstuff/main-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-dbg %t/output/main-nodbg
+# RUN: mv %t/tmpstuff/main-dbg %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/debuginfo
+# RUN: chmod a+x %t/output/main-nodbg
+
+# Verify that we find symbols from the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/main-nodbg" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should have source file information:
+
+# CHECK: Breakpoint 1: where = main-nodbg`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/simple-dwp-negative.test b/lldb/test/Shell/Debuginfod/simple-dwp-negative.test
new file mode 100644
index 00000000000000..e1018a1181c241
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/simple-dwp-negative.test
@@ -0,0 +1,32 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
+
+# Scenario 2
+# A stripped binary, with an "-only-keep-debug" symbols file
+# Debuginfo has the 'okd' file as the 'debuginfo' item
+# LLDB should ask Debuginfod for it's symbols
+
+# RUN: yaml2obj %p/Inputs/main-split.yaml -o %t/output/main-split
+# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
+# RUN: chmod a+x %t/output/main-split
+
+# Negative test (We don't find symbols without the Debuginfod service)
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/main-split" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/main-split
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK-NEXT: {{^[- ]+$}}
+# CHECK-NEXT: 0x{{[0-9a-f]+.*}} unable to locate .dwo debug file {{.*}}main-split.dwo{{.*}} for skeleton DIE 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/simple-dwp-positive.test b/lldb/test/Shell/Debuginfod/simple-dwp-positive.test
new file mode 100644
index 00000000000000..acb647e83e008f
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/simple-dwp-positive.test
@@ -0,0 +1,37 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
+
+# Scenario 2
+# A stripped binary, with an "-only-keep-debug" symbols file
+# Debuginfo has the 'okd' file as the 'debuginfo' item
+# LLDB should ask Debuginfod for it's symbols
+
+# RUN: yaml2obj %p/Inputs/main-split.yaml -o %t/output/main-split
+# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
+# RUN: chmod a+x %t/output/main-split
+
+# Positive test: We find the DWP file with the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/main-split" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/main-split
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK-NEXT: {{^[- ]+$}}
+# The cache key is stable, so we can mandate that we discover this thing from the cache
+# It's an implementation detail, so it could potentially change, but the ensures that
+# CHECK-NEXT: 0x{{[0-9a-f]+.*}} {{.*}}/cache/llvmcache-9657596136574283768
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-negative.test b/lldb/test/Shell/Debuginfod/simple-stripped-negative.test
new file mode 100644
index 00000000000000..62c7832da8fb36
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/simple-stripped-negative.test
@@ -0,0 +1,32 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
+
+# Scenario 1
+# A simple stripped binary
+# Debuginfod has the unstripped binary as the 'executable'
+# LLDB should ask Debuginfod for it's unstripped binary
+
+# Put the unstripped binary in the Debuginfod server as 'executable'
+
+# RUN: yaml2obj %p/Inputs/main-full.yaml -o %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/executable
+# RUN: yaml2obj %p/Inputs/main-stripped.yaml -o %t/output/main-stripped
+# RUN: chmod a+x %t/output/main-stripped
+
+# Run a negative test (make sure we don't have symbols)
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/main-stripped" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should NOT have source file information:
+
+# CHECK: Breakpoint 1: where = main-stripped`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-positive.test b/lldb/test/Shell/Debuginfod/simple-stripped-positive.test
new file mode 100644
index 00000000000000..78671b6eb463aa
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/simple-stripped-positive.test
@@ -0,0 +1,38 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/tmpstuff
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
+
+# Scenario 1
+# A simple stripped binary
+# Debuginfod has the unstripped binary as the 'executable'
+# LLDB should ask Debuginfod for it's unstripped binary
+
+# Put the unstripped binary in the Debuginfod server as 'executable'
+
+# RUN: yaml2obj %p/Inputs/main-full.yaml -o %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/executable
+# RUN: yaml2obj %p/Inputs/main-stripped.yaml -o %t/output/main-stripped
+# RUN: chmod a+x %t/output/main-stripped
+
+# First, run a negative test (make sure we don't have symbols)
+
+# Scenario 1, postive test: Can we pull the executable
+# from Debuginfod and get a breakpoint set properly?
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/main-stripped" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should have source file info:
+
+# CHECK: Breakpoint 1: where = main-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/tests.md b/lldb/test/Shell/Debuginfod/tests.md
new file mode 100644
index 00000000000000..7fe3e9e68d4ed3
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/tests.md
@@ -0,0 +1,61 @@
+# Tests for basic Debuginfod functionality
+
+Because the Debuginfod protocol is a simple HTTP path-based system, one can
+mimic a Debuginfod server by setting up a directory structure to reflect the
+protocol properly. That's how all these tests operate. We override the default
+`DEBUGINFOD_URLS` property with a `file://` URL and populate it with the symbol
+files we need for testing.
+
+## Baseline capabilities
+
+Things to test:
+
+- Just for sanity, the `-no-locator` tests validate that lldb works as the test
+ expects if the files that Debuginfod _should_ provide are already there.
+- Validate that symbols _aren't_ found without Debuginfod, to ensure they
+ weren't cached from previous runs (`-negative` tests).
+- Validate that the Debuginfod symbol locator is providing the expected symbols
+ when the debugger doesn't already have them available.
+
+## Symbol "Configurations" to test
+
+There are 2 top level configurations, each of which then get some post-processing.
+- The 'normal' build: a simple binary built with debug information (`-g`)
+- The 'split' build: A binary built with `-gsplit-dwarf` that produces `.dwo` and `.dwp` files
+
+For the normal build there are 2 post-processing steps where Debuginfod may be used.
+- Strip the binary while hosting the full, unstripped binary on a Debuginfod server.
+- Strip the binary and produce a corresponding 'only-keep-debug' version of the binary to host on a Debuginfod server.
+
+For the split build, there are *3* post-processing outcomes where Debuginfod usage makes sense:
+- Stripped binary, hosting the full unstripped binary on a Debuginfod server, along with it's `.dwp` file.
+- Stripped binary, hosting the 'only-keep-debug' version of the binary *and* it's `.dwp` file.
+- Unstripped binary, hosting only the `.dwp` file on the Debuginfod server.
+
+For both normal and split builds, when using an 'only-keep-debug' symbol file, the original file
+also requires the addition of the `.gnu.debuglink` section (which can be added using `objcopy`)
+
+### Troubles
+
+The Debuginfod protocol is somewhat underspecified regarding what the 2 different callbacks actually return. The protocol itself is quite simple: query an HTTP server with the path `buildid/{.note.gnu.build-id hash}/debuginfo` and `buildid/{.note.gnu.build-id hash}/executable`. A keen reader may note that there's one configuration (split, only-keep-debug) where you need two different files to properly symbolicate, but the API only supports a single debuginfo file. For that scenario, I've chosen to simply treat the `.dwp` file as "debuginfo" and the "only-keep-debug" stripped binary as "executable". This scenario doesn't actually work at all in GDB. It seems more straightforward than trying to extend the protocol.
+
+### Stripped:
+
+- Should ask for symbols from the service; can be registered as 'executable' and
+ they should work!
+
+### Stripped "only-keep-debug":
+
+- Should get them from the debuginfo, not from the executable query
+
+### split-dwarf:
+
+- Should get dwp file from debuginfo
+
+### split-dwarf + stripped:
+
+- Should get dwp from debuginfo, and the unstripped binary from executable
+
+
+image
+lldb.target.ResolveLoadAddress
diff --git a/llvm/lib/Debuginfod/Debuginfod.cpp b/llvm/lib/Debuginfod/Debuginfod.cpp
index 066f0c27bb9ffb..1dee5f343cf6ba 100644
--- a/llvm/lib/Debuginfod/Debuginfod.cpp
+++ b/llvm/lib/Debuginfod/Debuginfod.cpp
@@ -252,27 +252,54 @@ static SmallVector<std::string, 0> getHeaders() {
return Headers;
}
-Expected<std::string> getCachedOrDownloadArtifact(
- StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath,
- ArrayRef<StringRef> DebuginfodUrls, std::chrono::milliseconds Timeout) {
+static SmallString<64> getCachedArtifactPath(StringRef UniqueKey,
+ StringRef CacheDirectoryPath) {
SmallString<64> AbsCachedArtifactPath;
sys::path::append(AbsCachedArtifactPath, CacheDirectoryPath,
"llvmcache-" + UniqueKey);
+ return AbsCachedArtifactPath;
+}
+
+static Expected<AddStreamFn>
+getCachedArtifactHelper(StringRef UniqueKey, StringRef CacheDirectoryPath,
+ unsigned &Task) {
+ SmallString<64> AbsCachedArtifactPath =
+ getCachedArtifactPath(UniqueKey, CacheDirectoryPath);
Expected<FileCache> CacheOrErr =
localCache("Debuginfod-client", ".debuginfod-client", CacheDirectoryPath);
if (!CacheOrErr)
return CacheOrErr.takeError();
+ return (*CacheOrErr)(Task, UniqueKey, "");
+}
+
+Expected<std::string> getCachedArtifact(StringRef UniqueKey,
+ StringRef CacheDirectoryPath) {
+ // We choose an arbitrary Task parameter as we do not make use of it.
+ unsigned Task = 0;
+ Expected<AddStreamFn> CacheAddStreamOrErr =
+ getCachedArtifactHelper(UniqueKey, CacheDirectoryPath, Task);
+ if (!CacheAddStreamOrErr)
+ return CacheAddStreamOrErr.takeError();
+ if (!*CacheAddStreamOrErr)
+ return std::string(getCachedArtifactPath(UniqueKey, CacheDirectoryPath));
+ return createStringError(errc::argument_out_of_domain,
+ "build id not found in cache");
+}
- FileCache Cache = *CacheOrErr;
+Expected<std::string> getCachedOrDownloadArtifact(
+ StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath,
+ ArrayRef<StringRef> DebuginfodUrls, std::chrono::milliseconds Timeout) {
// We choose an arbitrary Task parameter as we do not make use of it.
unsigned Task = 0;
- Expected<AddStreamFn> CacheAddStreamOrErr = Cache(Task, UniqueKey, "");
+ Expected<AddStreamFn> CacheAddStreamOrErr =
+ getCachedArtifactHelper(UniqueKey, CacheDirectoryPath, Task);
if (!CacheAddStreamOrErr)
return CacheAddStreamOrErr.takeError();
AddStreamFn &CacheAddStream = *CacheAddStreamOrErr;
if (!CacheAddStream)
- return std::string(AbsCachedArtifactPath);
+ return std::string(getCachedArtifactPath(UniqueKey, CacheDirectoryPath));
+
// The artifact was not found in the local cache, query the debuginfod
// servers.
if (!HTTPClient::isAvailable())
@@ -315,7 +342,7 @@ Expected<std::string> getCachedOrDownloadArtifact(
pruneCache(CacheDirectoryPath, *PruningPolicyOrErr);
// Return the path to the artifact on disk.
- return std::string(AbsCachedArtifactPath);
+ return std::string(getCachedArtifactPath(UniqueKey, CacheDirectoryPath));
}
return createStringError(errc::argument_out_of_domain, "build id not found");
diff --git a/llvm/utils/gn/build/write_library_dependencies.py b/llvm/utils/gn/build/write_library_dependencies.py
index ba1a8a0157314d..e88ed8d6411ec7 100644
--- a/llvm/utils/gn/build/write_library_dependencies.py
+++ b/llvm/utils/gn/build/write_library_dependencies.py
@@ -37,6 +37,7 @@
{ "coverage", "LLVMCoverage", true, {"core", "object", "profiledata", "support"} },
{ "debuginfocodeview", "LLVMDebugInfoCodeView", true, {"support", "debuginfomsf"} },
{ "debuginfodwarf", "LLVMDebugInfoDWARF", true, {"binaryformat", "object", "mc", "support"} },
+{ "debuginfod", "LLVMDebuginfod", true, {} },
{ "debuginfogsym", "LLVMDebugInfoGSYM", true, {"mc", "object", "support", "debuginfodwarf"} },
{ "debuginfomsf", "LLVMDebugInfoMSF", true, {"support"} },
{ "debuginfopdb", "LLVMDebugInfoPDB", true, {"binaryformat", "object", "support", "debuginfocodeview", "debuginfomsf"} },
diff --git a/llvm/utils/lldbDataFormatters.py b/llvm/utils/lldbDataFormatters.py
index 4a34ad2a87c331..46aa15113d2b80 100644
--- a/llvm/utils/lldbDataFormatters.py
+++ b/llvm/utils/lldbDataFormatters.py
@@ -374,6 +374,7 @@ def DenseMapSummary(valobj: lldb.SBValue, _) -> str:
return summary
+"""
class DenseMapSynthetic:
valobj: lldb.SBValue
@@ -432,3 +433,4 @@ def update(self):
for indexes in key_buckets.values():
if len(indexes) == 1:
self.child_buckets.append(indexes[0])
+"""
>From 3a018baa743585ffc6eebf796a9841b183ca3afd Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Mon, 22 Jan 2024 08:23:42 -0800
Subject: [PATCH 03/15] Getting all 5 variations documented and tests
---
.../{main-full.yaml => bin-normal.yaml} | 8 +-
.../{main-dwp.yaml => bin-split-dwp.yaml} | 2 +-
...lit-nodbg.yaml => bin-split-stripped.yaml} | 4 +-
.../{main-split.yaml => bin-split.yaml} | 8 +-
.../{main-stripped.yaml => bin-stripped.yaml} | 4 +-
.../Shell/Debuginfod/Inputs/main-nodbg.yaml | 146 ------------------
lldb/test/Shell/Debuginfod/Inputs/mk | 119 +++++++++-----
.../{main-split-dbg.yaml => sym-split.yaml} | 8 +-
.../{main-dbg.yaml => sym-stripped.yaml} | 8 +-
.../Debuginfod/simple-stripped-negative.test | 21 +--
.../simple-stripped-no-locator.test | 24 +++
.../simple-stripped-positive-a.test | 35 +++++
...e.test => simple-stripped-positive-b.test} | 17 +-
lldb/test/Shell/Debuginfod/tests.md | 109 ++++++-------
14 files changed, 226 insertions(+), 287 deletions(-)
rename lldb/test/Shell/Debuginfod/Inputs/{main-full.yaml => bin-normal.yaml} (95%)
rename lldb/test/Shell/Debuginfod/Inputs/{main-dwp.yaml => bin-split-dwp.yaml} (92%)
rename lldb/test/Shell/Debuginfod/Inputs/{main-split-nodbg.yaml => bin-split-stripped.yaml} (96%)
rename lldb/test/Shell/Debuginfod/Inputs/{main-split.yaml => bin-split.yaml} (95%)
rename lldb/test/Shell/Debuginfod/Inputs/{main-stripped.yaml => bin-stripped.yaml} (96%)
delete mode 100644 lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml
rename lldb/test/Shell/Debuginfod/Inputs/{main-split-dbg.yaml => sym-split.yaml} (95%)
rename lldb/test/Shell/Debuginfod/Inputs/{main-dbg.yaml => sym-stripped.yaml} (95%)
create mode 100644 lldb/test/Shell/Debuginfod/simple-stripped-no-locator.test
create mode 100644 lldb/test/Shell/Debuginfod/simple-stripped-positive-a.test
rename lldb/test/Shell/Debuginfod/{simple-stripped-positive.test => simple-stripped-positive-b.test} (62%)
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-full.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-normal.yaml
similarity index 95%
rename from lldb/test/Shell/Debuginfod/Inputs/main-full.yaml
rename to lldb/test/Shell/Debuginfod/Inputs/bin-normal.yaml
index bcaa7502895426..1e8b8ffeee25e0 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main-full.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-normal.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: B4927EA09A08EE63313299CF347043010D03CC5E
+ Desc: 725D47B7EE964F615C841A04712D6F43175F9D8D
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,7 +94,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -106,7 +106,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
@@ -191,7 +191,7 @@ Symbols:
Value: 0x404000
DWARF:
debug_str:
- - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git 936cbb55363f8cc626d0a036fa840e87713572d9)'
+ - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git f2b81cb569d0632a0eb0fd51722d725ab191af72)'
- main.c
- '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
- char
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-dwp.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-split-dwp.yaml
similarity index 92%
rename from lldb/test/Shell/Debuginfod/Inputs/main-dwp.yaml
rename to lldb/test/Shell/Debuginfod/Inputs/bin-split-dwp.yaml
index 60b086adf1d633..1f18c04a4415ad 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main-dwp.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-split-dwp.yaml
@@ -21,7 +21,7 @@ Sections:
Flags: [ SHF_EXCLUDE, SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 63686172005F5F41525241595F53495A455F545950455F5F0066756E6300696E74005F7374617274006172676300617267760046616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E676974203933366362623535333633663863633632366430613033366661383430653837373133353732643929006D61696E2E630067656E2F6D61696E2D73706C69742E64776F00
+ Content: 63686172005F5F41525241595F53495A455F545950455F5F0066756E6300696E74005F7374617274006172676300617267760046616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E676974206632623831636235363964303633326130656230666435313732326437323561623139316166373229006D61696E2E630067656E2F62696E2D73706C69742E64776F00
- Name: .debug_str_offsets.dwo
Type: SHT_PROGBITS
Flags: [ SHF_EXCLUDE ]
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-split-nodbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-split-stripped.yaml
similarity index 96%
rename from lldb/test/Shell/Debuginfod/Inputs/main-split-nodbg.yaml
rename to lldb/test/Shell/Debuginfod/Inputs/bin-split-stripped.yaml
index 11798976f5c15a..6501cda4a4f7e6 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main-split-nodbg.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-split-stripped.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 8B5B6416F61ADC140AE457E208F1699F89BFDA86
+ Desc: 82B2C35129DAB19AD58F3DD0F426BDB0CC8AA094
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,7 +94,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
Symbols:
- Name: .note.gnu.build-id
Type: STT_SECTION
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-split.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-split.yaml
similarity index 95%
rename from lldb/test/Shell/Debuginfod/Inputs/main-split.yaml
rename to lldb/test/Shell/Debuginfod/Inputs/bin-split.yaml
index e03ff90187f40d..b99d0ede47c21d 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main-split.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-split.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 8B5B6416F61ADC140AE457E208F1699F89BFDA86
+ Desc: 82B2C35129DAB19AD58F3DD0F426BDB0CC8AA094
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,7 +94,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -106,7 +106,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
@@ -206,7 +206,7 @@ Symbols:
DWARF:
debug_str:
- '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
- - 'gen/main-split.dwo'
+ - 'gen/bin-split.dwo'
debug_addr:
- Length: 0x14
Version: 0x5
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-stripped.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-stripped.yaml
similarity index 96%
rename from lldb/test/Shell/Debuginfod/Inputs/main-stripped.yaml
rename to lldb/test/Shell/Debuginfod/Inputs/bin-stripped.yaml
index a4465d75fa6daf..6c8045e9a2068b 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main-stripped.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-stripped.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: B4927EA09A08EE63313299CF347043010D03CC5E
+ Desc: 725D47B7EE964F615C841A04712D6F43175F9D8D
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,7 +94,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
Symbols:
- Name: .note.gnu.build-id
Type: STT_SECTION
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml
deleted file mode 100644
index a4465d75fa6daf..00000000000000
--- a/lldb/test/Shell/Debuginfod/Inputs/main-nodbg.yaml
+++ /dev/null
@@ -1,146 +0,0 @@
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_EXEC
- Machine: EM_X86_64
- Entry: 0x401030
-ProgramHeaders:
- - Type: PT_LOAD
- Flags: [ PF_R ]
- FirstSec: .note.gnu.build-id
- LastSec: .note.gnu.build-id
- VAddr: 0x400000
- Align: 0x1000
- Offset: 0x0
- - Type: PT_LOAD
- Flags: [ PF_X, PF_R ]
- FirstSec: .text
- LastSec: .text
- VAddr: 0x401000
- Align: 0x1000
- Offset: 0x1000
- - Type: PT_LOAD
- Flags: [ PF_R ]
- FirstSec: .rodata
- LastSec: .eh_frame
- VAddr: 0x402000
- Align: 0x1000
- Offset: 0x2000
- - Type: PT_LOAD
- Flags: [ PF_W, PF_R ]
- FirstSec: .data.rel.ro
- LastSec: .data.rel.ro
- VAddr: 0x403FF8
- Align: 0x1000
- Offset: 0x2FF8
- - Type: PT_NOTE
- Flags: [ PF_R ]
- FirstSec: .note.gnu.build-id
- LastSec: .note.gnu.build-id
- VAddr: 0x4001C8
- Align: 0x4
- Offset: 0x1C8
- - Type: PT_GNU_STACK
- Flags: [ PF_W, PF_R ]
- Align: 0x10
- Offset: 0x0
- - Type: PT_GNU_RELRO
- Flags: [ PF_R ]
- FirstSec: .data.rel.ro
- LastSec: .data.rel.ro
- VAddr: 0x403FF8
- Offset: 0x2FF8
-Sections:
- - Name: .note.gnu.build-id
- Type: SHT_NOTE
- Flags: [ SHF_ALLOC ]
- Address: 0x4001C8
- AddressAlign: 0x4
- Notes:
- - Name: GNU
- Desc: B4927EA09A08EE63313299CF347043010D03CC5E
- Type: NT_PRPSINFO
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- Address: 0x401000
- AddressAlign: 0x10
- Offset: 0x1000
- Content: 554889E5897DFC488975F08B45FC83C001488B4DF0486355FC488B0CD10FBE0983C1020FAFC15DC30F1F840000000000554889E54883E4F04883EC10488B05B52F00004889442408488D74240831FFE8ACFFFFFF48C7C03C00000048C7C7000000000F05
- - Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
- Address: 0x402000
- AddressAlign: 0x1
- EntSize: 0x1
- Offset: 0x2000
- Content: '00'
- - Name: .eh_frame
- Type: SHT_X86_64_UNWIND
- Flags: [ SHF_ALLOC ]
- Address: 0x402008
- AddressAlign: 0x8
- Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000D8EFFFFF2800000000410E108602430D06630C0708000000180000003C000000E8EFFFFF3400000000410E108602430D06000000
- - Name: .data.rel.ro
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- Address: 0x403FF8
- AddressAlign: 0x8
- Offset: 0x2FF8
- Content: '0020400000000000'
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x1
- EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
-Symbols:
- - Name: .note.gnu.build-id
- Type: STT_SECTION
- Section: .note.gnu.build-id
- Value: 0x4001C8
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Value: 0x401000
- - Name: .rodata
- Type: STT_SECTION
- Section: .rodata
- Value: 0x402000
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Value: 0x402008
- - Name: .data.rel.ro
- Type: STT_SECTION
- Section: .data.rel.ro
- Value: 0x403FF8
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Binding: STB_GLOBAL
- Value: 0x401030
- Size: 0x34
- - Name: __bss_start
- Section: .data.rel.ro
- Binding: STB_GLOBAL
- Value: 0x404000
- - Name: func
- Type: STT_FUNC
- Section: .text
- Binding: STB_GLOBAL
- Value: 0x401000
- Size: 0x28
- - Name: _edata
- Section: .data.rel.ro
- Binding: STB_GLOBAL
- Value: 0x404000
- - Name: _end
- Section: .data.rel.ro
- Binding: STB_GLOBAL
- Value: 0x404000
-...
diff --git a/lldb/test/Shell/Debuginfod/Inputs/mk b/lldb/test/Shell/Debuginfod/Inputs/mk
index a66f4a641b4275..b222b5c028a2a2 100755
--- a/lldb/test/Shell/Debuginfod/Inputs/mk
+++ b/lldb/test/Shell/Debuginfod/Inputs/mk
@@ -1,51 +1,86 @@
#!/bin/sh
-# I need 4 different scenarios:
+# I need 5 different scenarios:
# 1 - A stripped binary with it's corresponding unstripped binary:
-# 2 - A stripped binary with a corresponding -only-keep-debug symbols file
+# 2 - A stripped binary with a corresponding --only-keep-debug symbols file
# 3 - A split binary with it's corresponding DWP file
# 4 - A stripped, split binary with an unstripped binary and a DWP file
+# 5 - A stripped, split binary with an --only-keep-debug symbols file and a DWP file
mkdir -p gen
mkdir -p run
-# First, compile & link the binary itself
-${builddir}/bin/clang -g -o gen/main-full.o -O0 -c main.c
-ld -nostdlib gen/main-full.o --build-id=sha1 -o gen/main-full
-${builddir}/bin/clang -g -gsplit-dwarf -o gen/main-split.o -O0 -c main.c
-ld -nostdlib gen/main-split.o --build-id=sha1 -o gen/main-split
-${builddir}/bin/llvm-dwp -e gen/main-split -o gen/main-split.dwp
-
-# Scenario 1: main-strip -> main-full (both executable and debuginfo)
-${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-stripped
-${builddir}/bin/obj2yaml gen/main-full > main-full.yaml
-${builddir}/bin/obj2yaml gen/main-stripped > main-stripped.yaml
-# MAKE: ${builddir}/bin/yaml2obj main-full.yaml > run/main-full
-# MAKE: ${builddir}/bin/yaml2obj main-stripped.yaml > run/main-stripped
-
-# Scenario 2: main-nodbg -> main-dbg (debuginfo)
-${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-full gen/main-dbg
-${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-nodbg
-${builddir}/bin/obj2yaml gen/main-nodbg > main-nodbg.yaml
-${builddir}/bin/obj2yaml gen/main-dbg > main-dbg.yaml
-# MAKE: ${builddir}/bin/yaml2obj main-nodbg.yaml > gen/main-nodbg.tmp
-# MAKE: ${builddir}/bin/yaml2obj main-dbg.yaml > run/main-dbg
-# MAKE: ${builddir}/bin/llvm-objcopy gen/main-nodbg.tmp --add-gnu-debuglink=run/main-dbg run/main-nodbg
-
-# Scenario 3: main-split, main-split.dwp (debuginfo)
-${builddir}/bin/obj2yaml gen/main-split > main-split.yaml
-${builddir}/bin/obj2yaml gen/main-split.dwp > main-dwp.yaml
-# MAKE: ${builddir}/bin/yaml2obj main-split.yaml > run/main-split
-# MAKE: ${builddir}/bin/yaml2obj main-dwp.yaml > run/main-split.dwp
-
-# Scenario 4: main-split-nodbg, main-split-dbg (executable), main-split.dwp (debuginfo)
-${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-split gen/main-split-dbg
-${builddir}/bin/llvm-objcopy --strip-debug gen/main-split gen/main-split-nodbg
-${builddir}/bin/obj2yaml gen/main-split-nodbg > main-split-nodbg.yaml
-${builddir}/bin/obj2yaml gen/main-split-dbg > main-split-dbg.yaml
-# MAKE: ${builddir}/bin/yaml2obj main-split-nodbg.yaml > gen/main-split-nodbg.tmp
-# MAKE: ${builddir}/bin/yaml2obj main-split-dbg.yaml > run/main-split-dbg
-# MAKE: ${builddir}/bin/llvm-objcopy gen/main-split-nodbg.tmp --add-gnu-debuglink=run/main-split-dbg run/main-split-nodbg
-# the main-dwp.yaml should be the same, I believe
-
-# MAKE: chmod a+x run/*
+# First, compile & link the binaries (normal and split)
+
+${builddir}/bin/clang -g -o gen/bin-normal.o -O0 -c main.c
+ld -nostdlib gen/bin-normal.o --build-id=sha1 -o gen/bin-normal
+${builddir}/bin/clang -g -gsplit-dwarf -o gen/bin-split.o -O0 -c main.c
+ld -nostdlib gen/bin-split.o --build-id=sha1 -o gen/bin-split
+
+# Next, create the file variations we need
+
+# Variation 1: -g, stripped
+${builddir}/bin/llvm-objcopy --strip-debug gen/bin-normal gen/bin-stripped
+# Variation 2: -g, stripped, --only-keep-debug symbols
+${builddir}/bin/llvm-objcopy --only-keep-debug gen/bin-normal gen/sym-stripped
+# Variation 3: -gsplit-dwarf: .dwp
+${builddir}/bin/llvm-dwp -e gen/bin-split -o gen/bin-split.dwp
+# Variation 4: -gsplit-dwarf: stripped, .dwp
+${builddir}/bin/llvm-objcopy --strip-debug gen/bin-split gen/bin-split-stripped
+# Variation 5: -gsplit-dwarf: stripped, --only-keep-debug + .dwp
+${builddir}/bin/llvm-objcopy --only-keep-debug gen/bin-split gen/sym-split
+
+# Finally, produce the .yaml files for testing
+
+# Scenario 1:
+# target: bin-stripped
+# Scenario 1a:
+# symbols: bin-normal (hosted as debuginfo)
+# Scenario 1b:
+# symbols: bin-normal (hosted as executable)
+${builddir}/bin/obj2yaml gen/bin-stripped -o bin-stripped.yaml
+${builddir}/bin/obj2yaml gen/bin-normal -o bin-normal.yaml
+# @ testing time: yaml2obj bin-stripped.yaml -o ${out}/bin-stripped
+# @ testing time: yaml2obj bin-normal.yaml -o ${out}/bin-normal
+
+
+# Scenario 2:
+# target: bin-stripped-okd
+# Scenario 2a:
+# symbols: sym-stripped (hosted as debuginfo)
+# Scenario 2b:
+# symbols: sym-stripped (hosted as executable)
+${builddir}/bin/obj2yaml gen/sym-stripped -o sym-stripped.yaml
+# To produce a correct .gnu.debuglink, you have to do it at test generation time.
+# The section includes a CRC that yaml2obj doesn't properly produce.
+# @ testing time: yaml2obj sym-stripped.yaml -o ${out}/sym-stripped
+# @ testing time: llvm-objcopy bin-stripped --add-gnu-debuglink=${out}/sym-stripped ${out}/bin-stripped-okd
+
+# Scenario 3:
+# target: bin-split
+# DWP: bin-split.dwp (hosted as debuginfo)
+${builddir}/bin/obj2yaml gen/bin-split -o bin-split.yaml
+${builddir}/bin/obj2yaml gen/bin-split.dwp -o bin-split-dwp.yaml
+# @ testing time: yaml2obj bin-split.yaml -o ${out}/bin-split
+# @ testing time: yaml2obj bin-split-dwp.yaml -o ${out}/bin-split.dwp
+
+# Scenario 4:
+# target: bin-split-stripped
+# symbols: bin-split (hosted as executable)
+# DWP bin-split.dwp (hosted as debuginfo)
+# This doesn't work from a file system "as is".
+# I believe you can set the symbol file manually to the bin-split file.
+# TODO: Need to check for the -no-locator test to see what the name of
+# the .dwp is expected to be.
+${builddir}/bin/obj2yaml gen/bin-split-stripped -o bin-split-stripped.yaml
+# bin-split and bin-split.dwp already generated in Scenario 3
+# @ testing time: yaml2obj bin-split-stripped.yaml -o ${out}/bin-split-stripped
+
+# Scenario 5:
+# target: bin-split-stripped-okd
+# symbols: sym-split (hosted as executable)
+# DWP: bin-split.dwp (hosted as debuginfo)
+${builddir}/bin/obj2yaml gen/sym-split -o sym-split.yaml
+# @ testing time: yaml2obj main-split-nodbg.yaml -o gen/main-split-nodbg.tmp
+# @ testing time: yaml2obj main-split-dbg.yaml -o run/main-split-dbg
+# @ testing time: llvm-objcopy gen/main-split-nodbg.tmp --add-gnu-debuglink=run/main-split-dbg run/main-split-nodbg
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-split-dbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/sym-split.yaml
similarity index 95%
rename from lldb/test/Shell/Debuginfod/Inputs/main-split-dbg.yaml
rename to lldb/test/Shell/Debuginfod/Inputs/sym-split.yaml
index 34d157b66c6b79..f25e4c4abf5c24 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main-split-dbg.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/sym-split.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 8B5B6416F61ADC140AE457E208F1699F89BFDA86
+ Desc: 82B2C35129DAB19AD58F3DD0F426BDB0CC8AA094
Type: NT_PRPSINFO
- Name: .text
Type: SHT_NOBITS
@@ -93,7 +93,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -105,7 +105,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
@@ -205,7 +205,7 @@ Symbols:
DWARF:
debug_str:
- '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
- - 'gen/main-split.dwo'
+ - 'gen/bin-split.dwo'
debug_addr:
- Length: 0x14
Version: 0x5
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main-dbg.yaml b/lldb/test/Shell/Debuginfod/Inputs/sym-stripped.yaml
similarity index 95%
rename from lldb/test/Shell/Debuginfod/Inputs/main-dbg.yaml
rename to lldb/test/Shell/Debuginfod/Inputs/sym-stripped.yaml
index 1cc8bffc59ce3a..608e9d04b2ebf2 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main-dbg.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/sym-stripped.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: B4927EA09A08EE63313299CF347043010D03CC5E
+ Desc: 725D47B7EE964F615C841A04712D6F43175F9D8D
Type: NT_PRPSINFO
- Name: .text
Type: SHT_NOBITS
@@ -93,7 +93,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420393336636262353533363366386363363236643061303336666138343065383737313335373264392900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -105,7 +105,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000004F0B089C0626CBD8AB443134CFE6DD950400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
@@ -190,7 +190,7 @@ Symbols:
Value: 0x404000
DWARF:
debug_str:
- - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git 936cbb55363f8cc626d0a036fa840e87713572d9)'
+ - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git f2b81cb569d0632a0eb0fd51722d725ab191af72)'
- main.c
- '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
- char
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-negative.test b/lldb/test/Shell/Debuginfod/simple-stripped-negative.test
index 62c7832da8fb36..2c4128e0d04b68 100644
--- a/lldb/test/Shell/Debuginfod/simple-stripped-negative.test
+++ b/lldb/test/Shell/Debuginfod/simple-stripped-negative.test
@@ -1,32 +1,23 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# This is paranoia to make sure there's not a cached symbol file laying around
-# RUN: rm -rf %t || echo ok
# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
-# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
# Scenario 1
-# A simple stripped binary
-# Debuginfod has the unstripped binary as the 'executable'
-# LLDB should ask Debuginfod for it's unstripped binary
+# A simple stripped binary, no symbols (negative test: nothing's been cached, right?)
-# Put the unstripped binary in the Debuginfod server as 'executable'
-
-# RUN: yaml2obj %p/Inputs/main-full.yaml -o %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/executable
-# RUN: yaml2obj %p/Inputs/main-stripped.yaml -o %t/output/main-stripped
-# RUN: chmod a+x %t/output/main-stripped
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
+# RUN: chmod a+x %t/output/bin-stripped
# Run a negative test (make sure we don't have symbols)
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/main-stripped" \
+# RUN: -o "target create %t/output/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
# Should NOT have source file information:
-# CHECK: Breakpoint 1: where = main-stripped`func, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-no-locator.test b/lldb/test/Shell/Debuginfod/simple-stripped-no-locator.test
new file mode 100644
index 00000000000000..5ae9691d493986
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/simple-stripped-no-locator.test
@@ -0,0 +1,24 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# RUN: mkdir -p %t/output
+
+# Scenario 1
+# A simple stripped binary, add the unstripped binary as a symbol file
+# (Sanity for comparison with Debuginfod-provided symbols)
+
+# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/output/bin-normal
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
+# RUN: chmod a+x %t/output/bin-stripped
+
+# Run a negative test (make sure we don't have symbols)
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target symbols add %t/output/bin-normal" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should NOT have source file information:
+
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-positive-a.test b/lldb/test/Shell/Debuginfod/simple-stripped-positive-a.test
new file mode 100644
index 00000000000000..98df28b5c3232b
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/simple-stripped-positive-a.test
@@ -0,0 +1,35 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
+
+# Scenario 1a
+# A simple stripped binary
+# Debuginfod has the unstripped binary as the 'debuginfo'
+
+# Put the unstripped binary in the Debuginfod server as 'debuginfo'
+
+# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/debuginfo
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
+# RUN: chmod a+x %t/output/bin-stripped
+
+# First, run a negative test (make sure we don't have symbols)
+
+# Scenario 1, postive test: Can we pull the executable
+# from Debuginfod and get a breakpoint set properly?
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should have source file info:
+
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-positive.test b/lldb/test/Shell/Debuginfod/simple-stripped-positive-b.test
similarity index 62%
rename from lldb/test/Shell/Debuginfod/simple-stripped-positive.test
rename to lldb/test/Shell/Debuginfod/simple-stripped-positive-b.test
index 78671b6eb463aa..cc9aaee072b0f8 100644
--- a/lldb/test/Shell/Debuginfod/simple-stripped-positive.test
+++ b/lldb/test/Shell/Debuginfod/simple-stripped-positive-b.test
@@ -2,22 +2,19 @@
# We set up a file-system 'hosted' Debuginfod server
-# RUN: rm -rf %t || echo ok
# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
+# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
-# Scenario 1
+# Scenario 1a
# A simple stripped binary
# Debuginfod has the unstripped binary as the 'executable'
-# LLDB should ask Debuginfod for it's unstripped binary
# Put the unstripped binary in the Debuginfod server as 'executable'
-# RUN: yaml2obj %p/Inputs/main-full.yaml -o %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/executable
-# RUN: yaml2obj %p/Inputs/main-stripped.yaml -o %t/output/main-stripped
-# RUN: chmod a+x %t/output/main-stripped
+# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/executable
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
+# RUN: chmod a+x %t/output/bin-stripped
# First, run a negative test (make sure we don't have symbols)
@@ -28,11 +25,11 @@
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/main-stripped" \
+# RUN: -o "target create %t/output/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
# Should have source file info:
-# CHECK: Breakpoint 1: where = main-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/tests.md b/lldb/test/Shell/Debuginfod/tests.md
index 7fe3e9e68d4ed3..62cca92355b03b 100644
--- a/lldb/test/Shell/Debuginfod/tests.md
+++ b/lldb/test/Shell/Debuginfod/tests.md
@@ -6,56 +6,59 @@ protocol properly. That's how all these tests operate. We override the default
`DEBUGINFOD_URLS` property with a `file://` URL and populate it with the symbol
files we need for testing.
-## Baseline capabilities
-
-Things to test:
-
-- Just for sanity, the `-no-locator` tests validate that lldb works as the test
- expects if the files that Debuginfod _should_ provide are already there.
-- Validate that symbols _aren't_ found without Debuginfod, to ensure they
- weren't cached from previous runs (`-negative` tests).
-- Validate that the Debuginfod symbol locator is providing the expected symbols
- when the debugger doesn't already have them available.
-
-## Symbol "Configurations" to test
-
-There are 2 top level configurations, each of which then get some post-processing.
-- The 'normal' build: a simple binary built with debug information (`-g`)
-- The 'split' build: A binary built with `-gsplit-dwarf` that produces `.dwo` and `.dwp` files
-
-For the normal build there are 2 post-processing steps where Debuginfod may be used.
-- Strip the binary while hosting the full, unstripped binary on a Debuginfod server.
-- Strip the binary and produce a corresponding 'only-keep-debug' version of the binary to host on a Debuginfod server.
-
-For the split build, there are *3* post-processing outcomes where Debuginfod usage makes sense:
-- Stripped binary, hosting the full unstripped binary on a Debuginfod server, along with it's `.dwp` file.
-- Stripped binary, hosting the 'only-keep-debug' version of the binary *and* it's `.dwp` file.
-- Unstripped binary, hosting only the `.dwp` file on the Debuginfod server.
-
-For both normal and split builds, when using an 'only-keep-debug' symbol file, the original file
-also requires the addition of the `.gnu.debuglink` section (which can be added using `objcopy`)
-
-### Troubles
-
-The Debuginfod protocol is somewhat underspecified regarding what the 2 different callbacks actually return. The protocol itself is quite simple: query an HTTP server with the path `buildid/{.note.gnu.build-id hash}/debuginfo` and `buildid/{.note.gnu.build-id hash}/executable`. A keen reader may note that there's one configuration (split, only-keep-debug) where you need two different files to properly symbolicate, but the API only supports a single debuginfo file. For that scenario, I've chosen to simply treat the `.dwp` file as "debuginfo" and the "only-keep-debug" stripped binary as "executable". This scenario doesn't actually work at all in GDB. It seems more straightforward than trying to extend the protocol.
-
-### Stripped:
-
-- Should ask for symbols from the service; can be registered as 'executable' and
- they should work!
-
-### Stripped "only-keep-debug":
-
-- Should get them from the debuginfo, not from the executable query
-
-### split-dwarf:
-
-- Should get dwp file from debuginfo
-
-### split-dwarf + stripped:
-
-- Should get dwp from debuginfo, and the unstripped binary from executable
-
-
-image
-lldb.target.ResolveLoadAddress
+## What's being tested
+
+- For assumption validation, the `*-no-locator` tests verify that lldb works as
+ the test expects when files that Debuginfod should provide (`.dwp` files,
+ `.gnu.debuglink`'ed files) are _already_ there.
+- The `*-negative` tests validate that symbols _aren't_ found without
+ Debuginfod, to ensure they haven't been cached from previous runs.
+- The `*-positive` tests check that the Debuginfod symbol locator is providing
+ the expected symbols when the debugger doesn't already have them available.
+
+### Symbol file variations tested
+
+There are 5 variations of symbol data where Debuginfod can provide value:
+
+1. The 'simple-stripped' build variation is a binary built with debug
+ information (`-g`), but stripped for deployment. A Debuginfod service can
+ then host the unstripped binary (as either `executable` or `debuginfo`).
+2. The 'okd-stripped' build variation is a binary build with `-g`, stripped for
+ deployment, where the Debuginfod service is hosting the output of
+ `objcopy --only-keep-debug` (which should also be linked to the stripped file
+ using `--add-gnu-debuglink`). Again, the file could be hosted as either
+ `executable` or `debuginfo`.
+3. The 'simple-split' build variation is a binary built with `-gsplit-dwarf`
+ that produces `.dwo` which are subsequently linked together (using
+ `llvm-dwp`) into a single `.dwp` file. The Debuginfod service should host the
+ `.dwp` file as `debuginfo`.
+4. The 'stripped-split' build variation is a binary built with `-gsplit-dwarf`,
+ then stripped in the same manner as variation #1. For this variation,
+ Debuginfod should host the unstripped binary as `executable` and the `.dwp`
+ file as `debuginfo`.
+5. The 'okd-stripped-split' build variation is the combination of variations 2
+ and 3, where Debuginfod hosts the `.gnu.debuglink`'ed file as `executable`
+ and the `.dwp` again as `debuginfo`.
+
+### Lack of clarity/messy capabilities from Debuginfod
+
+The [debuginfod protocol](https://sourceware.org/elfutils/Debuginfod.html) is
+underspecified for some variations of symbol file deployment. The protocol
+itself is quite simple: query an HTTP server with the path
+`buildid/{.note.gnu.build-id hash}/debuginfo` or
+`buildid/{.note.gnu.build-id hash}/executable` to acquire "symbol data" or "the
+executable". Where there is lack of clarity, I prefer requesting `debuginfo`
+first, then falling back to `executable` (Scenarios #1 & #2). For Scenario #5,
+I've chosen to expect the stripped (i.e. not full) executable, which contains a
+number of sections necessary to correctly symbolicate will be hosted from the
+`executable` API. Depending upon how Debuginfod hosting services choose to
+support `.dwp` paired with stripped files, these assumptions may need to be
+revisited.
+
+I've also chosen to simply treat the `.dwp` file as `debuginfo` and the
+"only-keep-debug" stripped binary as `executable`. This scenario doesn't appear
+to work at all in GDB. Supporting it how I did seems more straight forward than
+trying to extend the protocol. The protocol _does_ support querying for section
+contents by name for a given build ID, but adding support for that in LLDB
+looks...well beyond my current capability (and LLVM's Debuginfod library doesn't
+support it at this writing, anyway).
>From 3956f31e6f237da2f391173418f31af58a5bb200 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Mon, 22 Jan 2024 17:17:07 -0800
Subject: [PATCH 04/15] One failling test that looks like a real bug...for
tomorrow
---
.../Shell/Debuginfod/okd-split-negative.test | 31 --------------
.../Shell/Debuginfod/okd-split-positive.test | 40 -------------------
.../Debuginfod/okd-stripped-negative.test | 32 ---------------
.../Debuginfod/okd-stripped-positive.test | 35 ----------------
.../Shell/Debuginfod/okdstrip-negative.test | 28 +++++++++++++
.../Shell/Debuginfod/okdstrip-no-locator.test | 26 ++++++++++++
.../Shell/Debuginfod/okdstrip-positive-a.test | 33 +++++++++++++++
.../Shell/Debuginfod/okdstrip-positive-b.test | 33 +++++++++++++++
.../Shell/Debuginfod/simple-dwp-negative.test | 32 ---------------
.../test/Shell/Debuginfod/split-negative.test | 25 ++++++++++++
.../Shell/Debuginfod/split-no-locator.test | 26 ++++++++++++
.../Debuginfod/split-okdstrip-negative.test | 24 +++++++++++
.../Debuginfod/split-okdstrip-no-locator.test | 25 ++++++++++++
.../Debuginfod/split-okdstrip-positive.test | 31 ++++++++++++++
...-dwp-positive.test => split-positive.test} | 20 +++++-----
.../Debuginfod/split-strip-negative.test | 20 ++++++++++
.../Debuginfod/split-strip-no-locator.test | 26 ++++++++++++
.../Debuginfod/split-strip-positive.test | 31 ++++++++++++++
...pped-negative.test => strip-negative.test} | 0
...-no-locator.test => strip-no-locator.test} | 0
...-positive-a.test => strip-positive-a.test} | 0
...-positive-b.test => strip-positive-b.test} | 0
lldb/test/Shell/Debuginfod/tests.md | 4 +-
23 files changed, 339 insertions(+), 183 deletions(-)
delete mode 100644 lldb/test/Shell/Debuginfod/okd-split-negative.test
delete mode 100644 lldb/test/Shell/Debuginfod/okd-split-positive.test
delete mode 100644 lldb/test/Shell/Debuginfod/okd-stripped-negative.test
delete mode 100644 lldb/test/Shell/Debuginfod/okd-stripped-positive.test
create mode 100644 lldb/test/Shell/Debuginfod/okdstrip-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
create mode 100644 lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
create mode 100644 lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
delete mode 100644 lldb/test/Shell/Debuginfod/simple-dwp-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/split-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/split-no-locator.test
create mode 100644 lldb/test/Shell/Debuginfod/split-okdstrip-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test
create mode 100644 lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
rename lldb/test/Shell/Debuginfod/{simple-dwp-positive.test => split-positive.test} (61%)
create mode 100644 lldb/test/Shell/Debuginfod/split-strip-negative.test
create mode 100644 lldb/test/Shell/Debuginfod/split-strip-no-locator.test
create mode 100644 lldb/test/Shell/Debuginfod/split-strip-positive.test
rename lldb/test/Shell/Debuginfod/{simple-stripped-negative.test => strip-negative.test} (100%)
rename lldb/test/Shell/Debuginfod/{simple-stripped-no-locator.test => strip-no-locator.test} (100%)
rename lldb/test/Shell/Debuginfod/{simple-stripped-positive-a.test => strip-positive-a.test} (100%)
rename lldb/test/Shell/Debuginfod/{simple-stripped-positive-b.test => strip-positive-b.test} (100%)
diff --git a/lldb/test/Shell/Debuginfod/okd-split-negative.test b/lldb/test/Shell/Debuginfod/okd-split-negative.test
deleted file mode 100644
index 5d5ed250c4cc1d..00000000000000
--- a/lldb/test/Shell/Debuginfod/okd-split-negative.test
+++ /dev/null
@@ -1,31 +0,0 @@
-# REQUIRES: system-linux && native && target-x86_64
-
-# We set up a file-system 'hosted' Debuginfod server
-
-# RUN: rm -rf %t || echo ok
-# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
-# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
-
-# Scenario 4
-# A stripped binary/split-dwarf combination
-# LLDB should ask Debuginfod for both it's executable AND it's symbols
-
-# RUN: yaml2obj %p/Inputs/main-split-nodbg.yaml -o %t/tmpstuff/main-split-nodbg.tmp
-# RUN: yaml2obj %p/Inputs/main-split-dbg.yaml -o %t/tmpstuff/main-split-dbg
-# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
-# RUN: llvm-objcopy %t/tmpstuff/main-split-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-split-dbg %t/output/main-split-nodbg
-# RUN: mv %t/tmpstuff/main-split-dbg %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/executable
-# RUN: chmod a+x %t/output/main-split-nodbg
-
-# Verify that we -don't- find symbols when not using the Debuginfod service
-
-# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/main-split-nodbg" \
-# RUN: -o "b func" \
-# RUN: -o "quit" \
-# RUN: 2>&1 | FileCheck %s
-
-# Should NOT have source file information:
-# CHECK: Breakpoint 1: where = main-split-nodbg`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okd-split-positive.test b/lldb/test/Shell/Debuginfod/okd-split-positive.test
deleted file mode 100644
index 3a3f20a5c82c4b..00000000000000
--- a/lldb/test/Shell/Debuginfod/okd-split-positive.test
+++ /dev/null
@@ -1,40 +0,0 @@
-# REQUIRES: system-linux && native && target-x86_64
-
-# We set up a file-system 'hosted' Debuginfod server
-
-# RUN: rm -rf %t || echo ok
-# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
-# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
-
-# Scenario 4
-# A stripped binary/split-dwarf combination
-# LLDB should ask Debuginfod for both it's executable AND it's symbols
-
-# RUN: yaml2obj %p/Inputs/main-split-nodbg.yaml -o %t/tmpstuff/main-split-nodbg.tmp
-# RUN: yaml2obj %p/Inputs/main-split-dbg.yaml -o %t/tmpstuff/main-split-dbg
-# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
-# RUN: llvm-objcopy %t/tmpstuff/main-split-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-split-dbg %t/output/main-split-nodbg
-# RUN: mv %t/tmpstuff/main-split-dbg %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/executable
-# RUN: chmod a+x %t/output/main-split-nodbg
-
-# Verify that we find symbols from the Debuginfod service
-
-# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
-# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
-# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
-# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/main-split-nodbg" \
-# RUN: -o "target modules dump separate-debug-info" \
-# RUN: -o "b main.c:69" \
-# RUN: -o "quit" \
-# RUN: 2>&1 | FileCheck %s
-
-# Should have source file information:
-# CHECK: Symbol file: {{.*}}/main-split-nodbg
-# CHECK-NEXT: Type: "dwo"
-# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK-NEXT: {{^[- ]+$}}
-# CHECK-NEXT: 0x{{[0-9a-f]+.*}} {{.*}}/cache/llvmcache-9657596136574283768
-# CHECK: Breakpoint 1: address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okd-stripped-negative.test b/lldb/test/Shell/Debuginfod/okd-stripped-negative.test
deleted file mode 100644
index f110db39c11ae7..00000000000000
--- a/lldb/test/Shell/Debuginfod/okd-stripped-negative.test
+++ /dev/null
@@ -1,32 +0,0 @@
-# REQUIRES: system-linux && native && target-x86_64
-
-# We set up a file-system 'hosted' Debuginfod server
-
-# RUN: rm -rf %t || echo ok
-# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
-# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
-
-# Scenario 2
-# A stripped binary, with an "-only-keep-debug" symbols file
-# Debuginfo has the 'okd' file as the 'debuginfo' item
-# LLDB should ask Debuginfod for it's symbols
-
-# RUN: yaml2obj %p/Inputs/main-nodbg.yaml -o %t/tmpstuff/main-nodbg.tmp
-# RUN: yaml2obj %p/Inputs/main-dbg.yaml -o %t/tmpstuff/main-dbg
-# RUN: llvm-objcopy %t/tmpstuff/main-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-dbg %t/output/main-nodbg
-# RUN: mv %t/tmpstuff/main-dbg %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/debuginfo
-# RUN: chmod a+x %t/output/main-nodbg
-
-# Negative test (We don't find symbols without the Debuginfod service)
-
-# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/main-nodbg" \
-# RUN: -o "b func" \
-# RUN: -o "quit" \
-# RUN: 2>&1 | FileCheck %s
-
-# Should NOT have source file information:
-
-# CHECK: Breakpoint 1: where = main-nodbg`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okd-stripped-positive.test b/lldb/test/Shell/Debuginfod/okd-stripped-positive.test
deleted file mode 100644
index 67d55a16041d34..00000000000000
--- a/lldb/test/Shell/Debuginfod/okd-stripped-positive.test
+++ /dev/null
@@ -1,35 +0,0 @@
-# REQUIRES: system-linux && native && target-x86_64
-
-# We set up a file-system 'hosted' Debuginfod server
-
-# RUN: rm -rf %t || echo ok
-# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
-# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e
-
-# Scenario 2
-# A stripped binary, with an "-only-keep-debug" symbols file
-# Debuginfo has the 'okd' file as the 'debuginfo' item
-# LLDB should ask Debuginfod for it's symbols
-
-# RUN: yaml2obj %p/Inputs/main-nodbg.yaml -o %t/tmpstuff/main-nodbg.tmp
-# RUN: yaml2obj %p/Inputs/main-dbg.yaml -o %t/tmpstuff/main-dbg
-# RUN: llvm-objcopy %t/tmpstuff/main-nodbg.tmp --add-gnu-debuglink=%t/tmpstuff/main-dbg %t/output/main-nodbg
-# RUN: mv %t/tmpstuff/main-dbg %t/buildid/b4927ea09a08ee63313299cf347043010d03cc5e/debuginfo
-# RUN: chmod a+x %t/output/main-nodbg
-
-# Verify that we find symbols from the Debuginfod service
-
-# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
-# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
-# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
-# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/main-nodbg" \
-# RUN: -o "b func" \
-# RUN: -o "quit" \
-# RUN: 2>&1 | FileCheck %s
-
-# Should have source file information:
-
-# CHECK: Breakpoint 1: where = main-nodbg`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-negative.test b/lldb/test/Shell/Debuginfod/okdstrip-negative.test
new file mode 100644
index 00000000000000..a63beccd249b1f
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okdstrip-negative.test
@@ -0,0 +1,28 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+
+# Scenario 2
+# A stripped binary, with an "-only-keep-debug" symbols which is *not* there.
+# LLDB should fail to find the OKD file automatically using .gnu.debuglink
+
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
+# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
+# Don't leave the stripped .dbg file laying around for the debugger to discover
+# RUN: rm %t/output/bin-stripped.dbg
+# RUN: chmod a+x %t/output/bin-stripped
+
+# Verify that we find symbols from the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should NOT have source file information:
+
+# CHECK: Breakpoint 1: where = bin-stripped`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test b/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
new file mode 100644
index 00000000000000..f45477a8f037c0
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
@@ -0,0 +1,26 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+
+# Scenario 2
+# A stripped binary, with an "-only-keep-debug" symbols
+# LLDB should find the OKD file automatically using .gnu.debuglink
+
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
+# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
+# RUN: chmod a+x %t/output/bin-stripped
+
+# Verify that we find symbols from the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should have source file information:
+
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
new file mode 100644
index 00000000000000..12cb9cf0282dda
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
@@ -0,0 +1,33 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
+
+# Scenario 2a
+# A stripped binary, with an "-only-keep-debug" symbols file
+# LLDB should request the symbols from Debuginfod as 'debuginfo'
+
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
+# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
+# Move the stripped .dbg into the file:// hosted Debuginfod location
+# RUN: mv %t/output/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/debuginfo
+# RUN: chmod a+x %t/output/bin-stripped
+
+# Verify that we find symbols from the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should have source file information:
+
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
new file mode 100644
index 00000000000000..ace1cfc58e0717
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
@@ -0,0 +1,33 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
+
+# Scenario 2b
+# A stripped binary, with an "-only-keep-debug" symbols file
+# LLDB should request the symbols from Debuginfod as 'executable'
+
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
+# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
+# Move the stripped .dbg into the file:// hosted Debuginfod location
+# RUN: mv %t/output/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/executable
+# RUN: chmod a+x %t/output/bin-stripped
+
+# Verify that we find symbols from the Debuginfod service
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "b func" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# Should have source file information:
+
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/simple-dwp-negative.test b/lldb/test/Shell/Debuginfod/simple-dwp-negative.test
deleted file mode 100644
index e1018a1181c241..00000000000000
--- a/lldb/test/Shell/Debuginfod/simple-dwp-negative.test
+++ /dev/null
@@ -1,32 +0,0 @@
-# REQUIRES: system-linux && native && target-x86_64
-
-# We set up a file-system 'hosted' Debuginfod server
-
-# RUN: rm -rf %t || echo ok
-# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
-# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
-
-# Scenario 2
-# A stripped binary, with an "-only-keep-debug" symbols file
-# Debuginfo has the 'okd' file as the 'debuginfo' item
-# LLDB should ask Debuginfod for it's symbols
-
-# RUN: yaml2obj %p/Inputs/main-split.yaml -o %t/output/main-split
-# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
-# RUN: chmod a+x %t/output/main-split
-
-# Negative test (We don't find symbols without the Debuginfod service)
-
-# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/main-split" \
-# RUN: -o "target modules dump separate-debug-info" \
-# RUN: -o "quit" \
-# RUN: 2>&1 | FileCheck %s
-
-# CHECK: Symbol file: {{.*}}/main-split
-# CHECK-NEXT: Type: "dwo"
-# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK-NEXT: {{^[- ]+$}}
-# CHECK-NEXT: 0x{{[0-9a-f]+.*}} unable to locate .dwo debug file {{.*}}main-split.dwo{{.*}} for skeleton DIE 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/split-negative.test b/lldb/test/Shell/Debuginfod/split-negative.test
new file mode 100644
index 00000000000000..351bb0b3c44be9
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-negative.test
@@ -0,0 +1,25 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+
+# Scenario 3: No locator
+# A split binary, with a *missing* .dwp file
+
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
+# RUN: chmod a+x %t/output/bin-split
+
+# Negative test (We don't find symbols without the Debuginfod service)
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-split" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK-NEXT: {{^[- ]+$}}
+# CHECK-NEXT: 0x{{[0-9a-f]+.*}} unable to locate .dwo debug file {{.*}}bin-split.dwo{{.*}} for skeleton DIE 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/split-no-locator.test b/lldb/test/Shell/Debuginfod/split-no-locator.test
new file mode 100644
index 00000000000000..bb60100b0e0547
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-no-locator.test
@@ -0,0 +1,26 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: rm -rf %t || echo ok
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
+
+# Scenario 3: No locator
+# A split binary, with a .dwp file right next to the binary
+
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/output/bin-split.dwp
+# RUN: chmod a+x %t/output/bin-split
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-split" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK-NEXT: {{^[- ]+$}}
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-negative.test b/lldb/test/Shell/Debuginfod/split-okdstrip-negative.test
new file mode 100644
index 00000000000000..4bca2113d73ddb
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-negative.test
@@ -0,0 +1,24 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+
+# Scenario 4: No locator
+# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
+
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/output/sym-split
+# RUN: llvm-objcopy %t/output/bin-split-stripped.tmp --add-gnu-debuglink=%t/output/sym-split %t/output/bin-split-stripped
+# RUN: rm %t/output/sym-split
+# RUN: chmod a+x %t/output/bin-split-stripped
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Current executable set to {{.*}}.tmp/output/bin-split-stripped' (x86_64).
+# CHECK-NEXT: target modules dump separate-debug-info
+# CHECK-NEXT: error: no matching executable images found
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test b/lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test
new file mode 100644
index 00000000000000..d210a1a7dd54b0
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test
@@ -0,0 +1,25 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+
+# Scenario 4: No locator
+# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
+
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/output/sym-split
+# RUN: llvm-objcopy %t/output/bin-split-stripped.tmp --add-gnu-debuglink=%t/output/sym-split %t/output/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/output/bin-split-stripped.dwp
+# RUN: chmod a+x %t/output/bin-split-stripped
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK: {{0x[0-9a-f]+.* +.*}}/output/bin-split-stripped.dwp(gen/bin-split.dwo){{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
new file mode 100644
index 00000000000000..a60c1139a64604
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
@@ -0,0 +1,31 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
+
+# Scenario 4: No locator
+# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
+
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/output/sym-split
+# RUN: llvm-objcopy %t/output/bin-split-stripped.tmp --add-gnu-debuglink=%t/output/sym-split %t/output/bin-split-stripped
+# RUN: mv %t/output/sym-split %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfod
+# RUN: chmod a+x %t/output/bin-split-stripped
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/bin-split-stripped
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK: {{0x[0-9a-f]+.* +.*}}/output/bin-split-stripped.dwp(gen/bin-split.dwo){{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/simple-dwp-positive.test b/lldb/test/Shell/Debuginfod/split-positive.test
similarity index 61%
rename from lldb/test/Shell/Debuginfod/simple-dwp-positive.test
rename to lldb/test/Shell/Debuginfod/split-positive.test
index acb647e83e008f..50b7082aac43c0 100644
--- a/lldb/test/Shell/Debuginfod/simple-dwp-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-positive.test
@@ -2,20 +2,18 @@
# We set up a file-system 'hosted' Debuginfod server
-# RUN: rm -rf %t || echo ok
# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/tmpstuff
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86
+# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
# Scenario 2
# A stripped binary, with an "-only-keep-debug" symbols file
# Debuginfo has the 'okd' file as the 'debuginfo' item
# LLDB should ask Debuginfod for it's symbols
-# RUN: yaml2obj %p/Inputs/main-split.yaml -o %t/output/main-split
-# RUN: yaml2obj %p/Inputs/main-dwp.yaml -o %t/buildid/8b5b6416f61adc140ae457e208f1699f89bfda86/debuginfo
-# RUN: chmod a+x %t/output/main-split
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
+# RUN: chmod a+x %t/output/bin-split
# Positive test: We find the DWP file with the Debuginfod service
@@ -23,15 +21,15 @@
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/main-split" \
+# RUN: -o "target create %t/output/bin-split" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# CHECK: Symbol file: {{.*}}/main-split
+# CHECK: Symbol file: {{.*}}/output/bin-split
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK-NEXT: {{^[- ]+$}}
+# CHECK: {{[- ]+}}
# The cache key is stable, so we can mandate that we discover this thing from the cache
-# It's an implementation detail, so it could potentially change, but the ensures that
-# CHECK-NEXT: 0x{{[0-9a-f]+.*}} {{.*}}/cache/llvmcache-9657596136574283768
+# The '.tmp' (sort of) ensures the cache is our private cache, not the system cache
+# CHECK: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-strip-negative.test b/lldb/test/Shell/Debuginfod/split-strip-negative.test
new file mode 100644
index 00000000000000..163714cb20b77e
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-strip-negative.test
@@ -0,0 +1,20 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+
+# Scenario 4: Negative
+# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
+
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped
+# RUN: chmod a+x %t/output/bin-split-stripped
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Current executable set to '{{.*}}/output/bin-split-stripped'
+# CHECK: error: no matching executable images found
diff --git a/lldb/test/Shell/Debuginfod/split-strip-no-locator.test b/lldb/test/Shell/Debuginfod/split-strip-no-locator.test
new file mode 100644
index 00000000000000..710313e8443985
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-strip-no-locator.test
@@ -0,0 +1,26 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+
+# Scenario 4: No locator
+# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
+
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/output/bin-split-stripped.dwp
+# RUN: chmod a+x %t/output/bin-split-stripped
+# RUN: chmod a+x %t/output/bin-split
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target symbols add %t/output/bin-split" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK: {{0x[0-9a-f]+.* +.*}}/output/bin-split-stripped.dwp(gen/bin-split.dwo){{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-strip-positive.test b/lldb/test/Shell/Debuginfod/split-strip-positive.test
new file mode 100644
index 00000000000000..9ebc74cb5bd362
--- /dev/null
+++ b/lldb/test/Shell/Debuginfod/split-strip-positive.test
@@ -0,0 +1,31 @@
+# REQUIRES: system-linux && native && target-x86_64
+
+# We set up a file-system 'hosted' Debuginfod server
+
+# RUN: mkdir -p %t/output
+# RUN: mkdir -p %t/cache
+# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
+
+# Scenario 4:
+# A stripped, split binary, symbols manually added and a .dwp file
+# The unstripped binary should be picked up from /82...94/executable
+# The .dwp file should be picke dup from /82...94/debuginfo
+
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
+# RUN: chmod a+x %t/output/bin-split-stripped
+
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
+# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
+# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
+# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
+# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target modules dump separate-debug-info" \
+# RUN: -o "quit" \
+# RUN: 2>&1 | FileCheck %s
+
+# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK-NEXT: Type: "dwo"
+# CHECK-NEXT: Dwo ID{{.*}}
+# CHECK: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-negative.test b/lldb/test/Shell/Debuginfod/strip-negative.test
similarity index 100%
rename from lldb/test/Shell/Debuginfod/simple-stripped-negative.test
rename to lldb/test/Shell/Debuginfod/strip-negative.test
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-no-locator.test b/lldb/test/Shell/Debuginfod/strip-no-locator.test
similarity index 100%
rename from lldb/test/Shell/Debuginfod/simple-stripped-no-locator.test
rename to lldb/test/Shell/Debuginfod/strip-no-locator.test
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-positive-a.test b/lldb/test/Shell/Debuginfod/strip-positive-a.test
similarity index 100%
rename from lldb/test/Shell/Debuginfod/simple-stripped-positive-a.test
rename to lldb/test/Shell/Debuginfod/strip-positive-a.test
diff --git a/lldb/test/Shell/Debuginfod/simple-stripped-positive-b.test b/lldb/test/Shell/Debuginfod/strip-positive-b.test
similarity index 100%
rename from lldb/test/Shell/Debuginfod/simple-stripped-positive-b.test
rename to lldb/test/Shell/Debuginfod/strip-positive-b.test
diff --git a/lldb/test/Shell/Debuginfod/tests.md b/lldb/test/Shell/Debuginfod/tests.md
index 62cca92355b03b..cbde54d75af7a8 100644
--- a/lldb/test/Shell/Debuginfod/tests.md
+++ b/lldb/test/Shell/Debuginfod/tests.md
@@ -32,10 +32,10 @@ There are 5 variations of symbol data where Debuginfod can provide value:
that produces `.dwo` which are subsequently linked together (using
`llvm-dwp`) into a single `.dwp` file. The Debuginfod service should host the
`.dwp` file as `debuginfo`.
-4. The 'stripped-split' build variation is a binary built with `-gsplit-dwarf`,
+4. **The 'stripped-split' build variation is a binary built with `-gsplit-dwarf`,
then stripped in the same manner as variation #1. For this variation,
Debuginfod should host the unstripped binary as `executable` and the `.dwp`
- file as `debuginfo`.
+ file as `debuginfo`.**
5. The 'okd-stripped-split' build variation is the combination of variations 2
and 3, where Debuginfod hosts the `.gnu.debuglink`'ed file as `executable`
and the `.dwp` again as `debuginfo`.
>From 905411ff93ddf416d605a74c16d4d2b9c7157e56 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Mon, 22 Jan 2024 22:34:01 -0800
Subject: [PATCH 05/15] Fixed the last test. Looks like everything works.
---
lldb/test/Shell/Debuginfod/split-okdstrip-positive.test | 6 +++---
llvm/lib/Debuginfod/Debuginfod.cpp | 5 -----
llvm/utils/gn/build/write_library_dependencies.py | 1 -
llvm/utils/lldbDataFormatters.py | 2 --
4 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
index a60c1139a64604..3261a78b22bb22 100644
--- a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
@@ -13,10 +13,10 @@
# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/output/sym-split
# RUN: llvm-objcopy %t/output/bin-split-stripped.tmp --add-gnu-debuglink=%t/output/sym-split %t/output/bin-split-stripped
# RUN: mv %t/output/sym-split %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
-# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfod
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
# RUN: chmod a+x %t/output/bin-split-stripped
-# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
+# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
@@ -28,4 +28,4 @@
# CHECK: Symbol file: {{.*}}/bin-split-stripped
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK: {{0x[0-9a-f]+.* +.*}}/output/bin-split-stripped.dwp(gen/bin-split.dwo){{ *$}}
+# CHECK: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
diff --git a/llvm/lib/Debuginfod/Debuginfod.cpp b/llvm/lib/Debuginfod/Debuginfod.cpp
index 1dee5f343cf6ba..abea0d831e0ca8 100644
--- a/llvm/lib/Debuginfod/Debuginfod.cpp
+++ b/llvm/lib/Debuginfod/Debuginfod.cpp
@@ -154,11 +154,6 @@ std::string getDebuginfodDebuginfoUrlPath(BuildIDRef ID) {
return std::string(UrlPath);
}
-Expected<std::string> getCachedOrDownloadDebuginfo(BuildIDRef ID) {
- std::string UrlPath = getDebuginfodDebuginfoUrlPath(ID);
- return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath);
-}
-
Expected<std::string> getCachedOrDownloadDebuginfo(BuildIDRef ID) {
std::string UrlPath = getDebuginfodDebuginfoUrlPath(ID);
return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath);
diff --git a/llvm/utils/gn/build/write_library_dependencies.py b/llvm/utils/gn/build/write_library_dependencies.py
index e88ed8d6411ec7..ba1a8a0157314d 100644
--- a/llvm/utils/gn/build/write_library_dependencies.py
+++ b/llvm/utils/gn/build/write_library_dependencies.py
@@ -37,7 +37,6 @@
{ "coverage", "LLVMCoverage", true, {"core", "object", "profiledata", "support"} },
{ "debuginfocodeview", "LLVMDebugInfoCodeView", true, {"support", "debuginfomsf"} },
{ "debuginfodwarf", "LLVMDebugInfoDWARF", true, {"binaryformat", "object", "mc", "support"} },
-{ "debuginfod", "LLVMDebuginfod", true, {} },
{ "debuginfogsym", "LLVMDebugInfoGSYM", true, {"mc", "object", "support", "debuginfodwarf"} },
{ "debuginfomsf", "LLVMDebugInfoMSF", true, {"support"} },
{ "debuginfopdb", "LLVMDebugInfoPDB", true, {"binaryformat", "object", "support", "debuginfocodeview", "debuginfomsf"} },
diff --git a/llvm/utils/lldbDataFormatters.py b/llvm/utils/lldbDataFormatters.py
index 46aa15113d2b80..4a34ad2a87c331 100644
--- a/llvm/utils/lldbDataFormatters.py
+++ b/llvm/utils/lldbDataFormatters.py
@@ -374,7 +374,6 @@ def DenseMapSummary(valobj: lldb.SBValue, _) -> str:
return summary
-"""
class DenseMapSynthetic:
valobj: lldb.SBValue
@@ -433,4 +432,3 @@ def update(self):
for indexes in key_buckets.values():
if len(indexes) == 1:
self.child_buckets.append(indexes[0])
-"""
>From dcd5eb1fdb37ef758f1f6737ffbc72d7f9f421d0 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Mon, 22 Jan 2024 22:43:16 -0800
Subject: [PATCH 06/15] Moved IsDwp to a local function for now
---
.../SymbolFile/DWARF/SymbolFileDWARF.cpp | 18 ---------------
.../SymbolFile/DWARF/SymbolFileDWARF.h | 3 ---
.../Debuginfod/SymbolLocatorDebuginfod.cpp | 6 ++---
.../SymbolVendor/ELF/SymbolVendorELF.cpp | 22 ++++++++++++++++---
.../Debuginfod/Inputs/{mk => make-inputs} | 0
5 files changed, 22 insertions(+), 27 deletions(-)
rename lldb/test/Shell/Debuginfod/Inputs/{mk => make-inputs} (100%)
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 12541e929a12da..84ff4c2565a050 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -39,7 +39,6 @@
#include "lldb/Interpreter/OptionValueProperties.h"
#include "Plugins/ExpressionParser/Clang/ClangUtil.h"
-#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
#include "Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h"
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
#include "lldb/Symbol/Block.h"
@@ -4348,23 +4347,6 @@ SymbolFileDWARFDebugMap *SymbolFileDWARF::GetDebugMapSymfile() {
return m_debug_map_symfile;
}
-bool SymbolFileDWARF::IsDwpSymbolFile(const lldb::ModuleSP &module_sp,
- const FileSpec &file_spec) {
- DataBufferSP dwp_file_data_sp;
- lldb::offset_t dwp_file_data_offset = 0;
- // Try to create an ObjectFileELF frorm the filespace
- ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
- module_sp, &file_spec, 0, FileSystem::Instance().GetByteSize(file_spec),
- dwp_file_data_sp, dwp_file_data_offset);
- if (!ObjectFileELF::classof(dwp_obj_file.get()))
- return false;
- static ConstString sect_name_debug_cu_index(".debug_cu_index");
- if (!dwp_obj_file || !dwp_obj_file->GetSectionList()->FindSectionByName(
- sect_name_debug_cu_index))
- return false;
- return true;
-}
-
const std::shared_ptr<SymbolFileDWARFDwo> &SymbolFileDWARF::GetDwpSymbolFile() {
llvm::call_once(m_dwp_symfile_once_flag, [this]() {
// Create a list of files to try and append .dwp to.
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
index 7c59252f9cdbea..2f8f80f8765cb8 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
@@ -280,9 +280,6 @@ class SymbolFileDWARF : public SymbolFileCommon {
DWARFContext &GetDWARFContext() { return m_context; }
- static bool IsDwpSymbolFile(const lldb::ModuleSP &module_sp,
- const FileSpec &file_spec);
-
const std::shared_ptr<SymbolFileDWARFDwo> &GetDwpSymbolFile();
FileSpec GetFile(DWARFUnit &unit, size_t file_idx);
diff --git a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
index 81406654092b3c..2cd7bbbb244902 100644
--- a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
+++ b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
@@ -96,13 +96,13 @@ class PluginProperties : public Properties {
Args m_server_urls;
};
-PluginProperties &GetGlobalPluginProperties() {
+} // namespace
+
+static PluginProperties &GetGlobalPluginProperties() {
static PluginProperties g_settings;
return g_settings;
}
-} // namespace
-
SymbolLocatorDebuginfod::SymbolLocatorDebuginfod() : SymbolLocator() {}
void SymbolLocatorDebuginfod::Initialize() {
diff --git a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
index aeacf9c78ea70f..5f66de1ff67eee 100644
--- a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
+++ b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
@@ -11,7 +11,6 @@
#include <cstring>
#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
-#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/ModuleSpec.h"
#include "lldb/Core/PluginManager.h"
@@ -45,6 +44,24 @@ llvm::StringRef SymbolVendorELF::GetPluginDescriptionStatic() {
"executables.";
}
+// If this is needed elsewhere, it can be exported/moved.
+static bool IsDwpSymbolFile(const lldb::ModuleSP &module_sp,
+ const FileSpec &file_spec) {
+ DataBufferSP dwp_file_data_sp;
+ lldb::offset_t dwp_file_data_offset = 0;
+ // Try to create an ObjectFileELF frorm the filespace
+ ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
+ module_sp, &file_spec, 0, FileSystem::Instance().GetByteSize(file_spec),
+ dwp_file_data_sp, dwp_file_data_offset);
+ if (!ObjectFileELF::classof(dwp_obj_file.get()))
+ return false;
+ static ConstString sect_name_debug_cu_index(".debug_cu_index");
+ if (!dwp_obj_file || !dwp_obj_file->GetSectionList()->FindSectionByName(
+ sect_name_debug_cu_index))
+ return false;
+ return true;
+}
+
// CreateInstance
//
// Platforms can register a callback to use when creating symbol vendors to
@@ -88,8 +105,7 @@ SymbolVendorELF::CreateInstance(const lldb::ModuleSP &module_sp,
FileSpecList search_paths = Target::GetDefaultDebugFileSearchPaths();
FileSpec dsym_fspec =
PluginManager::LocateExecutableSymbolFile(module_spec, search_paths);
- if (!dsym_fspec ||
- plugin::dwarf::SymbolFileDWARF::IsDwpSymbolFile(module_sp, dsym_fspec)) {
+ if (!dsym_fspec || IsDwpSymbolFile(module_sp, dsym_fspec)) {
// If we have a stripped binary or if we got a DWP file, we should prefer
// symbols in the executable acquired through a plugin.
ModuleSpec unstripped_spec =
diff --git a/lldb/test/Shell/Debuginfod/Inputs/mk b/lldb/test/Shell/Debuginfod/Inputs/make-inputs
similarity index 100%
rename from lldb/test/Shell/Debuginfod/Inputs/mk
rename to lldb/test/Shell/Debuginfod/Inputs/make-inputs
>From 11a0691e2eefb87dbb4c355b193a249aab9576c2 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Tue, 23 Jan 2024 08:38:59 -0800
Subject: [PATCH 07/15] Switched to identifying DWP files by type instead of
name.
---
lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
index 5f66de1ff67eee..ec734b8bb64f87 100644
--- a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
+++ b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp
@@ -49,15 +49,16 @@ static bool IsDwpSymbolFile(const lldb::ModuleSP &module_sp,
const FileSpec &file_spec) {
DataBufferSP dwp_file_data_sp;
lldb::offset_t dwp_file_data_offset = 0;
- // Try to create an ObjectFileELF frorm the filespace
+ // Try to create an ObjectFile from the file_spec.
ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
module_sp, &file_spec, 0, FileSystem::Instance().GetByteSize(file_spec),
dwp_file_data_sp, dwp_file_data_offset);
if (!ObjectFileELF::classof(dwp_obj_file.get()))
return false;
- static ConstString sect_name_debug_cu_index(".debug_cu_index");
- if (!dwp_obj_file || !dwp_obj_file->GetSectionList()->FindSectionByName(
- sect_name_debug_cu_index))
+ // The presence of a debug_cu_index section is the key identifying feature of
+ // a DWP file.
+ if (!dwp_obj_file || !dwp_obj_file->GetSectionList()->FindSectionByType(
+ eSectionTypeDWARFDebugCuIndex, false))
return false;
return true;
}
>From 3e17283056ef336e8fce766d920bc39b0c4f38b6 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Tue, 23 Jan 2024 09:36:07 -0800
Subject: [PATCH 08/15] Cleaned up tests comments-n-stuff
---
.../{tests.md => Debuginfod-testing.md} | 37 ++++++++++---------
.../Shell/Debuginfod/okdstrip-negative.test | 26 ++++++-------
.../Shell/Debuginfod/okdstrip-no-locator.test | 26 ++++++-------
.../Shell/Debuginfod/okdstrip-positive-a.test | 29 ++++++---------
.../Shell/Debuginfod/okdstrip-positive-b.test | 29 ++++++---------
.../test/Shell/Debuginfod/split-negative.test | 18 ++++-----
.../Shell/Debuginfod/split-no-locator.test | 22 +++++------
.../Debuginfod/split-okdstrip-negative.test | 24 ++++++------
.../Debuginfod/split-okdstrip-no-locator.test | 28 +++++++-------
.../Debuginfod/split-okdstrip-positive.test | 25 +++++++------
.../test/Shell/Debuginfod/split-positive.test | 27 ++++++--------
.../Debuginfod/split-strip-negative.test | 17 ++++-----
.../Debuginfod/split-strip-no-locator.test | 29 ++++++++-------
.../Debuginfod/split-strip-positive.test | 25 +++++++------
.../test/Shell/Debuginfod/strip-negative.test | 19 ++++------
.../Shell/Debuginfod/strip-no-locator.test | 24 ++++++------
.../Shell/Debuginfod/strip-positive-a.test | 27 +++++---------
.../Shell/Debuginfod/strip-positive-b.test | 27 +++++---------
18 files changed, 207 insertions(+), 252 deletions(-)
rename lldb/test/Shell/Debuginfod/{tests.md => Debuginfod-testing.md} (68%)
diff --git a/lldb/test/Shell/Debuginfod/tests.md b/lldb/test/Shell/Debuginfod/Debuginfod-testing.md
similarity index 68%
rename from lldb/test/Shell/Debuginfod/tests.md
rename to lldb/test/Shell/Debuginfod/Debuginfod-testing.md
index cbde54d75af7a8..df335ca11ffa42 100644
--- a/lldb/test/Shell/Debuginfod/tests.md
+++ b/lldb/test/Shell/Debuginfod/Debuginfod-testing.md
@@ -10,35 +10,36 @@ files we need for testing.
- For assumption validation, the `*-no-locator` tests verify that lldb works as
the test expects when files that Debuginfod should provide (`.dwp` files,
- `.gnu.debuglink`'ed files) are _already_ there.
+ `.gnu.debuglink`'ed files, etc...) are _already_ there.
- The `*-negative` tests validate that symbols _aren't_ found without
- Debuginfod, to ensure they haven't been cached from previous runs.
-- The `*-positive` tests check that the Debuginfod symbol locator is providing
+ Debuginfod, to ensure they haven't been cached from previous runs (in the
+ hopes of preventing false positive testing).
+- The `*-positive*` tests check that the Debuginfod symbol locator is providing
the expected symbols when the debugger doesn't already have them available.
### Symbol file variations tested
-There are 5 variations of symbol data where Debuginfod can provide value:
+There are 5 variations of symbol data where Debuginfod provides value:
-1. The 'simple-stripped' build variation is a binary built with debug
- information (`-g`), but stripped for deployment. A Debuginfod service can
- then host the unstripped binary (as either `executable` or `debuginfo`).
-2. The 'okd-stripped' build variation is a binary build with `-g`, stripped for
+1. The `strip` build variation is a binary built with debug information (`-g`),
+ but stripped for deployment. The Debuginfod service can then host the
+ unstripped binary (as either `executable` or `debuginfo`).
+2. The `okdstrip` build variation is a binary build with `-g`, stripped for
deployment, where the Debuginfod service is hosting the output of
`objcopy --only-keep-debug` (which should also be linked to the stripped file
using `--add-gnu-debuglink`). Again, the file could be hosted as either
`executable` or `debuginfo`.
-3. The 'simple-split' build variation is a binary built with `-gsplit-dwarf`
- that produces `.dwo` which are subsequently linked together (using
- `llvm-dwp`) into a single `.dwp` file. The Debuginfod service should host the
- `.dwp` file as `debuginfo`.
-4. **The 'stripped-split' build variation is a binary built with `-gsplit-dwarf`,
+3. The `split` build variation is a binary built with `-gsplit-dwarf` that
+ produces `.dwo` which are subsequently linked together (using `llvm-dwp`)
+ into a single `.dwp` file. The Debuginfod service hosts the `.dwp` file as
+ `debuginfo`.
+4. The `split-strip` build variation is a binary built with `-gsplit-dwarf`,
then stripped in the same manner as variation #1. For this variation,
- Debuginfod should host the unstripped binary as `executable` and the `.dwp`
- file as `debuginfo`.**
-5. The 'okd-stripped-split' build variation is the combination of variations 2
- and 3, where Debuginfod hosts the `.gnu.debuglink`'ed file as `executable`
- and the `.dwp` again as `debuginfo`.
+ Debuginfod hosts the unstripped binary as `executable` and the `.dwp` file as
+ `debuginfo`.
+5. The `split-okdstrip` build variation is the combination of variations 2 and
+ 3, where Debuginfod hosts the `.gnu.debuglink`'ed file as `executable` and
+ the `.dwp` as `debuginfo`.
### Lack of clarity/messy capabilities from Debuginfod
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-negative.test b/lldb/test/Shell/Debuginfod/okdstrip-negative.test
index a63beccd249b1f..8b0603e6f5860d 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-negative.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-negative.test
@@ -1,24 +1,20 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 2 negative:
+# * A stripped binary, with an "-only-keep-debug" symbols which is *not* there.
+# * LLDB should fail to find the OKD file automatically using .gnu.debuglink.
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 2
-# A stripped binary, with an "-only-keep-debug" symbols which is *not* there.
-# LLDB should fail to find the OKD file automatically using .gnu.debuglink
-
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
-# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
-# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
-# Don't leave the stripped .dbg file laying around for the debugger to discover
-# RUN: rm %t/output/bin-stripped.dbg
-# RUN: chmod a+x %t/output/bin-stripped
-
-# Verify that we find symbols from the Debuginfod service
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/bin-stripped.dbg
+# RUN: llvm-objcopy %t/bin-stripped.tmp --add-gnu-debuglink=%t/bin-stripped.dbg %t/bin-stripped
+# RUN: rm %t/bin-stripped.dbg
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target create %t/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test b/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
index f45477a8f037c0..943ab100437c6c 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
@@ -1,26 +1,22 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 2 baseline:
+# * A stripped binary, with an "-only-keep-debug" symbols file.
+# * LLDB should find the OKD file automatically using .gnu.debuglink.
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 2
-# A stripped binary, with an "-only-keep-debug" symbols
-# LLDB should find the OKD file automatically using .gnu.debuglink
-
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
-# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
-# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
-# RUN: chmod a+x %t/output/bin-stripped
-
-# Verify that we find symbols from the Debuginfod service
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/bin-stripped.dbg
+# RUN: llvm-objcopy %t/bin-stripped.tmp --add-gnu-debuglink=%t/bin-stripped.dbg %t/bin-stripped
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target create %t/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# Should have source file information:
-
+# Should have source file and line information:
# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
index 12cb9cf0282dda..77abcc7ca9d665 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
@@ -1,33 +1,28 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 2a:
+# A stripped binary, with an "-only-keep-debug" symbols file.
+# LLDB should request the symbols from Debuginfod as 'debuginfo'.
-# RUN: mkdir -p %t/output
+# Set up a file-system 'hosted' Debuginfod server.
+# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
-# Scenario 2a
-# A stripped binary, with an "-only-keep-debug" symbols file
-# LLDB should request the symbols from Debuginfod as 'debuginfo'
-
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
-# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
-# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
-# Move the stripped .dbg into the file:// hosted Debuginfod location
-# RUN: mv %t/output/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/debuginfo
-# RUN: chmod a+x %t/output/bin-stripped
-
-# Verify that we find symbols from the Debuginfod service
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/bin-stripped.dbg
+# RUN: llvm-objcopy %t/bin-stripped.tmp --add-gnu-debuglink=%t/bin-stripped.dbg %t/bin-stripped
+# RUN: mv %t/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/debuginfo
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target create %t/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# Should have source file information:
-
+# Should have source file and line information:
# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
index ace1cfc58e0717..3555d4c2fc2874 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
@@ -1,33 +1,28 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 2b:
+# A stripped binary, with an "-only-keep-debug" symbols file.
+# LLDB should request the symbols from Debuginfod as 'executable'.
-# RUN: mkdir -p %t/output
+# Set up a file-system 'hosted' Debuginfod server.
+# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
-# Scenario 2b
-# A stripped binary, with an "-only-keep-debug" symbols file
-# LLDB should request the symbols from Debuginfod as 'executable'
-
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped.tmp
-# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/output/bin-stripped.dbg
-# RUN: llvm-objcopy %t/output/bin-stripped.tmp --add-gnu-debuglink=%t/output/bin-stripped.dbg %t/output/bin-stripped
-# Move the stripped .dbg into the file:// hosted Debuginfod location
-# RUN: mv %t/output/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/executable
-# RUN: chmod a+x %t/output/bin-stripped
-
-# Verify that we find symbols from the Debuginfod service
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/bin-stripped.dbg
+# RUN: llvm-objcopy %t/bin-stripped.tmp --add-gnu-debuglink=%t/bin-stripped.dbg %t/bin-stripped
+# RUN: mv %t/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/executable
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target create %t/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# Should have source file information:
-
+# Should have source file and line information:
# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/split-negative.test b/lldb/test/Shell/Debuginfod/split-negative.test
index 351bb0b3c44be9..6458abd4485df6 100644
--- a/lldb/test/Shell/Debuginfod/split-negative.test
+++ b/lldb/test/Shell/Debuginfod/split-negative.test
@@ -1,19 +1,16 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 3 negative:
+# * A split-dwarf binary with a *missing* .dwp file (validate nothing's cached).
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 3: No locator
-# A split binary, with a *missing* .dwp file
-
-# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
-# RUN: chmod a+x %t/output/bin-split
-
-# Negative test (We don't find symbols without the Debuginfod service)
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/bin-split
+# RUN: chmod a+x %t/bin-split
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-split" \
+# RUN: -o "target create %t/bin-split" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
@@ -22,4 +19,5 @@
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
# CHECK-NEXT: {{^[- ]+$}}
+# Verify it's missing the DWP file (and DWOs)
# CHECK-NEXT: 0x{{[0-9a-f]+.*}} unable to locate .dwo debug file {{.*}}bin-split.dwo{{.*}} for skeleton DIE 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/split-no-locator.test b/lldb/test/Shell/Debuginfod/split-no-locator.test
index bb60100b0e0547..11ac3c60d5b87a 100644
--- a/lldb/test/Shell/Debuginfod/split-no-locator.test
+++ b/lldb/test/Shell/Debuginfod/split-no-locator.test
@@ -1,21 +1,17 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 3 baseline:
+# * A split-dwarf binary with the .dwp file right next to the binary.
-# RUN: rm -rf %t || echo ok
-# RUN: mkdir -p %t/output
-# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 3: No locator
-# A split binary, with a .dwp file right next to the binary
-
-# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
-# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/output/bin-split.dwp
-# RUN: chmod a+x %t/output/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/bin-split.dwp
+# RUN: chmod a+x %t/bin-split
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-split" \
+# RUN: -o "target create %t/bin-split" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
@@ -24,3 +20,5 @@
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
# CHECK-NEXT: {{^[- ]+$}}
+# Verify it found the DWP file properly:
+# CHECK-NEXT: 0x{{[0-9a-f]+.* +}}/{{.*}}/bin-split.dwp({{.*}}bin-split.dwo){{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-negative.test b/lldb/test/Shell/Debuginfod/split-okdstrip-negative.test
index 4bca2113d73ddb..0b2267329650a5 100644
--- a/lldb/test/Shell/Debuginfod/split-okdstrip-negative.test
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-negative.test
@@ -1,24 +1,24 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 5 negative:
+# * An "only-keep-debug" stripped, split binary with a _missing_
+# * --add-gnu-debuglink symbol file.
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 4: No locator
-# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
-
-# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped.tmp
-# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/output/sym-split
-# RUN: llvm-objcopy %t/output/bin-split-stripped.tmp --add-gnu-debuglink=%t/output/sym-split %t/output/bin-split-stripped
-# RUN: rm %t/output/sym-split
-# RUN: chmod a+x %t/output/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/sym-split
+# RUN: llvm-objcopy %t/bin-split-stripped.tmp --add-gnu-debuglink=%t/sym-split %t/bin-split-stripped
+# RUN: rm %t/sym-split
+# RUN: chmod a+x %t/bin-split-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target create %t/bin-split-stripped" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# CHECK: Current executable set to {{.*}}.tmp/output/bin-split-stripped' (x86_64).
+# CHECK: Current executable set to {{.*}}/bin-split-stripped' (x86_64).
# CHECK-NEXT: target modules dump separate-debug-info
# CHECK-NEXT: error: no matching executable images found
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test b/lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test
index d210a1a7dd54b0..c4574257b5d07c 100644
--- a/lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-no-locator.test
@@ -1,25 +1,27 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 5 baseline:
+# * A stripped, split binary, with --add-gnu-debuglink symbols automatically
+# * found, with a .dwp file located next to the binary.
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 4: No locator
-# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
-
-# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped.tmp
-# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/output/sym-split
-# RUN: llvm-objcopy %t/output/bin-split-stripped.tmp --add-gnu-debuglink=%t/output/sym-split %t/output/bin-split-stripped
-# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/output/bin-split-stripped.dwp
-# RUN: chmod a+x %t/output/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/sym-split
+# RUN: llvm-objcopy %t/bin-split-stripped.tmp --add-gnu-debuglink=%t/sym-split %t/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/bin-split-stripped.dwp
+# RUN: chmod a+x %t/bin-split-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target create %t/bin-split-stripped" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK: Symbol file: {{.*}}/bin-split-stripped
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK: {{0x[0-9a-f]+.* +.*}}/output/bin-split-stripped.dwp(gen/bin-split.dwo){{ *$}}
+# CHECK-NEXT: {{[- ]+}}
+# Verify it found the DWP file properly
+# CHECK-NEXT: 0x{{[0-9a-f]+.* +}}/{{.*}}/bin-split-stripped.dwp({{.*}}bin-split.dwo){{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
index 3261a78b22bb22..9d141b0f87abe4 100644
--- a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
@@ -1,26 +1,26 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 5:
+# * A stripped, split binary, with --add-gnu-debuglink symbol file where
+# * both files are *only* available through Debuginfod.
-# RUN: mkdir -p %t/output
+# Set up a file-system 'hosted' Debuginfod server
+# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
-# Scenario 4: No locator
-# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
-
-# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped.tmp
-# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/output/sym-split
-# RUN: llvm-objcopy %t/output/bin-split-stripped.tmp --add-gnu-debuglink=%t/output/sym-split %t/output/bin-split-stripped
-# RUN: mv %t/output/sym-split %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped.tmp
+# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/sym-split
+# RUN: llvm-objcopy %t/bin-split-stripped.tmp --add-gnu-debuglink=%t/sym-split %t/bin-split-stripped
+# RUN: mv %t/sym-split %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
-# RUN: chmod a+x %t/output/bin-split-stripped
+# RUN: chmod a+x %t/bin-split-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target create %t/bin-split-stripped" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
@@ -28,4 +28,5 @@
# CHECK: Symbol file: {{.*}}/bin-split-stripped
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
+# CHECK-NEXT: {{[- ]+}}
+# CHECK-NEXT: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-positive.test b/lldb/test/Shell/Debuginfod/split-positive.test
index 50b7082aac43c0..572b36f505c1b9 100644
--- a/lldb/test/Shell/Debuginfod/split-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-positive.test
@@ -1,35 +1,30 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 3:
+# * A split-dwarf binary with a Debuginfod-hosted .dwp file.
-# RUN: mkdir -p %t/output
+# Set up a file-system 'hosted' Debuginfod server
+# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
-# Scenario 2
-# A stripped binary, with an "-only-keep-debug" symbols file
-# Debuginfo has the 'okd' file as the 'debuginfo' item
-# LLDB should ask Debuginfod for it's symbols
-
-# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/bin-split
# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
-# RUN: chmod a+x %t/output/bin-split
-
-# Positive test: We find the DWP file with the Debuginfod service
+# RUN: chmod a+x %t/bin-split
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/bin-split" \
+# RUN: -o "target create %t/bin-split" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# CHECK: Symbol file: {{.*}}/output/bin-split
+# CHECK: Symbol file: {{.*}}/bin-split
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK: {{[- ]+}}
-# The cache key is stable, so we can mandate that we discover this thing from the cache
+# CHECK-NEXT: {{[- ]+}}
+# The cache key is stable, so mandating it's location verifies it was cached
# The '.tmp' (sort of) ensures the cache is our private cache, not the system cache
-# CHECK: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
+# CHECK-NEXT: {{0x[0-9a-f]+.* +}}/{{.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-strip-negative.test b/lldb/test/Shell/Debuginfod/split-strip-negative.test
index 163714cb20b77e..0359fdb0cfb7d4 100644
--- a/lldb/test/Shell/Debuginfod/split-strip-negative.test
+++ b/lldb/test/Shell/Debuginfod/split-strip-negative.test
@@ -1,20 +1,19 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 4 negative:
+# * A stripped, split binary with missing symbols and missing .dwp file.
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 4: Negative
-# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
-
-# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped
-# RUN: chmod a+x %t/output/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped
+# RUN: chmod a+x %t/bin-split-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target create %t/bin-split-stripped" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# CHECK: Current executable set to '{{.*}}/output/bin-split-stripped'
+# CHECK: Current executable set to '{{.*}}/bin-split-stripped'
# CHECK: error: no matching executable images found
diff --git a/lldb/test/Shell/Debuginfod/split-strip-no-locator.test b/lldb/test/Shell/Debuginfod/split-strip-no-locator.test
index 710313e8443985..a7638f918811dd 100644
--- a/lldb/test/Shell/Debuginfod/split-strip-no-locator.test
+++ b/lldb/test/Shell/Debuginfod/split-strip-no-locator.test
@@ -1,26 +1,27 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 4 baseline:
+# * A stripped, split binary, with symbols manually added and the
+# * .dwp file located (automatically) sitting next to the binary.
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 4: No locator
-# A stripped, split binary, symbols manually added and a .dwp file right next to the binary
-
-# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped
-# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/output/bin-split
-# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/output/bin-split-stripped.dwp
-# RUN: chmod a+x %t/output/bin-split-stripped
-# RUN: chmod a+x %t/output/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/bin-split
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/bin-split-stripped.dwp
+# RUN: chmod a+x %t/bin-split-stripped
+# RUN: chmod a+x %t/bin-split
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-split-stripped" \
-# RUN: -o "target symbols add %t/output/bin-split" \
+# RUN: -o "target create %t/bin-split-stripped" \
+# RUN: -o "target symbols add %t/bin-split" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK: Symbol file: {{.*}}/bin-split-stripped
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK: {{0x[0-9a-f]+.* +.*}}/output/bin-split-stripped.dwp(gen/bin-split.dwo){{ *$}}
+# CHECK-NEXT: {{^[- ]+$}}
+# CHECK-NEXT: {{0x[0-9a-f]+.* +.*}}/bin-split-stripped.dwp({{.*}}/bin-split.dwo){{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-strip-positive.test b/lldb/test/Shell/Debuginfod/split-strip-positive.test
index 9ebc74cb5bd362..261319919bc94f 100644
--- a/lldb/test/Shell/Debuginfod/split-strip-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-strip-positive.test
@@ -1,31 +1,32 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 4:
+# * A stripped, split binary, with the unstripped binary and .dwp file
+# * hosted by Debuginfod.
-# RUN: mkdir -p %t/output
+# Set up a file-system 'hosted' Debuginfod server.
+# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
-# Scenario 4:
-# A stripped, split binary, symbols manually added and a .dwp file
-# The unstripped binary should be picked up from /82...94/executable
-# The .dwp file should be picke dup from /82...94/debuginfo
-
-# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/output/bin-split-stripped
+# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped
# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
-# RUN: chmod a+x %t/output/bin-split-stripped
+# RUN: chmod a+x %t/bin-split-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/bin-split-stripped" \
+# RUN: -o "target create %t/bin-split-stripped" \
# RUN: -o "target modules dump separate-debug-info" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# CHECK: Symbol file: {{.*}}/bin-split
+# CHECK: Symbol file: {{.*}}/bin-split-stripped
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
-# CHECK: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
+# CHECK-NEXT: {{^[- ]+$}}
+# The cache key is stable, so mandating it's location verifies it was cached.
+# The '.tmp' (sort of) ensures the cache is our private cache, not the system cache.
+# CHECK-NEXT: {{0x[0-9a-f]+.* +}}/{{.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/strip-negative.test b/lldb/test/Shell/Debuginfod/strip-negative.test
index 2c4128e0d04b68..5aae7189678a11 100644
--- a/lldb/test/Shell/Debuginfod/strip-negative.test
+++ b/lldb/test/Shell/Debuginfod/strip-negative.test
@@ -1,23 +1,20 @@
# REQUIRES: system-linux && native && target-x86_64
-# This is paranoia to make sure there's not a cached symbol file laying around
+# Scenario 1 negative:
+# * A plain stripped binary, no symbols available
+# * Negative test: make sure nothing's been cached
-# RUN: mkdir -p %t/output
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# Scenario 1
-# A simple stripped binary, no symbols (negative test: nothing's been cached, right?)
-
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
-# RUN: chmod a+x %t/output/bin-stripped
-
-# Run a negative test (make sure we don't have symbols)
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target create %t/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
# Should NOT have source file information:
-
# CHECK: Breakpoint 1: where = bin-stripped`func, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/strip-no-locator.test b/lldb/test/Shell/Debuginfod/strip-no-locator.test
index 5ae9691d493986..ea4bb47648ecbd 100644
--- a/lldb/test/Shell/Debuginfod/strip-no-locator.test
+++ b/lldb/test/Shell/Debuginfod/strip-no-locator.test
@@ -1,24 +1,22 @@
# REQUIRES: system-linux && native && target-x86_64
-# RUN: mkdir -p %t/output
+# Scenario 1 baseline:
+# * A plain stripped binary, add the unstripped binary as a symbol file
+# * Sanity for functional parity with Debuginfod-provided symbols
-# Scenario 1
-# A simple stripped binary, add the unstripped binary as a symbol file
-# (Sanity for comparison with Debuginfod-provided symbols)
+# RUN: rm -rf %t
+# RUN: mkdir -p %t
-# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/output/bin-normal
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
-# RUN: chmod a+x %t/output/bin-stripped
-
-# Run a negative test (make sure we don't have symbols)
+# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/bin-normal
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup false" \
-# RUN: -o "target create %t/output/bin-stripped" \
-# RUN: -o "target symbols add %t/output/bin-normal" \
+# RUN: -o "target create %t/bin-stripped" \
+# RUN: -o "target symbols add %t/bin-normal" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# Should NOT have source file information:
-
+# Should have correct source file and line information:
# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/strip-positive-a.test b/lldb/test/Shell/Debuginfod/strip-positive-a.test
index 98df28b5c3232b..baa63f068bbff8 100644
--- a/lldb/test/Shell/Debuginfod/strip-positive-a.test
+++ b/lldb/test/Shell/Debuginfod/strip-positive-a.test
@@ -1,35 +1,26 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 1a:
+# * A plain stripped binary
+# * Debuginfod has the unstripped binary as the 'debuginfo'
-# RUN: mkdir -p %t/output
+# Set up a file-system 'hosted' Debuginfod server:
+# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
-# Scenario 1a
-# A simple stripped binary
-# Debuginfod has the unstripped binary as the 'debuginfo'
-
-# Put the unstripped binary in the Debuginfod server as 'debuginfo'
-
# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/debuginfo
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
-# RUN: chmod a+x %t/output/bin-stripped
-
-# First, run a negative test (make sure we don't have symbols)
-
-# Scenario 1, postive test: Can we pull the executable
-# from Debuginfod and get a breakpoint set properly?
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target create %t/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# Should have source file info:
-
+# Should have source file and line info:
# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/strip-positive-b.test b/lldb/test/Shell/Debuginfod/strip-positive-b.test
index cc9aaee072b0f8..f1046bb8448f15 100644
--- a/lldb/test/Shell/Debuginfod/strip-positive-b.test
+++ b/lldb/test/Shell/Debuginfod/strip-positive-b.test
@@ -1,35 +1,26 @@
# REQUIRES: system-linux && native && target-x86_64
-# We set up a file-system 'hosted' Debuginfod server
+# Scenario 1b:
+# * A plain stripped binary
+# * Debuginfod has the unstripped binary as the 'executable'
-# RUN: mkdir -p %t/output
+# Set up a file-system 'hosted' Debuginfod server:
+# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
-# Scenario 1a
-# A simple stripped binary
-# Debuginfod has the unstripped binary as the 'executable'
-
-# Put the unstripped binary in the Debuginfod server as 'executable'
-
# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/executable
-# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/output/bin-stripped
-# RUN: chmod a+x %t/output/bin-stripped
-
-# First, run a negative test (make sure we don't have symbols)
-
-# Scenario 1, postive test: Can we pull the executable
-# from Debuginfod and get a breakpoint set properly?
+# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped
+# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
# RUN: -o "settings set plugin.symbol-locator.debuginfod.cache-path %t/cache" \
# RUN: -o "settings clear plugin.symbol-locator.debuginfod.server-urls" \
# RUN: -o "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%t" \
-# RUN: -o "target create %t/output/bin-stripped" \
+# RUN: -o "target create %t/bin-stripped" \
# RUN: -o "b func" \
# RUN: -o "quit" \
# RUN: 2>&1 | FileCheck %s
-# Should have source file info:
-
+# Should have source file and line info:
# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
>From 7c0a595107865a493e1fa366668b3bb401c21e9f Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Tue, 23 Jan 2024 09:52:50 -0800
Subject: [PATCH 09/15] Positive tests only run if we have libcurl
---
lldb/test/Shell/Debuginfod/okdstrip-positive-a.test | 2 +-
lldb/test/Shell/Debuginfod/okdstrip-positive-b.test | 2 +-
lldb/test/Shell/Debuginfod/split-okdstrip-positive.test | 2 +-
lldb/test/Shell/Debuginfod/split-positive.test | 6 +++---
lldb/test/Shell/Debuginfod/split-strip-positive.test | 2 +-
lldb/test/Shell/Debuginfod/strip-positive-a.test | 2 +-
lldb/test/Shell/Debuginfod/strip-positive-b.test | 2 +-
lldb/test/Shell/lit.cfg.py | 3 +++
lldb/test/Shell/lit.site.cfg.py.in | 1 +
llvm/lib/Debuginfod/Debuginfod.cpp | 1 +
10 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
index 77abcc7ca9d665..930a64e8518701 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
@@ -1,4 +1,4 @@
-# REQUIRES: system-linux && native && target-x86_64
+# REQUIRES: curl && system-linux && native && target-x86_64
# Scenario 2a:
# A stripped binary, with an "-only-keep-debug" symbols file.
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
index 3555d4c2fc2874..05d9fa1ebbf36e 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
@@ -1,4 +1,4 @@
-# REQUIRES: system-linux && native && target-x86_64
+# REQUIRES: curl && system-linux && native && target-x86_64
# Scenario 2b:
# A stripped binary, with an "-only-keep-debug" symbols file.
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
index 9d141b0f87abe4..5f1eb18e21c7c5 100644
--- a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
@@ -1,4 +1,4 @@
-# REQUIRES: system-linux && native && target-x86_64
+# REQUIRES: curl && system-linux && native && target-x86_64
# Scenario 5:
# * A stripped, split binary, with --add-gnu-debuglink symbol file where
diff --git a/lldb/test/Shell/Debuginfod/split-positive.test b/lldb/test/Shell/Debuginfod/split-positive.test
index 572b36f505c1b9..445b6b7eef96f6 100644
--- a/lldb/test/Shell/Debuginfod/split-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-positive.test
@@ -1,4 +1,4 @@
-# REQUIRES: system-linux && native && target-x86_64
+# REQUIRES: curl && system-linux && native && target-x86_64
# Scenario 3:
# * A split-dwarf binary with a Debuginfod-hosted .dwp file.
@@ -25,6 +25,6 @@
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
# CHECK-NEXT: {{[- ]+}}
-# The cache key is stable, so mandating it's location verifies it was cached
-# The '.tmp' (sort of) ensures the cache is our private cache, not the system cache
+# The cache key is stable, so mandating it's location verifies it was cached.
+# The '.tmp' (sort of) ensures the cache is our private cache, not the system cache.
# CHECK-NEXT: {{0x[0-9a-f]+.* +}}/{{.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-strip-positive.test b/lldb/test/Shell/Debuginfod/split-strip-positive.test
index 261319919bc94f..3c19382d2f6df6 100644
--- a/lldb/test/Shell/Debuginfod/split-strip-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-strip-positive.test
@@ -1,4 +1,4 @@
-# REQUIRES: system-linux && native && target-x86_64
+# REQUIRES: curl && system-linux && native && target-x86_64
# Scenario 4:
# * A stripped, split binary, with the unstripped binary and .dwp file
diff --git a/lldb/test/Shell/Debuginfod/strip-positive-a.test b/lldb/test/Shell/Debuginfod/strip-positive-a.test
index baa63f068bbff8..e8ca8584c2fbc4 100644
--- a/lldb/test/Shell/Debuginfod/strip-positive-a.test
+++ b/lldb/test/Shell/Debuginfod/strip-positive-a.test
@@ -1,4 +1,4 @@
-# REQUIRES: system-linux && native && target-x86_64
+# REQUIRES: curl && system-linux && native && target-x86_64
# Scenario 1a:
# * A plain stripped binary
diff --git a/lldb/test/Shell/Debuginfod/strip-positive-b.test b/lldb/test/Shell/Debuginfod/strip-positive-b.test
index f1046bb8448f15..a7af5bdbdfcf1e 100644
--- a/lldb/test/Shell/Debuginfod/strip-positive-b.test
+++ b/lldb/test/Shell/Debuginfod/strip-positive-b.test
@@ -1,4 +1,4 @@
-# REQUIRES: system-linux && native && target-x86_64
+# REQUIRES: curl && system-linux && native && target-x86_64
# Scenario 1b:
# * A plain stripped binary
diff --git a/lldb/test/Shell/lit.cfg.py b/lldb/test/Shell/lit.cfg.py
index d75c1f532e147f..9a596a40b29664 100644
--- a/lldb/test/Shell/lit.cfg.py
+++ b/lldb/test/Shell/lit.cfg.py
@@ -144,6 +144,9 @@ def calculate_arch_features(arch_string):
if config.lldb_system_debugserver:
config.available_features.add("system-debugserver")
+if config.llvm_enable_curl:
+ config.available_features.add("curl")
+
if config.have_lldb_server:
config.available_features.add("lldb-server")
diff --git a/lldb/test/Shell/lit.site.cfg.py.in b/lldb/test/Shell/lit.site.cfg.py.in
index 736dfc335732b5..5428691c129a1c 100644
--- a/lldb/test/Shell/lit.site.cfg.py.in
+++ b/lldb/test/Shell/lit.site.cfg.py.in
@@ -19,6 +19,7 @@ config.python_executable = "@Python3_EXECUTABLE@"
config.have_zlib = @LLVM_ENABLE_ZLIB@
config.objc_gnustep_dir = "@LLDB_TEST_OBJC_GNUSTEP_DIR@"
config.lldb_enable_lzma = @LLDB_ENABLE_LZMA@
+config.llvm_enable_curl = @LLVM_ENABLE_CURL@
config.host_triple = "@LLVM_HOST_TRIPLE@"
config.lldb_bitness = 64 if @LLDB_IS_64_BITS@ else 32
config.lldb_enable_python = @LLDB_ENABLE_PYTHON@
diff --git a/llvm/lib/Debuginfod/Debuginfod.cpp b/llvm/lib/Debuginfod/Debuginfod.cpp
index abea0d831e0ca8..2927ba21323885 100644
--- a/llvm/lib/Debuginfod/Debuginfod.cpp
+++ b/llvm/lib/Debuginfod/Debuginfod.cpp
@@ -158,6 +158,7 @@ Expected<std::string> getCachedOrDownloadDebuginfo(BuildIDRef ID) {
std::string UrlPath = getDebuginfodDebuginfoUrlPath(ID);
return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath);
}
+
// General fetching function.
Expected<std::string> getCachedOrDownloadArtifact(StringRef UniqueKey,
StringRef UrlPath) {
>From 2eb8493e27d23cbd9671c26d3b73e7a8dba06f74 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Tue, 23 Jan 2024 10:02:50 -0800
Subject: [PATCH 10/15] Cleaned up comment in the SymLocator cmake file
---
lldb/source/Plugins/SymbolLocator/CMakeLists.txt | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lldb/source/Plugins/SymbolLocator/CMakeLists.txt b/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
index f536760d8feb0e..3367022639ab85 100644
--- a/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
+++ b/lldb/source/Plugins/SymbolLocator/CMakeLists.txt
@@ -1,8 +1,8 @@
-# Order matters here, as the first symbol locator will prevent further
-# searching. For DWARF binaries that are both stripped & split, the Default
-# plugin will return the stripped binary when asked for the ObjectFile,
-# preventing an unstripped binary from being requested from the Debuginfod
-# provider
+# Order matters here: the first symbol locator prevents further searching.
+# For DWARF binaries that are both stripped and split, the Default plugin
+# will return the stripped binary when asked for the ObjectFile, which then
+# prevents an unstripped binary from being requested from the Debuginfod
+# provider.
add_subdirectory(Debuginfod)
add_subdirectory(Default)
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
>From 79ac3bee249a45c473261137f13a25ee3d11f291 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Tue, 23 Jan 2024 13:00:57 -0800
Subject: [PATCH 11/15] Updated tests for smaller main.c
---
.../Shell/Debuginfod/Inputs/bin-normal.yaml | 10 +--
.../Debuginfod/Inputs/bin-split-dwp.yaml | 4 +-
.../Debuginfod/Inputs/bin-split-stripped.yaml | 4 +-
.../Shell/Debuginfod/Inputs/bin-split.yaml | 6 +-
.../Shell/Debuginfod/Inputs/bin-stripped.yaml | 4 +-
lldb/test/Shell/Debuginfod/Inputs/main.c | 72 +------------------
lldb/test/Shell/Debuginfod/Inputs/make-inputs | 2 +-
.../Shell/Debuginfod/Inputs/sym-split.yaml | 6 +-
.../Shell/Debuginfod/Inputs/sym-stripped.yaml | 10 +--
.../Shell/Debuginfod/okdstrip-no-locator.test | 2 +-
.../Shell/Debuginfod/okdstrip-positive-a.test | 6 +-
.../Shell/Debuginfod/okdstrip-positive-b.test | 6 +-
.../Debuginfod/split-okdstrip-positive.test | 8 +--
.../test/Shell/Debuginfod/split-positive.test | 6 +-
.../Debuginfod/split-strip-positive.test | 8 +--
.../Shell/Debuginfod/strip-no-locator.test | 2 +-
.../Shell/Debuginfod/strip-positive-a.test | 6 +-
.../Shell/Debuginfod/strip-positive-b.test | 6 +-
llvm/lib/Debuginfod/Debuginfod.cpp | 41 ++---------
19 files changed, 58 insertions(+), 151 deletions(-)
diff --git a/lldb/test/Shell/Debuginfod/Inputs/bin-normal.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-normal.yaml
index 1e8b8ffeee25e0..ed3fd4d949ea6c 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/bin-normal.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-normal.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 725D47B7EE964F615C841A04712D6F43175F9D8D
+ Desc: 6E10CF17A4D84D5622C67A2FD38282BF121C67D5
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,11 +94,11 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420633234306534393034343037643064393337383633666533306332656265373764633639333232352900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 9A000000050001080000000001001D0001080000000000000002016400000008000000022D000000004C02A1000339000000043D0000000100050306010604080707012800000001560500447E0000000802917C0800447E00000008029170090044820000000009023400000001560700480A02770809004C9100000000050605040B870000000B8C0000000C390000000387000000043D000000010000
+ Content: 9A000000050001080000000001001D0001080000000000000002016400000008000000022D000000000B02A1000339000000043D0000000100050306010604080707012800000001560500037E0000000802917C0800037E00000008029170090003820000000009023400000001560700070A02770809000B9100000000050605040B870000000B8C0000000C390000000387000000043D000000010000
- Name: .debug_abbrev
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -106,7 +106,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 780000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000002F0CB321CF64CEDC7E77B5861A0075A20400000902001040000000000014050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
@@ -191,7 +191,7 @@ Symbols:
Value: 0x404000
DWARF:
debug_str:
- - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git f2b81cb569d0632a0eb0fd51722d725ab191af72)'
+ - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git c240e4904407d0d937863fe30c2ebe77dc693225)'
- main.c
- '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
- char
diff --git a/lldb/test/Shell/Debuginfod/Inputs/bin-split-dwp.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-split-dwp.yaml
index 1f18c04a4415ad..b3bbff01a3689f 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/bin-split-dwp.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-split-dwp.yaml
@@ -21,7 +21,7 @@ Sections:
Flags: [ SHF_EXCLUDE, SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 63686172005F5F41525241595F53495A455F545950455F5F0066756E6300696E74005F7374617274006172676300617267760046616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E676974206632623831636235363964303633326130656230666435313732326437323561623139316166373229006D61696E2E630067656E2F62696E2D73706C69742E64776F00
+ Content: 63686172005F5F41525241595F53495A455F545950455F5F0066756E6300696E74005F7374617274006172676300617267760046616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E676974206332343065343930343430376430643933373836336665333063326562653737646336393332323529006D61696E2E630067656E2F62696E2D73706C69742E64776F00
- Name: .debug_str_offsets.dwo
Type: SHT_PROGBITS
Flags: [ SHF_EXCLUDE ]
@@ -31,7 +31,7 @@ Sections:
Type: SHT_PROGBITS
Flags: [ SHF_EXCLUDE ]
AddressAlign: 0x1
- Content: 8D00000005000508000000008094E89A08DB62C101071D0008090224000000004C02A10003300000000434000000010005000601060108070701280000000156020044710000000802917C05004471000000080291700600447500000000090001560400480A02770806004C8400000000050305040B7A0000000B7F0000000C30000000037A0000000434000000010000
+ Content: 8D00000005000508000000008094E89A08DB62C101071D0008090224000000000B02A10003300000000434000000010005000601060108070701280000000156020003710000000802917C05000371000000080291700600037500000000090001560400070A02770806000B8400000000050305040B7A0000000B7F0000000C30000000037A0000000434000000010000
- Name: .debug_cu_index
Type: SHT_PROGBITS
AddressAlign: 0x1
diff --git a/lldb/test/Shell/Debuginfod/Inputs/bin-split-stripped.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-split-stripped.yaml
index 6501cda4a4f7e6..7c0c95d4d7bace 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/bin-split-stripped.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-split-stripped.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 82B2C35129DAB19AD58F3DD0F426BDB0CC8AA094
+ Desc: 14FE1776C0055EA25EFD58D934BB305FBBACDAC3
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,7 +94,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420633234306534393034343037643064393337383633666533306332656265373764633639333232352900
Symbols:
- Name: .note.gnu.build-id
Type: STT_SECTION
diff --git a/lldb/test/Shell/Debuginfod/Inputs/bin-split.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-split.yaml
index b99d0ede47c21d..e3679b3ca5b635 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/bin-split.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-split.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 82B2C35129DAB19AD58F3DD0F426BDB0CC8AA094
+ Desc: 14FE1776C0055EA25EFD58D934BB305FBBACDAC3
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,7 +94,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420633234306534393034343037643064393337383633666533306332656265373764633639333232352900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -106,7 +106,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 780000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000002F0CB321CF64CEDC7E77B5861A0075A20400000902001040000000000014050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
diff --git a/lldb/test/Shell/Debuginfod/Inputs/bin-stripped.yaml b/lldb/test/Shell/Debuginfod/Inputs/bin-stripped.yaml
index 6c8045e9a2068b..f81ce51e4de1bf 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/bin-stripped.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/bin-stripped.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 725D47B7EE964F615C841A04712D6F43175F9D8D
+ Desc: 6E10CF17A4D84D5622C67A2FD38282BF121C67D5
Type: NT_PRPSINFO
- Name: .text
Type: SHT_PROGBITS
@@ -94,7 +94,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420633234306534393034343037643064393337383633666533306332656265373764633639333232352900
Symbols:
- Name: .note.gnu.build-id
Type: STT_SECTION
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main.c b/lldb/test/Shell/Debuginfod/Inputs/main.c
index 661e5771fcbeeb..6f2106034f45ab 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main.c
+++ b/lldb/test/Shell/Debuginfod/Inputs/main.c
@@ -1,73 +1,7 @@
-/*
+// A script to (re)create the .yaml files is in 'make-inputs'. If you make changes
+// you'll need to update the .note.gnu.buildid values in the tests, as the cache names
-script to (re)create the .yaml files:
----------------------------------------------------------------------------
-#!/bin/sh
-
-# I need 4 different scenarios:
-# 1 - A stripped binary with it's corresponding unstripped binary:
-# 2 - A stripped binary with a corresponding -only-keep-debug symbols file
-# 3 - A split binary with it's corresponding DWP file
-# 4 - A stripped, split binary with an unstripped binary and a DWP file
-
-# Note: gnu-debuglink has to be added from the yaml2obj output,
-# as the CRC's are slightly different from the original binary
-
-mkdir -p gen
-mkdir -p run
-
-# First, compile & link the binary itself
-${builddir}/bin/clang -g -o gen/main-full.o -O0 -c main.c
-ld -nostdlib gen/main-full.o --build-id=sha1 -o gen/main-full
-${builddir}/bin/clang -g -gsplit-dwarf -o gen/main-split.o -O0 -c main.c
-ld -nostdlib gen/main-split.o --build-id=sha1 -o gen/main-split
-${builddir}/bin/llvm-dwp -e gen/main-split -o gen/main-split.dwp
-
-# Scenario 1: main-strip -> main-full (both executable and debuginfo)
-${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-stripped
-${builddir}/bin/obj2yaml gen/main-full > main-full.yaml
-${builddir}/bin/obj2yaml gen/main-stripped > main-stripped.yaml
-${builddir}/bin/yaml2obj main-full.yaml > run/main-full
-${builddir}/bin/yaml2obj main-stripped.yaml > run/main-stripped
-
-# Scenario 2: main-nodbg -> main-dbg (debuginfo)
-${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-full gen/main-dbg
-${builddir}/bin/llvm-objcopy --strip-debug gen/main-full gen/main-nodbg
-${builddir}/bin/obj2yaml gen/main-nodbg > main-nodbg.yaml
-${builddir}/bin/obj2yaml gen/main-dbg > main-dbg.yaml
-${builddir}/bin/yaml2obj main-nodbg.yaml > gen/main-nodbg.tmp
-${builddir}/bin/yaml2obj main-dbg.yaml > run/main-dbg
-${builddir}/bin/llvm-objcopy gen/main-nodbg.tmp --add-gnu-debuglink=run/main-dbg run/main-nodbg
-
-# Scenario 3: main-split, main-split.dwp (debuginfo)
-${builddir}/bin/obj2yaml gen/main-split > main-split.yaml
-${builddir}/bin/obj2yaml gen/main-split.dwp > main-dwp.yaml
-${builddir}/bin/yaml2obj main-split.yaml > run/main-split
-${builddir}/bin/yaml2obj main-dwp.yaml > run/main-split.dwp
-
-# Scenario 4: main-split-nodbg, main-split-dbg (executable), main-split.dwp (debuginfo)
-${builddir}/bin/llvm-objcopy --only-keep-debug gen/main-split gen/main-split-dbg
-${builddir}/bin/llvm-objcopy --strip-debug gen/main-split gen/main-split-nodbg
-${builddir}/bin/obj2yaml gen/main-split-nodbg > main-split-nodbg.yaml
-${builddir}/bin/obj2yaml gen/main-split-dbg > main-split-dbg.yaml
-${builddir}/bin/yaml2obj main-split-nodbg.yaml > gen/main-split-nodbg.tmp
-${builddir}/bin/yaml2obj main-split-dbg.yaml > run/main-split-dbg
-${builddir}/bin/llvm-objcopy gen/main-split-nodbg.tmp --add-gnu-debuglink=run/main-split-dbg run/main-split-nodbg
-# the main-dwp.yaml should be the same for both Scenario 3 and 4
-
-chmod a+x 'run/'*
-
----------------------------------------------------------------------------
-You need to re-generate the gnu-debuglinks after the yaml2obj step (in the test)
-
-You can find the build id's in the yaml files under "NT_PRPSINFO" from the YAML files
-(grep for 'Desc')
-
-*/
-
-int func(int argc, const char **argv) {
- return (argc + 1) * (argv[argc][0] + 2);
-}
+int func(int argc, const char **argv) { return (argc + 1) * (argv[argc][0] + 2); }
__attribute__((force_align_arg_pointer)) void _start(void) {
diff --git a/lldb/test/Shell/Debuginfod/Inputs/make-inputs b/lldb/test/Shell/Debuginfod/Inputs/make-inputs
index b222b5c028a2a2..c1ec233d10d0b7 100755
--- a/lldb/test/Shell/Debuginfod/Inputs/make-inputs
+++ b/lldb/test/Shell/Debuginfod/Inputs/make-inputs
@@ -1,6 +1,6 @@
#!/bin/sh
-# I need 5 different scenarios:
+# Testing 5 different scenarios:
# 1 - A stripped binary with it's corresponding unstripped binary:
# 2 - A stripped binary with a corresponding --only-keep-debug symbols file
# 3 - A split binary with it's corresponding DWP file
diff --git a/lldb/test/Shell/Debuginfod/Inputs/sym-split.yaml b/lldb/test/Shell/Debuginfod/Inputs/sym-split.yaml
index f25e4c4abf5c24..9cebffacac7478 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/sym-split.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/sym-split.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 82B2C35129DAB19AD58F3DD0F426BDB0CC8AA094
+ Desc: 14FE1776C0055EA25EFD58D934BB305FBBACDAC3
Type: NT_PRPSINFO
- Name: .text
Type: SHT_NOBITS
@@ -93,7 +93,7 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420633234306534393034343037643064393337383633666533306332656265373764633639333232352900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -105,7 +105,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 780000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000002F0CB321CF64CEDC7E77B5861A0075A20400000902001040000000000014050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
diff --git a/lldb/test/Shell/Debuginfod/Inputs/sym-stripped.yaml b/lldb/test/Shell/Debuginfod/Inputs/sym-stripped.yaml
index 608e9d04b2ebf2..b9118d1a1820a0 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/sym-stripped.yaml
+++ b/lldb/test/Shell/Debuginfod/Inputs/sym-stripped.yaml
@@ -59,7 +59,7 @@ Sections:
AddressAlign: 0x4
Notes:
- Name: GNU
- Desc: 725D47B7EE964F615C841A04712D6F43175F9D8D
+ Desc: 6E10CF17A4D84D5622C67A2FD38282BF121C67D5
Type: NT_PRPSINFO
- Name: .text
Type: SHT_NOBITS
@@ -93,11 +93,11 @@ Sections:
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x1
EntSize: 0x1
- Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420663262383163623536396430363332613065623066643531373232643732356162313931616637322900
+ Content: 46616365626F6F6B20636C616E672076657273696F6E2031352E302E302028676974406769746875622E636F6D3A6B6576696E667265692F6C6C766D2E67697420633234306534393034343037643064393337383633666533306332656265373764633639333232352900
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 9A000000050001080000000001001D0001080000000000000002016400000008000000022D000000004C02A1000339000000043D0000000100050306010604080707012800000001560500447E0000000802917C0800447E00000008029170090044820000000009023400000001560700480A02770809004C9100000000050605040B870000000B8C0000000C390000000387000000043D000000010000
+ Content: 9A000000050001080000000001001D0001080000000000000002016400000008000000022D000000000B02A1000339000000043D0000000100050306010604080707012800000001560500037E0000000802917C0800037E00000008029170090003820000000009023400000001560700070A02770809000B9100000000050605040B870000000B8C0000000C390000000387000000043D000000010000
- Name: .debug_abbrev
Type: SHT_PROGBITS
AddressAlign: 0x1
@@ -105,7 +105,7 @@ Sections:
- Name: .debug_line
Type: SHT_PROGBITS
AddressAlign: 0x1
- Content: 7B0000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D00000000AA7BC59AF617547916B47B73E78D55160400000902001040000000000003C30001050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
+ Content: 780000000500080037000000010101FB0E0D00010101010000000100000101011F010000000003011F020F051E013D000000002F0CB321CF64CEDC7E77B5861A0075A20400000902001040000000000014050B0AAD0510063C05183C0526E405153C05030B3C050006A1050F0ABE050BBB0503065806770210000101
- Name: .debug_line_str
Type: SHT_PROGBITS
Flags: [ SHF_MERGE, SHF_STRINGS ]
@@ -190,7 +190,7 @@ Symbols:
Value: 0x404000
DWARF:
debug_str:
- - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git f2b81cb569d0632a0eb0fd51722d725ab191af72)'
+ - 'Facebook clang version 15.0.0 (git at github.com:kevinfrei/llvm.git c240e4904407d0d937863fe30c2ebe77dc693225)'
- main.c
- '/home/freik/llvm-sand/llvm/lldb/test/Shell/Debuginfod/Inputs'
- char
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test b/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
index 943ab100437c6c..4fd8463744d2cf 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-no-locator.test
@@ -19,4 +19,4 @@
# RUN: 2>&1 | FileCheck %s
# Should have source file and line information:
-# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:4:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
index 930a64e8518701..00e1b7c5bc72c2 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-a.test
@@ -7,12 +7,12 @@
# Set up a file-system 'hosted' Debuginfod server.
# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
+# RUN: mkdir -p %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5
# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped.tmp
# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/bin-stripped.dbg
# RUN: llvm-objcopy %t/bin-stripped.tmp --add-gnu-debuglink=%t/bin-stripped.dbg %t/bin-stripped
-# RUN: mv %t/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/debuginfo
+# RUN: mv %t/bin-stripped.dbg %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5/debuginfo
# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
@@ -25,4 +25,4 @@
# RUN: 2>&1 | FileCheck %s
# Should have source file and line information:
-# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:4:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
index 05d9fa1ebbf36e..c4444ce166811c 100644
--- a/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
+++ b/lldb/test/Shell/Debuginfod/okdstrip-positive-b.test
@@ -7,12 +7,12 @@
# Set up a file-system 'hosted' Debuginfod server.
# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
+# RUN: mkdir -p %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5
# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped.tmp
# RUN: yaml2obj %p/Inputs/sym-stripped.yaml -o %t/bin-stripped.dbg
# RUN: llvm-objcopy %t/bin-stripped.tmp --add-gnu-debuglink=%t/bin-stripped.dbg %t/bin-stripped
-# RUN: mv %t/bin-stripped.dbg %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/executable
+# RUN: mv %t/bin-stripped.dbg %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5/executable
# RUN: chmod a+x %t/bin-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
@@ -25,4 +25,4 @@
# RUN: 2>&1 | FileCheck %s
# Should have source file and line information:
-# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:4:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
index 5f1eb18e21c7c5..0197b0b5e4101d 100644
--- a/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-okdstrip-positive.test
@@ -7,13 +7,13 @@
# Set up a file-system 'hosted' Debuginfod server
# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
+# RUN: mkdir -p %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3
# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped.tmp
# RUN: yaml2obj %p/Inputs/sym-split.yaml -o %t/sym-split
# RUN: llvm-objcopy %t/bin-split-stripped.tmp --add-gnu-debuglink=%t/sym-split %t/bin-split-stripped
-# RUN: mv %t/sym-split %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
-# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
+# RUN: mv %t/sym-split %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3/executable
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3/debuginfo
# RUN: chmod a+x %t/bin-split-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
@@ -29,4 +29,4 @@
# CHECK-NEXT: Type: "dwo"
# CHECK-NEXT: Dwo ID{{.*}}
# CHECK-NEXT: {{[- ]+}}
-# CHECK-NEXT: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
+# CHECK-NEXT: {{0x[0-9a-f]+.* +.*}}.tmp/cache/llvmcache-14969591668314937758{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-positive.test b/lldb/test/Shell/Debuginfod/split-positive.test
index 445b6b7eef96f6..3621b3f8d21135 100644
--- a/lldb/test/Shell/Debuginfod/split-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-positive.test
@@ -6,10 +6,10 @@
# Set up a file-system 'hosted' Debuginfod server
# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
+# RUN: mkdir -p %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3
# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/bin-split
-# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3/debuginfo
# RUN: chmod a+x %t/bin-split
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
@@ -27,4 +27,4 @@
# CHECK-NEXT: {{[- ]+}}
# The cache key is stable, so mandating it's location verifies it was cached.
# The '.tmp' (sort of) ensures the cache is our private cache, not the system cache.
-# CHECK-NEXT: {{0x[0-9a-f]+.* +}}/{{.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
+# CHECK-NEXT: {{0x[0-9a-f]+.* +}}/{{.*}}.tmp/cache/llvmcache-14969591668314937758{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/split-strip-positive.test b/lldb/test/Shell/Debuginfod/split-strip-positive.test
index 3c19382d2f6df6..4c6510986913ff 100644
--- a/lldb/test/Shell/Debuginfod/split-strip-positive.test
+++ b/lldb/test/Shell/Debuginfod/split-strip-positive.test
@@ -7,11 +7,11 @@
# Set up a file-system 'hosted' Debuginfod server.
# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094
+# RUN: mkdir -p %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3
# RUN: yaml2obj %p/Inputs/bin-split-stripped.yaml -o %t/bin-split-stripped
-# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/executable
-# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/82b2c35129dab19ad58f3dd0f426bdb0cc8aa094/debuginfo
+# RUN: yaml2obj %p/Inputs/bin-split.yaml -o %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3/executable
+# RUN: yaml2obj %p/Inputs/bin-split-dwp.yaml -o %t/buildid/14fe1776c0055ea25efd58d934bb305fbbacdac3/debuginfo
# RUN: chmod a+x %t/bin-split-stripped
# RUN: %lldb -o "settings set symbols.enable-external-lookup true" \
@@ -29,4 +29,4 @@
# CHECK-NEXT: {{^[- ]+$}}
# The cache key is stable, so mandating it's location verifies it was cached.
# The '.tmp' (sort of) ensures the cache is our private cache, not the system cache.
-# CHECK-NEXT: {{0x[0-9a-f]+.* +}}/{{.*}}.tmp/cache/llvmcache-6559017670391320133{{ *$}}
+# CHECK-NEXT: {{0x[0-9a-f]+.* +}}/{{.*}}.tmp/cache/llvmcache-14969591668314937758{{ *$}}
diff --git a/lldb/test/Shell/Debuginfod/strip-no-locator.test b/lldb/test/Shell/Debuginfod/strip-no-locator.test
index ea4bb47648ecbd..562c8d8e620b41 100644
--- a/lldb/test/Shell/Debuginfod/strip-no-locator.test
+++ b/lldb/test/Shell/Debuginfod/strip-no-locator.test
@@ -19,4 +19,4 @@
# RUN: 2>&1 | FileCheck %s
# Should have correct source file and line information:
-# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:4:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/strip-positive-a.test b/lldb/test/Shell/Debuginfod/strip-positive-a.test
index e8ca8584c2fbc4..72e3c8801d7495 100644
--- a/lldb/test/Shell/Debuginfod/strip-positive-a.test
+++ b/lldb/test/Shell/Debuginfod/strip-positive-a.test
@@ -7,9 +7,9 @@
# Set up a file-system 'hosted' Debuginfod server:
# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
+# RUN: mkdir -p %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5
-# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/debuginfo
+# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5/debuginfo
# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped
# RUN: chmod a+x %t/bin-stripped
@@ -23,4 +23,4 @@
# RUN: 2>&1 | FileCheck %s
# Should have source file and line info:
-# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:4:11, address = 0x{{[0-9a-f]+}}
diff --git a/lldb/test/Shell/Debuginfod/strip-positive-b.test b/lldb/test/Shell/Debuginfod/strip-positive-b.test
index a7af5bdbdfcf1e..b3344228bcbb01 100644
--- a/lldb/test/Shell/Debuginfod/strip-positive-b.test
+++ b/lldb/test/Shell/Debuginfod/strip-positive-b.test
@@ -7,9 +7,9 @@
# Set up a file-system 'hosted' Debuginfod server:
# RUN: rm -rf %t
# RUN: mkdir -p %t/cache
-# RUN: mkdir -p %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d
+# RUN: mkdir -p %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5
-# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/725d47b7ee964f615c841a04712d6f43175f9d8d/executable
+# RUN: yaml2obj %p/Inputs/bin-normal.yaml -o %t/buildid/6e10cf17a4d84d5622c67a2fd38282bf121c67d5/executable
# RUN: yaml2obj %p/Inputs/bin-stripped.yaml -o %t/bin-stripped
# RUN: chmod a+x %t/bin-stripped
@@ -23,4 +23,4 @@
# RUN: 2>&1 | FileCheck %s
# Should have source file and line info:
-# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:69:11, address = 0x{{[0-9a-f]+}}
+# CHECK: Breakpoint 1: where = bin-stripped`func + 11 at main.c:4:11, address = 0x{{[0-9a-f]+}}
diff --git a/llvm/lib/Debuginfod/Debuginfod.cpp b/llvm/lib/Debuginfod/Debuginfod.cpp
index 2927ba21323885..1cf550721000eb 100644
--- a/llvm/lib/Debuginfod/Debuginfod.cpp
+++ b/llvm/lib/Debuginfod/Debuginfod.cpp
@@ -248,54 +248,27 @@ static SmallVector<std::string, 0> getHeaders() {
return Headers;
}
-static SmallString<64> getCachedArtifactPath(StringRef UniqueKey,
- StringRef CacheDirectoryPath) {
+Expected<std::string> getCachedOrDownloadArtifact(
+ StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath,
+ ArrayRef<StringRef> DebuginfodUrls, std::chrono::milliseconds Timeout) {
SmallString<64> AbsCachedArtifactPath;
sys::path::append(AbsCachedArtifactPath, CacheDirectoryPath,
"llvmcache-" + UniqueKey);
- return AbsCachedArtifactPath;
-}
-
-static Expected<AddStreamFn>
-getCachedArtifactHelper(StringRef UniqueKey, StringRef CacheDirectoryPath,
- unsigned &Task) {
- SmallString<64> AbsCachedArtifactPath =
- getCachedArtifactPath(UniqueKey, CacheDirectoryPath);
Expected<FileCache> CacheOrErr =
localCache("Debuginfod-client", ".debuginfod-client", CacheDirectoryPath);
if (!CacheOrErr)
return CacheOrErr.takeError();
- return (*CacheOrErr)(Task, UniqueKey, "");
-}
-
-Expected<std::string> getCachedArtifact(StringRef UniqueKey,
- StringRef CacheDirectoryPath) {
- // We choose an arbitrary Task parameter as we do not make use of it.
- unsigned Task = 0;
- Expected<AddStreamFn> CacheAddStreamOrErr =
- getCachedArtifactHelper(UniqueKey, CacheDirectoryPath, Task);
- if (!CacheAddStreamOrErr)
- return CacheAddStreamOrErr.takeError();
- if (!*CacheAddStreamOrErr)
- return std::string(getCachedArtifactPath(UniqueKey, CacheDirectoryPath));
- return createStringError(errc::argument_out_of_domain,
- "build id not found in cache");
-}
-Expected<std::string> getCachedOrDownloadArtifact(
- StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath,
- ArrayRef<StringRef> DebuginfodUrls, std::chrono::milliseconds Timeout) {
+ FileCache Cache = *CacheOrErr;
// We choose an arbitrary Task parameter as we do not make use of it.
unsigned Task = 0;
- Expected<AddStreamFn> CacheAddStreamOrErr =
- getCachedArtifactHelper(UniqueKey, CacheDirectoryPath, Task);
+ Expected<AddStreamFn> CacheAddStreamOrErr = Cache(Task, UniqueKey, "");
if (!CacheAddStreamOrErr)
return CacheAddStreamOrErr.takeError();
AddStreamFn &CacheAddStream = *CacheAddStreamOrErr;
if (!CacheAddStream)
- return std::string(getCachedArtifactPath(UniqueKey, CacheDirectoryPath));
-
+ return std::string(AbsCachedArtifactPath);
// The artifact was not found in the local cache, query the debuginfod
// servers.
if (!HTTPClient::isAvailable())
@@ -338,7 +311,7 @@ Expected<std::string> getCachedOrDownloadArtifact(
pruneCache(CacheDirectoryPath, *PruningPolicyOrErr);
// Return the path to the artifact on disk.
- return std::string(getCachedArtifactPath(UniqueKey, CacheDirectoryPath));
+ return std::string(AbsCachedArtifactPath);
}
return createStringError(errc::argument_out_of_domain, "build id not found");
>From 526ee41d36d010e5bc39059c88bfdfc973abe35b Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Fri, 26 Jan 2024 09:37:37 -0800
Subject: [PATCH 12/15] Changed to consistent voice in testing markdown doc
---
.../Shell/Debuginfod/Debuginfod-testing.md | 27 +++++++++----------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/lldb/test/Shell/Debuginfod/Debuginfod-testing.md b/lldb/test/Shell/Debuginfod/Debuginfod-testing.md
index df335ca11ffa42..116bcc5c0ed7a0 100644
--- a/lldb/test/Shell/Debuginfod/Debuginfod-testing.md
+++ b/lldb/test/Shell/Debuginfod/Debuginfod-testing.md
@@ -48,18 +48,17 @@ underspecified for some variations of symbol file deployment. The protocol
itself is quite simple: query an HTTP server with the path
`buildid/{.note.gnu.build-id hash}/debuginfo` or
`buildid/{.note.gnu.build-id hash}/executable` to acquire "symbol data" or "the
-executable". Where there is lack of clarity, I prefer requesting `debuginfo`
-first, then falling back to `executable` (Scenarios #1 & #2). For Scenario #5,
-I've chosen to expect the stripped (i.e. not full) executable, which contains a
-number of sections necessary to correctly symbolicate will be hosted from the
-`executable` API. Depending upon how Debuginfod hosting services choose to
-support `.dwp` paired with stripped files, these assumptions may need to be
-revisited.
+executable". Where there is lack of clarity, `debuginfo` is requested first,
+falling back to `executable` (Scenarios #1 & #2). For Scenario #5, the stripped
+(i.e. not full) executable, which contains a number of sections necessary to
+correctly symbolicate, is hosted from the `executable` API. Depending upon how
+Debuginfod hosting services choose to support `.dwp` paired with stripped files,
+these assumptions may need to be revisited.
-I've also chosen to simply treat the `.dwp` file as `debuginfo` and the
-"only-keep-debug" stripped binary as `executable`. This scenario doesn't appear
-to work at all in GDB. Supporting it how I did seems more straight forward than
-trying to extend the protocol. The protocol _does_ support querying for section
-contents by name for a given build ID, but adding support for that in LLDB
-looks...well beyond my current capability (and LLVM's Debuginfod library doesn't
-support it at this writing, anyway).
+The `.dwp` file is treated as `debuginfo`, and the "only-keep-debug" stripped
+binary is treated as `executable`. This scenario does not appear to work at all
+in GDB. It seems more straightforward to support it in this manner, rather than
+attempting to extend the protocol. While the protocol does support querying for
+section contents by name for a given build ID, support for that capability in
+LLDB is not implemented (and LLVM's Debuginfod library does not support it at
+this time).
>From 26c30ec9b86c7035c9105bd8a1e69184b59a2aae Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Wed, 28 Feb 2024 15:08:05 -0800
Subject: [PATCH 13/15] Working on API test migration
---
.../Python/lldbsuite/test/make/Makefile.rules | 23 +++-
lldb/test/API/debuginfod/Makefile | 105 ++++++++++++++++++
lldb/test/API/debuginfod/TestSampleTest.py | 51 +++++++++
lldb/test/API/debuginfod/main.c | 9 ++
lldb/test/Shell/Debuginfod/Inputs/main.c | 16 +--
5 files changed, 192 insertions(+), 12 deletions(-)
create mode 100644 lldb/test/API/debuginfod/Makefile
create mode 100644 lldb/test/API/debuginfod/TestSampleTest.py
create mode 100644 lldb/test/API/debuginfod/main.c
diff --git a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
index bfd249ccd43f2e..365db7958c2589 100644
--- a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
+++ b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
@@ -51,7 +51,7 @@ LLDB_BASE_DIR := $(THIS_FILE_DIR)/../../../../../
#
# GNUWin32 uname gives "windows32" or "server version windows32" while
# some versions of MSYS uname return "MSYS_NT*", but most environments
-# standardize on "Windows_NT", so we'll make it consistent here.
+# standardize on "Windows_NT", so we'll make it consistent here.
# When running tests from Visual Studio, the environment variable isn't
# inherited all the way down to the process spawned for make.
#----------------------------------------------------------------------
@@ -210,6 +210,12 @@ else
ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
DSYM = $(EXE).debug
endif
+
+ ifeq "$(MERGE_DWOS)" "YES"
+ MAKE_DWO := YES
+ DWP_NAME = $(EXE).dwp
+ DYLIB_DWP_NAME = $(DYLIB_NAME).dwp
+ endif
endif
LIMIT_DEBUG_INFO_FLAGS =
@@ -357,6 +363,7 @@ ifneq "$(OS)" "Darwin"
OBJCOPY ?= $(call replace_cc_with,objcopy)
ARCHIVER ?= $(call replace_cc_with,ar)
+ DWP ?= $(call reaplce_cc_with,dwp)
override AR = $(ARCHIVER)
endif
@@ -565,9 +572,16 @@ else
endif
else
ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
+ ifneq "$(KEEP_FULL_DEBUG_BINARY)" "YES"
$(OBJCOPY) --only-keep-debug "$(EXE)" "$(DSYM)"
+ else
+ cp "$(EXE)" "$(DSYM)"
+ endif
$(OBJCOPY) --strip-debug --add-gnu-debuglink="$(DSYM)" "$(EXE)" "$(EXE)"
endif
+ifeq "$(MERGE_DWOS)" "YES"
+ $(DWP) -o "$(DWP_FILE)" $(DWOS)
+endif
endif
#----------------------------------------------------------------------
@@ -610,9 +624,16 @@ endif
else
$(LD) $(DYLIB_OBJECTS) $(LDFLAGS) -shared -o "$(DYLIB_FILENAME)"
ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
+ ifneq "$(KEEP_FULL_DEBUG_BINARY)" "YES"
+ cp "$(DYLIB_FILENAME)" "$(DYLIB_FILENAME).debug"
+ else
$(OBJCOPY) --only-keep-debug "$(DYLIB_FILENAME)" "$(DYLIB_FILENAME).debug"
+ endif
$(OBJCOPY) --strip-debug --add-gnu-debuglink="$(DYLIB_FILENAME).debug" "$(DYLIB_FILENAME)" "$(DYLIB_FILENAME)"
endif
+ifeq "$(MERGE_DWOS)" "YES"
+ $(DWP) -o $(DYLIB_DWP_FILE) $(DYLIB_DWOS)
+endif
endif
#----------------------------------------------------------------------
diff --git a/lldb/test/API/debuginfod/Makefile b/lldb/test/API/debuginfod/Makefile
new file mode 100644
index 00000000000000..abe40bdeaf70b2
--- /dev/null
+++ b/lldb/test/API/debuginfod/Makefile
@@ -0,0 +1,105 @@
+C_SOURCES := main.c
+CFLAGS_EXTRAS := -std=c99
+
+MAKE_DWO := YES
+SPLIT_DEBUG_SYMBOLS := YES
+KEEP_FULL_DEBUG_BINARY := YES
+MERGE_DWOS := YES
+
+# From shell, I can do this stuff pretty easily:
+# OBJCOPY --dump-section .note.gnu.build-id=<output.36.bytes.bin> <input.bin>
+# hexdump -s 16 -e '"%02x"' output.bin
+# Or this in a single command:
+# objcopy --dump-section=.note.gnu.build-id=/dev/stdout adfinder.stripped | xxd -s 16 -g 0 -p
+# I think I need to add capabilities in the Makefile.rules to strip the binary (not an -OKD binary)
+# and to create a DWP file
+
+include Makefile.rules
+
+
+#!/bin/sh
+
+# Testing 5 different scenarios:
+# 1 - A stripped binary with it's corresponding unstripped binary:
+# 2 - A stripped binary with a corresponding --only-keep-debug symbols file
+# 3 - A split binary with it's corresponding DWP file
+# 4 - A stripped, split binary with an unstripped binary and a DWP file
+# 5 - A stripped, split binary with an --only-keep-debug symbols file and a DWP file
+
+##mkdir -p gen
+##mkdir -p run
+
+# First, compile & link the binaries (normal and split)
+
+##${builddir}/bin/clang -g -o gen/bin-normal.o -O0 -c main.c
+##ld -nostdlib gen/bin-normal.o --build-id=sha1 -o gen/bin-normal
+##${builddir}/bin/clang -g -gsplit-dwarf -o gen/bin-split.o -O0 -c main.c
+##ld -nostdlib gen/bin-split.o --build-id=sha1 -o gen/bin-split
+
+# Next, create the file variations we need
+
+# Variation 1: -g, stripped
+##${builddir}/bin/llvm-objcopy --strip-debug gen/bin-normal gen/bin-stripped
+# Variation 2: -g, stripped, --only-keep-debug symbols
+##${builddir}/bin/llvm-objcopy --only-keep-debug gen/bin-normal gen/sym-stripped
+# Variation 3: -gsplit-dwarf: .dwp
+##${builddir}/bin/llvm-dwp -e gen/bin-split -o gen/bin-split.dwp
+# Variation 4: -gsplit-dwarf: stripped, .dwp
+##${builddir}/bin/llvm-objcopy --strip-debug gen/bin-split gen/bin-split-stripped
+# Variation 5: -gsplit-dwarf: stripped, --only-keep-debug + .dwp
+##${builddir}/bin/llvm-objcopy --only-keep-debug gen/bin-split gen/sym-split
+
+# Finally, produce the .yaml files for testing
+
+# Scenario 1:
+# target: bin-stripped
+# Scenario 1a:
+# symbols: bin-normal (hosted as debuginfo)
+# Scenario 1b:
+# symbols: bin-normal (hosted as executable)
+##${builddir}/bin/obj2yaml gen/bin-stripped -o bin-stripped.yaml
+##${builddir}/bin/obj2yaml gen/bin-normal -o bin-normal.yaml
+# @ testing time: yaml2obj bin-stripped.yaml -o ${out}/bin-stripped
+# @ testing time: yaml2obj bin-normal.yaml -o ${out}/bin-normal
+
+
+# Scenario 2:
+# target: bin-stripped-okd
+# Scenario 2a:
+# symbols: sym-stripped (hosted as debuginfo)
+# Scenario 2b:
+# symbols: sym-stripped (hosted as executable)
+##${builddir}/bin/obj2yaml gen/sym-stripped -o sym-stripped.yaml
+# To produce a correct .gnu.debuglink, you have to do it at test generation time.
+# The section includes a CRC that yaml2obj doesn't properly produce.
+# @ testing time: yaml2obj sym-stripped.yaml -o ${out}/sym-stripped
+# @ testing time: llvm-objcopy bin-stripped --add-gnu-debuglink=${out}/sym-stripped ${out}/bin-stripped-okd
+
+# Scenario 3:
+# target: bin-split
+# DWP: bin-split.dwp (hosted as debuginfo)
+##${builddir}/bin/obj2yaml gen/bin-split -o bin-split.yaml
+##${builddir}/bin/obj2yaml gen/bin-split.dwp -o bin-split-dwp.yaml
+# @ testing time: yaml2obj bin-split.yaml -o ${out}/bin-split
+# @ testing time: yaml2obj bin-split-dwp.yaml -o ${out}/bin-split.dwp
+
+# Scenario 4:
+# target: bin-split-stripped
+# symbols: bin-split (hosted as executable)
+# DWP bin-split.dwp (hosted as debuginfo)
+# This doesn't work from a file system "as is".
+# I believe you can set the symbol file manually to the bin-split file.
+# TODO: Need to check for the -no-locator test to see what the name of
+# the .dwp is expected to be.
+##${builddir}/bin/obj2yaml gen/bin-split-stripped -o bin-split-stripped.yaml
+# bin-split and bin-split.dwp already generated in Scenario 3
+# @ testing time: yaml2obj bin-split-stripped.yaml -o ${out}/bin-split-stripped
+
+# Scenario 5:
+# target: bin-split-stripped-okd
+# symbols: sym-split (hosted as executable)
+# DWP: bin-split.dwp (hosted as debuginfo)
+##${builddir}/bin/obj2yaml gen/sym-split -o sym-split.yaml
+# @ testing time: yaml2obj main-split-nodbg.yaml -o gen/main-split-nodbg.tmp
+# @ testing time: yaml2obj main-split-dbg.yaml -o run/main-split-dbg
+# @ testing time: llvm-objcopy gen/main-split-nodbg.tmp --add-gnu-debuglink=run/main-split-dbg run/main-split-nodbg
diff --git a/lldb/test/API/debuginfod/TestSampleTest.py b/lldb/test/API/debuginfod/TestSampleTest.py
new file mode 100644
index 00000000000000..494b3298c9733a
--- /dev/null
+++ b/lldb/test/API/debuginfod/TestSampleTest.py
@@ -0,0 +1,51 @@
+"""
+Describe the purpose of the test class here.
+"""
+
+
+import lldb
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+
+
+class RenameThisSampleTestTestCase(TestBase):
+ # If your test case doesn't stress debug info, then
+ # set this to true. That way it won't be run once for
+ # each debug info format.
+ NO_DEBUG_INFO_TESTCASE = True
+
+ def test_sample_rename_this(self):
+ """There can be many tests in a test case - describe this test here."""
+ self.build()
+ self.main_source_file = lldb.SBFileSpec("main.c")
+ self.sample_test()
+
+ def setUp(self):
+ # Call super's setUp().
+ TestBase.setUp(self)
+ # Set up your test case here. If your test doesn't need any set up then
+ # remove this method from your TestCase class.
+ # I need to setup the file-system-hosted Debuginfod server
+
+ def sample_test(self):
+ """You might use the test implementation in several ways, say so here."""
+
+ # This function starts a process, "a.out" by default, sets a source
+ # breakpoint, runs to it, and returns the thread, process & target.
+ # It optionally takes an SBLaunchOption argument if you want to pass
+ # arguments or environment variables.
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
+ self, "Set a breakpoint here", self.main_source_file
+ )
+
+ frame = thread.GetFrameAtIndex(0)
+ test_var = frame.FindVariable("test_var")
+ self.assertSuccess(test_var.GetError(), "Failed to fetch test_var")
+ test_value = test_var.GetValueAsUnsigned()
+ self.assertEqual(test_value, 10, "Got the right value for test_var")
+
+ def sample_test_no_launch(self):
+ """Same as above but doesn't launch a process."""
+
+ target = self.createTestTarget()
+ self.expect_expr("global_test_var", result_value="10")
diff --git a/lldb/test/API/debuginfod/main.c b/lldb/test/API/debuginfod/main.c
new file mode 100644
index 00000000000000..2cc7e1557f40c0
--- /dev/null
+++ b/lldb/test/API/debuginfod/main.c
@@ -0,0 +1,9 @@
+// This is a dump little pair of test files
+
+int func(int argc, const char *argv[]) {
+ return (argc + 1) * (argv[argc][0] + 2);
+}
+
+int main(int argc, const char *argv[]) {
+ return func(0, argv);
+}
diff --git a/lldb/test/Shell/Debuginfod/Inputs/main.c b/lldb/test/Shell/Debuginfod/Inputs/main.c
index 6f2106034f45ab..584eb11072953e 100644
--- a/lldb/test/Shell/Debuginfod/Inputs/main.c
+++ b/lldb/test/Shell/Debuginfod/Inputs/main.c
@@ -1,16 +1,10 @@
// A script to (re)create the .yaml files is in 'make-inputs'. If you make changes
// you'll need to update the .note.gnu.buildid values in the tests, as the cache names
-int func(int argc, const char **argv) { return (argc + 1) * (argv[argc][0] + 2); }
-
-__attribute__((force_align_arg_pointer)) void _start(void) {
-
- /* main body of program: call main(), etc */
-
- const char *argv[] = {""};
- func(0, argv);
+int func(int argc, const char **argv) {
+ return (argc + 1) * (argv[argc][0] + 2);
+}
- /* exit system call */
- asm("mov $60,%rax; mov $0,%rdi; syscall");
- __builtin_unreachable(); // tell the compiler to make sure side effects are done before the asm statement
+int main(int argc, const char *argv[]) {
+ return func(0, argv);
}
>From 1692488c8cedf4db3b7c04239979243281a04238 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Thu, 29 Feb 2024 09:36:56 -0800
Subject: [PATCH 14/15] Revert "[lldb] Migrate distutils.version.LooseVersion
to packaging (#82066)"
This reverts commit 0c02329ff375100ddcf2cb104aebe97bb3c9126f.
---
.../Python/lldbsuite/test/decorators.py | 12 +++----
.../Python/lldbsuite/test/lldbplatformutil.py | 25 +++++++--------
lldb/test/API/sanity/TestSettingSkipping.py | 31 ++++++++++---------
.../lldb-server/TestAppleSimulatorOSType.py | 4 +--
lldb/test/Shell/helper/build.py | 4 +--
5 files changed, 36 insertions(+), 40 deletions(-)
diff --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py
index b691f82b90652c..a5d7a7a25879df 100644
--- a/lldb/packages/Python/lldbsuite/test/decorators.py
+++ b/lldb/packages/Python/lldbsuite/test/decorators.py
@@ -1,6 +1,6 @@
# System modules
+from distutils.version import LooseVersion
from functools import wraps
-from pkg_resources import packaging
import ctypes
import locale
import os
@@ -65,10 +65,10 @@ def fn_neq(x, y):
">=": fn_geq,
"<=": fn_leq,
}
+ expected_str = ".".join([str(x) for x in expected])
+ actual_str = ".".join([str(x) for x in actual])
- return op_lookup[comparison](
- packaging.version.parse(actual), packaging.version.parse(expected)
- )
+ return op_lookup[comparison](LooseVersion(actual_str), LooseVersion(expected_str))
def _match_decorator_property(expected, actual):
@@ -238,9 +238,7 @@ def fn(actual_debug_info=None):
)
)
skip_for_py_version = (py_version is None) or _check_expected_version(
- py_version[0],
- py_version[1],
- "{}.{}".format(sys.version_info.major, sys.version_info.minor),
+ py_version[0], py_version[1], sys.version_info
)
skip_for_macos_version = (macos_version is None) or (
(platform.mac_ver()[0] != "")
diff --git a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
index c4d063d3cc77ef..bd92d03e0e2212 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
@@ -7,8 +7,8 @@
import subprocess
import sys
import os
+from distutils.version import LooseVersion
from urllib.parse import urlparse
-from pkg_resources import packaging
# LLDB modules
import lldb
@@ -297,30 +297,27 @@ def expectedCompilerVersion(compiler_version):
if compiler_version is None:
return True
operator = str(compiler_version[0])
- version_str = str(compiler_version[1])
+ version = compiler_version[1]
- if not version_str:
+ if version is None:
return True
- test_compiler_version_str = getCompilerVersion()
- if test_compiler_version_str == "unknown":
+ test_compiler_version = getCompilerVersion()
+ if test_compiler_version == "unknown":
# Assume the compiler version is at or near the top of trunk.
return operator in [">", ">=", "!", "!=", "not"]
- version = packaging.version.parse(version_str)
- test_compiler_version = packaging.version.parse(test_compiler_version_str)
-
if operator == ">":
- return test_compiler_version > version
+ return LooseVersion(test_compiler_version) > LooseVersion(version)
if operator == ">=" or operator == "=>":
- return test_compiler_version >= version
+ return LooseVersion(test_compiler_version) >= LooseVersion(version)
if operator == "<":
- return test_compiler_version < version
+ return LooseVersion(test_compiler_version) < LooseVersion(version)
if operator == "<=" or operator == "=<":
- return test_compiler_version <= version
+ return LooseVersion(test_compiler_version) <= LooseVersion(version)
if operator == "!=" or operator == "!" or operator == "not":
- return version_str not in test_compiler_version_str
- return version_str in test_compiler_version_str
+ return str(version) not in str(test_compiler_version)
+ return str(version) in str(test_compiler_version)
def expectedCompiler(compilers):
diff --git a/lldb/test/API/sanity/TestSettingSkipping.py b/lldb/test/API/sanity/TestSettingSkipping.py
index f0d4d266073e03..5f58ec2638456d 100644
--- a/lldb/test/API/sanity/TestSettingSkipping.py
+++ b/lldb/test/API/sanity/TestSettingSkipping.py
@@ -1,7 +1,8 @@
"""
-This is a sanity check that verifies that test can be skipped based on settings.
+This is a sanity check that verifies that test can be sklipped based on settings.
"""
+
import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
@@ -9,24 +10,24 @@
class SettingSkipSanityTestCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
- CURRENT_PYTHON_VERSION = "3.0"
- @skipIf(py_version=(">=", CURRENT_PYTHON_VERSION))
+ @skipIf(py_version=(">=", (3, 0)))
def testSkip(self):
- self.assertTrue(False, "This test should not run and fail (SKIPPED)")
-
- @skipIf(py_version=("<", CURRENT_PYTHON_VERSION))
- def testNoSKip(self):
- self.assertTrue(True, "This test should run and pass(PASS)")
+ """This setting is on by default"""
+ self.assertTrue(False, "This test should not run!")
- @expectedFailureAll(py_version=(">=", CURRENT_PYTHON_VERSION))
- def testXFAIL(self):
- self.assertTrue(False, "This test should expectedly fail (XFAIL)")
-
- @expectedFailureAll(py_version=("<", CURRENT_PYTHON_VERSION))
- def testNotXFAIL(self):
- self.assertTrue(True, "This test should pass (PASS)")
+ @skipIf(py_version=("<", (3, 0)))
+ def testNoMatch(self):
+ self.assertTrue(True, "This test should run!")
@skipIf(setting=("target.i-made-this-one-up", "true"))
def testNotExisting(self):
self.assertTrue(True, "This test should run!")
+
+ @expectedFailureAll(py_version=(">=", (3, 0)))
+ def testXFAIL(self):
+ self.assertTrue(False, "This test should run and fail!")
+
+ @expectedFailureAll(py_version=("<", (3, 0)))
+ def testNotXFAIL(self):
+ self.assertTrue(True, "This test should run and succeed!")
diff --git a/lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py b/lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py
index d770447f0771cd..ffac8de6f596ac 100644
--- a/lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py
+++ b/lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py
@@ -61,9 +61,9 @@ def check_simulator_ostype(self, sdk, platform_name, arch=platform.machine()):
# Older versions of watchOS (<7.0) only support i386
if platform_name == "watchos":
- from pkg_resources import packaging
+ from distutils.version import LooseVersion
- if packaging.version.parse(vers) < packaging.version.parse("7.0"):
+ if LooseVersion(vers) < LooseVersion("7.0"):
arch = "i386"
triple = "-".join([arch, "apple", platform_name + vers, "simulator"])
diff --git a/lldb/test/Shell/helper/build.py b/lldb/test/Shell/helper/build.py
index d3c25bd944e983..073198a6df2df3 100755
--- a/lldb/test/Shell/helper/build.py
+++ b/lldb/test/Shell/helper/build.py
@@ -519,9 +519,9 @@ def _find_windows_sdk_in_registry_view(self, view):
# Windows SDK version numbers consist of 4 dotted components, so we
# have to use LooseVersion, as StrictVersion supports 3 or fewer.
- from pkg_resources import packaging
+ from distutils.version import LooseVersion
- sdk_versions.sort(key=lambda x: packaging.version.parse(x), reverse=True)
+ sdk_versions.sort(key=lambda x: LooseVersion(x), reverse=True)
option_value_name = "OptionId.DesktopCPP" + self.msvc_arch_str
for v in sdk_versions:
try:
>From a54dd84ac9c91d7315990c817abb388fcbea5ba1 Mon Sep 17 00:00:00 2001
From: Kevin Frei <freik at meta.com>
Date: Fri, 1 Mar 2024 15:06:46 -0800
Subject: [PATCH 15/15] Got the 'maximal stuff' building properly
---
.../Python/lldbsuite/test/make/Makefile.rules | 10 +++++-----
lldb/test/API/debuginfod/Makefile | 2 +-
.../{TestSampleTest.py => TestDebuginfod.py} | 11 ++++++-----
3 files changed, 12 insertions(+), 11 deletions(-)
rename lldb/test/API/debuginfod/{TestSampleTest.py => TestDebuginfod.py} (87%)
diff --git a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
index 365db7958c2589..0120daccc12cfa 100644
--- a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
+++ b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
@@ -363,7 +363,7 @@ ifneq "$(OS)" "Darwin"
OBJCOPY ?= $(call replace_cc_with,objcopy)
ARCHIVER ?= $(call replace_cc_with,ar)
- DWP ?= $(call reaplce_cc_with,dwp)
+ DWP ?= $(call replace_cc_with,dwp)
override AR = $(ARCHIVER)
endif
@@ -572,15 +572,15 @@ else
endif
else
ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
- ifneq "$(KEEP_FULL_DEBUG_BINARY)" "YES"
+ ifneq "$(KEEP_FULL_DEBUG_BINARY)" "YES"
$(OBJCOPY) --only-keep-debug "$(EXE)" "$(DSYM)"
- else
+ else
cp "$(EXE)" "$(DSYM)"
- endif
+ endif
$(OBJCOPY) --strip-debug --add-gnu-debuglink="$(DSYM)" "$(EXE)" "$(EXE)"
endif
ifeq "$(MERGE_DWOS)" "YES"
- $(DWP) -o "$(DWP_FILE)" $(DWOS)
+ $(DWP) -o "$(DWP_NAME)" $(DWOS)
endif
endif
diff --git a/lldb/test/API/debuginfod/Makefile b/lldb/test/API/debuginfod/Makefile
index abe40bdeaf70b2..e0d5f5e8ecf43b 100644
--- a/lldb/test/API/debuginfod/Makefile
+++ b/lldb/test/API/debuginfod/Makefile
@@ -1,5 +1,5 @@
C_SOURCES := main.c
-CFLAGS_EXTRAS := -std=c99
+LDFLAGS := -Wl,--build-id
MAKE_DWO := YES
SPLIT_DEBUG_SYMBOLS := YES
diff --git a/lldb/test/API/debuginfod/TestSampleTest.py b/lldb/test/API/debuginfod/TestDebuginfod.py
similarity index 87%
rename from lldb/test/API/debuginfod/TestSampleTest.py
rename to lldb/test/API/debuginfod/TestDebuginfod.py
index 494b3298c9733a..2b72e0b423fe2e 100644
--- a/lldb/test/API/debuginfod/TestSampleTest.py
+++ b/lldb/test/API/debuginfod/TestDebuginfod.py
@@ -1,5 +1,5 @@
"""
-Describe the purpose of the test class here.
+Test support for the DebugInfoD network symbol acquisition protocol.
"""
@@ -8,14 +8,14 @@
from lldbsuite.test.lldbtest import *
-class RenameThisSampleTestTestCase(TestBase):
+class DebugInfodTests(TestBase):
# If your test case doesn't stress debug info, then
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
- def test_sample_rename_this(self):
- """There can be many tests in a test case - describe this test here."""
+ def test_stuff(self):
+ """This should test stuff."""
self.build()
self.main_source_file = lldb.SBFileSpec("main.c")
self.sample_test()
@@ -25,7 +25,8 @@ def setUp(self):
TestBase.setUp(self)
# Set up your test case here. If your test doesn't need any set up then
# remove this method from your TestCase class.
- # I need to setup the file-system-hosted Debuginfod server
+ # I need to setup the file-system-hosted Debuginfod server 'root'.
+ # The files it should host can be generated per-test
def sample_test(self):
"""You might use the test implementation in several ways, say so here."""
More information about the lldb-commits
mailing list