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