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>
This commit is contained in:
Sterling Augustine 2020-07-24 14:11:05 -07:00
parent 114336881a
commit 7d65240249
2 changed files with 6 additions and 1 deletions

View file

@ -1195,7 +1195,10 @@ void DwarfCUToModule::AssignLinesToFunctions() {
// 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,

View file

@ -39,6 +39,7 @@
#define COMMON_LINUX_MODULE_H__
#include <iostream>
#include <limits>
#include <map>
#include <set>
#include <string>
@ -62,6 +63,7 @@ class Module {
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;