You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[lldb] Set static Module's load addresses via ObjectFile
This is a followup to
llvm#86359
"[lldb] [ObjectFileMachO] LLVM_COV is not mapped into firmware memory
(llvm#86359)"
where I treat LLVM_COV segments in a Mach-O binary as non-loadable.
There is another codepath in
`DynamicLoaderStatic::LoadAllImagesAtFileAddresses` which is called
to set the load addresses for a Module to the file addresses. It
has no logic to detect a segment that is not loaded in virtual
memory (ObjectFileMachO::SectionIsLoadable), so it would set the
load address for this LLVM_COV segment to the file address and
shadow actual code, breaking lldb behavior.
This method currently sets the load address for any section that
doesn't have a load address set already. This presumes that a
Module was added to the Target, some mechanism set the correct load
address for SOME segments, and then this method is going to set the
other segments to a no-slide value, assuming they were forgotten.
ObjectFile base class doesn't, today, vend a SectionIsLoadable
method, but we do have ObjectFile::SetLoadAddress and at a higher
level, Module::SetLoadAddress, when we're setting the same slide
to all segments.
That's the behavior we want in this method. If any section has a
load address, we don't touch this Module. Otherwise we set all
sections to have a load address that is the same as the file address.
I also audited the other parts of lldb that are calling
SectionList::SectionLoadAddress and looked if they should be more
correctly using Module::SetLoadAddress for the entire binary. But in
most cases, we have the potential for different slides for different
sections so this section-by-section approach must be taken.
rdar://125800290
0 commit comments