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.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144528/new/

https://reviews.llvm.org/D144528

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to