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