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