Load dependent modules in the Linux dynamic loader.

This fixes a bug where the dynamic loader rendezvous was not updating its
internal state when first initialized.

llvm-svn: 123794
This commit is contained in:
Stephen Wilson 2011-01-19 01:28:39 +00:00
parent 345c1bcb80
commit 88eb6d5725
1 changed files with 7 additions and 0 deletions

View File

@ -117,6 +117,12 @@ DYLDRendezvous::UpdateSOEntries()
if (m_current.map_addr == 0)
return false;
// When the previous and current states are consistent this is the first
// time we have been asked to update. Just take a snapshot of the currently
// loaded modules.
if (m_previous.state == eConsistent && m_current.state == eConsistent)
return TakeSnapshot(m_soentries);
// If we are about to add or remove a shared object clear out the current
// state and take a snapshot of the currently loaded images.
if (m_current.state == eAdd || m_current.state == eDelete)
@ -127,6 +133,7 @@ DYLDRendezvous::UpdateSOEntries()
m_removed_soentries.clear();
return TakeSnapshot(m_soentries);
}
assert(m_current.state == eConsistent);
// Otherwise check the previous state to determine what to expect and update
// accordingly.