Add a method to indicate section address re-assignment is finished.

Prior to this patch RuntimeDyld attempted to re-apply relocations every time reassignSectionAddress was called (via MCJIT::mapSectionAddress).  In addition to being inefficient and redundant, this led to a problem when a section was temporarily moved too far away from another section with a relative relocation referencing the section being moved.  To fix this, I'm adding a new method (finalizeObject) which the client can call to indicate that it is finished rearranging section addresses so the relocations can safely be applied.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167400 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Andrew Kaylor
2012-11-05 20:57:16 +00:00
parent 86aef0a4f0
commit 28989889bf
5 changed files with 37 additions and 7 deletions

View File

@ -249,6 +249,13 @@ public:
"EE!");
}
// finalizeObject - This method should be called after sections within an
// object have been relocated using mapSectionAddress. When this method is
// called the MCJIT execution engine will reapply relocations for a loaded
// object. This method has no effect for the legacy JIT engine or the
// interpeter.
virtual void finalizeObject() {}
/// runStaticConstructorsDestructors - This method is used to execute all of
/// the static constructors or destructors for a program.
///