<div dir="ltr">Thanks. I think r324223 should fix this.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 4 February 2018 at 17:18, Simon Dardis <span dir="ltr"><<a href="mailto:Simon.Dardis@mips.com" target="_blank">Simon.Dardis@mips.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi James,<br>
<br>
This commit appears to have broken llvm-mips-linux since build #3577,<br>
( <a href="http://lab.llvm.org:8011/builders/llvm-mips-linux/builds/3577" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/<wbr>builders/llvm-mips-linux/<wbr>builds/3577</a> ), can you take<br>
a look at this please?<br>
<br>
Thanks,<br>
Simon<br>
______________________________<wbr>__________<br>
From: llvm-commits [<a href="mailto:llvm-commits-bounces@lists.llvm.org">llvm-commits-bounces@lists.<wbr>llvm.org</a>] on behalf of James Henderson via llvm-commits [<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>]<br>
Sent: Friday, February 2, 2018 12:45 PM<br>
To: <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
Subject: [llvm] r324078 - Add missing new files from r324077<br>
<div class="HOEnZb"><div class="h5"><br>
Author: jhenderson<br>
Date: Fri Feb  2 04:45:57 2018<br>
New Revision: 324078<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=324078&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=324078&view=rev</a><br>
Log:<br>
Add missing new files from r324077<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D42481" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D42481</a><br>
<br>
Added:<br>
    llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFAddressRange.h<br>
    llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFDebugRnglists.h<br>
    llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFAddressRange.cpp<br>
    llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFDebugRnglists.cpp<br>
    llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/Inputs/debug_<wbr>rnglists_short_section.s<br>
    llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists.s<br>
    llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>empty.s<br>
    llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>invalid.s<br>
