1 //===-- ExecutionEngine.cpp - Common Implementation shared by EEs ---------===// 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 file defines the common interface used by the various execution engine 11 // subclasses. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #define DEBUG_TYPE "jit" 16 #include "llvm/ExecutionEngine/ExecutionEngine.h" 17 18 #include "llvm/Constants.h" 19 #include "llvm/DerivedTypes.h" 20 #include "llvm/Module.h" 21 #include "llvm/ExecutionEngine/GenericValue.h" 22 #include "llvm/ADT/SmallString.h" 23 #include "llvm/ADT/Statistic.h" 24 #include "llvm/Support/Debug.h" 25 #include "llvm/Support/ErrorHandling.h" 26 #include "llvm/Support/MutexGuard.h" 27 #include "llvm/Support/ValueHandle.h" 28 #include "llvm/Support/raw_ostream.h" 29 #include "llvm/System/DynamicLibrary.h" 30 #include "llvm/System/Host.h" 31 #include "llvm/Target/TargetData.h" 32 #include <cmath> 33 #include <cstring> 34 using namespace llvm; 35 36 STATISTIC(NumInitBytes, "Number of bytes of global vars initialized"); 37 STATISTIC(NumGlobals , "Number of global vars initialized"); 38 39 ExecutionEngine *(*ExecutionEngine::JITCtor)( 40 Module *M, 41 std::string *ErrorStr, 42 JITMemoryManager *JMM, 43 CodeGenOpt::Level OptLevel, 44 bool GVsWithCode, 45 CodeModel::Model CMM, 46 StringRef MArch, 47 StringRef MCPU, 48 const SmallVectorImpl<std::string>& MAttrs) = 0; 49 ExecutionEngine *(*ExecutionEngine::InterpCtor)(Module *M, 50 std::string *ErrorStr) = 0; 51 52 ExecutionEngine::ExecutionEngine(Module *M) 53 : EEState(*this), 54 LazyFunctionCreator(0), 55 ExceptionTableRegister(0), 56 ExceptionTableDeregister(0) { 57 CompilingLazily = false; 58 GVCompilationDisabled = false; 59 SymbolSearchingDisabled = false; 60 Modules.push_back(M); 61 assert(M && "Module is null?"); 62 } 63 64 ExecutionEngine::~ExecutionEngine() { 65 clearAllGlobalMappings(); 66 for (unsigned i = 0, e = Modules.size(); i != e; ++i) 67 delete Modules[i]; 68 } 69 70 void ExecutionEngine::DeregisterAllTables() { 71 if (ExceptionTableDeregister) { 72 for (std::vector<void*>::iterator it = AllExceptionTables.begin(), 73 ie = AllExceptionTables.end(); it != ie; ++it) 74 ExceptionTableDeregister(*it); 75 AllExceptionTables.clear(); 76 } 77 } 78 79 namespace { 80 /// \brief Helper class which uses a value handler to automatically deletes the 81 /// memory block when the GlobalVariable is destroyed. 82 class GVMemoryBlock : public CallbackVH { 83 GVMemoryBlock(const GlobalVariable *GV) 84 : CallbackVH(const_cast<GlobalVariable*>(GV)) {} 85 86 public: 87 /// \brief Returns the address the GlobalVariable should be written into. The 88 /// GVMemoryBlock object prefixes that. 89 static char *Create(const GlobalVariable *GV, const TargetData& TD) { 90 const Type *ElTy = GV->getType()->getElementType(); 91 size_t GVSize = (size_t)TD.getTypeAllocSize(ElTy); 92 void *RawMemory = ::operator new( 93 TargetData::RoundUpAlignment(sizeof(GVMemoryBlock), 94 TD.getPreferredAlignment(GV)) 95 + GVSize); 96 new(RawMemory) GVMemoryBlock(GV); 97 return static_cast<char*>(RawMemory) + sizeof(GVMemoryBlock); 98 } 99 100 virtual void deleted() { 101 // We allocated with operator new and with some extra memory hanging off the 102 // end, so don't just delete this. I'm not sure if this is actually 103 // required. 104 this->~GVMemoryBlock(); 105 ::operator delete(this); 106 } 107 }; 108 } // anonymous namespace 109 110 char *ExecutionEngine::getMemoryForGV(const GlobalVariable *GV) { 111 return GVMemoryBlock::Create(GV, *getTargetData()); 112 } 113 114 bool ExecutionEngine::removeModule(Module *M) { 115 for(SmallVector<Module *, 1>::iterator I = Modules.begin(), 116 E = Modules.end(); I != E; ++I) { 117 Module *Found = *I; 118 if (Found == M) { 119 Modules.erase(I); 120 clearGlobalMappingsFromModule(M); 121 return true; 122 } 123 } 124 return false; 125 } 126 127 Function *ExecutionEngine::FindFunctionNamed(const char *FnName) { 128 for (unsigned i = 0, e = Modules.size(); i != e; ++i) { 129 if (Function *F = Modules[i]->getFunction(FnName)) 130 return F; 131 } 132 return 0; 133 } 134 135 136 void *ExecutionEngineState::RemoveMapping(const MutexGuard &, 137 const GlobalValue *ToUnmap) { 138 GlobalAddressMapTy::iterator I = GlobalAddressMap.find(ToUnmap); 139 void *OldVal; 140 141 // FIXME: This is silly, we shouldn't end up with a mapping -> 0 in the 142 // GlobalAddressMap. 143 if (I == GlobalAddressMap.end()) 144 OldVal = 0; 145 else { 146 OldVal = I->second; 147 GlobalAddressMap.erase(I); 148 } 149 150 GlobalAddressReverseMap.erase(OldVal); 151 return OldVal; 152 } 153 154 void ExecutionEngine::addGlobalMapping(const GlobalValue *GV, void *Addr) { 155 MutexGuard locked(lock); 156 157 DEBUG(dbgs() << "JIT: Map \'" << GV->getName() 158 << "\' to [" << Addr << "]\n";); 159 void *&CurVal = EEState.getGlobalAddressMap(locked)[GV]; 160 assert((CurVal == 0 || Addr == 0) && "GlobalMapping already established!"); 161 CurVal = Addr; 162 163 // If we are using the reverse mapping, add it too. 164 if (!EEState.getGlobalAddressReverseMap(locked).empty()) { 165 AssertingVH<const GlobalValue> &V = 166 EEState.getGlobalAddressReverseMap(locked)[Addr]; 167 assert((V == 0 || GV == 0) && "GlobalMapping already established!"); 168 V = GV; 169 } 170 } 171 172 void ExecutionEngine::clearAllGlobalMappings() { 173 MutexGuard locked(lock); 174 175 EEState.getGlobalAddressMap(locked).clear(); 176 EEState.getGlobalAddressReverseMap(locked).clear(); 177 } 178 179 void ExecutionEngine::clearGlobalMappingsFromModule(Module *M) { 180 MutexGuard locked(lock); 181 182 for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI) 183 EEState.RemoveMapping(locked, FI); 184 for (Module::global_iterator GI = M->global_begin(), GE = M->global_end(); 185 GI != GE; ++GI) 186 EEState.RemoveMapping(locked, GI); 187 } 188 189 void *ExecutionEngine::updateGlobalMapping(const GlobalValue *GV, void *Addr) { 190 MutexGuard locked(lock); 191 192 ExecutionEngineState::GlobalAddressMapTy &Map = 193 EEState.getGlobalAddressMap(locked); 194 195 // Deleting from the mapping? 196 if (Addr == 0) 197 return EEState.RemoveMapping(locked, GV); 198 199 void *&CurVal = Map[GV]; 200 void *OldVal = CurVal; 201 202 if (CurVal && !EEState.getGlobalAddressReverseMap(locked).empty()) 203 EEState.getGlobalAddressReverseMap(locked).erase(CurVal); 204 CurVal = Addr; 205 206 // If we are using the reverse mapping, add it too. 207 if (!EEState.getGlobalAddressReverseMap(locked).empty()) { 208 AssertingVH<const GlobalValue> &V = 209 EEState.getGlobalAddressReverseMap(locked)[Addr]; 210 assert((V == 0 || GV == 0) && "GlobalMapping already established!"); 211 V = GV; 212 } 213 return OldVal; 214 } 215 216 void *ExecutionEngine::getPointerToGlobalIfAvailable(const GlobalValue *GV) { 217 MutexGuard locked(lock); 218 219 ExecutionEngineState::GlobalAddressMapTy::iterator I = 220 EEState.getGlobalAddressMap(locked).find(GV); 221 return I != EEState.getGlobalAddressMap(locked).end() ? I->second : 0; 222 } 223 224 const GlobalValue *ExecutionEngine::getGlobalValueAtAddress(void *Addr) { 225 MutexGuard locked(lock); 226 227 // If we haven't computed the reverse mapping yet, do so first. 228 if (EEState.getGlobalAddressReverseMap(locked).empty()) { 229 for (ExecutionEngineState::GlobalAddressMapTy::iterator 230 I = EEState.getGlobalAddressMap(locked).begin(), 231 E = EEState.getGlobalAddressMap(locked).end(); I != E; ++I) 232 EEState.getGlobalAddressReverseMap(locked).insert(std::make_pair( 233 I->second, I->first)); 234 } 235 236 std::map<void *, AssertingVH<const GlobalValue> >::iterator I = 237 EEState.getGlobalAddressReverseMap(locked).find(Addr); 238 return I != EEState.getGlobalAddressReverseMap(locked).end() ? I->second : 0; 239 } 240 241 namespace { 242 class ArgvArray { 243 char *Array; 244 std::vector<char*> Values; 245 public: 246 ArgvArray() : Array(NULL) {} 247 ~ArgvArray() { clear(); } 248 void clear() { 249 delete[] Array; 250 Array = NULL; 251 for (size_t I = 0, E = Values.size(); I != E; ++I) { 252 delete[] Values[I]; 253 } 254 Values.clear(); 255 } 256 /// Turn a vector of strings into a nice argv style array of pointers to null 257 /// terminated strings. 258 void *reset(LLVMContext &C, ExecutionEngine *EE, 259 const std::vector<std::string> &InputArgv); 260 }; 261 } // anonymous namespace 262 void *ArgvArray::reset(LLVMContext &C, ExecutionEngine *EE, 263 const std::vector<std::string> &InputArgv) { 264 clear(); // Free the old contents. 265 unsigned PtrSize = EE->getTargetData()->getPointerSize(); 266 Array = new char[(InputArgv.size()+1)*PtrSize]; 267 268 DEBUG(dbgs() << "JIT: ARGV = " << (void*)Array << "\n"); 269 const Type *SBytePtr = Type::getInt8PtrTy(C); 270 271 for (unsigned i = 0; i != InputArgv.size(); ++i) { 272 unsigned Size = InputArgv[i].size()+1; 273 char *Dest = new char[Size]; 274 Values.push_back(Dest); 275 DEBUG(dbgs() << "JIT: ARGV[" << i << "] = " << (void*)Dest << "\n"); 276 277 std::copy(InputArgv[i].begin(), InputArgv[i].end(), Dest); 278 Dest[Size-1] = 0; 279 280 // Endian safe: Array[i] = (PointerTy)Dest; 281 EE->StoreValueToMemory(PTOGV(Dest), (GenericValue*)(Array+i*PtrSize), 282 SBytePtr); 283 } 284 285 // Null terminate it 286 EE->StoreValueToMemory(PTOGV(0), 287 (GenericValue*)(Array+InputArgv.size()*PtrSize), 288 SBytePtr); 289 return Array; 290 } 291 292 void ExecutionEngine::runStaticConstructorsDestructors(Module *module, 293 bool isDtors) { 294 const char *Name = isDtors ? "llvm.global_dtors" : "llvm.global_ctors"; 295 GlobalVariable *GV = module->getNamedGlobal(Name); 296 297 // If this global has internal linkage, or if it has a use, then it must be 298 // an old-style (llvmgcc3) static ctor with __main linked in and in use. If 299 // this is the case, don't execute any of the global ctors, __main will do 300 // it. 301 if (!GV || GV->isDeclaration() || GV->hasLocalLinkage()) return; 302 303 // Should be an array of '{ int, void ()* }' structs. The first value is 304 // the init priority, which we ignore. 305 ConstantArray *InitList = dyn_cast<ConstantArray>(GV->getInitializer()); 306 if (!InitList) return; 307 for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) { 308 ConstantStruct *CS = 309 dyn_cast<ConstantStruct>(InitList->getOperand(i)); 310 if (!CS) continue; 311 if (CS->getNumOperands() != 2) return; // Not array of 2-element structs. 312 313 Constant *FP = CS->getOperand(1); 314 if (FP->isNullValue()) 315 break; // Found a null terminator, exit. 316 317 // Strip off constant expression casts. 318 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(FP)) 319 if (CE->isCast()) 320 FP = CE->getOperand(0); 321 322 // Execute the ctor/dtor function! 323 if (Function *F = dyn_cast<Function>(FP)) 324 runFunction(F, std::vector<GenericValue>()); 325 326 // FIXME: It is marginally lame that we just do nothing here if we see an 327 // entry we don't recognize. It might not be unreasonable for the verifier 328 // to not even allow this and just assert here. 329 } 330 } 331 332 void ExecutionEngine::runStaticConstructorsDestructors(bool isDtors) { 333 // Execute global ctors/dtors for each module in the program. 334 for (unsigned i = 0, e = Modules.size(); i != e; ++i) 335 runStaticConstructorsDestructors(Modules[i], isDtors); 336 } 337 338 #ifndef NDEBUG 339 /// isTargetNullPtr - Return whether the target pointer stored at Loc is null. 340 static bool isTargetNullPtr(ExecutionEngine *EE, void *Loc) { 341 unsigned PtrSize = EE->getTargetData()->getPointerSize(); 342 for (unsigned i = 0; i < PtrSize; ++i) 343 if (*(i + (uint8_t*)Loc)) 344 return false; 345 return true; 346 } 347 #endif 348 349 int ExecutionEngine::runFunctionAsMain(Function *Fn, 350 const std::vector<std::string> &argv, 351 const char * const * envp) { 352 std::vector<GenericValue> GVArgs; 353 GenericValue GVArgc; 354 GVArgc.IntVal = APInt(32, argv.size()); 355 356 // Check main() type 357 unsigned NumArgs = Fn->getFunctionType()->getNumParams(); 358 const FunctionType *FTy = Fn->getFunctionType(); 359 const Type* PPInt8Ty = Type::getInt8PtrTy(Fn->getContext())->getPointerTo(); 360 361 // Check the argument types. 362 if (NumArgs > 3) 363 report_fatal_error("Invalid number of arguments of main() supplied"); 364 if (NumArgs >= 3 && FTy->getParamType(2) != PPInt8Ty) 365 report_fatal_error("Invalid type for third argument of main() supplied"); 366 if (NumArgs >= 2 && FTy->getParamType(1) != PPInt8Ty) 367 report_fatal_error("Invalid type for second argument of main() supplied"); 368 if (NumArgs >= 1 && !FTy->getParamType(0)->isIntegerTy(32)) 369 report_fatal_error("Invalid type for first argument of main() supplied"); 370 if (!FTy->getReturnType()->isIntegerTy() && 371 !FTy->getReturnType()->isVoidTy()) 372 report_fatal_error("Invalid return type of main() supplied"); 373 374 ArgvArray CArgv; 375 ArgvArray CEnv; 376 if (NumArgs) { 377 GVArgs.push_back(GVArgc); // Arg #0 = argc. 378 if (NumArgs > 1) { 379 // Arg #1 = argv. 380 GVArgs.push_back(PTOGV(CArgv.reset(Fn->getContext(), this, argv))); 381 assert(!isTargetNullPtr(this, GVTOP(GVArgs[1])) && 382 "argv[0] was null after CreateArgv"); 383 if (NumArgs > 2) { 384 std::vector<std::string> EnvVars; 385 for (unsigned i = 0; envp[i]; ++i) 386 EnvVars.push_back(envp[i]); 387 // Arg #2 = envp. 388 GVArgs.push_back(PTOGV(CEnv.reset(Fn->getContext(), this, EnvVars))); 389 } 390 } 391 } 392 393 return runFunction(Fn, GVArgs).IntVal.getZExtValue(); 394 } 395 396 ExecutionEngine *ExecutionEngine::create(Module *M, 397 bool ForceInterpreter, 398 std::string *ErrorStr, 399 CodeGenOpt::Level OptLevel, 400 bool GVsWithCode) { 401 return EngineBuilder(M) 402 .setEngineKind(ForceInterpreter 403 ? EngineKind::Interpreter 404 : EngineKind::JIT) 405 .setErrorStr(ErrorStr) 406 .setOptLevel(OptLevel) 407 .setAllocateGVsWithCode(GVsWithCode) 408 .create(); 409 } 410 411 ExecutionEngine *EngineBuilder::create() { 412 // Make sure we can resolve symbols in the program as well. The zero arg 413 // to the function tells DynamicLibrary to load the program, not a library. 414 if (sys::DynamicLibrary::LoadLibraryPermanently(0, ErrorStr)) 415 return 0; 416 417 // If the user specified a memory manager but didn't specify which engine to 418 // create, we assume they only want the JIT, and we fail if they only want 419 // the interpreter. 420 if (JMM) { 421 if (WhichEngine & EngineKind::JIT) 422 WhichEngine = EngineKind::JIT; 423 else { 424 if (ErrorStr) 425 *ErrorStr = "Cannot create an interpreter with a memory manager."; 426 return 0; 427 } 428 } 429 430 // Unless the interpreter was explicitly selected or the JIT is not linked, 431 // try making a JIT. 432 if (WhichEngine & EngineKind::JIT) { 433 if (ExecutionEngine::JITCtor) { 434 ExecutionEngine *EE = 435 ExecutionEngine::JITCtor(M, ErrorStr, JMM, OptLevel, 436 AllocateGVsWithCode, CMModel, 437 MArch, MCPU, MAttrs); 438 if (EE) return EE; 439 } 440 } 441 442 // If we can't make a JIT and we didn't request one specifically, try making 443 // an interpreter instead. 444 if (WhichEngine & EngineKind::Interpreter) { 445 if (ExecutionEngine::InterpCtor) 446 return ExecutionEngine::InterpCtor(M, ErrorStr); 447 if (ErrorStr) 448 *ErrorStr = "Interpreter has not been linked in."; 449 return 0; 450 } 451 452 if ((WhichEngine & EngineKind::JIT) && ExecutionEngine::JITCtor == 0) { 453 if (ErrorStr) 454 *ErrorStr = "JIT has not been linked in."; 455 } 456 457 return 0; 458 } 459 460 void *ExecutionEngine::getPointerToGlobal(const GlobalValue *GV) { 461 if (Function *F = const_cast<Function*>(dyn_cast<Function>(GV))) 462 return getPointerToFunction(F); 463 464 MutexGuard locked(lock); 465 if (void *P = EEState.getGlobalAddressMap(locked)[GV]) 466 return P; 467 468 // Global variable might have been added since interpreter started. 469 if (GlobalVariable *GVar = 470 const_cast<GlobalVariable *>(dyn_cast<GlobalVariable>(GV))) 471 EmitGlobalVariable(GVar); 472 else 473 llvm_unreachable("Global hasn't had an address allocated yet!"); 474 475 return EEState.getGlobalAddressMap(locked)[GV]; 476 } 477 478 /// \brief Converts a Constant* into a GenericValue, including handling of 479 /// ConstantExpr values. 480 GenericValue ExecutionEngine::getConstantValue(const Constant *C) { 481 // If its undefined, return the garbage. 482 if (isa<UndefValue>(C)) { 483 GenericValue Result; 484 switch (C->getType()->getTypeID()) { 485 case Type::IntegerTyID: 486 case Type::X86_FP80TyID: 487 case Type::FP128TyID: 488 case Type::PPC_FP128TyID: 489 // Although the value is undefined, we still have to construct an APInt 490 // with the correct bit width. 491 Result.IntVal = APInt(C->getType()->getPrimitiveSizeInBits(), 0); 492 break; 493 default: 494 break; 495 } 496 return Result; 497 } 498 499 // Otherwise, if the value is a ConstantExpr... 500 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) { 501 Constant *Op0 = CE->getOperand(0); 502 switch (CE->getOpcode()) { 503 case Instruction::GetElementPtr: { 504 // Compute the index 505 GenericValue Result = getConstantValue(Op0); 506 SmallVector<Value*, 8> Indices(CE->op_begin()+1, CE->op_end()); 507 uint64_t Offset = 508 TD->getIndexedOffset(Op0->getType(), &Indices[0], Indices.size()); 509 510 char* tmp = (char*) Result.PointerVal; 511 Result = PTOGV(tmp + Offset); 512 return Result; 513 } 514 case Instruction::Trunc: { 515 GenericValue GV = getConstantValue(Op0); 516 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 517 GV.IntVal = GV.IntVal.trunc(BitWidth); 518 return GV; 519 } 520 case Instruction::ZExt: { 521 GenericValue GV = getConstantValue(Op0); 522 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 523 GV.IntVal = GV.IntVal.zext(BitWidth); 524 return GV; 525 } 526 case Instruction::SExt: { 527 GenericValue GV = getConstantValue(Op0); 528 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 529 GV.IntVal = GV.IntVal.sext(BitWidth); 530 return GV; 531 } 532 case Instruction::FPTrunc: { 533 // FIXME long double 534 GenericValue GV = getConstantValue(Op0); 535 GV.FloatVal = float(GV.DoubleVal); 536 return GV; 537 } 538 case Instruction::FPExt:{ 539 // FIXME long double 540 GenericValue GV = getConstantValue(Op0); 541 GV.DoubleVal = double(GV.FloatVal); 542 return GV; 543 } 544 case Instruction::UIToFP: { 545 GenericValue GV = getConstantValue(Op0); 546 if (CE->getType()->isFloatTy()) 547 GV.FloatVal = float(GV.IntVal.roundToDouble()); 548 else if (CE->getType()->isDoubleTy()) 549 GV.DoubleVal = GV.IntVal.roundToDouble(); 550 else if (CE->getType()->isX86_FP80Ty()) { 551 const uint64_t zero[] = {0, 0}; 552 APFloat apf = APFloat(APInt(80, 2, zero)); 553 (void)apf.convertFromAPInt(GV.IntVal, 554 false, 555 APFloat::rmNearestTiesToEven); 556 GV.IntVal = apf.bitcastToAPInt(); 557 } 558 return GV; 559 } 560 case Instruction::SIToFP: { 561 GenericValue GV = getConstantValue(Op0); 562 if (CE->getType()->isFloatTy()) 563 GV.FloatVal = float(GV.IntVal.signedRoundToDouble()); 564 else if (CE->getType()->isDoubleTy()) 565 GV.DoubleVal = GV.IntVal.signedRoundToDouble(); 566 else if (CE->getType()->isX86_FP80Ty()) { 567 const uint64_t zero[] = { 0, 0}; 568 APFloat apf = APFloat(APInt(80, 2, zero)); 569 (void)apf.convertFromAPInt(GV.IntVal, 570 true, 571 APFloat::rmNearestTiesToEven); 572 GV.IntVal = apf.bitcastToAPInt(); 573 } 574 return GV; 575 } 576 case Instruction::FPToUI: // double->APInt conversion handles sign 577 case Instruction::FPToSI: { 578 GenericValue GV = getConstantValue(Op0); 579 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 580 if (Op0->getType()->isFloatTy()) 581 GV.IntVal = APIntOps::RoundFloatToAPInt(GV.FloatVal, BitWidth); 582 else if (Op0->getType()->isDoubleTy()) 583 GV.IntVal = APIntOps::RoundDoubleToAPInt(GV.DoubleVal, BitWidth); 584 else if (Op0->getType()->isX86_FP80Ty()) { 585 APFloat apf = APFloat(GV.IntVal); 586 uint64_t v; 587 bool ignored; 588 (void)apf.convertToInteger(&v, BitWidth, 589 CE->getOpcode()==Instruction::FPToSI, 590 APFloat::rmTowardZero, &ignored); 591 GV.IntVal = v; // endian? 592 } 593 return GV; 594 } 595 case Instruction::PtrToInt: { 596 GenericValue GV = getConstantValue(Op0); 597 uint32_t PtrWidth = TD->getPointerSizeInBits(); 598 GV.IntVal = APInt(PtrWidth, uintptr_t(GV.PointerVal)); 599 return GV; 600 } 601 case Instruction::IntToPtr: { 602 GenericValue GV = getConstantValue(Op0); 603 uint32_t PtrWidth = TD->getPointerSizeInBits(); 604 if (PtrWidth != GV.IntVal.getBitWidth()) 605 GV.IntVal = GV.IntVal.zextOrTrunc(PtrWidth); 606 assert(GV.IntVal.getBitWidth() <= 64 && "Bad pointer width"); 607 GV.PointerVal = PointerTy(uintptr_t(GV.IntVal.getZExtValue())); 608 return GV; 609 } 610 case Instruction::BitCast: { 611 GenericValue GV = getConstantValue(Op0); 612 const Type* DestTy = CE->getType(); 613 switch (Op0->getType()->getTypeID()) { 614 default: llvm_unreachable("Invalid bitcast operand"); 615 case Type::IntegerTyID: 616 assert(DestTy->isFloatingPointTy() && "invalid bitcast"); 617 if (DestTy->isFloatTy()) 618 GV.FloatVal = GV.IntVal.bitsToFloat(); 619 else if (DestTy->isDoubleTy()) 620 GV.DoubleVal = GV.IntVal.bitsToDouble(); 621 break; 622 case Type::FloatTyID: 623 assert(DestTy->isIntegerTy(32) && "Invalid bitcast"); 624 GV.IntVal.floatToBits(GV.FloatVal); 625 break; 626 case Type::DoubleTyID: 627 assert(DestTy->isIntegerTy(64) && "Invalid bitcast"); 628 GV.IntVal.doubleToBits(GV.DoubleVal); 629 break; 630 case Type::PointerTyID: 631 assert(DestTy->isPointerTy() && "Invalid bitcast"); 632 break; // getConstantValue(Op0) above already converted it 633 } 634 return GV; 635 } 636 case Instruction::Add: 637 case Instruction::FAdd: 638 case Instruction::Sub: 639 case Instruction::FSub: 640 case Instruction::Mul: 641 case Instruction::FMul: 642 case Instruction::UDiv: 643 case Instruction::SDiv: 644 case Instruction::URem: 645 case Instruction::SRem: 646 case Instruction::And: 647 case Instruction::Or: 648 case Instruction::Xor: { 649 GenericValue LHS = getConstantValue(Op0); 650 GenericValue RHS = getConstantValue(CE->getOperand(1)); 651 GenericValue GV; 652 switch (CE->getOperand(0)->getType()->getTypeID()) { 653 default: llvm_unreachable("Bad add type!"); 654 case Type::IntegerTyID: 655 switch (CE->getOpcode()) { 656 default: llvm_unreachable("Invalid integer opcode"); 657 case Instruction::Add: GV.IntVal = LHS.IntVal + RHS.IntVal; break; 658 case Instruction::Sub: GV.IntVal = LHS.IntVal - RHS.IntVal; break; 659 case Instruction::Mul: GV.IntVal = LHS.IntVal * RHS.IntVal; break; 660 case Instruction::UDiv:GV.IntVal = LHS.IntVal.udiv(RHS.IntVal); break; 661 case Instruction::SDiv:GV.IntVal = LHS.IntVal.sdiv(RHS.IntVal); break; 662 case Instruction::URem:GV.IntVal = LHS.IntVal.urem(RHS.IntVal); break; 663 case Instruction::SRem:GV.IntVal = LHS.IntVal.srem(RHS.IntVal); break; 664 case Instruction::And: GV.IntVal = LHS.IntVal & RHS.IntVal; break; 665 case Instruction::Or: GV.IntVal = LHS.IntVal | RHS.IntVal; break; 666 case Instruction::Xor: GV.IntVal = LHS.IntVal ^ RHS.IntVal; break; 667 } 668 break; 669 case Type::FloatTyID: 670 switch (CE->getOpcode()) { 671 default: llvm_unreachable("Invalid float opcode"); 672 case Instruction::FAdd: 673 GV.FloatVal = LHS.FloatVal + RHS.FloatVal; break; 674 case Instruction::FSub: 675 GV.FloatVal = LHS.FloatVal - RHS.FloatVal; break; 676 case Instruction::FMul: 677 GV.FloatVal = LHS.FloatVal * RHS.FloatVal; break; 678 case Instruction::FDiv: 679 GV.FloatVal = LHS.FloatVal / RHS.FloatVal; break; 680 case Instruction::FRem: 681 GV.FloatVal = std::fmod(LHS.FloatVal,RHS.FloatVal); break; 682 } 683 break; 684 case Type::DoubleTyID: 685 switch (CE->getOpcode()) { 686 default: llvm_unreachable("Invalid double opcode"); 687 case Instruction::FAdd: 688 GV.DoubleVal = LHS.DoubleVal + RHS.DoubleVal; break; 689 case Instruction::FSub: 690 GV.DoubleVal = LHS.DoubleVal - RHS.DoubleVal; break; 691 case Instruction::FMul: 692 GV.DoubleVal = LHS.DoubleVal * RHS.DoubleVal; break; 693 case Instruction::FDiv: 694 GV.DoubleVal = LHS.DoubleVal / RHS.DoubleVal; break; 695 case Instruction::FRem: 696 GV.DoubleVal = std::fmod(LHS.DoubleVal,RHS.DoubleVal); break; 697 } 698 break; 699 case Type::X86_FP80TyID: 700 case Type::PPC_FP128TyID: 701 case Type::FP128TyID: { 702 APFloat apfLHS = APFloat(LHS.IntVal); 703 switch (CE->getOpcode()) { 704 default: llvm_unreachable("Invalid long double opcode"); 705 case Instruction::FAdd: 706 apfLHS.add(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 707 GV.IntVal = apfLHS.bitcastToAPInt(); 708 break; 709 case Instruction::FSub: 710 apfLHS.subtract(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 711 GV.IntVal = apfLHS.bitcastToAPInt(); 712 break; 713 case Instruction::FMul: 714 apfLHS.multiply(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 715 GV.IntVal = apfLHS.bitcastToAPInt(); 716 break; 717 case Instruction::FDiv: 718 apfLHS.divide(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 719 GV.IntVal = apfLHS.bitcastToAPInt(); 720 break; 721 case Instruction::FRem: 722 apfLHS.mod(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 723 GV.IntVal = apfLHS.bitcastToAPInt(); 724 break; 725 } 726 } 727 break; 728 } 729 return GV; 730 } 731 default: 732 break; 733 } 734 735 SmallString<256> Msg; 736 raw_svector_ostream OS(Msg); 737 OS << "ConstantExpr not handled: " << *CE; 738 report_fatal_error(OS.str()); 739 } 740 741 // Otherwise, we have a simple constant. 742 GenericValue Result; 743 switch (C->getType()->getTypeID()) { 744 case Type::FloatTyID: 745 Result.FloatVal = cast<ConstantFP>(C)->getValueAPF().convertToFloat(); 746 break; 747 case Type::DoubleTyID: 748 Result.DoubleVal = cast<ConstantFP>(C)->getValueAPF().convertToDouble(); 749 break; 750 case Type::X86_FP80TyID: 751 case Type::FP128TyID: 752 case Type::PPC_FP128TyID: 753 Result.IntVal = cast <ConstantFP>(C)->getValueAPF().bitcastToAPInt(); 754 break; 755 case Type::IntegerTyID: 756 Result.IntVal = cast<ConstantInt>(C)->getValue(); 757 break; 758 case Type::PointerTyID: 759 if (isa<ConstantPointerNull>(C)) 760 Result.PointerVal = 0; 761 else if (const Function *F = dyn_cast<Function>(C)) 762 Result = PTOGV(getPointerToFunctionOrStub(const_cast<Function*>(F))); 763 else if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) 764 Result = PTOGV(getOrEmitGlobalVariable(const_cast<GlobalVariable*>(GV))); 765 else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) 766 Result = PTOGV(getPointerToBasicBlock(const_cast<BasicBlock*>( 767 BA->getBasicBlock()))); 768 else 769 llvm_unreachable("Unknown constant pointer type!"); 770 break; 771 default: 772 SmallString<256> Msg; 773 raw_svector_ostream OS(Msg); 774 OS << "ERROR: Constant unimplemented for type: " << *C->getType(); 775 report_fatal_error(OS.str()); 776 } 777 778 return Result; 779 } 780 781 /// StoreIntToMemory - Fills the StoreBytes bytes of memory starting from Dst 782 /// with the integer held in IntVal. 783 static void StoreIntToMemory(const APInt &IntVal, uint8_t *Dst, 784 unsigned StoreBytes) { 785 assert((IntVal.getBitWidth()+7)/8 >= StoreBytes && "Integer too small!"); 786 uint8_t *Src = (uint8_t *)IntVal.getRawData(); 787 788 if (sys::isLittleEndianHost()) { 789 // Little-endian host - the source is ordered from LSB to MSB. Order the 790 // destination from LSB to MSB: Do a straight copy. 791 memcpy(Dst, Src, StoreBytes); 792 } else { 793 // Big-endian host - the source is an array of 64 bit words ordered from 794 // LSW to MSW. Each word is ordered from MSB to LSB. Order the destination 795 // from MSB to LSB: Reverse the word order, but not the bytes in a word. 796 while (StoreBytes > sizeof(uint64_t)) { 797 StoreBytes -= sizeof(uint64_t); 798 // May not be aligned so use memcpy. 799 memcpy(Dst + StoreBytes, Src, sizeof(uint64_t)); 800 Src += sizeof(uint64_t); 801 } 802 803 memcpy(Dst, Src + sizeof(uint64_t) - StoreBytes, StoreBytes); 804 } 805 } 806 807 void ExecutionEngine::StoreValueToMemory(const GenericValue &Val, 808 GenericValue *Ptr, const Type *Ty) { 809 const unsigned StoreBytes = getTargetData()->getTypeStoreSize(Ty); 810 811 switch (Ty->getTypeID()) { 812 case Type::IntegerTyID: 813 StoreIntToMemory(Val.IntVal, (uint8_t*)Ptr, StoreBytes); 814 break; 815 case Type::FloatTyID: 816 *((float*)Ptr) = Val.FloatVal; 817 break; 818 case Type::DoubleTyID: 819 *((double*)Ptr) = Val.DoubleVal; 820 break; 821 case Type::X86_FP80TyID: 822 memcpy(Ptr, Val.IntVal.getRawData(), 10); 823 break; 824 case Type::PointerTyID: 825 // Ensure 64 bit target pointers are fully initialized on 32 bit hosts. 826 if (StoreBytes != sizeof(PointerTy)) 827 memset(Ptr, 0, StoreBytes); 828 829 *((PointerTy*)Ptr) = Val.PointerVal; 830 break; 831 default: 832 dbgs() << "Cannot store value of type " << *Ty << "!\n"; 833 } 834 835 if (sys::isLittleEndianHost() != getTargetData()->isLittleEndian()) 836 // Host and target are different endian - reverse the stored bytes. 837 std::reverse((uint8_t*)Ptr, StoreBytes + (uint8_t*)Ptr); 838 } 839 840 /// LoadIntFromMemory - Loads the integer stored in the LoadBytes bytes starting 841 /// from Src into IntVal, which is assumed to be wide enough and to hold zero. 842 static void LoadIntFromMemory(APInt &IntVal, uint8_t *Src, unsigned LoadBytes) { 843 assert((IntVal.getBitWidth()+7)/8 >= LoadBytes && "Integer too small!"); 844 uint8_t *Dst = (uint8_t *)IntVal.getRawData(); 845 846 if (sys::isLittleEndianHost()) 847 // Little-endian host - the destination must be ordered from LSB to MSB. 848 // The source is ordered from LSB to MSB: Do a straight copy. 849 memcpy(Dst, Src, LoadBytes); 850 else { 851 // Big-endian - the destination is an array of 64 bit words ordered from 852 // LSW to MSW. Each word must be ordered from MSB to LSB. The source is 853 // ordered from MSB to LSB: Reverse the word order, but not the bytes in 854 // a word. 855 while (LoadBytes > sizeof(uint64_t)) { 856 LoadBytes -= sizeof(uint64_t); 857 // May not be aligned so use memcpy. 858 memcpy(Dst, Src + LoadBytes, sizeof(uint64_t)); 859 Dst += sizeof(uint64_t); 860 } 861 862 memcpy(Dst + sizeof(uint64_t) - LoadBytes, Src, LoadBytes); 863 } 864 } 865 866 /// FIXME: document 867 /// 868 void ExecutionEngine::LoadValueFromMemory(GenericValue &Result, 869 GenericValue *Ptr, 870 const Type *Ty) { 871 const unsigned LoadBytes = getTargetData()->getTypeStoreSize(Ty); 872 873 switch (Ty->getTypeID()) { 874 case Type::IntegerTyID: 875 // An APInt with all words initially zero. 876 Result.IntVal = APInt(cast<IntegerType>(Ty)->getBitWidth(), 0); 877 LoadIntFromMemory(Result.IntVal, (uint8_t*)Ptr, LoadBytes); 878 break; 879 case Type::FloatTyID: 880 Result.FloatVal = *((float*)Ptr); 881 break; 882 case Type::DoubleTyID: 883 Result.DoubleVal = *((double*)Ptr); 884 break; 885 case Type::PointerTyID: 886 Result.PointerVal = *((PointerTy*)Ptr); 887 break; 888 case Type::X86_FP80TyID: { 889 // This is endian dependent, but it will only work on x86 anyway. 890 // FIXME: Will not trap if loading a signaling NaN. 891 uint64_t y[2]; 892 memcpy(y, Ptr, 10); 893 Result.IntVal = APInt(80, 2, y); 894 break; 895 } 896 default: 897 SmallString<256> Msg; 898 raw_svector_ostream OS(Msg); 899 OS << "Cannot load value of type " << *Ty << "!"; 900 report_fatal_error(OS.str()); 901 } 902 } 903 904 void ExecutionEngine::InitializeMemory(const Constant *Init, void *Addr) { 905 DEBUG(dbgs() << "JIT: Initializing " << Addr << " "); 906 DEBUG(Init->dump()); 907 if (isa<UndefValue>(Init)) { 908 return; 909 } else if (const ConstantVector *CP = dyn_cast<ConstantVector>(Init)) { 910 unsigned ElementSize = 911 getTargetData()->getTypeAllocSize(CP->getType()->getElementType()); 912 for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i) 913 InitializeMemory(CP->getOperand(i), (char*)Addr+i*ElementSize); 914 return; 915 } else if (isa<ConstantAggregateZero>(Init)) { 916 memset(Addr, 0, (size_t)getTargetData()->getTypeAllocSize(Init->getType())); 917 return; 918 } else if (const ConstantArray *CPA = dyn_cast<ConstantArray>(Init)) { 919 unsigned ElementSize = 920 getTargetData()->getTypeAllocSize(CPA->getType()->getElementType()); 921 for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i) 922 InitializeMemory(CPA->getOperand(i), (char*)Addr+i*ElementSize); 923 return; 924 } else if (const ConstantStruct *CPS = dyn_cast<ConstantStruct>(Init)) { 925 const StructLayout *SL = 926 getTargetData()->getStructLayout(cast<StructType>(CPS->getType())); 927 for (unsigned i = 0, e = CPS->getNumOperands(); i != e; ++i) 928 InitializeMemory(CPS->getOperand(i), (char*)Addr+SL->getElementOffset(i)); 929 return; 930 } else if (Init->getType()->isFirstClassType()) { 931 GenericValue Val = getConstantValue(Init); 932 StoreValueToMemory(Val, (GenericValue*)Addr, Init->getType()); 933 return; 934 } 935 936 DEBUG(dbgs() << "Bad Type: " << *Init->getType() << "\n"); 937 llvm_unreachable("Unknown constant type to initialize memory with!"); 938 } 939 940 /// EmitGlobals - Emit all of the global variables to memory, storing their 941 /// addresses into GlobalAddress. This must make sure to copy the contents of 942 /// their initializers into the memory. 943 void ExecutionEngine::emitGlobals() { 944 // Loop over all of the global variables in the program, allocating the memory 945 // to hold them. If there is more than one module, do a prepass over globals 946 // to figure out how the different modules should link together. 947 std::map<std::pair<std::string, const Type*>, 948 const GlobalValue*> LinkedGlobalsMap; 949 950 if (Modules.size() != 1) { 951 for (unsigned m = 0, e = Modules.size(); m != e; ++m) { 952 Module &M = *Modules[m]; 953 for (Module::const_global_iterator I = M.global_begin(), 954 E = M.global_end(); I != E; ++I) { 955 const GlobalValue *GV = I; 956 if (GV->hasLocalLinkage() || GV->isDeclaration() || 957 GV->hasAppendingLinkage() || !GV->hasName()) 958 continue;// Ignore external globals and globals with internal linkage. 959 960 const GlobalValue *&GVEntry = 961 LinkedGlobalsMap[std::make_pair(GV->getName(), GV->getType())]; 962 963 // If this is the first time we've seen this global, it is the canonical 964 // version. 965 if (!GVEntry) { 966 GVEntry = GV; 967 continue; 968 } 969 970 // If the existing global is strong, never replace it. 971 if (GVEntry->hasExternalLinkage() || 972 GVEntry->hasDLLImportLinkage() || 973 GVEntry->hasDLLExportLinkage()) 974 continue; 975 976 // Otherwise, we know it's linkonce/weak, replace it if this is a strong 977 // symbol. FIXME is this right for common? 978 if (GV->hasExternalLinkage() || GVEntry->hasExternalWeakLinkage()) 979 GVEntry = GV; 980 } 981 } 982 } 983 984 std::vector<const GlobalValue*> NonCanonicalGlobals; 985 for (unsigned m = 0, e = Modules.size(); m != e; ++m) { 986 Module &M = *Modules[m]; 987 for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); 988 I != E; ++I) { 989 // In the multi-module case, see what this global maps to. 990 if (!LinkedGlobalsMap.empty()) { 991 if (const GlobalValue *GVEntry = 992 LinkedGlobalsMap[std::make_pair(I->getName(), I->getType())]) { 993 // If something else is the canonical global, ignore this one. 994 if (GVEntry != &*I) { 995 NonCanonicalGlobals.push_back(I); 996 continue; 997 } 998 } 999 } 1000 1001 if (!I->isDeclaration()) { 1002 addGlobalMapping(I, getMemoryForGV(I)); 1003 } else { 1004 // External variable reference. Try to use the dynamic loader to 1005 // get a pointer to it. 1006 if (void *SymAddr = 1007 sys::DynamicLibrary::SearchForAddressOfSymbol(I->getName())) 1008 addGlobalMapping(I, SymAddr); 1009 else { 1010 report_fatal_error("Could not resolve external global address: " 1011 +I->getName()); 1012 } 1013 } 1014 } 1015 1016 // If there are multiple modules, map the non-canonical globals to their 1017 // canonical location. 1018 if (!NonCanonicalGlobals.empty()) { 1019 for (unsigned i = 0, e = NonCanonicalGlobals.size(); i != e; ++i) { 1020 const GlobalValue *GV = NonCanonicalGlobals[i]; 1021 const GlobalValue *CGV = 1022 LinkedGlobalsMap[std::make_pair(GV->getName(), GV->getType())]; 1023 void *Ptr = getPointerToGlobalIfAvailable(CGV); 1024 assert(Ptr && "Canonical global wasn't codegen'd!"); 1025 addGlobalMapping(GV, Ptr); 1026 } 1027 } 1028 1029 // Now that all of the globals are set up in memory, loop through them all 1030 // and initialize their contents. 1031 for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); 1032 I != E; ++I) { 1033 if (!I->isDeclaration()) { 1034 if (!LinkedGlobalsMap.empty()) { 1035 if (const GlobalValue *GVEntry = 1036 LinkedGlobalsMap[std::make_pair(I->getName(), I->getType())]) 1037 if (GVEntry != &*I) // Not the canonical variable. 1038 continue; 1039 } 1040 EmitGlobalVariable(I); 1041 } 1042 } 1043 } 1044 } 1045 1046 // EmitGlobalVariable - This method emits the specified global variable to the 1047 // address specified in GlobalAddresses, or allocates new memory if it's not 1048 // already in the map. 1049 void ExecutionEngine::EmitGlobalVariable(const GlobalVariable *GV) { 1050 void *GA = getPointerToGlobalIfAvailable(GV); 1051 1052 if (GA == 0) { 1053 // If it's not already specified, allocate memory for the global. 1054 GA = getMemoryForGV(GV); 1055 addGlobalMapping(GV, GA); 1056 } 1057 1058 // Don't initialize if it's thread local, let the client do it. 1059 if (!GV->isThreadLocal()) 1060 InitializeMemory(GV->getInitializer(), GA); 1061 1062 const Type *ElTy = GV->getType()->getElementType(); 1063 size_t GVSize = (size_t)getTargetData()->getTypeAllocSize(ElTy); 1064 NumInitBytes += (unsigned)GVSize; 1065 ++NumGlobals; 1066 } 1067 1068 ExecutionEngineState::ExecutionEngineState(ExecutionEngine &EE) 1069 : EE(EE), GlobalAddressMap(this) { 1070 } 1071 1072 sys::Mutex * 1073 ExecutionEngineState::AddressMapConfig::getMutex(ExecutionEngineState *EES) { 1074 return &EES->EE.lock; 1075 } 1076 1077 void ExecutionEngineState::AddressMapConfig::onDelete(ExecutionEngineState *EES, 1078 const GlobalValue *Old) { 1079 void *OldVal = EES->GlobalAddressMap.lookup(Old); 1080 EES->GlobalAddressReverseMap.erase(OldVal); 1081 } 1082 1083 void ExecutionEngineState::AddressMapConfig::onRAUW(ExecutionEngineState *, 1084 const GlobalValue *, 1085 const GlobalValue *) { 1086 assert(false && "The ExecutionEngine doesn't know how to handle a" 1087 " RAUW on a value it has a global mapping for."); 1088 } 1089