[Lldb-commits] [PATCH] D144528: [lldb] Warn when Mach-O files have overlapping segments

Jason Molenda via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Feb 22 13:06:05 PST 2023

jasonmolenda accepted this revision.
jasonmolenda added a comment.

I'm OK with giving this a try.  SectionLoadList::SetSectionLoadAddress specifically notes that there are cases were sections overlap in the virtual address space.  All of the binaries in the shared cache have a single LINKEDIT segment that is shared, and each binary's mach-o `LC_SYMTAB`/`LC_DYSYMTAB` load command will point to different part of that same LINKEDIT.  From lldb's perspective, that means every Module in the shared cache has a LINKEDIT Section that overlaps with all the others.

LINKEDIT is special in that nothing in TEXT/DATA refers to anything in it.  The dynamic linker (ld.so, dyld) needs to process it on userland processes, and the debugger needs to read it to create a symbol table, but it basically doesn't need to be loaded in memory at all until you make a call to an external binary and the dynamic linker needs to do something.  With the Darwin kernel (xnu), it's not loaded in memory at all, it only exists in the original binary file that is processed into the in-memory kernel image.

tl;dr it's fine if LINKEDIT's "overlap" because lldb will never need to take an addr_t and figure out which Section it is located in.  (because an addr_t in the LINKEDIT segment of the shared cache would point to EVERY ObjectFile in the shared cache, if it was all reported correctly.)

We may find that enabling this warning fires for some unintended situation that we're not looking at right now, but we can re-evaluate if that turns out to be the case.

  rG LLVM Github Monorepo



More information about the lldb-commits mailing list