[Lldb-commits] [PATCH] D111200: Use llvm::VersionTuple to store DWARF producer info (NFC)
Adrian Prantl via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Oct 5 17:38:08 PDT 2021
aprantl updated this revision to Diff 377402.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111200/new/
https://reviews.llvm.org/D111200
Files:
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
@@ -195,11 +195,7 @@
DWARFProducer GetProducer();
- uint32_t GetProducerVersionMajor();
-
- uint32_t GetProducerVersionMinor();
-
- uint32_t GetProducerVersionUpdate();
+ llvm::VersionTuple GetProducerVersion();
uint64_t GetDWARFLanguageType();
@@ -311,9 +307,7 @@
std::unique_ptr<DWARFDebugAranges> m_func_aranges_up;
dw_addr_t m_base_addr = 0;
DWARFProducer m_producer = eProducerInvalid;
- uint32_t m_producer_version_major = 0;
- uint32_t m_producer_version_minor = 0;
- uint32_t m_producer_version_update = 0;
+ llvm::VersionTuple m_producer_version;
llvm::Optional<uint64_t> m_language_type;
lldb_private::LazyBool m_is_optimized = lldb_private::eLazyBoolCalculate;
llvm::Optional<lldb_private::FileSpec> m_comp_dir;
Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
@@ -654,20 +654,13 @@
}
bool DWARFUnit::Supports_unnamed_objc_bitfields() {
- if (GetProducer() == eProducerClang) {
- const uint32_t major_version = GetProducerVersionMajor();
- return major_version > 425 ||
- (major_version == 425 && GetProducerVersionUpdate() >= 13);
- }
- return true; // Assume all other compilers didn't have incorrect ObjC bitfield
- // info
+ if (GetProducer() == eProducerClang)
+ return GetProducerVersion() > llvm::VersionTuple(425, 0, 13);
+ // Assume all other compilers didn't have incorrect ObjC bitfield info.
+ return true;
}
void DWARFUnit::ParseProducerInfo() {
- m_producer_version_major = UINT32_MAX;
- m_producer_version_minor = UINT32_MAX;
- m_producer_version_update = UINT32_MAX;
-
const DWARFDebugInfoEntry *die = GetUnitDIEPtrOnly();
if (die) {
@@ -682,14 +675,11 @@
m_producer = eProducerLLVMGCC;
} else if (strstr(producer_cstr, "clang")) {
static RegularExpression g_clang_version_regex(
- llvm::StringRef("clang-([0-9]+)\\.([0-9]+)\\.([0-9]+)"));
+ llvm::StringRef(R"(clang-([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?)"));
llvm::SmallVector<llvm::StringRef, 4> matches;
if (g_clang_version_regex.Execute(llvm::StringRef(producer_cstr),
&matches)) {
- // FIXME: improve error handling
- llvm::to_integer(matches[1], m_producer_version_major);
- llvm::to_integer(matches[2], m_producer_version_minor);
- llvm::to_integer(matches[3], m_producer_version_update);
+ m_producer_version.tryParse(matches[1]);
}
m_producer = eProducerClang;
} else if (strstr(producer_cstr, "GNU"))
@@ -706,22 +696,10 @@
return m_producer;
}
-uint32_t DWARFUnit::GetProducerVersionMajor() {
- if (m_producer_version_major == 0)
- ParseProducerInfo();
- return m_producer_version_major;
-}
-
-uint32_t DWARFUnit::GetProducerVersionMinor() {
- if (m_producer_version_minor == 0)
- ParseProducerInfo();
- return m_producer_version_minor;
-}
-
-uint32_t DWARFUnit::GetProducerVersionUpdate() {
- if (m_producer_version_update == 0)
+llvm::VersionTuple DWARFUnit::GetProducerVersion() {
+ if (m_producer_version.empty())
ParseProducerInfo();
- return m_producer_version_update;
+ return m_producer_version;
}
uint64_t DWARFUnit::GetDWARFLanguageType() {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D111200.377402.patch
Type: text/x-patch
Size: 3657 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20211006/fcd7c5f6/attachment.bin>
More information about the lldb-commits
mailing list