<br>
Added: llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFAddressRange.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFAddressRange.h?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/DebugInfo/DWARF/<wbr>DWARFAddressRange.h?rev=<wbr>324078&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFAddressRange.h (added)<br>
+++ llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFAddressRange.h Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,66 @@<br>
+//===- DWARFAddressRange.h ------------------------------<wbr>--------*- C++ -*-===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+#ifndef LLVM_DEBUGINFO_DWARF_<wbr>DWARFADDRESSRANGE_H<br>
+#define LLVM_DEBUGINFO_DWARF_<wbr>DWARFADDRESSRANGE_H<br>
+<br>
+#include <cstdint><br>
+#include <tuple><br>
+#include <vector><br>
+<br>
+namespace llvm {<br>
+<br>
+class raw_ostream;<br>
+<br>
+struct DWARFAddressRange {<br>
+  uint64_t LowPC;<br>
+  uint64_t HighPC;<br>
+  uint64_t SectionIndex;<br>
+<br>
+  DWARFAddressRange() = default;<br>
+<br>
+  /// Used for unit testing.<br>
+  DWARFAddressRange(uint64_t LowPC, uint64_t HighPC, uint64_t SectionIndex = 0)<br>
+      : LowPC(LowPC), HighPC(HighPC), SectionIndex(SectionIndex) {}<br>
+<br>
+  /// Returns true if LowPC is smaller or equal to HighPC. This accounts for<br>
+  /// dead-stripped ranges.<br>
+  bool valid() const { return LowPC <= HighPC; }<br>
+<br>
+  /// Returns true if [LowPC, HighPC) intersects with [RHS.LowPC, RHS.HighPC).<br>
+  bool intersects(const DWARFAddressRange &RHS) const {<br>
+    // Empty ranges can't intersect.<br>
+    if (LowPC == HighPC || RHS.LowPC == RHS.HighPC)<br>
+      return false;<br>
+    return (LowPC < RHS.HighPC) && (HighPC > RHS.LowPC);<br>
+  }<br>
+<br>
+  /// Returns true if [LowPC, HighPC) fully contains [RHS.LowPC, RHS.HighPC).<br>
+  bool contains(const DWARFAddressRange &RHS) const {<br>
+    if (LowPC <= RHS.LowPC && RHS.LowPC <= HighPC)<br>
+      return LowPC <= RHS.HighPC && RHS.HighPC <= HighPC;<br>
+    return false;<br>
+  }<br>
+<br>
+  void dump(raw_ostream &OS, uint32_t AddressSize) const;<br>
+};<br>
+<br>
+static inline bool operator<(const DWARFAddressRange &LHS,<br>
+                             const DWARFAddressRange &RHS) {<br>
+  return std::tie(LHS.LowPC, LHS.HighPC) < std::tie(RHS.LowPC, RHS.HighPC);<br>
+}<br>
+<br>
+raw_ostream &operator<<(raw_ostream &OS, const DWARFAddressRange &R);<br>
+<br>
+/// DWARFAddressRangesVector - represents a set of absolute address ranges.<br>
+using DWARFAddressRangesVector = std::vector<DWARFAddressRange><wbr>;<br>
+<br>
+} // end namespace llvm<br>
+<br>
+#endif // LLVM_DEBUGINFO_DWARF_<wbr>DWARFADDRESSRANGE_H<br>
<br>
Added: llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFDebugRnglists.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/DebugInfo/DWARF/<wbr>DWARFDebugRnglists.h?rev=<wbr>324078&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFDebugRnglists.h (added)<br>
+++ llvm/trunk/include/llvm/<wbr>DebugInfo/DWARF/<wbr>DWARFDebugRnglists.h Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,59 @@<br>
+//===- DWARFDebugRnglists.h ------------------------------<wbr>-------*- C++ -*-===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+#ifndef LLVM_DEBUGINFO_<wbr>DWARFDEBUGRNGLISTS_H<br>
+#define LLVM_DEBUGINFO_<wbr>DWARFDEBUGRNGLISTS_H<br>
+<br>
+#include "llvm/DebugInfo/DWARF/<wbr>DWARFDataExtractor.h"<br>
+#include "llvm/DebugInfo/DWARF/<wbr>DWARFDebugRangeList.h"<br>
+#include <cstdint><br>
+#include <vector><br>
+<br>
+namespace llvm {<br>
+<br>
+class Error;<br>
+class raw_ostream;<br>
+<br>
+class DWARFDebugRnglists {<br>
+private:<br>
+  struct Header {<br>
+    /// The total length of the entries for this table, not including the length<br>
+    /// field itself.<br>
+    uint32_t Length = 0;<br>
+    /// The DWARF version number.<br>
+    uint16_t Version;<br>
+    /// The size in bytes of an address on the target architecture. For<br>
+    /// segmented addressing, this is the size of the offset portion of the<br>
+    /// address.<br>
+    uint8_t AddrSize;<br>
+    /// The size in bytes of a segment selector on the target architecture.<br>
+    /// If the target system uses a flat address space, this value is 0.<br>
+    uint8_t SegSize;<br>
+    /// The number of offsets that follow the header before the range lists.<br>
+    uint32_t OffsetEntryCount;<br>
+  };<br>
+<br>
+  Header HeaderData;<br>
+  std::vector<uint64_t> Offsets;<br>
+  std::vector<<wbr>DWARFAddressRangesVector> Ranges;<br>
+<br>
+public:<br>
+  void clear();<br>
+  Error extract(DWARFDataExtractor Data, uint32_t *OffsetPtr);<br>
+  void dump(raw_ostream &OS) const;<br>
+<br>
+  /// Returns the length of this table, including the length field, or 0 if the<br>
+  /// length has not been determined (e.g. because the table has not yet been<br>
+  /// parsed, or there was a problem in parsing).<br>
+  uint64_t length() const;<br>
+};<br>
+<br>
+} // end namespace llvm<br>
+<br>
+#endif // LLVM_DEBUGINFO_<wbr>DWARFDEBUGRNGLISTS_H<br>
<br>
Added: llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFAddressRange.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFAddressRange.cpp?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>DebugInfo/DWARF/<wbr>DWARFAddressRange.cpp?rev=<wbr>324078&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFAddressRange.cpp (added)<br>
+++ llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFAddressRange.cpp Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,26 @@<br>
+//===- DWARFDebugAranges.cpp ------------------------------<wbr>------*- C++ -*-===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+#include "llvm/DebugInfo/DWARF/<wbr>DWARFAddressRange.h"<br>
+<br>
+#include "llvm/Support/Format.h"<br>
+#include "llvm/Support/raw_ostream.h"<br>
+<br>
+using namespace llvm;<br>
+<br>
+void DWARFAddressRange::dump(raw_<wbr>ostream &OS, uint32_t AddressSize) const {<br>
+<br>
+  OS << format("[0x%*.*" PRIx64 ", ", AddressSize * 2, AddressSize * 2, LowPC)<br>
+     << format(" 0x%*.*" PRIx64 ")", AddressSize * 2, AddressSize * 2, HighPC);<br>
+}<br>
+<br>
+raw_ostream &llvm::operator<<(raw_ostream &OS, const DWARFAddressRange &R) {<br>
+  R.dump(OS, /* AddressSize */ 8);<br>
+  return OS;<br>
+}<br>
<br>
Added: llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFDebugRnglists.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugRnglists.cpp?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>DebugInfo/DWARF/<wbr>DWARFDebugRnglists.cpp?rev=<wbr>324078&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFDebugRnglists.cpp (added)<br>
+++ llvm/trunk/lib/DebugInfo/<wbr>DWARF/DWARFDebugRnglists.cpp Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,192 @@<br>
+//===- DWARFDebugRnglists.cpp ------------------------------<wbr>---------------===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+#include "llvm/DebugInfo/DWARF/<wbr>DWARFDebugRnglists.h"<br>
+<br>
+#include "llvm/BinaryFormat/Dwarf.h"<br>
+#include "llvm/Support/Error.h"<br>
+#include "llvm/Support/Format.h"<br>
+#include "llvm/Support/raw_ostream.h"<br>
+<br>
+using namespace llvm;<br>
+<br>
+void DWARFDebugRnglists::clear() {<br>
+  HeaderData = {};<br>
+  Offsets.clear();<br>
+  Ranges.clear();<br>
+}<br>
+<br>
+template <typename... Ts><br>
+static Error createError(char const *Fmt, const Ts &... Vals) {<br>
+  std::string Buffer;<br>
+  raw_string_ostream Stream(Buffer);<br>
+  Stream << format(Fmt, Vals...);<br>
+  return make_error<StringError>(<wbr>Stream.str(), inconvertibleErrorCode());<br>
+}<br>
+<br>
+Error DWARFDebugRnglists::extract(<wbr>DWARFDataExtractor Data,<br>
+                                  uint32_t *OffsetPtr) {<br>
+  clear();<br>
+  uint32_t TableOffset = *OffsetPtr;<br>
+<br>
+  // Read and verify the length field.<br>
+  if (!Data.<wbr>isValidOffsetForDataOfSize(*<wbr>OffsetPtr, sizeof(uint32_t)))<br>
+    return createError("section is not large enough to contain a "<br>
+                       ".debug_rnglists table length at offset 0x%" PRIx32,<br>
+                       *OffsetPtr);<br>
+  // TODO: Add support for DWARF64.<br>
+  HeaderData.Length = Data.getU32(OffsetPtr);<br>
+  if (HeaderData.Length + sizeof(uint32_t) < sizeof(Header))<br>
+    return createError(".debug_rnglists table at offset 0x%" PRIx32<br>
+                       " has too small length (0x%" PRIx32<br>
+                       ") to contain a complete header",<br>
+                       TableOffset, length());<br>
+  uint64_t End = TableOffset + length();<br>
+  if (!Data.<wbr>isValidOffsetForDataOfSize(<wbr>TableOffset, End - TableOffset))<br>
+    return createError(<br>
+        "section is not large enough to contain a .debug_rnglists table "<br>
+        "of length 0x%" PRIx32 " at offset 0x%" PRIx32,<br>
+        length(), TableOffset);<br>
+<br>
+  HeaderData.Version = Data.getU16(OffsetPtr);<br>
+  HeaderData.AddrSize = Data.getU8(OffsetPtr);<br>
+  HeaderData.SegSize = Data.getU8(OffsetPtr);<br>
+  HeaderData.OffsetEntryCount = Data.getU32(OffsetPtr);<br>
+<br>
+  // Perform basic validation of the remaining header fields.<br>
+  if (HeaderData.Version != 5)<br>
+    return createError("unrecognised .debug_rnglists table version %" PRIu16<br>
+                       " in table at offset 0x%" PRIx32,<br>
+                       HeaderData.Version, TableOffset);<br>
+  if (HeaderData.AddrSize != 4 && HeaderData.AddrSize != 8)<br>
+    return createError(".debug_rnglists table at offset 0x%" PRIx32<br>
+                       " has unsupported address size %hhu",<br>
+                       TableOffset, HeaderData.AddrSize);<br>
+  if (HeaderData.SegSize != 0)<br>
+    return createError(".debug_rnglists table at offset 0x%" PRIx32<br>
+                       " has unsupported segment selector size %" PRIu8,<br>
+                       TableOffset, HeaderData.SegSize);<br>
+  if (End < TableOffset + sizeof(HeaderData) +<br>
+                HeaderData.OffsetEntryCount * sizeof(uint32_t))<br>
+    return createError(".debug_rnglists table at offset 0x%" PRIx32<br>
+                       " has more offset entries (%" PRIu32<br>
+                       ") than there is space for",<br>
+                       TableOffset, HeaderData.OffsetEntryCount);<br>
+<br>
+  Data.setAddressSize(<wbr>HeaderData.AddrSize);<br>
+<br>
+  for (uint32_t I = 0; I < HeaderData.OffsetEntryCount; ++I)<br>
+    Offsets.push_back(Data.getU32(<wbr>OffsetPtr));<br>
+<br>
+  DWARFAddressRangesVector CurrentRanges;<br>
+  while (*OffsetPtr < End) {<br>
+    uint8_t Encoding = Data.getU8(OffsetPtr);<br>
+    switch (Encoding) {<br>
+    case dwarf::DW_RLE_end_of_list:<br>
+      Ranges.insert(Ranges.end(), CurrentRanges);<br>
+      CurrentRanges.clear();<br>
+      break;<br>
+    // TODO: Support other encodings.<br>
+    case dwarf::DW_RLE_base_addressx:<br>
+      return createError("unsupported rnglists encoding DW_RLE_base_addressx "<br>
+                         "at offset 0x%" PRIx32,<br>
+                         *OffsetPtr - 1);<br>
+    case dwarf::DW_RLE_startx_endx:<br>
+      return createError("unsupported rnglists encoding DW_RLE_startx_endx at "<br>
+                         "offset 0x%" PRIx32,<br>
+                         *OffsetPtr - 1);<br>
+    case dwarf::DW_RLE_startx_length:<br>
+      return createError("unsupported rnglists encoding DW_RLE_startx_length "<br>
+                         "at offset 0x%" PRIx32,<br>
+                         *OffsetPtr - 1);<br>
+    case dwarf::DW_RLE_offset_pair:<br>
+      return createError("unsupported rnglists encoding DW_RLE_offset_pair at "<br>
+                         "offset 0x%" PRIx32,<br>
+                         *OffsetPtr - 1);<br>
+    case dwarf::DW_RLE_base_address:<br>
+      return createError("unsupported rnglists encoding DW_RLE_base_address at "<br>
+                         "offset 0x%" PRIx32,<br>
+                         *OffsetPtr - 1);<br>
+    case dwarf::DW_RLE_start_end: {<br>
+      if (End - *OffsetPtr < HeaderData.AddrSize * 2)<br>
+        return createError("insufficient space remaining in table for "<br>
+                           "DW_RLE_start_end encoding "<br>
+                           "at offset 0x%" PRIx32,<br>
+                           *OffsetPtr - 1);<br>
+      uint64_t Start = Data.getAddress(OffsetPtr);<br>
+      uint64_t End = Data.getAddress(OffsetPtr);<br>
+      CurrentRanges.emplace_back(<wbr>Start, End);<br>
+      break;<br>
+    }<br>
+    case dwarf::DW_RLE_start_length: {<br>
+      uint32_t PreviousOffset = *OffsetPtr - 1;<br>
+      uint64_t Start = Data.getAddress(OffsetPtr);<br>
+      uint64_t Length = Data.getULEB128(OffsetPtr);<br>
+      if (End < *OffsetPtr)<br>
+        return createError("read past end of table when reading "<br>
+                           "DW_RLE_start_length encoding at offset 0x%" PRIx32,<br>
+                           PreviousOffset);<br>
+      CurrentRanges.emplace_back(<wbr>Start, Start + Length);<br>
+      break;<br>
+    }<br>
+    default:<br>
+      Ranges.insert(Ranges.end(), CurrentRanges);<br>
+      return createError("unknown rnglists encoding 0x%" PRIx32<br>
+                         " at offset 0x%" PRIx32,<br>
+                         uint32_t(Encoding), *OffsetPtr - 1);<br>
+    }<br>
+  }<br>
+<br>
+  // If OffsetPtr does not indicate the End offset, then either the above loop<br>
+  // terminated prematurely, or we encountered a malformed encoding, but did not<br>
+  // report an error when we should have done.<br>
+  assert(*OffsetPtr == End &&<br>
+         "did not detect malformed data or loop ended unexpectedly");<br>
+<br>
+  // If CurrentRanges is not empty, we have a malformed section, because we did<br>
+  // not find a DW_RLE_end_of_list marker at the end of the last list.<br>
+  if (!CurrentRanges.empty())<br>
+    return createError(<br>
+        "no end of list marker detected at end of .debug_rnglists table "<br>
+        "starting at offset 0x%" PRIx32,<br>
+        TableOffset);<br>
+  return Error::success();<br>
+}<br>
+<br>
+void DWARFDebugRnglists::dump(raw_<wbr>ostream &OS) const {<br>
+  // TODO: Add verbose printing of the raw encodings.<br>
+  OS << format("Range List Header: length = 0x%8.8x, version = 0x%4.4x, "<br>
+               "addr_size = 0x%2.2x, seg_size = 0x%2.2x, offset_entry_count = "<br>
+               "0x%8.8x\n",<br>
+               HeaderData.Length, HeaderData.Version, HeaderData.AddrSize,<br>
+               HeaderData.SegSize, HeaderData.OffsetEntryCount);<br>
+<br>
+  if (HeaderData.OffsetEntryCount > 0) {<br>
+    OS << "Offsets: [";<br>
+    for (const auto &Off : Offsets)<br>
+      OS << format("\n0x%8.8x", Off);<br>
+    OS << "\n]\n";<br>
+  }<br>
+  OS << "Ranges:\n";<br>
+<br>
+  const uint32_t HexWidth = HeaderData.AddrSize * 2;<br>
+  for (const auto &List : Ranges) {<br>
+    for (const auto &Entry : List)<br>
+      OS << format("[0x%*.*" PRIx64 ", 0x%*.*" PRIx64 ")\n", HexWidth, HexWidth,<br>
+                   Entry.LowPC, HexWidth, HexWidth, Entry.HighPC);<br>
+    OS << "<End of list>\n";<br>
+  }<br>
+}<br>
+<br>
+uint64_t DWARFDebugRnglists::length() const {<br>
+  if (HeaderData.Length == 0)<br>
+    return 0;<br>
+  // TODO: DWARF64 support.<br>
+  return HeaderData.Length + sizeof(uint32_t);<br>
+}<br>
<br>
Added: llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/Inputs/debug_<wbr>rnglists_short_section.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/Inputs/debug_rnglists_short_section.s?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-dwarfdump/X86/Inputs/<wbr>debug_rnglists_short_section.<wbr>s?rev=324078&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/Inputs/debug_<wbr>rnglists_short_section.s (added)<br>
+++ llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/Inputs/debug_<wbr>rnglists_short_section.s Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,2 @@<br>
+.section .debug_rnglists,"",@progbits<br>
+.byte 3, 0, 0 # Short section<br>
<br>
Added: llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_rnglists.s?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-dwarfdump/X86/debug_<wbr>rnglists.s?rev=324078&view=<wbr>auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists.s (added)<br>
+++ llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists.s Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,147 @@<br>
+# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o - | \<br>
+# RUN: llvm-dwarfdump --debug-rnglists - 2> %t.err | FileCheck %s<br>
+# RUN: FileCheck %s --input-file %t.err --check-prefix=ERR<br>
+<br>
+# CHECK: .debug_rnglists contents:<br>
+# CHECK-NEXT: Range List Header: length = 0x0000003f, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000002<br>
+# CHECK-NEXT: Offsets: [<br>
+# CHECK-NEXT:    0x00000008<br>
+# CHECK-NEXT:    0x0000002b<br>
+# CHECK-NEXT: ]<br>
+# CHECK-NEXT: Ranges:<br>
+# CHECK-NEXT: [0x0000000000000010, 0x0000000000000020)<br>
+# CHECK-NEXT: [0x0000000000000025, 0x00000000000000a5)<br>
+# CHECK-NEXT: <End of list><br>
+# CHECK-NEXT: [0x0000000000000100, 0x0000000000000200)<br>
+# CHECK-NEXT: <End of list><br>
+# CHECK-NEXT: Range List Header: length = 0x0000001b, version = 0x0005, addr_size = 0x04, seg_size = 0x00, offset_entry_count = 0x00000000<br>
+# CHECK-NEXT: Ranges:<br>
+# CHECK-NEXT: [0x00000000, 0x00000000)<br>
+# CHECK-NEXT: [0x00000002, 0x00000006)<br>
+# CHECK-NEXT: <End of list><br>
+# CHECK-NEXT: Range List Header: length = 0x00000008, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000<br>
+# CHECK-NOT: Offsets:<br>
+# CHECK: Ranges:<br>
+# CHECK-NOT: [<br>
+# CHECK-NOT: Range List Header:<br>
+<br>
+# ERR-NOT:  error:<br>
+# ERR:      error: unsupported rnglists encoding DW_RLE_base_addressx at offset 0x7a<br>
+# ERR-NEXT: error: unsupported rnglists encoding DW_RLE_startx_endx at offset 0x89<br>
+# ERR-NEXT: error: unsupported rnglists encoding DW_RLE_startx_length at offset 0x99<br>
+# ERR-NEXT: error: unsupported rnglists encoding DW_RLE_offset_pair at offset 0xa9<br>
+# ERR-NEXT: error: unsupported rnglists encoding DW_RLE_base_address at offset 0xb9<br>
+# ERR-NOT:  error:<br>
+<br>
+.section .debug_rnglists,"",@progbits<br>
+<br>
+# First table (tests DW_RLE_end_of_list, start_end, and start_length encodings)<br>
+.long 63 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 2  # Offset entry count<br>
+<br>
+# Offset array<br>
+.long 8  # Offset Entry 0<br>
+.long 43 # Offset Entry 1<br>
+<br>
+# First range list<br>
+.byte 6          # DW_RLE_start_end<br>
+.quad 0x10, 0x20   # Start, end address<br>
+.byte 7          # DW_RLE_start_length<br>
+.quad 0x25         # Start address<br>
+.byte 0x80, 0x01   # Length<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Second range list<br>
+.byte 6          # DW_RLE_start_end<br>
+.quad 0x100, 0x200 # Start, end address<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Second table (shows support for size 4 addresses)<br>
+.long 27 # Table length<br>
+.short 5 # Version<br>
+.byte 4  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 6          # DW_RLE_start_end<br>
+.long 0, 0         # Start, end address<br>
+.byte 6          # DW_RLE_start_end<br>
+.long 0x2, 0x6     # Start, end address<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Third (empty) table<br>
+.long 8  # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# The following entries are for encodings unsupported at the time of writing.<br>
+# The test should be updated as these encodings are supported.<br>
+<br>
+# Fourth table (testing DW_RLE_base_addressx)<br>
+.long 11 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 1          # DW_RLE_base_addressx<br>
+.byte 0            # Base address (index 0 in .debug_addr)<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Fifth table (testing DW_RLE_startx_endx)<br>
+.long 12 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 2          # DW_RLE_startx_endx<br>
+.byte 1            # Start address (index in .debug_addr)<br>
+.byte 10           # End address (index in .debug_addr)<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Sixth table (testing DW_RLE_startx_length)<br>
+.long 12 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 3          # DW_RLE_startx_length<br>
+.byte 2            # Start address (index in .debug_addr)<br>
+.byte 42           # Length<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Seventh table (testing DW_RLE_offset_pair)<br>
+.long 12 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 4          # DW_RLE_offset_pair<br>
+.byte 3            # Start offset (index in .debug_addr)<br>
+.byte 19           # End offset (index in .debug_addr)<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Eigth table (testing DW_RLE_base_address)<br>
+.long 18 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 5          # DW_RLE_base_address<br>
+.quad 0x1000       # Base address<br>
+.byte 0          # DW_RLE_end_of_list<br>
<br>
Added: llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>empty.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_rnglists_empty.s?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-dwarfdump/X86/debug_<wbr>rnglists_empty.s?rev=324078&<wbr>view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>empty.s (added)<br>
+++ llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>empty.s Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,7 @@<br>
+# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o - | \<br>
+# RUN: llvm-dwarfdump --debug-rnglists - | FileCheck %s<br>
+# CHECK: .debug_rnglists contents:<br>
+# CHECK-NOT: Range List Header:<br>
+# CHECK-NOT: error:<br>
+<br>
+.section .debug_rnglists,"",@progbits<br>
<br>
Added: llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>invalid.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/debug_rnglists_invalid.s?rev=324078&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-dwarfdump/X86/debug_<wbr>rnglists_invalid.s?rev=324078&<wbr>view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>invalid.s (added)<br>
+++ llvm/trunk/test/tools/llvm-<wbr>dwarfdump/X86/debug_rnglists_<wbr>invalid.s Fri Feb  2 04:45:57 2018<br>
@@ -0,0 +1,161 @@<br>
+# RUN: llvm-mc %S/Inputs/debug_rnglists_<wbr>short_section.s -filetype obj -triple x86_64-pc-linux -o - | \<br>
+# RUN: llvm-dwarfdump --debug-rnglists - 2>&1 | FileCheck %s --check-prefix=SHORT<br>
+# SHORT-NOT: error:<br>
+# SHORT-NOT: Range List Header<br>
+# SHORT: error: section is not large enough to contain a .debug_rnglists table length at offset 0<br>
+# SHORT-NOT: Range List Header<br>
+# SHORT-NOT: error:<br>
+<br>
+# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o - | \<br>
+# RUN: llvm-dwarfdump --debug-rnglists - 2> %t.err | FileCheck %s --check-prefix=GOOD<br>
+# RUN: FileCheck %s --input-file %t.err<br>
+<br>
+# GOOD: .debug_rnglists contents:<br>
+# GOOD-NEXT: Range List Header: length = 0x0000001e, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000001<br>
+# GOOD-NEXT: Offsets: [<br>
+# GOOD-NEXT:    0x00000004<br>
+# GOOD-NEXT: ]<br>
+# GOOD-NEXT: Ranges:<br>
+# GOOD-NEXT: [0x0000000000000010, 0x0000000000000020)<br>
+# GOOD-NEXT: <End of list><br>
+# GOOD-NEXT: Range List Header: length = 0x0000001a, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000<br>
+# GOOD-NEXT: Ranges:<br>
+# GOOD-NEXT: [0x0000000000000030, 0x0000000000000040)<br>
+# GOOD-NEXT: <End of list><br>
+# GOOD-NOT:  Range List Header<br>
+<br>
+# CHECK-NOT: error:<br>
+# CHECK: error: .debug_rnglists table at offset 0x22 has too small length (0xb) to contain a complete header<br>
+# CHECK-NEXT: error: unrecognised .debug_rnglists table version 4 in table at offset 0x2d<br>
+# CHECK-NEXT: error: .debug_rnglists table at offset 0x39 has unsupported address size 2<br>
+# CHECK-NEXT: error: .debug_rnglists table at offset 0x45 has unsupported segment selector size 4<br>
+# CHECK-NEXT: error: .debug_rnglists table at offset 0x51 has more offset entries (12345678) than there is space for<br>
+# CHECK-NEXT: error: insufficient space remaining in table for DW_RLE_start_end encoding at offset 0x69<br>
+# CHECK-NEXT: error: read past end of table when reading DW_RLE_start_length encoding at offset 0x82<br>
+# CHECK-NEXT: error: unknown rnglists encoding 0x2a at offset 0x98<br>
+# CHECK-NEXT: error: no end of list marker detected at end of .debug_rnglists table starting at offset 0xaa<br>
+# CHECK-NEXT: error: section is not large enough to contain a .debug_rnglists table of length 0x1f at offset 0xe5<br>
+# CHECK-NOT: error:<br>
+<br>
+.section .debug_rnglists,"",@progbits<br>
+<br>
+# Table 1 (good)<br>
+.long 30 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 1  # Offset entry count<br>
+<br>
+# Offsets<br>
+.long 4<br>
+<br>
+# First range list<br>
+.byte 6         # DW_RLE_start_length<br>
+.quad 0x10, 0x20   # Encoding payload<br>
+.byte 0         # DW_RLE_end_of_list<br>
+<br>
+# Table 2 (length too small for header)<br>
+.long 7  # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.byte 0, 0, 0  # Truncated offset entry count<br>
+<br>
+# Table 3 (unknown version)<br>
+.long 8  # Table length<br>
+.short 4 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# Table 4 (unsupported address size)<br>
+.long 8  # Table length<br>
+.short 5 # Version<br>
+.byte 2  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# Table 5 (unsupported segment selector size)<br>
+.long 8  # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 4  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# Table 6 (bad offset entry count)<br>
+.long 8  # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 12345678  # Offset entry count<br>
+<br>
+# Table 7 (malformed DW_RLE_start_end)<br>
+.long 21 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 6          # DW_RLE_start_end<br>
+.quad 1            # Start address<br>
+.long 4            # Truncated end address<br>
+<br>
+# Table 8 (malformed DW_RLE_start_length)<br>
+.long 18 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 7          # DW_RLE_start_length<br>
+.quad 1            # Start address<br>
+.byte 0xFF         # Length - invalid ULEB, so will continue reading past the end<br>
+<br>
+# Table 9 (unknown encoding)<br>
+.long 26 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 42         # Unknown encoding<br>
+.quad 0x10, 0x20   # Encoding payload<br>
+.byte 0          # DW_RLE_end_of_list<br>
+<br>
+# Table 10 (missing end of list marker)<br>
+.long 25 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 6         # DW_RLE_start_length<br>
+.quad 0x10, 0x20   # Encoding payload<br>
+<br>
+# Table 11 (good)<br>
+.long 26 # Table length<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 6         # DW_RLE_start_length<br>
+.quad 0x30, 0x40   # Encoding payload<br>
+.byte 0         # DW_RLE_end_of_list<br>
+<br>
+# Table 12 (length too long)<br>
+.long 27 # Table length - 1 greater than actual contents<br>
+.short 5 # Version<br>
+.byte 8  # Address size<br>
+.byte 0  # Segment selector size<br>
+.long 0  # Offset entry count<br>
+<br>
+# First range list<br>
+.byte 6          # DW_RLE_start_end<br>
+.quad 1, 2         # Start, end address<br>
+.byte 0          # DW_RLE_end_of_list<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>