mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Improving MCJIT/RuntimeDyld thread safety
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193094 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Format.h"
|
||||
#include "llvm/Support/Host.h"
|
||||
#include "llvm/Support/Mutex.h"
|
||||
#include "llvm/Support/SwapByteOrder.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Support/system_error.h"
|
||||
@@ -186,6 +187,18 @@ protected:
|
||||
Triple::ArchType Arch;
|
||||
bool IsTargetLittleEndian;
|
||||
|
||||
// This mutex prevents simultaneously loading objects from two different
|
||||
// threads. This keeps us from having to protect individual data structures
|
||||
// and guarantees that section allocation requests to the memory manager
|
||||
// won't be interleaved between modules. It is also used in mapSectionAddress
|
||||
// and resolveRelocations to protect write access to internal data structures.
|
||||
//
|
||||
// loadObject may be called on the same thread during the handling of of
|
||||
// processRelocations, and that's OK. The handling of the relocation lists
|
||||
// is written in such a way as to work correctly if new elements are added to
|
||||
// the end of the list while the list is being processed.
|
||||
sys::Mutex lock;
|
||||
|
||||
virtual unsigned getMaxStubSize() = 0;
|
||||
virtual unsigned getStubAlignment() = 0;
|
||||
|
||||
|
Reference in New Issue
Block a user