diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp | 71 |
1 files changed, 65 insertions, 6 deletions
diff --git a/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp b/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp index abc66b0add..cf878dc660 100644 --- a/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp +++ b/lib/Analysis/NaCl/PNaClABIVerifyFunctions.cpp @@ -42,19 +42,78 @@ bool PNaClABIVerifyFunctions::runOnFunction(Function &F) { for (BasicBlock::const_iterator BBI = FI->begin(), BBE = FI->end(); BBI != BBE; ++BBI) { switch (BBI->getOpcode()) { + // Disallowed instructions. Default is to disallow. + default: + // indirectbr may interfere with streaming + case Instruction::IndirectBr: + // No vector instructions yet + case Instruction::ExtractElement: + case Instruction::InsertElement: + case Instruction::ShuffleVector: + errs() << Twine("Function ") + F.getName() + + " has disallowed instruction: " + + BBI->getOpcodeName() + "\n"; + break; + // Terminator instructions case Instruction::Ret: case Instruction::Br: case Instruction::Switch: case Instruction::Resume: case Instruction::Unreachable: - // indirectbr is not allowed for now. - // invoke and call are handled separately. + case Instruction::Invoke: + // Binary operations + case Instruction::Add: + case Instruction::FAdd: + case Instruction::Sub: + case Instruction::FSub: + case Instruction::Mul: + case Instruction::FMul: + case Instruction::UDiv: + case Instruction::SDiv: + case Instruction::FDiv: + case Instruction::URem: + case Instruction::SRem: + case Instruction::FRem: + // Bitwise binary operations + case Instruction::Shl: + case Instruction::LShr: + case Instruction::AShr: + case Instruction::And: + case Instruction::Or: + case Instruction::Xor: + case Instruction::ExtractValue: + case Instruction::InsertValue: + // Memory instructions + case Instruction::Alloca: + case Instruction::Load: + case Instruction::Store: + case Instruction::Fence: + case Instruction::AtomicCmpXchg: + case Instruction::AtomicRMW: + case Instruction::GetElementPtr: + // Conversion operations + case Instruction::Trunc: + case Instruction::ZExt: + case Instruction::SExt: + case Instruction::FPTrunc: + case Instruction::FPExt: + case Instruction::FPToUI: + case Instruction::FPToSI: + case Instruction::UIToFP: + case Instruction::SIToFP: + case Instruction::PtrToInt: + case Instruction::IntToPtr: + case Instruction::BitCast: + // Other operations + case Instruction::ICmp: + case Instruction::FCmp: + case Instruction::PHI: + case Instruction::Select: + case Instruction::Call: + case Instruction::VAArg: + case Instruction::LandingPad: break; - default: - errs() << Twine("Function ") + F.getName() + - " has disallowed instruction: " + - BBI->getOpcodeName() + "\n"; } } } |