From 4dc63bade3ef2c099f328f2e08f6d4bf6658f0cf Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Wed, 22 Jun 2022 13:55:21 -0700 Subject: 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 --- absl/debugging/symbolize_elf.inc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/absl/debugging/symbolize_elf.inc b/absl/debugging/symbolize_elf.inc index ddccd590..9bfdd915 100644 --- a/absl/debugging/symbolize_elf.inc +++ b/absl/debugging/symbolize_elf.inc @@ -1146,6 +1146,14 @@ bool Symbolizer::RegisterObjFile(const char *filename, reinterpret_cast(old->end_addr), old->filename); } return true; + } else if (old->end_addr == start_addr && + reinterpret_cast(old->start_addr) - old->offset == + reinterpret_cast(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(); -- cgit v1.2.3