summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Labath <pavel@labath.sk>2019-11-20 15:13:34 +0100
committerPavel Labath <pavel@labath.sk>2019-11-20 15:15:22 +0100
commit72d2929c52a9b691a2ed10c28a0a27fec8282519 (patch)
tree2d61b0011ba2af2fe6dbc629d23e9b3ccb57c675
parente7cc833ddafdca10be4ef1322ab96ffee774045b (diff)
downloadbcm5719-llvm-72d2929c52a9b691a2ed10c28a0a27fec8282519.tar.gz
bcm5719-llvm-72d2929c52a9b691a2ed10c28a0a27fec8282519.zip
Revert "[DWARF] Add an api to get "interpreted" location lists"
The test fails on big endian machines. This reverts commit 089c0f581492cd6e2a3d2927be3fbf60ea2d7e62 and the subsequent attempt to fix in 82dc32e2d456c75d08bc9ffe97def409ee5a03cd.
-rw-r--r--llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h5
-rw-r--r--llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h4
-rw-r--r--llvm/include/llvm/DebugInfo/DWARF/DWARFLocationExpression.h3
-rw-r--r--llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h3
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp15
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFDie.cpp21
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp24
-rw-r--r--llvm/lib/ObjectYAML/DWARFEmitter.cpp5
-rw-r--r--llvm/unittests/DebugInfo/DWARF/CMakeLists.txt1
-rw-r--r--llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp118
10 files changed, 1 insertions, 198 deletions
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
index 8ac3e2add88..2ca98cfcfff 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
@@ -63,11 +63,6 @@ public:
const MCRegisterInfo *MRI, DWARFUnit *U,
DIDumpOptions DumpOpts, unsigned Indent) const;
- Error visitAbsoluteLocationList(
- uint64_t Offset, Optional<object::SectionedAddress> BaseAddr,
- std::function<Optional<object::SectionedAddress>(uint32_t)> LookupAddr,
- function_ref<bool(Expected<DWARFLocationExpression>)> Callback) const;
-
protected:
DWARFDataExtractor Data;
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h
index 158bd82edee..52a0247b3e4 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h
@@ -18,7 +18,6 @@
#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h"
#include "llvm/DebugInfo/DWARF/DWARFAttribute.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h"
-#include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h"
#include <cassert>
#include <cstdint>
#include <iterator>
@@ -232,9 +231,6 @@ public:
bool addressRangeContainsAddress(const uint64_t Address) const;
- Expected<DWARFLocationExpressionsVector>
- getLocations(dwarf::Attribute Attr) const;
-
/// If a DIE represents a subprogram (or inlined subroutine), returns its
/// mangled name (or short name, if mangled is missing). This name may be
/// fetched from specification or abstract origin for this subprogram.
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFLocationExpression.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFLocationExpression.h
index 35aa1a78e12..1522658ead7 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFLocationExpression.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFLocationExpression.h
@@ -41,9 +41,6 @@ inline bool operator!=(const DWARFLocationExpression &L,
raw_ostream &operator<<(raw_ostream &OS, const DWARFLocationExpression &Loc);
-/// Represents a set of absolute location expressions.
-using DWARFLocationExpressionsVector = std::vector<DWARFLocationExpression>;
-
} // end namespace llvm
#endif // LLVM_DEBUGINFO_DWARF_DWARFLOCATIONEXPRESSION_H
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h
index 98d7a7ee3ca..d0a8533d1e3 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h
@@ -439,9 +439,6 @@ public:
}
Expected<DWARFAddressRangesVector> collectAddressRanges();
- Expected<DWARFLocationExpressionsVector>
- findLoclistFromOffset(uint64_t Offset);
-
/// Returns subprogram DIE with address range encompassing the provided
/// address. The pointer is alive as long as parsed compile unit DIEs are not
/// cleared.
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
index 8b84822914d..1af51a85d18 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDebugLoc.cpp
@@ -151,21 +151,6 @@ bool DWARFLocationTable::dumpLocationList(uint64_t *Offset, raw_ostream &OS,
return true;
}
-Error DWARFLocationTable::visitAbsoluteLocationList(
- uint64_t Offset, Optional<SectionedAddress> BaseAddr,
- std::function<Optional<SectionedAddress>(uint32_t)> LookupAddr,
- function_ref<bool(Expected<DWARFLocationExpression>)> Callback) const {
- DWARFLocationInterpreter Interp(BaseAddr, std::move(LookupAddr));
- return visitLocationList(&Offset, [&](const DWARFLocationEntry &E) {
- Expected<Optional<DWARFLocationExpression>> Loc = Interp.Interpret(E);
- if (!Loc)
- return Callback(Loc.takeError());
- if (*Loc)
- return Callback(**Loc);
- return true;
- });
-}
-
DWARFDebugLoc::LocationList const *
DWARFDebugLoc::getLocationListAtOffset(uint64_t Offset) const {
auto It = partition_point(
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
index 6cf30270539..a11865e048c 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -486,27 +486,6 @@ bool DWARFDie::addressRangeContainsAddress(const uint64_t Address) const {
return false;
}
-Expected<DWARFLocationExpressionsVector>
-DWARFDie::getLocations(dwarf::Attribute Attr) const {
- Optional<DWARFFormValue> Location = find(Attr);
- if (!Location)
- return createStringError(inconvertibleErrorCode(), "No %s",
- dwarf::AttributeString(Attr).data());
-
- if (Optional<uint64_t> Off = Location->getAsSectionOffset())
- return U->findLoclistFromOffset(*Off);
-
- if (Optional<ArrayRef<uint8_t>> Expr = Location->getAsBlock()) {
- return DWARFLocationExpressionsVector{
- DWARFLocationExpression{None, to_vector<4>(*Expr)}};
- }
-
- return createStringError(
- inconvertibleErrorCode(), "Unsupported %s encoding: %s",
- dwarf::AttributeString(Attr).data(),
- dwarf::FormEncodingString(Location->getForm()).data());
-}
-
const char *DWARFDie::getSubroutineName(DINameKind Kind) const {
if (!isSubroutineDIE())
return nullptr;
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
index e5d33e13644..2eb7d2f945a 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
@@ -637,30 +637,6 @@ Expected<DWARFAddressRangesVector> DWARFUnit::collectAddressRanges() {
return *CUDIERangesOrError;
}
-Expected<DWARFLocationExpressionsVector>
-DWARFUnit::findLoclistFromOffset(uint64_t Offset) {
- DWARFLocationExpressionsVector Result;
-
- Error InterpretationError = Error::success();
-
- Error ParseError = getLocationTable().visitAbsoluteLocationList(
- Offset, getBaseAddress(),
- [this](uint32_t Index) { return getAddrOffsetSectionItem(Index); },
- [&](Expected<DWARFLocationExpression> L) {
- if (L)
- Result.push_back(std::move(*L));
- else
- InterpretationError =
- joinErrors(L.takeError(), std::move(InterpretationError));
- return !InterpretationError;
- });
-
- if (ParseError || InterpretationError)
- return joinErrors(std::move(ParseError), std::move(InterpretationError));
-
- return Result;
-}
-
void DWARFUnit::updateAddressDieMap(DWARFDie Die) {
if (Die.isSubroutineDIE()) {
auto DIERangesOrError = Die.getAddressRanges();
diff --git a/llvm/lib/ObjectYAML/DWARFEmitter.cpp b/llvm/lib/ObjectYAML/DWARFEmitter.cpp
index b410fed16f0..2ae66997cf5 100644
--- a/llvm/lib/ObjectYAML/DWARFEmitter.cpp
+++ b/llvm/lib/ObjectYAML/DWARFEmitter.cpp
@@ -314,10 +314,7 @@ public:
DIEFixupVisitor(DWARFYAML::Data &DI) : DWARFYAML::Visitor(DI){};
private:
- virtual void onStartCompileUnit(DWARFYAML::Unit &CU) {
- // Size of the unit header, excluding the length field itself.
- Length = CU.Version >= 5 ? 8 : 7;
- }
+ virtual void onStartCompileUnit(DWARFYAML::Unit &CU) { Length = 7; }
virtual void onEndCompileUnit(DWARFYAML::Unit &CU) {
CU.Length.setLength(Length);
diff --git a/llvm/unittests/DebugInfo/DWARF/CMakeLists.txt b/llvm/unittests/DebugInfo/DWARF/CMakeLists.txt
index 4fb79b2a96e..2181e0543d0 100644
--- a/llvm/unittests/DebugInfo/DWARF/CMakeLists.txt
+++ b/llvm/unittests/DebugInfo/DWARF/CMakeLists.txt
@@ -13,7 +13,6 @@ add_llvm_unittest(DebugInfoDWARFTests
DwarfUtils.cpp
DWARFDebugInfoTest.cpp
DWARFDebugLineTest.cpp
- DWARFDieTest.cpp
DWARFFormValueTest.cpp
DWARFLocationExpressionTest.cpp
)
diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp
deleted file mode 100644
index 6296f872433..00000000000
--- a/llvm/unittests/DebugInfo/DWARF/DWARFDieTest.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-//===- llvm/unittest/DebugInfo/DWARFDieTest.cpp ---------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/BinaryFormat/Dwarf.h"
-#include "llvm/DebugInfo/DWARF/DWARFContext.h"
-#include "llvm/ObjectYAML/DWARFEmitter.h"
-#include "llvm/Testing/Support/Error.h"
-#include "gtest/gtest.h"
-
-using namespace llvm;
-using namespace llvm::dwarf;
-using object::SectionedAddress;
-
-namespace {
-
-TEST(DWARFLocationTable, getLocations) {
- const char *yamldata = R"(
- debug_abbrev:
- - Code: 0x00000001
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_location
- Form: DW_FORM_sec_offset
- - Attribute: DW_AT_data_member_location
- Form: DW_FORM_exprloc
- - Attribute: DW_AT_vtable_elem_location
- Form: DW_FORM_sec_offset
- - Attribute: DW_AT_call_data_location
- Form: DW_FORM_sec_offset
- debug_info:
- - Length:
- TotalLength: 0
- Version: 5
- UnitType: DW_UT_compile
- AbbrOffset: 0
- AddrSize: 4
- Entries:
- - AbbrCode: 0x00000001
- Values:
- - Value: 12
- - Value: 0x0000000000000001
- BlockData: [ 0x47 ]
- - Value: 20
- - Value: 25
- )";
- Expected<StringMap<std::unique_ptr<MemoryBuffer>>> Sections =
- DWARFYAML::EmitDebugSections(StringRef(yamldata),
- /*IsLittleEndian=*/true);
- ASSERT_THAT_EXPECTED(Sections, Succeeded());
- std::vector<uint8_t> Loclists{
- // Header
- 0, 0, 0, 0, // Length
- 5, 0, // Version
- 4, // Address size
- 0, // Segment selector size
- 0, 0, 0, 0, // Offset entry count
- // First location list.
- DW_LLE_start_length, // First entry
- 1, 0, 0, 0, // Start offset
- 2, // Length
- 0, // Expression length
- DW_LLE_end_of_list,
- // Second location list.
- DW_LLE_startx_length, // First entry
- 1, // Start index
- 2, // Length
- 0, // Expression length
- DW_LLE_end_of_list,
- // Third location list.
- DW_LLE_start_length, // First entry
- 1, 0, 0, 0, // Start offset
- 2, // Length
- 0, // Expression length
- // end_of_list intentionally missing
- };
- Loclists[0] = Loclists.size() - 4;
- Sections->try_emplace(
- "debug_loclists",
- MemoryBuffer::getMemBuffer(toStringRef(Loclists), "debug_loclists",
- /*RequiresNullTerminator=*/false));
- std::unique_ptr<DWARFContext> Ctx =
- DWARFContext::create(*Sections, 4, /*isLittleEndian=*/true);
- DWARFCompileUnit *CU = Ctx->getCompileUnitForOffset(0);
- ASSERT_NE(nullptr, CU);
- DWARFDie Die = CU->getUnitDIE();
- ASSERT_TRUE(Die.isValid());
-
- EXPECT_THAT_EXPECTED(Die.getLocations(DW_AT_location),
- HasValue(testing::ElementsAre(DWARFLocationExpression{
- DWARFAddressRange{1, 3}, {}})));
-
- EXPECT_THAT_EXPECTED(
- Die.getLocations(DW_AT_data_member_location),
- HasValue(testing::ElementsAre(DWARFLocationExpression{None, {0x47}})));
-
- EXPECT_THAT_EXPECTED(
- Die.getLocations(DW_AT_vtable_elem_location),
- Failed<ErrorInfoBase>(testing::Property(
- &ErrorInfoBase::message,
- "Unable to resolve indirect address 1 for: DW_LLE_startx_length")));
-
- EXPECT_THAT_EXPECTED(Die.getLocations(DW_AT_call_data_location),
- Failed<ErrorInfoBase>(testing::Property(
- &ErrorInfoBase::message, "unexpected end of data")));
-
- EXPECT_THAT_EXPECTED(
- Die.getLocations(DW_AT_call_data_value),
- Failed<ErrorInfoBase>(testing::Property(&ErrorInfoBase::message,
- "No DW_AT_call_data_value")));
-}
-
-} // end anonymous namespace
OpenPOWER on IntegriCloud