Fix a crash in JIT::recompileAndRelinkFunction(). It doesn't pass the MCI
[oota-llvm.git] / lib / ExecutionEngine / JIT / JIT.cpp
1 //===-- JIT.cpp - LLVM Just in Time Compiler ------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This tool implements a just-in-time compiler for LLVM, allowing direct
11 // execution of LLVM bitcode in an efficient manner.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "JIT.h"
16 #include "llvm/Constants.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/Function.h"
19 #include "llvm/GlobalVariable.h"
20 #include "llvm/Instructions.h"
21 #include "llvm/ModuleProvider.h"
22 #include "llvm/CodeGen/JITCodeEmitter.h"
23 #include "llvm/CodeGen/MachineCodeInfo.h"
24 #include "llvm/ExecutionEngine/GenericValue.h"
25 #include "llvm/ExecutionEngine/JITEventListener.h"
26 #include "llvm/Target/TargetData.h"
27 #include "llvm/Target/TargetMachine.h"
28 #include "llvm/Target/TargetJITInfo.h"
29 #include "llvm/Support/Dwarf.h"
30 #include "llvm/Support/ErrorHandling.h"
31 #include "llvm/Support/MutexGuard.h"
32 #include "llvm/System/DynamicLibrary.h"
33 #include "llvm/Config/config.h"
34
35 using namespace llvm;
36
37 #ifdef __APPLE__ 
38 // Apple gcc defaults to -fuse-cxa-atexit (i.e. calls __cxa_atexit instead
39 // of atexit). It passes the address of linker generated symbol __dso_handle
40 // to the function.
41 // This configuration change happened at version 5330.
42 # include <AvailabilityMacros.h>
43 # if defined(MAC_OS_X_VERSION_10_4) && \
44      ((MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4) || \
45       (MAC_OS_X_VERSION_MIN_REQUIRED == MAC_OS_X_VERSION_10_4 && \
46        __APPLE_CC__ >= 5330))
47 #  ifndef HAVE___DSO_HANDLE
48 #   define HAVE___DSO_HANDLE 1
49 #  endif
50 # endif
51 #endif
52
53 #if HAVE___DSO_HANDLE
54 extern void *__dso_handle __attribute__ ((__visibility__ ("hidden")));
55 #endif
56
57 namespace {
58
59 static struct RegisterJIT {
60   RegisterJIT() { JIT::Register(); }
61 } JITRegistrator;
62
63 }
64
65 extern "C" void LLVMLinkInJIT() {
66 }
67
68
69 #if defined(__GNUC__) && !defined(__ARM__EABI__)
70  
71 // libgcc defines the __register_frame function to dynamically register new
72 // dwarf frames for exception handling. This functionality is not portable
73 // across compilers and is only provided by GCC. We use the __register_frame
74 // function here so that code generated by the JIT cooperates with the unwinding
75 // runtime of libgcc. When JITting with exception handling enable, LLVM
76 // generates dwarf frames and registers it to libgcc with __register_frame.
77 //
78 // The __register_frame function works with Linux.
79 //
80 // Unfortunately, this functionality seems to be in libgcc after the unwinding
81 // library of libgcc for darwin was written. The code for darwin overwrites the
82 // value updated by __register_frame with a value fetched with "keymgr".
83 // "keymgr" is an obsolete functionality, which should be rewritten some day.
84 // In the meantime, since "keymgr" is on all libgccs shipped with apple-gcc, we
85 // need a workaround in LLVM which uses the "keymgr" to dynamically modify the
86 // values of an opaque key, used by libgcc to find dwarf tables.
87
88 extern "C" void __register_frame(void*);
89
90 #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED <= 1050
91 # define USE_KEYMGR 1
92 #else
93 # define USE_KEYMGR 0
94 #endif
95
96 #if USE_KEYMGR
97
98 namespace {
99
100 // LibgccObject - This is the structure defined in libgcc. There is no #include
101 // provided for this structure, so we also define it here. libgcc calls it
102 // "struct object". The structure is undocumented in libgcc.
103 struct LibgccObject {
104   void *unused1;
105   void *unused2;
106   void *unused3;
107   
108   /// frame - Pointer to the exception table.
109   void *frame;
110   
111   /// encoding -  The encoding of the object?
112   union {
113     struct {
114       unsigned long sorted : 1;
115       unsigned long from_array : 1;
116       unsigned long mixed_encoding : 1;
117       unsigned long encoding : 8;
118       unsigned long count : 21; 
119     } b;
120     size_t i;
121   } encoding;
122   
123   /// fde_end - libgcc defines this field only if some macro is defined. We
124   /// include this field even if it may not there, to make libgcc happy.
125   char *fde_end;
126   
127   /// next - At least we know it's a chained list!
128   struct LibgccObject *next;
129 };
130
131 // "kemgr" stuff. Apparently, all frame tables are stored there.
132 extern "C" void _keymgr_set_and_unlock_processwide_ptr(int, void *);
133 extern "C" void *_keymgr_get_and_lock_processwide_ptr(int);
134 #define KEYMGR_GCC3_DW2_OBJ_LIST        302     /* Dwarf2 object list  */
135
136 /// LibgccObjectInfo - libgcc defines this struct as km_object_info. It
137 /// probably contains all dwarf tables that are loaded.
138 struct LibgccObjectInfo {
139
140   /// seenObjects - LibgccObjects already parsed by the unwinding runtime.
141   ///
142   struct LibgccObject* seenObjects;
143
144   /// unseenObjects - LibgccObjects not parsed yet by the unwinding runtime.
145   ///
146   struct LibgccObject* unseenObjects;
147   
148   unsigned unused[2];
149 };
150
151 /// darwin_register_frame - Since __register_frame does not work with darwin's
152 /// libgcc,we provide our own function, which "tricks" libgcc by modifying the
153 /// "Dwarf2 object list" key.
154 void DarwinRegisterFrame(void* FrameBegin) {
155   // Get the key.
156   LibgccObjectInfo* LOI = (struct LibgccObjectInfo*)
157     _keymgr_get_and_lock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST);
158   assert(LOI && "This should be preallocated by the runtime");
159   
160   // Allocate a new LibgccObject to represent this frame. Deallocation of this
161   // object may be impossible: since darwin code in libgcc was written after
162   // the ability to dynamically register frames, things may crash if we
163   // deallocate it.
164   struct LibgccObject* ob = (struct LibgccObject*)
165     malloc(sizeof(struct LibgccObject));
166   
167   // Do like libgcc for the values of the field.
168   ob->unused1 = (void *)-1;
169   ob->unused2 = 0;
170   ob->unused3 = 0;
171   ob->frame = FrameBegin;
172   ob->encoding.i = 0; 
173   ob->encoding.b.encoding = llvm::dwarf::DW_EH_PE_omit;
174   
175   // Put the info on both places, as libgcc uses the first or the the second
176   // field. Note that we rely on having two pointers here. If fde_end was a
177   // char, things would get complicated.
178   ob->fde_end = (char*)LOI->unseenObjects;
179   ob->next = LOI->unseenObjects;
180   
181   // Update the key's unseenObjects list.
182   LOI->unseenObjects = ob;
183   
184   // Finally update the "key". Apparently, libgcc requires it. 
185   _keymgr_set_and_unlock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST,
186                                          LOI);
187
188 }
189
190 }
191 #endif // __APPLE__
192 #endif // __GNUC__
193
194 /// createJIT - This is the factory method for creating a JIT for the current
195 /// machine, it does not fall back to the interpreter.  This takes ownership
196 /// of the module provider.
197 ExecutionEngine *ExecutionEngine::createJIT(ModuleProvider *MP,
198                                             std::string *ErrorStr,
199                                             JITMemoryManager *JMM,
200                                             CodeGenOpt::Level OptLevel,
201                                             bool GVsWithCode,
202                                             CodeModel::Model CMM) {
203   return JIT::createJIT(MP, ErrorStr, JMM, OptLevel, GVsWithCode, CMM);
204 }
205
206 ExecutionEngine *JIT::createJIT(ModuleProvider *MP,
207                                 std::string *ErrorStr,
208                                 JITMemoryManager *JMM,
209                                 CodeGenOpt::Level OptLevel,
210                                 bool GVsWithCode,
211                                 CodeModel::Model CMM) {
212   // Make sure we can resolve symbols in the program as well. The zero arg
213   // to the function tells DynamicLibrary to load the program, not a library.
214   if (sys::DynamicLibrary::LoadLibraryPermanently(0, ErrorStr))
215     return 0;
216
217   // Pick a target either via -march or by guessing the native arch.
218   TargetMachine *TM = JIT::selectTarget(MP, ErrorStr);
219   if (!TM || (ErrorStr && ErrorStr->length() > 0)) return 0;
220   TM->setCodeModel(CMM);
221
222   // If the target supports JIT code generation, create a the JIT.
223   if (TargetJITInfo *TJ = TM->getJITInfo()) {
224     return new JIT(MP, *TM, *TJ, JMM, OptLevel, GVsWithCode);
225   } else {
226     if (ErrorStr)
227       *ErrorStr = "target does not support JIT code generation";
228     return 0;
229   }
230 }
231
232 JIT::JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji,
233          JITMemoryManager *JMM, CodeGenOpt::Level OptLevel, bool GVsWithCode)
234   : ExecutionEngine(MP), TM(tm), TJI(tji), AllocateGVsWithCode(GVsWithCode) {
235   setTargetData(TM.getTargetData());
236
237   jitstate = new JITState(MP);
238
239   // Initialize JCE
240   JCE = createEmitter(*this, JMM, TM);
241
242   // Add target data
243   MutexGuard locked(lock);
244   FunctionPassManager &PM = jitstate->getPM(locked);
245   PM.add(new TargetData(*TM.getTargetData()));
246
247   // Turn the machine code intermediate representation into bytes in memory that
248   // may be executed.
249   if (TM.addPassesToEmitMachineCode(PM, *JCE, OptLevel)) {
250     llvm_report_error("Target does not support machine code emission!");
251   }
252   
253   // Register routine for informing unwinding runtime about new EH frames
254 #if defined(__GNUC__) && !defined(__ARM_EABI__)
255 #if USE_KEYMGR
256   struct LibgccObjectInfo* LOI = (struct LibgccObjectInfo*)
257     _keymgr_get_and_lock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST);
258   
259   // The key is created on demand, and libgcc creates it the first time an
260   // exception occurs. Since we need the key to register frames, we create
261   // it now.
262   if (!LOI)
263     LOI = (LibgccObjectInfo*)calloc(sizeof(struct LibgccObjectInfo), 1); 
264   _keymgr_set_and_unlock_processwide_ptr(KEYMGR_GCC3_DW2_OBJ_LIST, LOI);
265   InstallExceptionTableRegister(DarwinRegisterFrame);
266 #else
267   InstallExceptionTableRegister(__register_frame);
268 #endif // __APPLE__
269 #endif // __GNUC__
270   
271   // Initialize passes.
272   PM.doInitialization();
273 }
274
275 JIT::~JIT() {
276   delete jitstate;
277   delete JCE;
278   delete &TM;
279 }
280
281 /// addModuleProvider - Add a new ModuleProvider to the JIT.  If we previously
282 /// removed the last ModuleProvider, we need re-initialize jitstate with a valid
283 /// ModuleProvider.
284 void JIT::addModuleProvider(ModuleProvider *MP) {
285   MutexGuard locked(lock);
286
287   if (Modules.empty()) {
288     assert(!jitstate && "jitstate should be NULL if Modules vector is empty!");
289
290     jitstate = new JITState(MP);
291
292     FunctionPassManager &PM = jitstate->getPM(locked);
293     PM.add(new TargetData(*TM.getTargetData()));
294
295     // Turn the machine code intermediate representation into bytes in memory
296     // that may be executed.
297     if (TM.addPassesToEmitMachineCode(PM, *JCE, CodeGenOpt::Default)) {
298       llvm_report_error("Target does not support machine code emission!");
299     }
300     
301     // Initialize passes.
302     PM.doInitialization();
303   }
304   
305   ExecutionEngine::addModuleProvider(MP);
306 }
307
308 /// removeModuleProvider - If we are removing the last ModuleProvider, 
309 /// invalidate the jitstate since the PassManager it contains references a
310 /// released ModuleProvider.
311 Module *JIT::removeModuleProvider(ModuleProvider *MP, std::string *E) {
312   Module *result = ExecutionEngine::removeModuleProvider(MP, E);
313   
314   MutexGuard locked(lock);
315   
316   if (jitstate->getMP() == MP) {
317     delete jitstate;
318     jitstate = 0;
319   }
320   
321   if (!jitstate && !Modules.empty()) {
322     jitstate = new JITState(Modules[0]);
323
324     FunctionPassManager &PM = jitstate->getPM(locked);
325     PM.add(new TargetData(*TM.getTargetData()));
326     
327     // Turn the machine code intermediate representation into bytes in memory
328     // that may be executed.
329     if (TM.addPassesToEmitMachineCode(PM, *JCE, CodeGenOpt::Default)) {
330       llvm_report_error("Target does not support machine code emission!");
331     }
332     
333     // Initialize passes.
334     PM.doInitialization();
335   }    
336   return result;
337 }
338
339 /// deleteModuleProvider - Remove a ModuleProvider from the list of modules,
340 /// and deletes the ModuleProvider and owned Module.  Avoids materializing 
341 /// the underlying module.
342 void JIT::deleteModuleProvider(ModuleProvider *MP, std::string *E) {
343   ExecutionEngine::deleteModuleProvider(MP, E);
344   
345   MutexGuard locked(lock);
346   
347   if (jitstate->getMP() == MP) {
348     delete jitstate;
349     jitstate = 0;
350   }
351
352   if (!jitstate && !Modules.empty()) {
353     jitstate = new JITState(Modules[0]);
354     
355     FunctionPassManager &PM = jitstate->getPM(locked);
356     PM.add(new TargetData(*TM.getTargetData()));
357     
358     // Turn the machine code intermediate representation into bytes in memory
359     // that may be executed.
360     if (TM.addPassesToEmitMachineCode(PM, *JCE, CodeGenOpt::Default)) {
361       llvm_report_error("Target does not support machine code emission!");
362     }
363     
364     // Initialize passes.
365     PM.doInitialization();
366   }    
367 }
368
369 /// materializeFunction - make sure the given function is fully read.  If the
370 /// module is corrupt, this returns true and fills in the optional string with
371 /// information about the problem.  If successful, this returns false.
372 bool JIT::materializeFunction(Function *F, std::string *ErrInfo) {
373   // Read in the function if it exists in this Module.
374   if (F->hasNotBeenReadFromBitcode()) {
375     // Determine the module provider this function is provided by.
376     Module *M = F->getParent();
377     ModuleProvider *MP = 0;
378     for (unsigned i = 0, e = Modules.size(); i != e; ++i) {
379       if (Modules[i]->getModule() == M) {
380         MP = Modules[i];
381         break;
382       }
383     }
384     if (MP)
385       return MP->materializeFunction(F, ErrInfo);
386
387     if (ErrInfo)
388       *ErrInfo = "Function isn't in a module we know about!";
389     return true;
390   }
391   // Succeed if the function is already read.
392   return false;
393 }
394
395 /// run - Start execution with the specified function and arguments.
396 ///
397 GenericValue JIT::runFunction(Function *F,
398                               const std::vector<GenericValue> &ArgValues) {
399   assert(F && "Function *F was null at entry to run()");
400
401   void *FPtr = getPointerToFunction(F);
402   assert(FPtr && "Pointer to fn's code was null after getPointerToFunction");
403   const FunctionType *FTy = F->getFunctionType();
404   const Type *RetTy = FTy->getReturnType();
405
406   assert((FTy->getNumParams() == ArgValues.size() ||
407           (FTy->isVarArg() && FTy->getNumParams() <= ArgValues.size())) &&
408          "Wrong number of arguments passed into function!");
409   assert(FTy->getNumParams() == ArgValues.size() &&
410          "This doesn't support passing arguments through varargs (yet)!");
411
412   // Handle some common cases first.  These cases correspond to common `main'
413   // prototypes.
414   if (RetTy == Type::getInt32Ty(F->getContext()) ||
415       RetTy == Type::getVoidTy(F->getContext())) {
416     switch (ArgValues.size()) {
417     case 3:
418       if (FTy->getParamType(0) == Type::getInt32Ty(F->getContext()) &&
419           isa<PointerType>(FTy->getParamType(1)) &&
420           isa<PointerType>(FTy->getParamType(2))) {
421         int (*PF)(int, char **, const char **) =
422           (int(*)(int, char **, const char **))(intptr_t)FPtr;
423
424         // Call the function.
425         GenericValue rv;
426         rv.IntVal = APInt(32, PF(ArgValues[0].IntVal.getZExtValue(), 
427                                  (char **)GVTOP(ArgValues[1]),
428                                  (const char **)GVTOP(ArgValues[2])));
429         return rv;
430       }
431       break;
432     case 2:
433       if (FTy->getParamType(0) == Type::getInt32Ty(F->getContext()) &&
434           isa<PointerType>(FTy->getParamType(1))) {
435         int (*PF)(int, char **) = (int(*)(int, char **))(intptr_t)FPtr;
436
437         // Call the function.
438         GenericValue rv;
439         rv.IntVal = APInt(32, PF(ArgValues[0].IntVal.getZExtValue(), 
440                                  (char **)GVTOP(ArgValues[1])));
441         return rv;
442       }
443       break;
444     case 1:
445       if (FTy->getNumParams() == 1 &&
446           FTy->getParamType(0) == Type::getInt32Ty(F->getContext())) {
447         GenericValue rv;
448         int (*PF)(int) = (int(*)(int))(intptr_t)FPtr;
449         rv.IntVal = APInt(32, PF(ArgValues[0].IntVal.getZExtValue()));
450         return rv;
451       }
452       break;
453     }
454   }
455
456   // Handle cases where no arguments are passed first.
457   if (ArgValues.empty()) {
458     GenericValue rv;
459     switch (RetTy->getTypeID()) {
460     default: llvm_unreachable("Unknown return type for function call!");
461     case Type::IntegerTyID: {
462       unsigned BitWidth = cast<IntegerType>(RetTy)->getBitWidth();
463       if (BitWidth == 1)
464         rv.IntVal = APInt(BitWidth, ((bool(*)())(intptr_t)FPtr)());
465       else if (BitWidth <= 8)
466         rv.IntVal = APInt(BitWidth, ((char(*)())(intptr_t)FPtr)());
467       else if (BitWidth <= 16)
468         rv.IntVal = APInt(BitWidth, ((short(*)())(intptr_t)FPtr)());
469       else if (BitWidth <= 32)
470         rv.IntVal = APInt(BitWidth, ((int(*)())(intptr_t)FPtr)());
471       else if (BitWidth <= 64)
472         rv.IntVal = APInt(BitWidth, ((int64_t(*)())(intptr_t)FPtr)());
473       else 
474         llvm_unreachable("Integer types > 64 bits not supported");
475       return rv;
476     }
477     case Type::VoidTyID:
478       rv.IntVal = APInt(32, ((int(*)())(intptr_t)FPtr)());
479       return rv;
480     case Type::FloatTyID:
481       rv.FloatVal = ((float(*)())(intptr_t)FPtr)();
482       return rv;
483     case Type::DoubleTyID:
484       rv.DoubleVal = ((double(*)())(intptr_t)FPtr)();
485       return rv;
486     case Type::X86_FP80TyID:
487     case Type::FP128TyID:
488     case Type::PPC_FP128TyID:
489       llvm_unreachable("long double not supported yet");
490       return rv;
491     case Type::PointerTyID:
492       return PTOGV(((void*(*)())(intptr_t)FPtr)());
493     }
494   }
495
496   // Okay, this is not one of our quick and easy cases.  Because we don't have a
497   // full FFI, we have to codegen a nullary stub function that just calls the
498   // function we are interested in, passing in constants for all of the
499   // arguments.  Make this function and return.
500
501   // First, create the function.
502   FunctionType *STy=FunctionType::get(RetTy, false);
503   Function *Stub = Function::Create(STy, Function::InternalLinkage, "",
504                                     F->getParent());
505
506   // Insert a basic block.
507   BasicBlock *StubBB = BasicBlock::Create(F->getContext(), "", Stub);
508
509   // Convert all of the GenericValue arguments over to constants.  Note that we
510   // currently don't support varargs.
511   SmallVector<Value*, 8> Args;
512   for (unsigned i = 0, e = ArgValues.size(); i != e; ++i) {
513     Constant *C = 0;
514     const Type *ArgTy = FTy->getParamType(i);
515     const GenericValue &AV = ArgValues[i];
516     switch (ArgTy->getTypeID()) {
517     default: llvm_unreachable("Unknown argument type for function call!");
518     case Type::IntegerTyID:
519         C = ConstantInt::get(F->getContext(), AV.IntVal);
520         break;
521     case Type::FloatTyID:
522         C = ConstantFP::get(F->getContext(), APFloat(AV.FloatVal));
523         break;
524     case Type::DoubleTyID:
525         C = ConstantFP::get(F->getContext(), APFloat(AV.DoubleVal));
526         break;
527     case Type::PPC_FP128TyID:
528     case Type::X86_FP80TyID:
529     case Type::FP128TyID:
530         C = ConstantFP::get(F->getContext(), APFloat(AV.IntVal));
531         break;
532     case Type::PointerTyID:
533       void *ArgPtr = GVTOP(AV);
534       if (sizeof(void*) == 4)
535         C = ConstantInt::get(Type::getInt32Ty(F->getContext()), 
536                              (int)(intptr_t)ArgPtr);
537       else
538         C = ConstantInt::get(Type::getInt64Ty(F->getContext()),
539                              (intptr_t)ArgPtr);
540       // Cast the integer to pointer
541       C = ConstantExpr::getIntToPtr(C, ArgTy);
542       break;
543     }
544     Args.push_back(C);
545   }
546
547   CallInst *TheCall = CallInst::Create(F, Args.begin(), Args.end(),
548                                        "", StubBB);
549   TheCall->setCallingConv(F->getCallingConv());
550   TheCall->setTailCall();
551   if (TheCall->getType() != Type::getVoidTy(F->getContext()))
552     // Return result of the call.
553     ReturnInst::Create(F->getContext(), TheCall, StubBB);
554   else
555     ReturnInst::Create(F->getContext(), StubBB);           // Just return void.
556
557   // Finally, return the value returned by our nullary stub function.
558   return runFunction(Stub, std::vector<GenericValue>());
559 }
560
561 void JIT::RegisterJITEventListener(JITEventListener *L) {
562   if (L == NULL)
563     return;
564   MutexGuard locked(lock);
565   EventListeners.push_back(L);
566 }
567 void JIT::UnregisterJITEventListener(JITEventListener *L) {
568   if (L == NULL)
569     return;
570   MutexGuard locked(lock);
571   std::vector<JITEventListener*>::reverse_iterator I=
572       std::find(EventListeners.rbegin(), EventListeners.rend(), L);
573   if (I != EventListeners.rend()) {
574     std::swap(*I, EventListeners.back());
575     EventListeners.pop_back();
576   }
577 }
578 void JIT::NotifyFunctionEmitted(
579     const Function &F,
580     void *Code, size_t Size,
581     const JITEvent_EmittedFunctionDetails &Details) {
582   MutexGuard locked(lock);
583   for (unsigned I = 0, S = EventListeners.size(); I < S; ++I) {
584     EventListeners[I]->NotifyFunctionEmitted(F, Code, Size, Details);
585   }
586 }
587
588 void JIT::NotifyFreeingMachineCode(void *OldPtr) {
589   MutexGuard locked(lock);
590   for (unsigned I = 0, S = EventListeners.size(); I < S; ++I) {
591     EventListeners[I]->NotifyFreeingMachineCode(OldPtr);
592   }
593 }
594
595 /// runJITOnFunction - Run the FunctionPassManager full of
596 /// just-in-time compilation passes on F, hopefully filling in
597 /// GlobalAddress[F] with the address of F's machine code.
598 ///
599 void JIT::runJITOnFunction(Function *F, MachineCodeInfo *MCI) {
600   MutexGuard locked(lock);
601
602   class MCIListener : public JITEventListener {
603     MachineCodeInfo *const MCI;
604    public:
605     MCIListener(MachineCodeInfo *mci) : MCI(mci) {}
606     virtual void NotifyFunctionEmitted(const Function &,
607                                        void *Code, size_t Size,
608                                        const EmittedFunctionDetails &) {
609       MCI->setAddress(Code);
610       MCI->setSize(Size);
611     }
612   };
613   MCIListener MCIL(MCI);
614   if (MCI)
615     RegisterJITEventListener(&MCIL);
616
617   runJITOnFunctionUnlocked(F, locked);
618
619   if (MCI)
620     UnregisterJITEventListener(&MCIL);
621 }
622
623 void JIT::runJITOnFunctionUnlocked(Function *F, const MutexGuard &locked) {
624   static bool isAlreadyCodeGenerating = false;
625   assert(!isAlreadyCodeGenerating && "Error: Recursive compilation detected!");
626
627   // JIT the function
628   isAlreadyCodeGenerating = true;
629   jitstate->getPM(locked).run(*F);
630   isAlreadyCodeGenerating = false;
631
632   // If the function referred to another function that had not yet been
633   // read from bitcode, and we are jitting non-lazily, emit it now.
634   while (!jitstate->getPendingFunctions(locked).empty()) {
635     Function *PF = jitstate->getPendingFunctions(locked).back();
636     jitstate->getPendingFunctions(locked).pop_back();
637
638     assert(!PF->hasAvailableExternallyLinkage() &&
639            "Externally-defined function should not be in pending list.");
640
641     // JIT the function
642     isAlreadyCodeGenerating = true;
643     jitstate->getPM(locked).run(*PF);
644     isAlreadyCodeGenerating = false;
645     
646     // Now that the function has been jitted, ask the JITEmitter to rewrite
647     // the stub with real address of the function.
648     updateFunctionStub(PF);
649   }
650 }
651
652 /// getPointerToFunction - This method is used to get the address of the
653 /// specified function, compiling it if neccesary.
654 ///
655 void *JIT::getPointerToFunction(Function *F) {
656
657   if (void *Addr = getPointerToGlobalIfAvailable(F))
658     return Addr;   // Check if function already code gen'd
659
660   MutexGuard locked(lock);
661
662   // Now that this thread owns the lock, make sure we read in the function if it
663   // exists in this Module.
664   std::string ErrorMsg;
665   if (materializeFunction(F, &ErrorMsg)) {
666     llvm_report_error("Error reading function '" + F->getName()+
667                       "' from bitcode file: " + ErrorMsg);
668   }
669
670   // ... and check if another thread has already code gen'd the function.
671   if (void *Addr = getPointerToGlobalIfAvailable(F))
672     return Addr;
673
674   if (F->isDeclaration() || F->hasAvailableExternallyLinkage()) {
675     bool AbortOnFailure = !F->hasExternalWeakLinkage();
676     void *Addr = getPointerToNamedFunction(F->getName(), AbortOnFailure);
677     addGlobalMapping(F, Addr);
678     return Addr;
679   }
680
681   runJITOnFunctionUnlocked(F, locked);
682
683   void *Addr = getPointerToGlobalIfAvailable(F);
684   assert(Addr && "Code generation didn't add function to GlobalAddress table!");
685   return Addr;
686 }
687
688 /// getOrEmitGlobalVariable - Return the address of the specified global
689 /// variable, possibly emitting it to memory if needed.  This is used by the
690 /// Emitter.
691 void *JIT::getOrEmitGlobalVariable(const GlobalVariable *GV) {
692   MutexGuard locked(lock);
693
694   void *Ptr = getPointerToGlobalIfAvailable(GV);
695   if (Ptr) return Ptr;
696
697   // If the global is external, just remember the address.
698   if (GV->isDeclaration() || GV->hasAvailableExternallyLinkage()) {
699 #if HAVE___DSO_HANDLE
700     if (GV->getName() == "__dso_handle")
701       return (void*)&__dso_handle;
702 #endif
703     Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(GV->getName());
704     if (Ptr == 0) {
705       llvm_report_error("Could not resolve external global address: "
706                         +GV->getName());
707     }
708     addGlobalMapping(GV, Ptr);
709   } else {
710     // If the global hasn't been emitted to memory yet, allocate space and
711     // emit it into memory.
712     Ptr = getMemoryForGV(GV);
713     addGlobalMapping(GV, Ptr);
714     EmitGlobalVariable(GV);  // Initialize the variable.
715   }
716   return Ptr;
717 }
718
719 /// recompileAndRelinkFunction - This method is used to force a function
720 /// which has already been compiled, to be compiled again, possibly
721 /// after it has been modified. Then the entry to the old copy is overwritten
722 /// with a branch to the new copy. If there was no old copy, this acts
723 /// just like JIT::getPointerToFunction().
724 ///
725 void *JIT::recompileAndRelinkFunction(Function *F) {
726   void *OldAddr = getPointerToGlobalIfAvailable(F);
727
728   // If it's not already compiled there is no reason to patch it up.
729   if (OldAddr == 0) { return getPointerToFunction(F); }
730
731   // Delete the old function mapping.
732   addGlobalMapping(F, 0);
733
734   // Recodegen the function
735   runJITOnFunction(F);
736
737   // Update state, forward the old function to the new function.
738   void *Addr = getPointerToGlobalIfAvailable(F);
739   assert(Addr && "Code generation didn't add function to GlobalAddress table!");
740   TJI.replaceMachineCodeForFunction(OldAddr, Addr);
741   return Addr;
742 }
743
744 /// getMemoryForGV - This method abstracts memory allocation of global
745 /// variable so that the JIT can allocate thread local variables depending
746 /// on the target.
747 ///
748 char* JIT::getMemoryForGV(const GlobalVariable* GV) {
749   char *Ptr;
750
751   // GlobalVariable's which are not "constant" will cause trouble in a server
752   // situation. It's returned in the same block of memory as code which may
753   // not be writable.
754   if (isGVCompilationDisabled() && !GV->isConstant()) {
755     llvm_report_error("Compilation of non-internal GlobalValue is disabled!");
756   }
757
758   // Some applications require globals and code to live together, so they may
759   // be allocated into the same buffer, but in general globals are allocated
760   // through the memory manager which puts them near the code but not in the
761   // same buffer.
762   const Type *GlobalType = GV->getType()->getElementType();
763   size_t S = getTargetData()->getTypeAllocSize(GlobalType);
764   size_t A = getTargetData()->getPreferredAlignment(GV);
765   if (GV->isThreadLocal()) {
766     MutexGuard locked(lock);
767     Ptr = TJI.allocateThreadLocalMemory(S);
768   } else if (TJI.allocateSeparateGVMemory()) {
769     if (A <= 8) {
770       Ptr = (char*)malloc(S);
771     } else {
772       // Allocate S+A bytes of memory, then use an aligned pointer within that
773       // space.
774       Ptr = (char*)malloc(S+A);
775       unsigned MisAligned = ((intptr_t)Ptr & (A-1));
776       Ptr = Ptr + (MisAligned ? (A-MisAligned) : 0);
777     }
778   } else if (AllocateGVsWithCode) {
779     Ptr = (char*)JCE->allocateSpace(S, A);
780   } else {
781     Ptr = (char*)JCE->allocateGlobal(S, A);
782   }
783   return Ptr;
784 }
785
786 void JIT::addPendingFunction(Function *F) {
787   MutexGuard locked(lock);
788   jitstate->getPendingFunctions(locked).push_back(F);
789 }
790
791
792 JITEventListener::~JITEventListener() {}