Merge contiguous mappings from the same file.

This allows symbolization to work if different parts of a binary's text are mapped differently, e.g. if they're mlock()ed or mapped onto huge pages.

PiperOrigin-RevId: 456600880
Change-Id: I069264f94cf834df9201968275a00828f5eb077e
pull/1202/head
Abseil Team 3 years ago committed by Copybara-Service
parent e7cbb2acd3
commit 4dc63bade3
  1. 8
      absl/debugging/symbolize_elf.inc

@ -1146,6 +1146,14 @@ bool Symbolizer::RegisterObjFile(const char *filename,
reinterpret_cast<uintptr_t>(old->end_addr), old->filename);
}
return true;
} else if (old->end_addr == start_addr &&
reinterpret_cast<uintptr_t>(old->start_addr) - old->offset ==
reinterpret_cast<uintptr_t>(start_addr) - offset &&
strcmp(old->filename, filename) == 0) {
// Two contiguous map entries that span a contiguous region of the file,
// perhaps because some part of the file was mlock()ed. Combine them.
old->end_addr = end_addr;
return true;
}
}
ObjFile *obj = impl->addr_map_.Add();

Loading…
Cancel
Save