summaryrefslogtreecommitdiffstats
path: root/llvm
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 /llvm
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.
Diffstat (limited to 'llvm')
-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