if (producer.empty())
return;
- static RegularExpression llvm_gcc_regex(
- llvm::StringRef("^4\\.[012]\\.[01] \\(Based on Apple "
- "Inc\\. build [0-9]+\\) \\(LLVM build "
- "[\\.0-9]+\\)$"));
- if (llvm_gcc_regex.Execute(producer)) {
+ static RegularExpression g_llvm_gcc_regex(
+ llvm::StringRef(R"(4\.[012]\.[01] )"
+ R"(\(Based on Apple Inc\. build [0-9]+\) )"
+ R"(\(LLVM build [\.0-9]+\)$)"));
+ static RegularExpression g_clang_version_regex(
+ llvm::StringRef(R"(clang-([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?))"));
+
+ if (g_llvm_gcc_regex.Execute(producer)) {
m_producer = eProducerLLVMGCC;
} else if (producer.contains("clang")) {
- static RegularExpression g_clang_version_regex(
- llvm::StringRef(R"(clang-([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?))"));
- llvm::SmallVector<llvm::StringRef, 4> matches;
+ llvm::SmallVector<llvm::StringRef, 3> matches;
if (g_clang_version_regex.Execute(producer, &matches))
m_producer_version.tryParse(matches[1]);
m_producer = eProducerClang;
EXPECT_EQ(die_first->GetSibling(), nullptr);
}
-TEST(DWARFUnitTest, Producer) {
+TEST(DWARFUnitTest, ClangProducer) {
const char *yamldata = R"(
--- !ELF
FileHeader:
Attributes:
- Attribute: DW_AT_producer
Form: DW_FORM_strp
- - Attribute: DW_AT_language
- Form: DW_FORM_data2
debug_info:
- Version: 4
AddrSize: 8
- AbbrCode: 0x1
Values:
- Value: 0x0
- - Value: 0xC
- AbbrCode: 0x0
)";
EXPECT_EQ(unit->GetProducer(), eProducerClang);
EXPECT_EQ(unit->GetProducerVersion(), llvm::VersionTuple(1300, 0, 29, 3));
}
+
+TEST(DWARFUnitTest, LLVMGCCProducer) {
+ const char *yamldata = R"(
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_386
+DWARF:
+ debug_str:
+ - 'i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)'
+ debug_abbrev:
+ - Table:
+ - Code: 0x00000001
+ Tag: DW_TAG_compile_unit
+ Children: DW_CHILDREN_yes
+ Attributes:
+ - Attribute: DW_AT_producer
+ Form: DW_FORM_strp
+ debug_info:
+ - Version: 4
+ AddrSize: 8
+ Entries:
+ - AbbrCode: 0x1
+ Values:
+ - Value: 0x0
+ - AbbrCode: 0x0
+)";
+
+ YAMLModuleTester t(yamldata);
+ DWARFUnit *unit = t.GetDwarfUnit();
+ ASSERT_TRUE((bool)unit);
+ EXPECT_EQ(unit->GetProducer(), eProducerLLVMGCC);
+}