Skip to content

Commit 1494617

Browse files
author
Kevin Frei
committed
Trying to deal with Linux AArch64 test failures :/
Reapply "DebugInfoD tests + fixing issues exposed by tests (llvm#85693)" This reverts commit 7fc2fbb. Switched to using LLDB to get UUID at @clayborg's suggestion Disable tests on non-x86 Linux platforms, as they appear to fail on AArch64/Arm buildbots Moved the @skipIf to each test, off of the class itself Added CURL dependency to lit configuration 'stuff' Fixed comments in the tests Fix stupid formatter issue Updated to respond to (very late) code review feedback Fixed the script to acquire the UUID without creating a target Updated tests to not run on Mac/Windows Added LLVM_ENABLE_CURL to the config.h.cmake to work in test's @skipIf thing Attempting to prefer llvm-dwp over gnu's dwp Disabled the DWP tests Missed disabling the baseline test for DWP stuff
1 parent d748dab commit 1494617

File tree

13 files changed

+545
-22
lines changed

13 files changed

+545
-22
lines changed

lldb/include/lldb/Host/Config.h.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
#cmakedefine01 LLDB_ENABLE_LZMA
3535

36+
#cmakedefine01 LLVM_ENABLE_CURL
37+
3638
#cmakedefine01 LLDB_ENABLE_CURSES
3739

3840
#cmakedefine01 CURSES_HAVE_NCURSES_CURSES_H

lldb/packages/Python/lldbsuite/test/decorators.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,6 +1053,10 @@ def _get_bool_config_skip_if_decorator(key):
10531053
return unittest.skipIf(not have, "requires " + key)
10541054

10551055

1056+
def skipIfCurlSupportMissing(func):
1057+
return _get_bool_config_skip_if_decorator("curl")(func)
1058+
1059+
10561060
def skipIfCursesSupportMissing(func):
10571061
return _get_bool_config_skip_if_decorator("curses")(func)
10581062

lldb/packages/Python/lldbsuite/test/make/Makefile.rules

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ LLDB_BASE_DIR := $(THIS_FILE_DIR)/../../../../../
5151
#
5252
# GNUWin32 uname gives "windows32" or "server version windows32" while
5353
# some versions of MSYS uname return "MSYS_NT*", but most environments
54-
# standardize on "Windows_NT", so we'll make it consistent here.
54+
# standardize on "Windows_NT", so we'll make it consistent here.
5555
# When running tests from Visual Studio, the environment variable isn't
5656
# inherited all the way down to the process spawned for make.
5757
#----------------------------------------------------------------------
@@ -213,6 +213,12 @@ else
213213
ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
214214
DSYM = $(EXE).debug
215215
endif
216+
217+
ifeq "$(MAKE_DWP)" "YES"
218+
MAKE_DWO := YES
219+
DWP_NAME = $(EXE).dwp
220+
DYLIB_DWP_NAME = $(DYLIB_NAME).dwp
221+
endif
216222
endif
217223

218224
LIMIT_DEBUG_INFO_FLAGS =
@@ -361,6 +367,17 @@ ifneq "$(OS)" "Darwin"
361367

362368
OBJCOPY ?= $(call replace_cc_with,objcopy)
363369
ARCHIVER ?= $(call replace_cc_with,ar)
370+
# Look for llvm-dwp or gnu dwp
371+
DWP ?= $(call replace_cc_with,llvm-dwp)
372+
ifeq ($(wildcard $(DWP)),)
373+
DWP = $(call replace_cc_with,dwp)
374+
ifeq ($(wildcard $(DWP)),)
375+
DWP = $(shell command -v llvm-dwp 2> /dev/null)
376+
ifeq ($(wildcard $(DWP)),)
377+
DWP = $(shell command -v dwp 2> /dev/null)
378+
endif
379+
endif
380+
endif
364381
override AR = $(ARCHIVER)
365382
endif
366383

@@ -531,6 +548,10 @@ ifneq "$(CXX)" ""
531548
endif
532549
endif
533550

551+
ifeq "$(GEN_GNU_BUILD_ID)" "YES"
552+
LDFLAGS += -Wl,--build-id
553+
endif
554+
534555
#----------------------------------------------------------------------
535556
# DYLIB_ONLY variable can be used to skip the building of a.out.
536557
# See the sections below regarding dSYM file as well as the building of
@@ -569,11 +590,18 @@ else
569590
endif
570591
else
571592
ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
593+
ifeq "$(SAVE_FULL_DEBUG_BINARY)" "YES"
594+
cp "$(EXE)" "$(EXE).unstripped"
595+
endif
572596
$(OBJCOPY) --only-keep-debug "$(EXE)" "$(DSYM)"
573597
$(OBJCOPY) --strip-debug --add-gnu-debuglink="$(DSYM)" "$(EXE)" "$(EXE)"
574598
endif
599+
ifeq "$(MAKE_DWP)" "YES"
600+
$(DWP) -o "$(DWP_NAME)" $(DWOS)
601+
endif
575602
endif
576603

