mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
MCJIT support for non-function sections.
Move to a by-section allocation and relocation scheme. This allows better support for sections which do not contain externally visible symbols. Flesh out the relocation address vs. local storage address separation a bit more as well. Remote process JITs use this to tell the relocation resolution code where the code will live when it executes. The startFunctionBody/endFunctionBody interfaces to the JIT and the memory manager are deprecated. They'll stick around for as long as the old JIT does, but the MCJIT doesn't use them anymore. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148258 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -101,6 +101,22 @@ public:
|
||||
virtual void endFunctionBody(const Function *F, uint8_t *FunctionStart,
|
||||
uint8_t *FunctionEnd) = 0;
|
||||
|
||||
/// allocateCodeSection - Allocate a memory block of (at least) the given
|
||||
/// size suitable for executable code. The SectionID is a unique identifier
|
||||
/// assigned by the JIT and passed through to the memory manager for
|
||||
/// the instance class to use if it needs to communicate to the JIT about
|
||||
/// a given section after the fact.
|
||||
virtual uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment,
|
||||
unsigned SectionID) = 0;
|
||||
|
||||
/// allocateDataSection - Allocate a memory block of (at least) the given
|
||||
/// size suitable for data. The SectionID is a unique identifier
|
||||
/// assigned by the JIT and passed through to the memory manager for
|
||||
/// the instance class to use if it needs to communicate to the JIT about
|
||||
/// a given section after the fact.
|
||||
virtual uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment,
|
||||
unsigned SectionID) = 0;
|
||||
|
||||
/// allocateSpace - Allocate a memory block of the given size. This method
|
||||
/// cannot be called between calls to startFunctionBody and endFunctionBody.
|
||||
virtual uint8_t *allocateSpace(intptr_t Size, unsigned Alignment) = 0;
|
||||
|
@@ -35,6 +35,16 @@ public:
|
||||
RTDyldMemoryManager() {}
|
||||
virtual ~RTDyldMemoryManager();
|
||||
|
||||
/// allocateCodeSection - Allocate a memory block of (at least) the given
|
||||
/// size suitable for executable code.
|
||||
virtual uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment,
|
||||
unsigned SectionID) = 0;
|
||||
|
||||
/// allocateDataSection - Allocate a memory block of (at least) the given
|
||||
/// size suitable for data.
|
||||
virtual uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment,
|
||||
unsigned SectionID) = 0;
|
||||
|
||||
// Allocate ActualSize bytes, or more, for the named function. Return
|
||||
// a pointer to the allocated memory and update Size to reflect how much
|
||||
// memory was acutally allocated.
|
||||
@@ -65,9 +75,9 @@ public:
|
||||
void *getSymbolAddress(StringRef Name);
|
||||
// Resolve the relocations for all symbols we currently know about.
|
||||
void resolveRelocations();
|
||||
// Change the address associated with a symbol when resolving relocations.
|
||||
// Change the address associated with a section when resolving relocations.
|
||||
// Any relocations already associated with the symbol will be re-resolved.
|
||||
void reassignSymbolAddress(StringRef Name, uint8_t *Addr);
|
||||
void reassignSectionAddress(unsigned SectionID, uint64_t Addr);
|
||||
StringRef getErrorString();
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user