From 251fe986afd35bc257a8b043a49bddc98473d565 Mon Sep 17 00:00:00 2001 From: Nigel Perks Date: Mon, 14 Sep 2020 18:17:11 +0100 Subject: [PATCH] [Test][DebugInfo] Check for backend object emission support. The XCore backend does not support object emission. Several tests fail for this reason when XCore is the default target. See staging buildbot builder: clang-xcore-ubuntu-20-x64. So check for backend object emission before running the tests requiring it. Incorporate isConfigurationSupported functionality in isObjectEmissionSupported, to avoid calling them both in the same tests. Differential Revision: https://reviews.llvm.org/D98400 --- .../DebugInfo/DWARF/DWARFDebugInfoTest.cpp | 24 +++++++++++----------- llvm/unittests/DebugInfo/DWARF/DwarfUtils.cpp | 7 +++++++ llvm/unittests/DebugInfo/DWARF/DwarfUtils.h | 1 + 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp index 6b644b0..4cafc9a 100644 --- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp +++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp @@ -42,7 +42,7 @@ namespace { template void TestAllForms() { Triple Triple = getDefaultTargetTripleForAddrSize(sizeof(AddrType)); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test that we can decode all DW_FORM values correctly. @@ -456,7 +456,7 @@ TEST(DWARFDebugInfo, TestDWARF32Version5Addr8AllForms) { template void TestChildren() { Triple Triple = getDefaultTargetTripleForAddrSize(sizeof(AddrType)); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test that we can decode DW_FORM_ref_addr values correctly in DWARF 2 with @@ -586,7 +586,7 @@ TEST(DWARFDebugInfo, TestDWARF32Version4Addr8Children) { template void TestReferences() { Triple Triple = getDefaultTargetTripleForAddrSize(sizeof(AddrType)); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test that we can decode DW_FORM_refXXX values correctly in DWARF. @@ -836,7 +836,7 @@ TEST(DWARFDebugInfo, TestDWARF32Version4Addr8References) { template void TestAddresses() { Triple Triple = getDefaultTargetTripleForAddrSize(sizeof(AddrType)); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test the DWARF APIs related to accessing the DW_AT_low_pc and @@ -1008,7 +1008,7 @@ TEST(DWARFDebugInfo, TestDWARF32Version4Addr8Addresses) { TEST(DWARFDebugInfo, TestStringOffsets) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; const char *String1 = "Hello"; @@ -1072,7 +1072,7 @@ TEST(DWARFDebugInfo, TestStringOffsets) { TEST(DWARFDebugInfo, TestEmptyStringOffsets) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; const char *String1 = "Hello"; @@ -1101,7 +1101,7 @@ TEST(DWARFDebugInfo, TestEmptyStringOffsets) { TEST(DWARFDebugInfo, TestRelations) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test the DWARF APIs related to accessing the DW_AT_low_pc and @@ -1288,7 +1288,7 @@ TEST(DWARFDebugInfo, TestDWARFDie) { TEST(DWARFDebugInfo, TestChildIterators) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test the DWARF APIs related to iterating across the children of a DIE using @@ -1397,7 +1397,7 @@ TEST(DWARFDebugInfo, TestEmptyChildren) { TEST(DWARFDebugInfo, TestAttributeIterators) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test the DWARF APIs related to iterating across all attribute values in a @@ -1459,7 +1459,7 @@ TEST(DWARFDebugInfo, TestAttributeIterators) { TEST(DWARFDebugInfo, TestFindRecurse) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; uint16_t Version = 4; @@ -1673,7 +1673,7 @@ TEST(DWARFDebugInfo, TestDwarfToFunctions) { TEST(DWARFDebugInfo, TestFindAttrs) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; // Test the DWARFDie::find() and DWARFDie::findRecursively() that take an @@ -1736,7 +1736,7 @@ TEST(DWARFDebugInfo, TestFindAttrs) { TEST(DWARFDebugInfo, TestImplicitConstAbbrevs) { Triple Triple = getNormalizedDefaultTargetTriple(); - if (!isConfigurationSupported(Triple)) + if (!isObjectEmissionSupported(Triple)) return; uint16_t Version = 5; diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfUtils.cpp b/llvm/unittests/DebugInfo/DWARF/DwarfUtils.cpp index 249cfb4..20dc7bc 100644 --- a/llvm/unittests/DebugInfo/DWARF/DwarfUtils.cpp +++ b/llvm/unittests/DebugInfo/DWARF/DwarfUtils.cpp @@ -52,3 +52,10 @@ bool llvm::dwarf::utils::isConfigurationSupported(Triple &T) { std::string Err; return TargetRegistry::lookupTarget(T.getTriple(), Err); } + +bool llvm::dwarf::utils::isObjectEmissionSupported(Triple &T) { + initLLVMIfNeeded(); + std::string Err; + const Target *TheTarget = TargetRegistry::lookupTarget(T.getTriple(), Err); + return TheTarget && TheTarget->hasMCAsmBackend(); +} diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfUtils.h b/llvm/unittests/DebugInfo/DWARF/DwarfUtils.h index 036071e..00eaef2 100644 --- a/llvm/unittests/DebugInfo/DWARF/DwarfUtils.h +++ b/llvm/unittests/DebugInfo/DWARF/DwarfUtils.h @@ -21,6 +21,7 @@ namespace utils { Triple getDefaultTargetTripleForAddrSize(uint8_t AddrSize); Triple getNormalizedDefaultTargetTriple(); bool isConfigurationSupported(Triple &T); +bool isObjectEmissionSupported(Triple &T); } // end namespace utils } // end namespace dwarf -- 2.7.4