604+
577605
#----------------------------------------------------------------------
578606
# Make the dylib
579607
#----------------------------------------------------------------------
@@ -614,9 +642,15 @@ endif
614642
else
615643
$(LD) $(DYLIB_OBJECTS) $(LDFLAGS) -shared -o "$(DYLIB_FILENAME)"
616644
ifeq "$(SPLIT_DEBUG_SYMBOLS)" "YES"
645+
ifeq "$(SAVE_FULL_DEBUG_BINARY)" "YES"
646+
cp "$(DYLIB_FILENAME)" "$(DYLIB_FILENAME).unstripped"
647+
endif
617648
$(OBJCOPY) --only-keep-debug "$(DYLIB_FILENAME)" "$(DYLIB_FILENAME).debug"
618649
$(OBJCOPY) --strip-debug --add-gnu-debuglink="$(DYLIB_FILENAME).debug" "$(DYLIB_FILENAME)" "$(DYLIB_FILENAME)"
619650
endif
651+
ifeq "$(MAKE_DWP)" "YES"
652+
$(DWP) -o $(DYLIB_DWP_FILE) $(DYLIB_DWOS)
653+
endif
620654
endif
621655

622656
#----------------------------------------------------------------------

lldb/source/API/SBDebugger.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,9 @@ SBStructuredData SBDebugger::GetBuildConfiguration() {
775775
AddBoolConfigEntry(
776776
*config_up, "xml", XMLDocument::XMLEnabled(),
777777
"A boolean value that indicates if XML support is enabled in LLDB");
778+
AddBoolConfigEntry(
779+
*config_up, "curl", LLVM_ENABLE_CURL,
780+
"A boolean value that indicates if CURL support is enabled in LLDB");
778781
AddBoolConfigEntry(
779782
*config_up, "curses", LLDB_ENABLE_CURSES,
780783
"A boolean value that indicates if curses support is enabled in LLDB");
@@ -1724,20 +1727,20 @@ SBDebugger::LoadTraceFromFile(SBError &error,
17241727

17251728
void SBDebugger::RequestInterrupt() {
17261729
LLDB_INSTRUMENT_VA(this);
1727-
1730+
17281731
if (m_opaque_sp)
1729-
m_opaque_sp->RequestInterrupt();
1732+
m_opaque_sp->RequestInterrupt();
17301733
}
17311734
void SBDebugger::CancelInterruptRequest() {
17321735
LLDB_INSTRUMENT_VA(this);
1733-
1736+
17341737
if (m_opaque_sp)
1735-
m_opaque_sp->CancelInterruptRequest();
1738+
m_opaque_sp->CancelInterruptRequest();
17361739
}
17371740

17381741
bool SBDebugger::InterruptRequested() {
17391742
LLDB_INSTRUMENT_VA(this);
1740-
1743+
17411744
if (m_opaque_sp)
17421745
return m_opaque_sp->InterruptRequested();
17431746
return false;

lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4331,26 +4331,38 @@ const std::shared_ptr<SymbolFileDWARFDwo> &SymbolFileDWARF::GetDwpSymbolFile() {
43314331
FileSpecList search_paths = Target::GetDefaultDebugFileSearchPaths();
43324332
ModuleSpec module_spec;
43334333
module_spec.GetFileSpec() = m_objfile_sp->GetFileSpec();
4334+
FileSpec dwp_filespec;
43344335
for (const auto &symfile : symfiles.files()) {
43354336
module_spec.GetSymbolFileSpec() =
43364337
FileSpec(symfile.GetPath() + ".dwp", symfile.GetPathStyle());
43374338
LLDB_LOG(log, "Searching for DWP using: \"{0}\"",
43384339
module_spec.GetSymbolFileSpec());
4339-
FileSpec dwp_filespec =
4340+
dwp_filespec =
43404341
PluginManager::LocateExecutableSymbolFile(module_spec, search_paths);
43414342
if (FileSystem::Instance().Exists(dwp_filespec)) {
4342-
LLDB_LOG(log, "Found DWP file: \"{0}\"", dwp_filespec);
4343-
DataBufferSP dwp_file_data_sp;
4344-
lldb::offset_t dwp_file_data_offset = 0;
4345-
ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
4346-
GetObjectFile()->GetModule(), &dwp_filespec, 0,
4347-
FileSystem::Instance().GetByteSize(dwp_filespec), dwp_file_data_sp,
4348-
dwp_file_data_offset);
4349-
if (dwp_obj_file) {
4350-
m_dwp_symfile = std::make_shared<SymbolFileDWARFDwo>(
4351-
*this, dwp_obj_file, DIERef::k_file_index_mask);
4352-
break;
4353-
}
4343+
break;
4344+
}
4345+
}
4346+
if (!FileSystem::Instance().Exists(dwp_filespec)) {
4347+
LLDB_LOG(log, "No DWP file found locally");
4348+
// Fill in the UUID for the module we're trying to match for, so we can
4349+
// find the correct DWP file, as the Debuginfod plugin uses *only* this
4350+
// data to correctly match the DWP file with the binary.
4351+
module_spec.GetUUID() = m_objfile_sp->GetUUID();
4352+
dwp_filespec =
4353+
PluginManager::LocateExecutableSymbolFile(module_spec, search_paths);
4354+
}
4355+
if (FileSystem::Instance().Exists(dwp_filespec)) {
4356+
LLDB_LOG(log, "Found DWP file: \"{0}\"", dwp_filespec);
4357+
DataBufferSP dwp_file_data_sp;
4358+
lldb::offset_t dwp_file_data_offset = 0;
4359+
ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
4360+
GetObjectFile()->GetModule(), &dwp_filespec, 0,
4361+
FileSystem::Instance().GetByteSize(dwp_filespec), dwp_file_data_sp,
4362+
dwp_file_data_offset);
4363+
if (dwp_obj_file) {
4364+
m_dwp_symfile = std::make_shared<SymbolFileDWARFDwo>(
4365+
*this, dwp_obj_file, DIERef::k_file_index_mask);
43544366
}
43554367
}
43564368
if (!m_dwp_symfile) {

lldb/source/Plugins/SymbolLocator/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
# Order matters here: the first symbol locator prevents further searching.
2+
# For DWARF binaries that are both stripped and split, the Default plugin
3+
# will return the stripped binary when asked for the ObjectFile, which then
4+
# prevents an unstripped binary from being requested from the Debuginfod
5+
# provider.
6+
add_subdirectory(Debuginfod)
17
add_subdirectory(Default)
28
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
39
add_subdirectory(DebugSymbols)
410
endif()
5-
add_subdirectory(Debuginfod)

lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,24 @@ llvm::StringRef SymbolVendorELF::GetPluginDescriptionStatic() {
4444
"executables.";
4545
}
4646

47+
// If this is needed elsewhere, it can be exported/moved.
48+
static bool IsDwpSymbolFile(const lldb::ModuleSP &module_sp,
49+
const FileSpec &file_spec) {
50+
DataBufferSP dwp_file_data_sp;
51+
lldb::offset_t dwp_file_data_offset = 0;
52+
// Try to create an ObjectFile from the file_spec.
53+
ObjectFileSP dwp_obj_file = ObjectFile::FindPlugin(
54+
module_sp, &file_spec, 0, FileSystem::Instance().GetByteSize(file_spec),
55+
dwp_file_data_sp, dwp_file_data_offset);
56+
// The presence of a debug_cu_index section is the key identifying feature of
57+
// a DWP file. Make sure we don't fill in the section list on dwp_obj_file
58+
// (by calling GetSectionList(false)) as this function could be called before
59+
// we may have all the symbol files collected and available.
60+
return dwp_obj_file && ObjectFileELF::classof(dwp_obj_file.get()) &&
61+
dwp_obj_file->GetSectionList(false)->FindSectionByType(
62+
eSectionTypeDWARFDebugCuIndex, false);
63+
}
64+
4765
// CreateInstance
4866
//
4967
// Platforms can register a callback to use when creating symbol vendors to
@@ -87,8 +105,15 @@ SymbolVendorELF::CreateInstance(const lldb::ModuleSP &module_sp,
87105
FileSpecList search_paths = Target::GetDefaultDebugFileSearchPaths();
88106
FileSpec dsym_fspec =
89107
PluginManager::LocateExecutableSymbolFile(module_spec, search_paths);
90-
if (!dsym_fspec)
91-
return nullptr;
108+
if (!dsym_fspec || IsDwpSymbolFile(module_sp, dsym_fspec)) {
109+
// If we have a stripped binary or if we got a DWP file, we should prefer
110+
// symbols in the executable acquired through a plugin.
111+
ModuleSpec unstripped_spec =
112+
PluginManager::LocateExecutableObjectFile(module_spec);
113+
if (!unstripped_spec)
114+
return nullptr;
115+
dsym_fspec = unstripped_spec.GetFileSpec();
116+
}
92117

93118
DataBufferSP dsym_file_data_sp;
94119
lldb::offset_t dsym_file_data_offset = 0;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
C_SOURCES := main.c
2+
3+
# For normal (non DWP) Debuginfod tests, we need:
4+
5+
# * The full binary: a.out.unstripped
6+
# Produced by Makefile.rules with SAVE_FULL_DEBUG_BINARY set to YES and
7+
# SPLIT_DEBUG_SYMBOLS set to YES
8+
9+
# * The stripped binary (a.out)
10+
# Produced by Makefile.rules with SPLIT_DEBUG_SYMBOLS set to YES
11+
12+
# * The 'only-keep-debug' binary (a.out.debug)
13+
# Produced below
14+
15+
SPLIT_DEBUG_SYMBOLS := YES
16+
SAVE_FULL_DEBUG_BINARY := YES
17+
GEN_GNU_BUILD_ID := YES
18+
19+
include Makefile.rules

0 commit comments

Comments
 (0)