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 ExecutionEngine *EE = 0; 389 390 // Make sure we can resolve symbols in the program as well. The zero arg 391 // to the function tells DynamicLibrary to load the program, not a library. 392 if (sys::DynamicLibrary::LoadLibraryPermanently(0, ErrorStr)) 393 return 0; 394 395 // Unless the interpreter was explicitly selected, try making a JIT. 396 if (!ForceInterpreter && JITCtor) 397 EE = JITCtor(MP, ErrorStr, OptLevel); 398 399 // If we can't make a JIT, make an interpreter instead. 400 if (EE == 0 && InterpCtor) 401 EE = InterpCtor(MP, ErrorStr, OptLevel); 402 403 return EE; 404 } 405 406 ExecutionEngine *ExecutionEngine::create(Module *M) { 407 return create(new ExistingModuleProvider(M)); 408 } 409 410 /// getPointerToGlobal - This returns the address of the specified global 411 /// value. This may involve code generation if it's a function. 412 /// 413 void *ExecutionEngine::getPointerToGlobal(const GlobalValue *GV) { 414 if (Function *F = const_cast<Function*>(dyn_cast<Function>(GV))) 415 return getPointerToFunction(F); 416 417 MutexGuard locked(lock); 418 void *p = state.getGlobalAddressMap(locked)[GV]; 419 if (p) 420 return p; 421 422 // Global variable might have been added since interpreter started. 423 if (GlobalVariable *GVar = 424 const_cast<GlobalVariable *>(dyn_cast<GlobalVariable>(GV))) 425 EmitGlobalVariable(GVar); 426 else 427 assert(0 && "Global hasn't had an address allocated yet!"); 428 return state.getGlobalAddressMap(locked)[GV]; 429 } 430 431 /// This function converts a Constant* into a GenericValue. The interesting 432 /// part is if C is a ConstantExpr. 433 /// @brief Get a GenericValue for a Constant* 434 GenericValue ExecutionEngine::getConstantValue(const Constant *C) { 435 // If its undefined, return the garbage. 436 if (isa<UndefValue>(C)) 437 return GenericValue(); 438 439 // If the value is a ConstantExpr 440 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) { 441 Constant *Op0 = CE->getOperand(0); 442 switch (CE->getOpcode()) { 443 case Instruction::GetElementPtr: { 444 // Compute the index 445 GenericValue Result = getConstantValue(Op0); 446 SmallVector<Value*, 8> Indices(CE->op_begin()+1, CE->op_end()); 447 uint64_t Offset = 448 TD->getIndexedOffset(Op0->getType(), &Indices[0], Indices.size()); 449 450 char* tmp = (char*) Result.PointerVal; 451 Result = PTOGV(tmp + Offset); 452 return Result; 453 } 454 case Instruction::Trunc: { 455 GenericValue GV = getConstantValue(Op0); 456 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 457 GV.IntVal = GV.IntVal.trunc(BitWidth); 458 return GV; 459 } 460 case Instruction::ZExt: { 461 GenericValue GV = getConstantValue(Op0); 462 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 463 GV.IntVal = GV.IntVal.zext(BitWidth); 464 return GV; 465 } 466 case Instruction::SExt: { 467 GenericValue GV = getConstantValue(Op0); 468 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 469 GV.IntVal = GV.IntVal.sext(BitWidth); 470 return GV; 471 } 472 case Instruction::FPTrunc: { 473 // FIXME long double 474 GenericValue GV = getConstantValue(Op0); 475 GV.FloatVal = float(GV.DoubleVal); 476 return GV; 477 } 478 case Instruction::FPExt:{ 479 // FIXME long double 480 GenericValue GV = getConstantValue(Op0); 481 GV.DoubleVal = double(GV.FloatVal); 482 return GV; 483 } 484 case Instruction::UIToFP: { 485 GenericValue GV = getConstantValue(Op0); 486 if (CE->getType() == Type::FloatTy) 487 GV.FloatVal = float(GV.IntVal.roundToDouble()); 488 else if (CE->getType() == Type::DoubleTy) 489 GV.DoubleVal = GV.IntVal.roundToDouble(); 490 else if (CE->getType() == Type::X86_FP80Ty) { 491 const uint64_t zero[] = {0, 0}; 492 APFloat apf = APFloat(APInt(80, 2, zero)); 493 (void)apf.convertFromAPInt(GV.IntVal, 494 false, 495 APFloat::rmNearestTiesToEven); 496 GV.IntVal = apf.bitcastToAPInt(); 497 } 498 return GV; 499 } 500 case Instruction::SIToFP: { 501 GenericValue GV = getConstantValue(Op0); 502 if (CE->getType() == Type::FloatTy) 503 GV.FloatVal = float(GV.IntVal.signedRoundToDouble()); 504 else if (CE->getType() == Type::DoubleTy) 505 GV.DoubleVal = GV.IntVal.signedRoundToDouble(); 506 else if (CE->getType() == Type::X86_FP80Ty) { 507 const uint64_t zero[] = { 0, 0}; 508 APFloat apf = APFloat(APInt(80, 2, zero)); 509 (void)apf.convertFromAPInt(GV.IntVal, 510 true, 511 APFloat::rmNearestTiesToEven); 512 GV.IntVal = apf.bitcastToAPInt(); 513 } 514 return GV; 515 } 516 case Instruction::FPToUI: // double->APInt conversion handles sign 517 case Instruction::FPToSI: { 518 GenericValue GV = getConstantValue(Op0); 519 uint32_t BitWidth = cast<IntegerType>(CE->getType())->getBitWidth(); 520 if (Op0->getType() == Type::FloatTy) 521 GV.IntVal = APIntOps::RoundFloatToAPInt(GV.FloatVal, BitWidth); 522 else if (Op0->getType() == Type::DoubleTy) 523 GV.IntVal = APIntOps::RoundDoubleToAPInt(GV.DoubleVal, BitWidth); 524 else if (Op0->getType() == Type::X86_FP80Ty) { 525 APFloat apf = APFloat(GV.IntVal); 526 uint64_t v; 527 bool ignored; 528 (void)apf.convertToInteger(&v, BitWidth, 529 CE->getOpcode()==Instruction::FPToSI, 530 APFloat::rmTowardZero, &ignored); 531 GV.IntVal = v; // endian? 532 } 533 return GV; 534 } 535 case Instruction::PtrToInt: { 536 GenericValue GV = getConstantValue(Op0); 537 uint32_t PtrWidth = TD->getPointerSizeInBits(); 538 GV.IntVal = APInt(PtrWidth, uintptr_t(GV.PointerVal)); 539 return GV; 540 } 541 case Instruction::IntToPtr: { 542 GenericValue GV = getConstantValue(Op0); 543 uint32_t PtrWidth = TD->getPointerSizeInBits(); 544 if (PtrWidth != GV.IntVal.getBitWidth()) 545 GV.IntVal = GV.IntVal.zextOrTrunc(PtrWidth); 546 assert(GV.IntVal.getBitWidth() <= 64 && "Bad pointer width"); 547 GV.PointerVal = PointerTy(uintptr_t(GV.IntVal.getZExtValue())); 548 return GV; 549 } 550 case Instruction::BitCast: { 551 GenericValue GV = getConstantValue(Op0); 552 const Type* DestTy = CE->getType(); 553 switch (Op0->getType()->getTypeID()) { 554 default: assert(0 && "Invalid bitcast operand"); 555 case Type::IntegerTyID: 556 assert(DestTy->isFloatingPoint() && "invalid bitcast"); 557 if (DestTy == Type::FloatTy) 558 GV.FloatVal = GV.IntVal.bitsToFloat(); 559 else if (DestTy == Type::DoubleTy) 560 GV.DoubleVal = GV.IntVal.bitsToDouble(); 561 break; 562 case Type::FloatTyID: 563 assert(DestTy == Type::Int32Ty && "Invalid bitcast"); 564 GV.IntVal.floatToBits(GV.FloatVal); 565 break; 566 case Type::DoubleTyID: 567 assert(DestTy == Type::Int64Ty && "Invalid bitcast"); 568 GV.IntVal.doubleToBits(GV.DoubleVal); 569 break; 570 case Type::PointerTyID: 571 assert(isa<PointerType>(DestTy) && "Invalid bitcast"); 572 break; // getConstantValue(Op0) above already converted it 573 } 574 return GV; 575 } 576 case Instruction::Add: 577 case Instruction::FAdd: 578 case Instruction::Sub: 579 case Instruction::FSub: 580 case Instruction::Mul: 581 case Instruction::FMul: 582 case Instruction::UDiv: 583 case Instruction::SDiv: 584 case Instruction::URem: 585 case Instruction::SRem: 586 case Instruction::And: 587 case Instruction::Or: 588 case Instruction::Xor: { 589 GenericValue LHS = getConstantValue(Op0); 590 GenericValue RHS = getConstantValue(CE->getOperand(1)); 591 GenericValue GV; 592 switch (CE->getOperand(0)->getType()->getTypeID()) { 593 default: assert(0 && "Bad add type!"); abort(); 594 case Type::IntegerTyID: 595 switch (CE->getOpcode()) { 596 default: assert(0 && "Invalid integer opcode"); 597 case Instruction::Add: GV.IntVal = LHS.IntVal + RHS.IntVal; break; 598 case Instruction::Sub: GV.IntVal = LHS.IntVal - RHS.IntVal; break; 599 case Instruction::Mul: GV.IntVal = LHS.IntVal * RHS.IntVal; break; 600 case Instruction::UDiv:GV.IntVal = LHS.IntVal.udiv(RHS.IntVal); break; 601 case Instruction::SDiv:GV.IntVal = LHS.IntVal.sdiv(RHS.IntVal); break; 602 case Instruction::URem:GV.IntVal = LHS.IntVal.urem(RHS.IntVal); break; 603 case Instruction::SRem:GV.IntVal = LHS.IntVal.srem(RHS.IntVal); break; 604 case Instruction::And: GV.IntVal = LHS.IntVal & RHS.IntVal; break; 605 case Instruction::Or: GV.IntVal = LHS.IntVal | RHS.IntVal; break; 606 case Instruction::Xor: GV.IntVal = LHS.IntVal ^ RHS.IntVal; break; 607 } 608 break; 609 case Type::FloatTyID: 610 switch (CE->getOpcode()) { 611 default: assert(0 && "Invalid float opcode"); abort(); 612 case Instruction::FAdd: 613 GV.FloatVal = LHS.FloatVal + RHS.FloatVal; break; 614 case Instruction::FSub: 615 GV.FloatVal = LHS.FloatVal - RHS.FloatVal; break; 616 case Instruction::FMul: 617 GV.FloatVal = LHS.FloatVal * RHS.FloatVal; break; 618 case Instruction::FDiv: 619 GV.FloatVal = LHS.FloatVal / RHS.FloatVal; break; 620 case Instruction::FRem: 621 GV.FloatVal = ::fmodf(LHS.FloatVal,RHS.FloatVal); break; 622 } 623 break; 624 case Type::DoubleTyID: 625 switch (CE->getOpcode()) { 626 default: assert(0 && "Invalid double opcode"); abort(); 627 case Instruction::FAdd: 628 GV.DoubleVal = LHS.DoubleVal + RHS.DoubleVal; break; 629 case Instruction::FSub: 630 GV.DoubleVal = LHS.DoubleVal - RHS.DoubleVal; break; 631 case Instruction::FMul: 632 GV.DoubleVal = LHS.DoubleVal * RHS.DoubleVal; break; 633 case Instruction::FDiv: 634 GV.DoubleVal = LHS.DoubleVal / RHS.DoubleVal; break; 635 case Instruction::FRem: 636 GV.DoubleVal = ::fmod(LHS.DoubleVal,RHS.DoubleVal); break; 637 } 638 break; 639 case Type::X86_FP80TyID: 640 case Type::PPC_FP128TyID: 641 case Type::FP128TyID: { 642 APFloat apfLHS = APFloat(LHS.IntVal); 643 switch (CE->getOpcode()) { 644 default: assert(0 && "Invalid long double opcode");llvm_unreachable(); 645 case Instruction::FAdd: 646 apfLHS.add(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 647 GV.IntVal = apfLHS.bitcastToAPInt(); 648 break; 649 case Instruction::FSub: 650 apfLHS.subtract(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 651 GV.IntVal = apfLHS.bitcastToAPInt(); 652 break; 653 case Instruction::FMul: 654 apfLHS.multiply(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 655 GV.IntVal = apfLHS.bitcastToAPInt(); 656 break; 657 case Instruction::FDiv: 658 apfLHS.divide(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 659 GV.IntVal = apfLHS.bitcastToAPInt(); 660 break; 661 case Instruction::FRem: 662 apfLHS.mod(APFloat(RHS.IntVal), APFloat::rmNearestTiesToEven); 663 GV.IntVal = apfLHS.bitcastToAPInt(); 664 break; 665 } 666 } 667 break; 668 } 669 return GV; 670 } 671 default: 672 break; 673 } 674 cerr << "ConstantExpr not handled: " << *CE << "\n"; 675 abort(); 676 } 677 678 GenericValue Result; 679 switch (C->getType()->getTypeID()) { 680 case Type::FloatTyID: 681 Result.FloatVal = cast<ConstantFP>(C)->getValueAPF().convertToFloat(); 682 break; 683 case Type::DoubleTyID: 684 Result.DoubleVal = cast<ConstantFP>(C)->getValueAPF().convertToDouble(); 685 break; 686 case Type::X86_FP80TyID: 687 case Type::FP128TyID: 688 case Type::PPC_FP128TyID: 689 Result.IntVal = cast <ConstantFP>(C)->getValueAPF().bitcastToAPInt(); 690 break; 691 case Type::IntegerTyID: 692 Result.IntVal = cast<ConstantInt>(C)->getValue(); 693 break; 694 case Type::PointerTyID: 695 if (isa<ConstantPointerNull>(C)) 696 Result.PointerVal = 0; 697 else if (const Function *F = dyn_cast<Function>(C)) 698 Result = PTOGV(getPointerToFunctionOrStub(const_cast<Function*>(F))); 699 else if (const GlobalVariable* GV = dyn_cast<GlobalVariable>(C)) 700 Result = PTOGV(getOrEmitGlobalVariable(const_cast<GlobalVariable*>(GV))); 701 else 702 assert(0 && "Unknown constant pointer type!"); 703 break; 704 default: 705 cerr << "ERROR: Constant unimplemented for type: " << *C->getType() << "\n"; 706 abort(); 707 } 708 return Result; 709 } 710 711 /// StoreIntToMemory - Fills the StoreBytes bytes of memory starting from Dst 712 /// with the integer held in IntVal. 713 static void StoreIntToMemory(const APInt &IntVal, uint8_t *Dst, 714 unsigned StoreBytes) { 715 assert((IntVal.getBitWidth()+7)/8 >= StoreBytes && "Integer too small!"); 716 uint8_t *Src = (uint8_t *)IntVal.getRawData(); 717 718 if (sys::isLittleEndianHost()) 719 // Little-endian host - the source is ordered from LSB to MSB. Order the 720 // destination from LSB to MSB: Do a straight copy. 721 memcpy(Dst, Src, StoreBytes); 722 else { 723 // Big-endian host - the source is an array of 64 bit words ordered from 724 // LSW to MSW. Each word is ordered from MSB to LSB. Order the destination 725 // from MSB to LSB: Reverse the word order, but not the bytes in a word. 726 while (StoreBytes > sizeof(uint64_t)) { 727 StoreBytes -= sizeof(uint64_t); 728 // May not be aligned so use memcpy. 729 memcpy(Dst + StoreBytes, Src, sizeof(uint64_t)); 730 Src += sizeof(uint64_t); 731 } 732 733 memcpy(Dst, Src + sizeof(uint64_t) - StoreBytes, StoreBytes); 734 } 735 } 736 737 /// StoreValueToMemory - Stores the data in Val of type Ty at address Ptr. Ptr 738 /// is the address of the memory at which to store Val, cast to GenericValue *. 739 /// It is not a pointer to a GenericValue containing the address at which to 740 /// store Val. 741 void ExecutionEngine::StoreValueToMemory(const GenericValue &Val, 742 GenericValue *Ptr, const Type *Ty) { 743 const unsigned StoreBytes = getTargetData()->getTypeStoreSize(Ty); 744 745 switch (Ty->getTypeID()) { 746 case Type::IntegerTyID: 747 StoreIntToMemory(Val.IntVal, (uint8_t*)Ptr, StoreBytes); 748 break; 749 case Type::FloatTyID: 750 *((float*)Ptr) = Val.FloatVal; 751 break; 752 case Type::DoubleTyID: 753 *((double*)Ptr) = Val.DoubleVal; 754 break; 755 case Type::X86_FP80TyID: 756 memcpy(Ptr, Val.IntVal.getRawData(), 10); 757 break; 758 case Type::PointerTyID: 759 // Ensure 64 bit target pointers are fully initialized on 32 bit hosts. 760 if (StoreBytes != sizeof(PointerTy)) 761 memset(Ptr, 0, StoreBytes); 762 763 *((PointerTy*)Ptr) = Val.PointerVal; 764 break; 765 default: 766 cerr << "Cannot store value of type " << *Ty << "!\n"; 767 } 768 769 if (sys::isLittleEndianHost() != getTargetData()->isLittleEndian()) 770 // Host and target are different endian - reverse the stored bytes. 771 std::reverse((uint8_t*)Ptr, StoreBytes + (uint8_t*)Ptr); 772 } 773 774 /// LoadIntFromMemory - Loads the integer stored in the LoadBytes bytes starting 775 /// from Src into IntVal, which is assumed to be wide enough and to hold zero. 776 static void LoadIntFromMemory(APInt &IntVal, uint8_t *Src, unsigned LoadBytes) { 777 assert((IntVal.getBitWidth()+7)/8 >= LoadBytes && "Integer too small!"); 778 uint8_t *Dst = (uint8_t *)IntVal.getRawData(); 779 780 if (sys::isLittleEndianHost()) 781 // Little-endian host - the destination must be ordered from LSB to MSB. 782 // The source is ordered from LSB to MSB: Do a straight copy. 783 memcpy(Dst, Src, LoadBytes); 784 else { 785 // Big-endian - the destination is an array of 64 bit words ordered from 786 // LSW to MSW. Each word must be ordered from MSB to LSB. The source is 787 // ordered from MSB to LSB: Reverse the word order, but not the bytes in 788 // a word. 789 while (LoadBytes > sizeof(uint64_t)) { 790 LoadBytes -= sizeof(uint64_t); 791 // May not be aligned so use memcpy. 792 memcpy(Dst, Src + LoadBytes, sizeof(uint64_t)); 793 Dst += sizeof(uint64_t); 794 } 795 796 memcpy(Dst + sizeof(uint64_t) - LoadBytes, Src, LoadBytes); 797 } 798 } 799 800 /// FIXME: document 801 /// 802 void ExecutionEngine::LoadValueFromMemory(GenericValue &Result, 803 GenericValue *Ptr, 804 const Type *Ty) { 805 const unsigned LoadBytes = getTargetData()->getTypeStoreSize(Ty); 806 807 if (sys::isLittleEndianHost() != getTargetData()->isLittleEndian()) { 808 // Host and target are different endian - reverse copy the stored 809 // bytes into a buffer, and load from that. 810 uint8_t *Src = (uint8_t*)Ptr; 811 uint8_t *Buf = (uint8_t*)alloca(LoadBytes); 812 std::reverse_copy(Src, Src + LoadBytes, Buf); 813 Ptr = (GenericValue*)Buf; 814 } 815 816 switch (Ty->getTypeID()) { 817 case Type::IntegerTyID: 818 // An APInt with all words initially zero. 819 Result.IntVal = APInt(cast<IntegerType>(Ty)->getBitWidth(), 0); 820 LoadIntFromMemory(Result.IntVal, (uint8_t*)Ptr, LoadBytes); 821 break; 822 case Type::FloatTyID: 823 Result.FloatVal = *((float*)Ptr); 824 break; 825 case Type::DoubleTyID: 826 Result.DoubleVal = *((double*)Ptr); 827 break; 828 case Type::PointerTyID: 829 Result.PointerVal = *((PointerTy*)Ptr); 830 break; 831 case Type::X86_FP80TyID: { 832 // This is endian dependent, but it will only work on x86 anyway. 833 // FIXME: Will not trap if loading a signaling NaN. 834 uint64_t y[2]; 835 memcpy(y, Ptr, 10); 836 Result.IntVal = APInt(80, 2, y); 837 break; 838 } 839 default: 840 cerr << "Cannot load value of type " << *Ty << "!\n"; 841 abort(); 842 } 843 } 844 845 // InitializeMemory - Recursive function to apply a Constant value into the 846 // specified memory location... 847 // 848 void ExecutionEngine::InitializeMemory(const Constant *Init, void *Addr) { 849 DOUT << "JIT: Initializing " << Addr << " "; 850 DEBUG(Init->dump()); 851 if (isa<UndefValue>(Init)) { 852 return; 853 } else if (const ConstantVector *CP = dyn_cast<ConstantVector>(Init)) { 854 unsigned ElementSize = 855 getTargetData()->getTypeAllocSize(CP->getType()->getElementType()); 856 for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i) 857 InitializeMemory(CP->getOperand(i), (char*)Addr+i*ElementSize); 858 return; 859 } else if (isa<ConstantAggregateZero>(Init)) { 860 memset(Addr, 0, (size_t)getTargetData()->getTypeAllocSize(Init->getType())); 861 return; 862 } else if (const ConstantArray *CPA = dyn_cast<ConstantArray>(Init)) { 863 unsigned ElementSize = 864 getTargetData()->getTypeAllocSize(CPA->getType()->getElementType()); 865 for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i) 866 InitializeMemory(CPA->getOperand(i), (char*)Addr+i*ElementSize); 867 return; 868 } else if (const ConstantStruct *CPS = dyn_cast<ConstantStruct>(Init)) { 869 const StructLayout *SL = 870 getTargetData()->getStructLayout(cast<StructType>(CPS->getType())); 871 for (unsigned i = 0, e = CPS->getNumOperands(); i != e; ++i) 872 InitializeMemory(CPS->getOperand(i), (char*)Addr+SL->getElementOffset(i)); 873 return; 874 } else if (Init->getType()->isFirstClassType()) { 875 GenericValue Val = getConstantValue(Init); 876 StoreValueToMemory(Val, (GenericValue*)Addr, Init->getType()); 877 return; 878 } 879 880 cerr << "Bad Type: " << *Init->getType() << "\n"; 881 assert(0 && "Unknown constant type to initialize memory with!"); 882 } 883 884 /// EmitGlobals - Emit all of the global variables to memory, storing their 885 /// addresses into GlobalAddress. This must make sure to copy the contents of 886 /// their initializers into the memory. 887 /// 888 void ExecutionEngine::emitGlobals() { 889 890 // Loop over all of the global variables in the program, allocating the memory 891 // to hold them. If there is more than one module, do a prepass over globals 892 // to figure out how the different modules should link together. 893 // 894 std::map<std::pair<std::string, const Type*>, 895 const GlobalValue*> LinkedGlobalsMap; 896 897 if (Modules.size() != 1) { 898 for (unsigned m = 0, e = Modules.size(); m != e; ++m) { 899 Module &M = *Modules[m]->getModule(); 900 for (Module::const_global_iterator I = M.global_begin(), 901 E = M.global_end(); I != E; ++I) { 902 const GlobalValue *GV = I; 903 if (GV->hasLocalLinkage() || GV->isDeclaration() || 904 GV->hasAppendingLinkage() || !GV->hasName()) 905 continue;// Ignore external globals and globals with internal linkage. 906 907 const GlobalValue *&GVEntry = 908 LinkedGlobalsMap[std::make_pair(GV->getName(), GV->getType())]; 909 910 // If this is the first time we've seen this global, it is the canonical 911 // version. 912 if (!GVEntry) { 913 GVEntry = GV; 914 continue; 915 } 916 917 // If the existing global is strong, never replace it. 918 if (GVEntry->hasExternalLinkage() || 919 GVEntry->hasDLLImportLinkage() || 920 GVEntry->hasDLLExportLinkage()) 921 continue; 922 923 // Otherwise, we know it's linkonce/weak, replace it if this is a strong 924 // symbol. FIXME is this right for common? 925 if (GV->hasExternalLinkage() || GVEntry->hasExternalWeakLinkage()) 926 GVEntry = GV; 927 } 928 } 929 } 930 931 std::vector<const GlobalValue*> NonCanonicalGlobals; 932 for (unsigned m = 0, e = Modules.size(); m != e; ++m) { 933 Module &M = *Modules[m]->getModule(); 934 for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); 935 I != E; ++I) { 936 // In the multi-module case, see what this global maps to. 937 if (!LinkedGlobalsMap.empty()) { 938 if (const GlobalValue *GVEntry = 939 LinkedGlobalsMap[std::make_pair(I->getName(), I->getType())]) { 940 // If something else is the canonical global, ignore this one. 941 if (GVEntry != &*I) { 942 NonCanonicalGlobals.push_back(I); 943 continue; 944 } 945 } 946 } 947 948 if (!I->isDeclaration()) { 949 addGlobalMapping(I, getMemoryForGV(I)); 950 } else { 951 // External variable reference. Try to use the dynamic loader to 952 // get a pointer to it. 953 if (void *SymAddr = 954 sys::DynamicLibrary::SearchForAddressOfSymbol(I->getName().c_str())) 955 addGlobalMapping(I, SymAddr); 956 else { 957 llvm_report_error("Could not resolve external global address: " 958 +I->getName()); 959 } 960 } 961 } 962 963 // If there are multiple modules, map the non-canonical globals to their 964 // canonical location. 965 if (!NonCanonicalGlobals.empty()) { 966 for (unsigned i = 0, e = NonCanonicalGlobals.size(); i != e; ++i) { 967 const GlobalValue *GV = NonCanonicalGlobals[i]; 968 const GlobalValue *CGV = 969 LinkedGlobalsMap[std::make_pair(GV->getName(), GV->getType())]; 970 void *Ptr = getPointerToGlobalIfAvailable(CGV); 971 assert(Ptr && "Canonical global wasn't codegen'd!"); 972 addGlobalMapping(GV, Ptr); 973 } 974 } 975 976 // Now that all of the globals are set up in memory, loop through them all 977 // and initialize their contents. 978 for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); 979 I != E; ++I) { 980 if (!I->isDeclaration()) { 981 if (!LinkedGlobalsMap.empty()) { 982 if (const GlobalValue *GVEntry = 983 LinkedGlobalsMap[std::make_pair(I->getName(), I->getType())]) 984 if (GVEntry != &*I) // Not the canonical variable. 985 continue; 986 } 987 EmitGlobalVariable(I); 988 } 989 } 990 } 991 } 992 993 // EmitGlobalVariable - This method emits the specified global variable to the 994 // address specified in GlobalAddresses, or allocates new memory if it's not 995 // already in the map. 996 void ExecutionEngine::EmitGlobalVariable(const GlobalVariable *GV) { 997 void *GA = getPointerToGlobalIfAvailable(GV); 998 999 if (GA == 0) { 1000 // If it's not already specified, allocate memory for the global. 1001 GA = getMemoryForGV(GV); 1002 addGlobalMapping(GV, GA); 1003 } 1004 1005 // Don't initialize if it's thread local, let the client do it. 1006 if (!GV->isThreadLocal()) 1007 InitializeMemory(GV->getInitializer(), GA); 1008 1009 const Type *ElTy = GV->getType()->getElementType(); 1010 size_t GVSize = (size_t)getTargetData()->getTypeAllocSize(ElTy); 1011 NumInitBytes += (unsigned)GVSize; 1012 ++NumGlobals; 1013 } 1014