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