mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Beginnings of MC-JIT code generation.
Proof-of-concept code that code-gens a module to an in-memory MachO object. This will be hooked up to a run-time dynamic linker library (see: llvm-rtdyld for similarly conceptual work for that part) which will take the compiled object and link it together with the rest of the system, providing back to the JIT a table of available symbols which will be used to respond to the getPointerTo*() queries. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127916 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -224,11 +224,37 @@ bool LLVMTargetMachine::addPassesToEmitMachineCode(PassManagerBase &PM,
|
||||
///
|
||||
bool LLVMTargetMachine::addPassesToEmitMC(PassManagerBase &PM,
|
||||
MCContext *&Ctx,
|
||||
raw_ostream &Out,
|
||||
CodeGenOpt::Level OptLevel,
|
||||
bool DisableVerify) {
|
||||
// Add common CodeGen passes.
|
||||
if (addCommonCodeGenPasses(PM, OptLevel, DisableVerify, Ctx))
|
||||
return true;
|
||||
|
||||
// Create the code emitter for the target if it exists. If not, .o file
|
||||
// emission fails.
|
||||
MCCodeEmitter *MCE = getTarget().createCodeEmitter(*this, *Ctx);
|
||||
TargetAsmBackend *TAB = getTarget().createAsmBackend(TargetTriple);
|
||||
if (MCE == 0 || TAB == 0)
|
||||
return true;
|
||||
|
||||
OwningPtr<MCStreamer> AsmStreamer;
|
||||
AsmStreamer.reset(getTarget().createObjectStreamer(TargetTriple, *Ctx,
|
||||
*TAB, Out, MCE,
|
||||
hasMCRelaxAll(),
|
||||
hasMCNoExecStack()));
|
||||
AsmStreamer.get()->InitSections();
|
||||
|
||||
// Create the AsmPrinter, which takes ownership of AsmStreamer if successful.
|
||||
FunctionPass *Printer = getTarget().createAsmPrinter(*this, *AsmStreamer);
|
||||
if (Printer == 0)
|
||||
return true;
|
||||
|
||||
// If successful, createAsmPrinter took ownership of AsmStreamer.
|
||||
AsmStreamer.take();
|
||||
|
||||
PM.add(Printer);
|
||||
|
||||
// Make sure the code model is set.
|
||||
setCodeModelForJIT();
|
||||
|
||||
|
Reference in New Issue
Block a user