[PATCH] D78113: Fix DWARFDataExtractor::getRelocatedValue near EOF
Pavel Labath via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 15 03:48:34 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG122c50d5efc2: Fix DWARFDataExtractor::getRelocatedValue near EOF (authored by labath).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D78113/new/
https://reviews.llvm.org/D78113
Files:
llvm/lib/DebugInfo/DWARF/DWARFDataExtractor.cpp
llvm/unittests/DebugInfo/DWARF/DWARFDataExtractorTest.cpp
Index: llvm/unittests/DebugInfo/DWARF/DWARFDataExtractorTest.cpp
===================================================================
--- llvm/unittests/DebugInfo/DWARF/DWARFDataExtractorTest.cpp
+++ llvm/unittests/DebugInfo/DWARF/DWARFDataExtractorTest.cpp
@@ -7,6 +7,9 @@
//===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
+#include "llvm/DebugInfo/DWARF/DWARFContext.h"
+#include "llvm/Object/ObjectFile.h"
+#include "llvm/ObjectYAML/yaml2obj.h"
#include "llvm/Testing/Support/Error.h"
#include "gtest/gtest.h"
@@ -14,6 +17,54 @@
namespace {
+TEST(DWARFDataExtractorTest, getRelocatedValue) {
+ StringRef Yaml = R"(
+!ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_386
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x80
+ - Name: .debug_line
+ Type: SHT_PROGBITS
+ Content: '000000000000'
+ - Name: .rel.debug_line
+ Type: SHT_REL
+ Info: .debug_line
+ Relocations:
+ - Offset: 0
+ Symbol: f
+ Type: R_386_32
+ - Offset: 4
+ Symbol: f
+ Type: R_386_32
+Symbols:
+ - Name: f
+ Type: STT_SECTION
+ Section: .text
+ Value: 0x42
+)";
+ SmallString<0> Storage;
+ std::unique_ptr<object::ObjectFile> Obj = yaml::yaml2ObjectFile(
+ Storage, Yaml, [](const Twine &Err) { errs() << Err; });
+ ASSERT_TRUE(Obj);
+ std::unique_ptr<DWARFContext> Ctx = DWARFContext::create(*Obj);
+ const DWARFObject &DObj = Ctx->getDWARFObj();
+ ASSERT_EQ(6u, DObj.getLineSection().Data.size());
+
+ DWARFDataExtractor Data(DObj, DObj.getLineSection(), Obj->isLittleEndian(),
+ Obj->getBytesInAddress());
+ DataExtractor::Cursor C(0);
+ EXPECT_EQ(0x42u, Data.getRelocatedAddress(C));
+ EXPECT_EQ(0u, Data.getRelocatedAddress(C));
+ EXPECT_THAT_ERROR(C.takeError(),
+ FailedWithMessage("unexpected end of data at offset 0x4"));
+}
+
TEST(DWARFDataExtractorTest, getInitialLength) {
auto GetWithError = [](ArrayRef<uint8_t> Bytes)
-> Expected<std::tuple<uint64_t, dwarf::DwarfFormat, uint64_t>> {
Index: llvm/lib/DebugInfo/DWARF/DWARFDataExtractor.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFDataExtractor.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFDataExtractor.cpp
@@ -50,9 +50,11 @@
*SecNdx = object::SectionedAddress::UndefSection;
if (!Section)
return getUnsigned(Off, Size, Err);
+
+ ErrorAsOutParameter ErrAsOut(Err);
Optional<RelocAddrEntry> E = Obj->find(*Section, *Off);
uint64_t A = getUnsigned(Off, Size, Err);
- if (!E)
+ if (!E || (Err && *Err))
return A;
if (SecNdx)
*SecNdx = E->SectionIndex;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78113.257663.patch
Type: text/x-patch
Size: 2839 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200415/ee2c3c4a/attachment.bin>
More information about the llvm-commits
mailing list