[PATCH] D81357: [DWARFYAML][debug_ranges] Emit an error message for invalid offset.

Xing GUO via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 8 07:05:24 PDT 2020


Higuoxing updated this revision to Diff 269202.
Higuoxing marked 4 inline comments as done.
Higuoxing added a comment.

Address comments.

Thanks for reviewing.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81357/new/

https://reviews.llvm.org/D81357

Files:
  llvm/include/llvm/ObjectYAML/DWARFYAML.h
  llvm/lib/ObjectYAML/DWARFEmitter.cpp
  llvm/test/tools/yaml2obj/ELF/DWARF/debug-ranges.yaml


Index: llvm/test/tools/yaml2obj/ELF/DWARF/debug-ranges.yaml
===================================================================
--- llvm/test/tools/yaml2obj/ELF/DWARF/debug-ranges.yaml
+++ llvm/test/tools/yaml2obj/ELF/DWARF/debug-ranges.yaml
@@ -313,3 +313,29 @@
   Type:    ET_EXEC
   Machine: EM_X86_64
 DWARF:
+
+## i) Test that yaml2obj emits an error message if we try to assign an invalid offset to an
+## entry of the '.debug_ranges' section.
+
+# RUN: not yaml2obj --docnum=9 %s -o %t9.o 2>&1 | FileCheck %s --check-prefix=INVALID-OFFSET
+
+# INVALID-OFFSET: yaml2obj: error: 'Offset' for 'debug_ranges' with index 1 must be greater than or equal to the number of bytes written already (0x20)
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+DWARF:
+  debug_ranges:
+    - Offset:   0x00
+      AddrSize: 0x08
+      Entries:
+        - LowOffset:  0x01
+          HighOffset: 0x02
+    - Offset:   0x1A ## Must be greater than or equal to 0x20.
+      AddrSize: 0x08
+      Entries:
+        - LowOffset:  0x01
+          HighOffset: 0x02
Index: llvm/lib/ObjectYAML/DWARFEmitter.cpp
===================================================================
--- llvm/lib/ObjectYAML/DWARFEmitter.cpp
+++ llvm/lib/ObjectYAML/DWARFEmitter.cpp
@@ -17,6 +17,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/BinaryFormat/Dwarf.h"
 #include "llvm/ObjectYAML/DWARFYAML.h"
+#include "llvm/Support/Errc.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/Host.h"
 #include "llvm/Support/LEB128.h"
@@ -127,11 +128,16 @@
 
 Error DWARFYAML::emitDebugRanges(raw_ostream &OS, const DWARFYAML::Data &DI) {
   const size_t RangesOffset = OS.tell();
+  uint64_t EntryIndex = 0;
   for (auto DebugRanges : DI.DebugRanges) {
     const size_t CurrOffset = OS.tell() - RangesOffset;
-    assert(DebugRanges.Offset >= CurrOffset &&
-           "Offset should be greater than or equal to the bytes that we have "
-           "written");
+    if ((uint64_t)DebugRanges.Offset < CurrOffset)
+      return createStringError(errc::invalid_argument,
+                               "'Offset' for 'debug_ranges' with index " +
+                                   Twine(EntryIndex) +
+                                   " must be greater than or equal to the "
+                                   "number of bytes written already (0x" +
+                                   Twine::utohexstr(CurrOffset) + ")");
     if (DebugRanges.Offset > CurrOffset)
       ZeroFillBytes(OS, DebugRanges.Offset - CurrOffset);
     for (auto Entry : DebugRanges.Entries) {
@@ -141,6 +147,7 @@
                                 DI.IsLittleEndian);
     }
     ZeroFillBytes(OS, DebugRanges.AddrSize * 2);
+    ++EntryIndex;
   }
 
   return Error::success();
Index: llvm/include/llvm/ObjectYAML/DWARFYAML.h
===================================================================
--- llvm/include/llvm/ObjectYAML/DWARFYAML.h
+++ llvm/include/llvm/ObjectYAML/DWARFYAML.h
@@ -82,7 +82,7 @@
 
 /// Class that describes a single range list inside the .debug_ranges section.
 struct Ranges {
-  llvm::yaml::Hex32 Offset;
+  llvm::yaml::Hex64 Offset;
   llvm::yaml::Hex8 AddrSize;
   std::vector<RangeEntry> Entries;
 };


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81357.269202.patch
Type: text/x-patch
Size: 3244 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200608/57a48a2b/attachment.bin>


More information about the llvm-commits mailing list