From 99bd6f6efa14619d61fd984f8d588ce0f6a2d8a2 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Thu, 18 Jan 2024 09:09:50 -0800 Subject: [PATCH 01/16] 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 4c785117ae8ef..8274847eca11b 100644 --- a/llvm/lib/Debuginfod/Debuginfod.cpp +++ b/llvm/lib/Debuginfod/Debuginfod.cpp @@ -159,6 +159,10 @@ Expected getCachedOrDownloadDebuginfo(BuildIDRef ID) { return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath); } +Expected getCachedOrDownloadDebuginfo(BuildIDRef ID) { + std::string UrlPath = getDebuginfodDebuginfoUrlPath(ID); + return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath); +} // General fetching function. Expected getCachedOrDownloadArtifact(StringRef UniqueKey, StringRef UrlPath) { From be4ae2a890821051aecee453d9057e351e9c9f06 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Fri, 19 Jan 2024 07:11:17 -0800 Subject: [PATCH 02/16] 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 5f67658f86ea9..68d012c38a080 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 &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 2f8f80f8765cb..7c59252f9cdbe 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 &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 ca969626f4ffc..f536760d8feb0 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 2cd7bbbb24490..81406654092b3 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 b5fe35d71032a..aeacf9c78ea70 100644 --- a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp +++ b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp @@ -11,6 +11,7 @@ #include #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 0000000000000..1cc8bffc59ce3 --- /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@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 0000000000000..60b086adf1d63 --- /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 0000000000000..bcaa750289542 --- /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@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 0000000000000..a4465d75fa6da --- /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 0000000000000..34d157b66c6b7 --- /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 0000000000000..11798976f5c15 --- /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 0000000000000..e03ff90187f40 --- /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 0000000000000..a4465d75fa6da --- /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 0000000000000..661e5771fcbee --- /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 0000000000000..a66f4a641b427 --- /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 0000000000000..5d5ed250c4cc1 --- /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 0000000000000..3a3f20a5c82c4 --- /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 0000000000000..f110db39c11ae --- /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 0000000000000..67d55a16041d3 --- /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 0000000000000..e1018a1181c24 --- /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 0000000000000..acb647e83e008 --- /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 0000000000000..62c7832da8fb3 --- /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 0000000000000..78671b6eb463a --- /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 0000000000000..7fe3e9e68d4ed --- /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 8274847eca11b..2d6f20a5ed4a0 100644 --- a/llvm/lib/Debuginfod/Debuginfod.cpp +++ b/llvm/lib/Debuginfod/Debuginfod.cpp @@ -252,27 +252,54 @@ static SmallVector getHeaders() { return Headers; } -Expected getCachedOrDownloadArtifact( - StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath, - ArrayRef 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 +getCachedArtifactHelper(StringRef UniqueKey, StringRef CacheDirectoryPath, + unsigned &Task) { + SmallString<64> AbsCachedArtifactPath = + getCachedArtifactPath(UniqueKey, CacheDirectoryPath); Expected CacheOrErr = localCache("Debuginfod-client", ".debuginfod-client", CacheDirectoryPath); if (!CacheOrErr) return CacheOrErr.takeError(); + return (*CacheOrErr)(Task, UniqueKey, ""); +} + +Expected getCachedArtifact(StringRef UniqueKey, + StringRef CacheDirectoryPath) { + // We choose an arbitrary Task parameter as we do not make use of it. + unsigned Task = 0; + Expected 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 getCachedOrDownloadArtifact( + StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath, + ArrayRef DebuginfodUrls, std::chrono::milliseconds Timeout) { // We choose an arbitrary Task parameter as we do not make use of it. unsigned Task = 0; - Expected CacheAddStreamOrErr = Cache(Task, UniqueKey, ""); + Expected 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 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 ba1a8a0157314..e88ed8d6411ec 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 4a34ad2a87c33..46aa15113d2b8 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 197c220a701752b4df144e9d07edf96faffc53ec Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Mon, 22 Jan 2024 08:23:42 -0800 Subject: [PATCH 03/16] 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 bcaa750289542..1e8b8ffeee25e 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@github.com:kevinfrei/llvm.git 936cbb55363f8cc626d0a036fa840e87713572d9)' + - 'Facebook clang version 15.0.0 (git@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 60b086adf1d63..1f18c04a4415a 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 11798976f5c15..6501cda4a4f7e 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 e03ff90187f40..b99d0ede47c21 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 a4465d75fa6da..6c8045e9a2068 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 a4465d75fa6da..0000000000000 --- 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 a66f4a641b427..b222b5c028a2a 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 34d157b66c6b7..f25e4c4abf5c2 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 1cc8bffc59ce3..608e9d04b2ebf 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@github.com:kevinfrei/llvm.git 936cbb55363f8cc626d0a036fa840e87713572d9)' + - 'Facebook clang version 15.0.0 (git@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 62c7832da8fb3..2c4128e0d04b6 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 0000000000000..5ae9691d49398 --- /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 0000000000000..98df28b5c3232 --- /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 78671b6eb463a..cc9aaee072b0f 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 7fe3e9e68d4ed..62cca92355b03 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 3255a05c457d018b90bc342bb8dbd6cdb4b0cdd7 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Mon, 22 Jan 2024 17:17:07 -0800 Subject: [PATCH 04/16] 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 5d5ed250c4cc1..0000000000000 --- 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 3a3f20a5c82c4..0000000000000 --- 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 f110db39c11ae..0000000000000 --- 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 67d55a16041d3..0000000000000 --- 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 0000000000000..a63beccd249b1 --- /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 0000000000000..f45477a8f037c --- /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 0000000000000..12cb9cf0282dd --- /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 0000000000000..ace1cfc58e071 --- /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 e1018a1181c24..0000000000000 --- 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 0000000000000..351bb0b3c44be --- /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 0000000000000..bb60100b0e054 --- /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 0000000000000..4bca2113d73dd --- /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 0000000000000..d210a1a7dd54b --- /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 0000000000000..a60c1139a6460 --- /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 acb647e83e008..50b7082aac43c 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 0000000000000..163714cb20b77 --- /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 0000000000000..710313e844398 --- /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 0000000000000..9ebc74cb5bd36 --- /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 62cca92355b03..cbde54d75af7a 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 8641080fc2ab37654d7e99aeeb5dc579d21a25fc Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Mon, 22 Jan 2024 22:34:01 -0800 Subject: [PATCH 05/16] 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 a60c1139a6460..3261a78b22bb2 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 2d6f20a5ed4a0..e4390b39d9224 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 getCachedOrDownloadDebuginfo(BuildIDRef ID) { - std::string UrlPath = getDebuginfodDebuginfoUrlPath(ID); - return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath); -} - Expected 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 e88ed8d6411ec..ba1a8a0157314 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 46aa15113d2b8..4a34ad2a87c33 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 760dd61daa6d2513dd41867a6a368393269f1ba6 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Mon, 22 Jan 2024 22:43:16 -0800 Subject: [PATCH 06/16] 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 68d012c38a080..5f67658f86ea9 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 &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 7c59252f9cdbe..2f8f80f8765cb 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 &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 81406654092b3..2cd7bbbb24490 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 aeacf9c78ea70..5f66de1ff67ee 100644 --- a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp +++ b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp @@ -11,7 +11,6 @@ #include #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 46c23df109aa3ca6c2025cd4d9ec252f068173dc Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Tue, 23 Jan 2024 08:38:59 -0800 Subject: [PATCH 07/16] 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 5f66de1ff67ee..ec734b8bb64f8 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 f64d9d014b48fd410e471bbdc88dec355105453f Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Tue, 23 Jan 2024 09:36:07 -0800 Subject: [PATCH 08/16] 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 cbde54d75af7a..df335ca11ffa4 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 a63beccd249b1..8b0603e6f5860 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 f45477a8f037c..943ab100437c6 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 12cb9cf0282dd..77abcc7ca9d66 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 ace1cfc58e071..3555d4c2fc287 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 351bb0b3c44be..6458abd4485df 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 bb60100b0e054..11ac3c60d5b87 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 4bca2113d73dd..0b2267329650a 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 d210a1a7dd54b..c4574257b5d07 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 3261a78b22bb2..9d141b0f87abe 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 50b7082aac43c..572b36f505c1b 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 163714cb20b77..0359fdb0cfb7d 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 710313e844398..a7638f918811d 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 9ebc74cb5bd36..261319919bc94 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 2c4128e0d04b6..5aae7189678a1 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 5ae9691d49398..ea4bb47648ecb 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 98df28b5c3232..baa63f068bbff 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 cc9aaee072b0f..f1046bb8448f1 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 498c2f053640a7901cfe78ed5adc3996315ca6f9 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Tue, 23 Jan 2024 09:52:50 -0800 Subject: [PATCH 09/16] 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 77abcc7ca9d66..930a64e851870 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 3555d4c2fc287..05d9fa1ebbf36 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 9d141b0f87abe..5f1eb18e21c7c 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 572b36f505c1b..445b6b7eef96f 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 261319919bc94..3c19382d2f6df 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 baa63f068bbff..e8ca8584c2fbc 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 f1046bb8448f1..a7af5bdbdfcf1 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 d75c1f532e147..9a596a40b2966 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 736dfc335732b..5428691c129a1 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 e4390b39d9224..62935da131238 100644 --- a/llvm/lib/Debuginfod/Debuginfod.cpp +++ b/llvm/lib/Debuginfod/Debuginfod.cpp @@ -158,6 +158,7 @@ Expected getCachedOrDownloadDebuginfo(BuildIDRef ID) { std::string UrlPath = getDebuginfodDebuginfoUrlPath(ID); return getCachedOrDownloadArtifact(getDebuginfodCacheKey(UrlPath), UrlPath); } + // General fetching function. Expected getCachedOrDownloadArtifact(StringRef UniqueKey, StringRef UrlPath) { From 4306d43a1ba6ddebbbf8c7c595b86aa7d9fdca50 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Tue, 23 Jan 2024 10:02:50 -0800 Subject: [PATCH 10/16] 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 f536760d8feb0..3367022639ab8 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 85a8b4b3317002043edc67bb3630923e14980c6d Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Tue, 23 Jan 2024 13:00:57 -0800 Subject: [PATCH 11/16] 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 1e8b8ffeee25e..ed3fd4d949ea6 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@github.com:kevinfrei/llvm.git f2b81cb569d0632a0eb0fd51722d725ab191af72)' + - 'Facebook clang version 15.0.0 (git@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 1f18c04a4415a..b3bbff01a3689 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 6501cda4a4f7e..7c0c95d4d7bac 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 b99d0ede47c21..e3679b3ca5b63 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 6c8045e9a2068..f81ce51e4de1b 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 661e5771fcbee..6f2106034f45a 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 b222b5c028a2a..c1ec233d10d0b 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 f25e4c4abf5c2..9cebffacac747 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 608e9d04b2ebf..b9118d1a1820a 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@github.com:kevinfrei/llvm.git f2b81cb569d0632a0eb0fd51722d725ab191af72)' + - 'Facebook clang version 15.0.0 (git@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 943ab100437c6..4fd8463744d2c 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 930a64e851870..00e1b7c5bc72c 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 05d9fa1ebbf36..c4444ce166811 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 5f1eb18e21c7c..0197b0b5e4101 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 445b6b7eef96f..3621b3f8d2113 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 3c19382d2f6df..4c6510986913f 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 ea4bb47648ecb..562c8d8e620b4 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 e8ca8584c2fbc..72e3c8801d749 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 a7af5bdbdfcf1..b3344228bcbb0 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 62935da131238..4c785117ae8ef 100644 --- a/llvm/lib/Debuginfod/Debuginfod.cpp +++ b/llvm/lib/Debuginfod/Debuginfod.cpp @@ -248,54 +248,27 @@ static SmallVector getHeaders() { return Headers; } -static SmallString<64> getCachedArtifactPath(StringRef UniqueKey, - StringRef CacheDirectoryPath) { +Expected getCachedOrDownloadArtifact( + StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath, + ArrayRef DebuginfodUrls, std::chrono::milliseconds Timeout) { SmallString<64> AbsCachedArtifactPath; sys::path::append(AbsCachedArtifactPath, CacheDirectoryPath, "llvmcache-" + UniqueKey); - return AbsCachedArtifactPath; -} - -static Expected -getCachedArtifactHelper(StringRef UniqueKey, StringRef CacheDirectoryPath, - unsigned &Task) { - SmallString<64> AbsCachedArtifactPath = - getCachedArtifactPath(UniqueKey, CacheDirectoryPath); Expected CacheOrErr = localCache("Debuginfod-client", ".debuginfod-client", CacheDirectoryPath); if (!CacheOrErr) return CacheOrErr.takeError(); - return (*CacheOrErr)(Task, UniqueKey, ""); -} - -Expected getCachedArtifact(StringRef UniqueKey, - StringRef CacheDirectoryPath) { - // We choose an arbitrary Task parameter as we do not make use of it. - unsigned Task = 0; - Expected 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 getCachedOrDownloadArtifact( - StringRef UniqueKey, StringRef UrlPath, StringRef CacheDirectoryPath, - ArrayRef 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 CacheAddStreamOrErr = - getCachedArtifactHelper(UniqueKey, CacheDirectoryPath, Task); + Expected 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 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 29c5c94c0d4dfb56763ce693f4814300cfbf393f Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Fri, 26 Jan 2024 09:37:37 -0800 Subject: [PATCH 12/16] 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 df335ca11ffa4..116bcc5c0ed7a 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 f66df9bf5c5a59f7b880602727c5f67843ec75b0 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Wed, 28 Feb 2024 15:08:05 -0800 Subject: [PATCH 13/16] 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 bfd249ccd43f2..365db7958c258 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 0000000000000..abe40bdeaf70b --- /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= +# 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 0000000000000..494b3298c9733 --- /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 0000000000000..2cc7e1557f40c --- /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 6f2106034f45a..584eb11072953 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 e0db4f9e041c1e106e6eca6ec7fb779342072679 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Fri, 1 Mar 2024 15:06:46 -0800 Subject: [PATCH 14/16] 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 365db7958c258..0120daccc12cf 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 abe40bdeaf70b..e0d5f5e8ecf43 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 494b3298c9733..2b72e0b423fe2 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.""" From e9d0cb5a8bc21f0107420bdbb657aa5470c34c0f Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Mon, 4 Mar 2024 16:23:48 -0800 Subject: [PATCH 15/16] Trying to get my head around Python again --- lldb/test/API/debuginfod/TestDebuginfod.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lldb/test/API/debuginfod/TestDebuginfod.py b/lldb/test/API/debuginfod/TestDebuginfod.py index 2b72e0b423fe2..cdeb132d55d2f 100644 --- a/lldb/test/API/debuginfod/TestDebuginfod.py +++ b/lldb/test/API/debuginfod/TestDebuginfod.py @@ -9,19 +9,19 @@ 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 need to try every flavor of debug inf. NO_DEBUG_INFO_TESTCASE = True def test_stuff(self): """This should test stuff.""" + print("I am in test_stuff") self.build() self.main_source_file = lldb.SBFileSpec("main.c") self.sample_test() def setUp(self): # Call super's setUp(). + print("I am in 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. From ea496707c03a093a70a746254a3ed81e2d4c3d78 Mon Sep 17 00:00:00 2001 From: Kevin Frei Date: Wed, 6 Mar 2024 17:11:44 -0800 Subject: [PATCH 16/16] I think I have the files I need finally generating properly --- lldb/test/API/debuginfod/Makefile | 105 -------------- lldb/test/API/debuginfod/Normal/Makefile | 32 +++++ .../API/debuginfod/Normal/TestDebuginfod.py | 130 ++++++++++++++++++ lldb/test/API/debuginfod/{ => Normal}/main.c | 0 lldb/test/API/debuginfod/SplitDWARF/Makefile | 36 +++++ .../SplitDWARF/TestDebuginfodDWP.py | 116 ++++++++++++++++ lldb/test/API/debuginfod/SplitDWARF/main.c | 9 ++ lldb/test/API/debuginfod/TestDebuginfod.py | 52 ------- 8 files changed, 323 insertions(+), 157 deletions(-) delete mode 100644 lldb/test/API/debuginfod/Makefile create mode 100644 lldb/test/API/debuginfod/Normal/Makefile create mode 100644 lldb/test/API/debuginfod/Normal/TestDebuginfod.py rename lldb/test/API/debuginfod/{ => Normal}/main.c (100%) create mode 100644 lldb/test/API/debuginfod/SplitDWARF/Makefile create mode 100644 lldb/test/API/debuginfod/SplitDWARF/TestDebuginfodDWP.py create mode 100644 lldb/test/API/debuginfod/SplitDWARF/main.c delete mode 100644 lldb/test/API/debuginfod/TestDebuginfod.py diff --git a/lldb/test/API/debuginfod/Makefile b/lldb/test/API/debuginfod/Makefile deleted file mode 100644 index e0d5f5e8ecf43..0000000000000 --- a/lldb/test/API/debuginfod/Makefile +++ /dev/null @@ -1,105 +0,0 @@ -C_SOURCES := main.c -LDFLAGS := -Wl,--build-id - -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= -# 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/Normal/Makefile b/lldb/test/API/debuginfod/Normal/Makefile new file mode 100644 index 0000000000000..9c191de0d0aaa --- /dev/null +++ b/lldb/test/API/debuginfod/Normal/Makefile @@ -0,0 +1,32 @@ +C_SOURCES := main.c +LD_EXTRAS := -Wl,--build-id + +# For normal (non DWP) Debuginfod tests, we need: + +# * The "full" binary: a.out.debug +# Produced by Makefile.rules with KEEP_FULL_DEBUG_BINARY set to YES and +# SPLIT_DEBUG_SYMBOLS set to YES + +# * The stripped binary (a.out) +# Produced by Makefile.rules with SPLIT_DEBUG_SYMBOLS set to YES + +# * The 'only-keep-debug' binary (a.out.dbg) +# Produced below + +# * The .uuid file (for a little easier testing code) +# Produced below + +# Don't strip the debug info from a.out: +SPLIT_DEBUG_SYMBOLS := YES +KEEP_FULL_DEBUG_BINARY := YES + +all: a.out a.out.uuid a.out.dbg a.out.debug + +# Put the build-id into a file by itself for minimum effort in Python +a.out.uuid: a.out + $(OBJCOPY) --dump-section=.note.gnu.build-id=$@ $< + +a.out.dbg: a.out.debug + $(OBJCOPY) --only-keep-debug $< $@ + +include Makefile.rules diff --git a/lldb/test/API/debuginfod/Normal/TestDebuginfod.py b/lldb/test/API/debuginfod/Normal/TestDebuginfod.py new file mode 100644 index 0000000000000..5c1e2b4f31635 --- /dev/null +++ b/lldb/test/API/debuginfod/Normal/TestDebuginfod.py @@ -0,0 +1,130 @@ +""" +Test support for the DebugInfoD network symbol acquisition protocol. +""" + +import lldb +import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.lldbtest import * + +def getUUID(aoutuuid): + """ + Pull the 20 byte UUID out of the .note.gnu.build-id section that was dumped + to a file already, as part of the build. + """ + import struct + with open(aoutuuid, "rb") as f: + data = f.read(36) + if len(data) != 36: + return None + header = struct.unpack_from("<4I", data) + if len(header) != 4: + return None + # 4 element 'prefix', 20 bytes of uuid, 3 byte long string, 'GNU': + if header[0] != 4 or header[1] != 20 or header[2] != 3 or header[3] != 0x554e47: + return None + return data[16:].hex() + +def config_test(local_files, uuid, debuginfo, executable): + """ + Set up a test with local_files[] copied to a particular location + so that we control which files are, or are not, found in the file system. + Also, create a stand-alone file-system 'hosted' debuginfod server for the + given UUID. + + Make the filesystem look like: + + /tmp//test/[local_files] + + /tmp//cache (for lldb to use as a temp cache) + + /tmp//buildid//executable -> + /tmp//buildid//debuginfo -> + Returns the /tmp/ path + """ + import os + import shutil + import tempfile + + tmp_dir = tempfile.mkdtemp() + test_dir = os.path.join(tmp_dir, "test") + uuid_dir = os.path.join(tmp_dir, "buildid", uuid) + + # Make the 3 directories + os.makedirs(os.path.join(tmp_dir, "cache")) + os.makedirs(uuid_dir) + os.makedirs(test_dir) + + # Copy the files used by the test: + for f in local_files: + shutil.copy(f, test_dir) + + # Fill in the 'file://...' mocked Debuginfod server + if debuginfo: + shutil.move(debuginfo, os.path.join(uuiddir, "debuginfo")) + if executable: + shutil.move(executable, os.path.join(uuiddir, "executable")) + + return tmp_dir + + +# Need to test 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 + +class DebugInfodTests(TestBase): + # No need to try every flavor of debug inf. + NO_DEBUG_INFO_TESTCASE = True + + def test_stuff(self): + """This should test stuff.""" + self.build() + # Pull the UUID out of the binary. + uuid_file = self.getBuildArtifact("a.out.uuid") + self.aout = self.getBuildArtifact("a.out") + self.debugbin = self.getBuildArtifact("a.out.debug") + self.dwp = self.getBuildArtifact("a.out.dwp") + self.uuid = getUUID(uuid_file) + # Setup the fake DebugInfoD server. + server_root = config_fake_debuginfod_server(self.uuid, self.dwp, self.debugbin) + + # Configure LLDB properly + self.runCmd("settings set symbols.enable-external-lookup true") + self.runCmd("settings set plugin.symbol-locator.debuginfod.cache-path %s/cache" % server_root) + self.runCmd("settings clear plugin.symbol-locator.debuginfod.server-urls") + cmd = "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%s" % server_root + self.runCmd(cmd) + print(cmd) + # Check to see if the symbol file is properly loaded + self.main_source_file = lldb.SBFileSpec("main.c") + self.sample_test() + + 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 = target = self.dbg.CreateTarget(self.aout) + self.assertTrue(target and target.IsValid(), "Target is valid") + bp = target.BreakpointCreateByName("func") + self.assertTrue(bp and bp.IsValid(), "Breakpoint is valid") + self.assertEqual(bp.GetNumLocations(), 1) + print("Loc @ Index 0:") + print(bp.GetLocationAtIndex(0)) + loc = bp.GetLocationAtIndex(0) + self.assertTrue(loc and loc.IsValid(), "Location is valid") + addr = loc.GetAddress() + self.assertTrue(addr and addr.IsValid(), "Loc address is valid") + line_entry = addr.GetLineEntry() + self.assertTrue(line_entry and line_entry.IsValid(), "Loc line entry is valid") + self.assertEqual(line_entry.GetLine(), 18) + self.assertEqual(loc.GetLineEntry().GetFileSpec().GetFilename(), self.main_source_file.GetFilename()) + + 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/Normal/main.c similarity index 100% rename from lldb/test/API/debuginfod/main.c rename to lldb/test/API/debuginfod/Normal/main.c diff --git a/lldb/test/API/debuginfod/SplitDWARF/Makefile b/lldb/test/API/debuginfod/SplitDWARF/Makefile new file mode 100644 index 0000000000000..38d0a419e105b --- /dev/null +++ b/lldb/test/API/debuginfod/SplitDWARF/Makefile @@ -0,0 +1,36 @@ +C_SOURCES := main.c +LD_EXTRAS := -Wl,--build-id + +# For split-dwarf Debuginfod tests, we need: + +# * A .DWP file (a.out.dwp) +# Produced by Makefile.rules with MAKE_DWO and MERGE_DWOS both set to YES + +# * The "full" binary: it's missing things that live in .dwo's (a.out.debug) +# Produced by Makefile.rules with KEEP_FULL_DEBUG_BINARY set to YES and +# SPLIT_DEBUG_SYMBOLS set to YES + +# * The stripped binary (a.out) +# Produced by Makefile.rules + +# * The 'only-keep-debug' binary (a.out.dbg) +# Produced below + +# * The .uuid file (for a little easier testing code) +# Produced here in the rule below + +MAKE_DWO := YES +MERGE_DWOS := YES +SPLIT_DEBUG_SYMBOLS := YES +KEEP_FULL_DEBUG_BINARY := YES + +all: a.out.uuid a.out a.out.debug a.out.dbg + +a.out.dbg: a.out.debug + $(OBJCOPY) --only-keep-debug $< $@ + +# Put the build-id into a file by itself for minimum effort in Python +a.out.uuid: a.out + $(OBJCOPY) --dump-section=.note.gnu.build-id=$@ $< + +include Makefile.rules diff --git a/lldb/test/API/debuginfod/SplitDWARF/TestDebuginfodDWP.py b/lldb/test/API/debuginfod/SplitDWARF/TestDebuginfodDWP.py new file mode 100644 index 0000000000000..fb33c0788b38e --- /dev/null +++ b/lldb/test/API/debuginfod/SplitDWARF/TestDebuginfodDWP.py @@ -0,0 +1,116 @@ +""" +Test support for the DebugInfoD network symbol acquisition protocol. +""" + +import lldb +import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.lldbtest import * + +def getUUID(aoutuuid): + """ + Pull the 20 byte UUID out of the .note.gnu.build-id section that was dumped + to a file already, as part of the build. + """ + import struct + with open(aoutuuid, "rb") as f: + data = f.read(36) + if len(data) != 36: + return None + header = struct.unpack_from("<4I", data) + if len(header) != 4: + return None + # 4 element 'prefix', 20 bytes of uuid, 3 byte long string, 'GNU': + if header[0] != 4 or header[1] != 20 or header[2] != 3 or header[3] != 0x554e47: + return None + return data[16:].hex() + +def config_fake_debuginfod_server(uuid, debuginfo, executable): + """ + Create a file-system 'hosted' debuginfod server for the given UUID. + Make the filesystem look like: + /tmp//cache (for lldb to use as a temp cache) + /tmp//buildid//executable -> + /tmp//buildid//debuginfo -> + + Returns the /tmp/ path + """ + import os + import shutil + import tempfile + tmpdir = tempfile.mkdtemp() + uuiddir = os.path.join(tmpdir, "buildid", uuid) + os.makedirs(uuiddir) + os.makedirs(os.path.join(tmpdir, "cache")) + # Move the files to the correct location for debuginfod to find + if debuginfo: + pass + #shutil.move(debuginfo, os.path.join(uuiddir, "debuginfo")) + + if executable: + pass + #shutil.move(executable, os.path.join(uuiddir, "executable")) + + return tmpdir + + +# Need to test 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 + +class DebugInfodTests(TestBase): + # No need to try every flavor of debug inf. + NO_DEBUG_INFO_TESTCASE = True + + def test_stuff(self): + """This should test stuff.""" + self.build() + # Pull the UUID out of the binary. + uuid_file = self.getBuildArtifact("a.out.uuid") + self.aout = self.getBuildArtifact("a.out") + self.debugbin = self.getBuildArtifact("a.out.debug") + self.dwp = self.getBuildArtifact("a.out.dwp") + self.uuid = getUUID(uuid_file) + # Setup the fake DebugInfoD server. + server_root = config_fake_debuginfod_server(self.uuid, self.dwp, self.debugbin) + + # Configure LLDB properly + self.runCmd("settings set symbols.enable-external-lookup true") + self.runCmd("settings set plugin.symbol-locator.debuginfod.cache-path %s/cache" % server_root) + self.runCmd("settings clear plugin.symbol-locator.debuginfod.server-urls") + cmd = "settings insert-before plugin.symbol-locator.debuginfod.server-urls 0 file://%s" % server_root + self.runCmd(cmd) + print(cmd) + # Check to see if the symbol file is properly loaded + self.main_source_file = lldb.SBFileSpec("main.c") + self.sample_test() + + 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 = target = self.dbg.CreateTarget(self.aout) + self.assertTrue(target and target.IsValid(), "Target is valid") + bp = target.BreakpointCreateByName("func") + self.assertTrue(bp and bp.IsValid(), "Breakpoint is valid") + self.assertEqual(bp.GetNumLocations(), 1) + print("Loc @ Index 0:") + print(bp.GetLocationAtIndex(0)) + loc = bp.GetLocationAtIndex(0) + self.assertTrue(loc and loc.IsValid(), "Location is valid") + addr = loc.GetAddress() + self.assertTrue(addr and addr.IsValid(), "Loc address is valid") + line_entry = addr.GetLineEntry() + self.assertTrue(line_entry and line_entry.IsValid(), "Loc line entry is valid") + self.assertEqual(line_entry.GetLine(), 18) + self.assertEqual(loc.GetLineEntry().GetFileSpec().GetFilename(), self.main_source_file.GetFilename()) + + 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/SplitDWARF/main.c b/lldb/test/API/debuginfod/SplitDWARF/main.c new file mode 100644 index 0000000000000..2cc7e1557f40c --- /dev/null +++ b/lldb/test/API/debuginfod/SplitDWARF/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/API/debuginfod/TestDebuginfod.py b/lldb/test/API/debuginfod/TestDebuginfod.py deleted file mode 100644 index cdeb132d55d2f..0000000000000 --- a/lldb/test/API/debuginfod/TestDebuginfod.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Test support for the DebugInfoD network symbol acquisition protocol. -""" - - -import lldb -import lldbsuite.test.lldbutil as lldbutil -from lldbsuite.test.lldbtest import * - - -class DebugInfodTests(TestBase): - # No need to try every flavor of debug inf. - NO_DEBUG_INFO_TESTCASE = True - - def test_stuff(self): - """This should test stuff.""" - print("I am in test_stuff") - self.build() - self.main_source_file = lldb.SBFileSpec("main.c") - self.sample_test() - - def setUp(self): - # Call super's setUp(). - print("I am in 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 '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.""" - - # 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")