Properly handle new tombstone values that now appear as a result of the llvm change described at https://reviews.llvm.org/D81784.

Change-Id: I79dc5a72b651aa057104cd42b4773391df68125b
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2317730
Reviewed-by: Mark Mentovai <mark@chromium.org>
Reviewed-by: Nelson Billing <nbilling@google.com>
diff --git a/src/common/dwarf_cu_to_module.cc b/src/common/dwarf_cu_to_module.cc
index 3a52085..c4eb3c5 100644
--- a/src/common/dwarf_cu_to_module.cc
+++ b/src/common/dwarf_cu_to_module.cc
@@ -1195,7 +1195,10 @@
     // next_transition may end up being zero, in which case we've completed
     // our pass. Handle that here, instead of trying to deal with it in
     // each place we compute next_transition.
-    if (!next_transition)
+
+    // Some dwarf producers handle linker-removed functions by using -1 as a
+    // tombstone in the line table. So the end marker can be -1.
+    if (!next_transition || next_transition == Module::kMaxAddress)
       break;
 
     // Advance iterators as needed. If lines overlap or functions overlap,
diff --git a/src/common/module.h b/src/common/module.h
index 60bf709..408e620 100644
--- a/src/common/module.h
+++ b/src/common/module.h
@@ -39,6 +39,7 @@
 #define COMMON_LINUX_MODULE_H__
 
 #include <iostream>
+#include <limits>
 #include <map>
 #include <set>
 #include <string>
@@ -62,6 +63,7 @@
  public:
   // The type of addresses and sizes in a symbol table.
   typedef uint64_t Address;
+  static constexpr uint64_t kMaxAddress = std::numeric_limits<Address>::max();
   struct File;
   struct Function;
   struct Line;