[llvm] 8d41f1a - Fix GSYM tests to run the yaml files and fix test failures on some machines.
Greg Clayton via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 2 15:40:22 PST 2020
Author: Greg Clayton
Date: 2020-03-02T15:40:11-08:00
New Revision: 8d41f1a02369537cae1a7d00c0fa717fc3aca575
URL: https://github.com/llvm/llvm-project/commit/8d41f1a02369537cae1a7d00c0fa717fc3aca575
DIFF: https://github.com/llvm/llvm-project/commit/8d41f1a02369537cae1a7d00c0fa717fc3aca575.diff
LOG: Fix GSYM tests to run the yaml files and fix test failures on some machines.
YAML files were not being run during lit testing as there was no lit.local.cfg file. Once this was fixed, some buildbots would fail due to a StringRef that pointed to a std::string inside of a temporary llvm::Triple object. These issues are fixed here by making a local triple object that stays around long enough so the StringRef points to valid data. Also fixed an issue where strings for files in the file table could be added in opposite order due to parameters to function calls not having a strong ordering, which caused tests to fail. Added new arch specfic directories so when targets are not enabled, we continue to function just fine.
Differential Revision: https://reviews.llvm.org/D75390
Added:
llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
llvm/test/tools/llvm-gsymutil/ARM_AArch64/lit.local.cfg
llvm/test/tools/llvm-gsymutil/X86/elf-dwarf.yaml
llvm/test/tools/llvm-gsymutil/X86/lit.local.cfg
llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
Modified:
llvm/lib/DebugInfo/GSYM/GsymCreator.cpp
llvm/tools/llvm-gsym/llvm-gsymutil.cpp
Removed:
llvm/test/tools/llvm-gsymutil/elf-dwarf.yaml
llvm/test/tools/llvm-gsymutil/fat-macho-dwarf.yaml
llvm/test/tools/llvm-gsymutil/mach-dwarf.yaml
################################################################################
diff --git a/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp b/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp
index 3a84ac41e86c..091f1af9d11a 100644
--- a/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp
+++ b/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp
@@ -29,7 +29,13 @@ uint32_t GsymCreator::insertFile(StringRef Path,
llvm::sys::path::Style Style) {
llvm::StringRef directory = llvm::sys::path::parent_path(Path, Style);
llvm::StringRef filename = llvm::sys::path::filename(Path, Style);
- FileEntry FE(insertString(directory), insertString(filename));
+ // We must insert the strings first, then call the FileEntry constructor.
+ // If we inline the insertString() function call into the constructor, the
+ // call order is undefined due to parameter lists not having any ordering
+ // requirements.
+ const uint32_t Dir = insertString(directory);
+ const uint32_t Base = insertString(filename);
+ FileEntry FE(Dir, Base);
std::lock_guard<std::recursive_mutex> Guard(Mutex);
const auto NextIndex = Files.size();
diff --git a/llvm/test/tools/llvm-gsymutil/fat-macho-dwarf.yaml b/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
similarity index 100%
rename from llvm/test/tools/llvm-gsymutil/fat-macho-dwarf.yaml
rename to llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml
diff --git a/llvm/test/tools/llvm-gsymutil/ARM_AArch64/lit.local.cfg b/llvm/test/tools/llvm-gsymutil/ARM_AArch64/lit.local.cfg
new file mode 100644
index 000000000000..e06c15ef1413
--- /dev/null
+++ b/llvm/test/tools/llvm-gsymutil/ARM_AArch64/lit.local.cfg
@@ -0,0 +1,4 @@
+if not ('ARM' in config.root.targets and 'AArch64' in config.root.targets):
+ config.unsupported = True
+
+config.suffixes = ['.test', '.yaml']
diff --git a/llvm/test/tools/llvm-gsymutil/elf-dwarf.yaml b/llvm/test/tools/llvm-gsymutil/X86/elf-dwarf.yaml
similarity index 100%
rename from llvm/test/tools/llvm-gsymutil/elf-dwarf.yaml
rename to llvm/test/tools/llvm-gsymutil/X86/elf-dwarf.yaml
diff --git a/llvm/test/tools/llvm-gsymutil/X86/lit.local.cfg b/llvm/test/tools/llvm-gsymutil/X86/lit.local.cfg
new file mode 100644
index 000000000000..52c762f5cfb8
--- /dev/null
+++ b/llvm/test/tools/llvm-gsymutil/X86/lit.local.cfg
@@ -0,0 +1,4 @@
+if not 'X86' in config.root.targets:
+ config.unsupported = True
+
+config.suffixes = ['.test', '.yaml']
diff --git a/llvm/test/tools/llvm-gsymutil/mach-dwarf.yaml b/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
similarity index 100%
rename from llvm/test/tools/llvm-gsymutil/mach-dwarf.yaml
rename to llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml
diff --git a/llvm/tools/llvm-gsym/llvm-gsymutil.cpp b/llvm/tools/llvm-gsym/llvm-gsymutil.cpp
index c7d6cf33da67..a3be9e3149db 100644
--- a/llvm/tools/llvm-gsym/llvm-gsymutil.cpp
+++ b/llvm/tools/llvm-gsym/llvm-gsymutil.cpp
@@ -179,7 +179,8 @@ static bool filterArch(MachOObjectFile &Obj) {
if (ArchFilters.empty())
return true;
- StringRef ObjArch = Obj.getArchTriple().getArchName();
+ Triple ObjTriple(Obj.getArchTriple());
+ StringRef ObjArch = ObjTriple.getArchName();
for (auto Arch : ArchFilters) {
// Match name.
@@ -350,7 +351,8 @@ static llvm::Error handleBuffer(StringRef Filename, MemoryBufferRef Buffer,
error(Filename, errorToErrorCode(BinOrErr.takeError()));
if (auto *Obj = dyn_cast<ObjectFile>(BinOrErr->get())) {
- auto ArchName = Obj->makeTriple().getArchName();
+ Triple ObjTriple(Obj->makeTriple());
+ auto ArchName = ObjTriple.getArchName();
outs() << "Output file (" << ArchName << "): " << OutFile << "\n";
if (auto Err = handleObjectFile(*Obj, OutFile.c_str()))
return Err;
@@ -374,7 +376,8 @@ static llvm::Error handleBuffer(StringRef Filename, MemoryBufferRef Buffer,
// Now handle each architecture we need to convert.
for (auto &Obj: FilterObjs) {
- auto ArchName = Obj->getArchTriple().getArchName();
+ Triple ObjTriple(Obj->getArchTriple());
+ auto ArchName = ObjTriple.getArchName();
std::string ArchOutFile(OutFile);
// If we are only handling a single architecture, then we will use the
// normal output file. If we are handling multiple architectures append
More information about the llvm-commits
mailing list