These intrinsics were added to LLVM after KLEE was released. Furthermore, you can avoid them by disabling the instruction combine pass (or --optimize=false altogether).
Paul On 22 Feb 2012, at 05:35, Jiaqi Tan wrote: > Hi, > > I poked around a bit more. In general, does KLEE not support all LLVM > intrinsics? Or does KLEE only not support certain intrinsics? > > I would believe that KLEE in general is able to support unsigned > addition? I have encountered errors for unsupported > llvm.uadd.with.overflow.i64 and .i32, so I'm puzzled about why that is > the case. > > Thanks, > Jiaqi > > On Wed, Feb 22, 2012 at 6:03 AM, Jiaqi Tan <[email protected]> wrote: >> Hi, >> >> Thanks for the pointer. >> >> As for this error message: >> WARNING: this target does not support the llvm.stacksave intrinsic. >> LLVM ERROR: Code generator does not support intrinsic function >> 'llvm.uadd.with.overflow.i64'! >> >> Is this also caused by unsupported inline asm? Apart from the __asm__ >> calls, are there any other C constructs that might generate inlined >> asm? >> >> Thanks, >> Jiaqi >> >> On Wed, Feb 22, 2012 at 1:02 AM, Paul Marinescu >> <[email protected]> wrote: >>> The error can be caused by an inline asm instruction in your program (e.g. >>> call i32 asm ...). KLEE does not support them. >>> >>> Paul >>> >>> >>> On 21/02/12 09:46, Jiaqi Tan wrote: >>>> >>>> Hi, >>>> >>>> I did some poking around the KLEE source, and found that this error is >>>> being generated due to the assertion here (code segment included): >>>> >>>> ===== begin code ===== >>>> const Cell& Executor::eval(KInstruction *ki, unsigned index, >>>> ExecutionState&state) const { >>>> >>>> assert(index< ki->inst->getNumOperands()); >>>> int vnumber = ki->operands[index]; >>>> >>>> if (vnumber == -1) { >>>> std::cout<< "Assert about to fail: #operands:"<< >>>> ki->inst->getNumOperands()<< " index:"<< index<< " vnumber:"<< >>>> vnumber<< std::endl; >>>> } >>>> >>>> assert(vnumber != -1&& >>>> "Invalid operand to eval(), not a value or constant!"); >>>> ===== end code ===== >>>> >>>> I suppose -1 is used as a special flag value here? Because later on, >>>> (- vnumber - 2) is used to grab a constant 3 lines down in the code. >>>> What does the operands array in KInstruction store, and where is it >>>> populated? >>>> >>>> Thanks! >>>> Jiaqi >>>> >>>> On Mon, Feb 20, 2012 at 1:52 PM, Jiaqi Tan<[email protected]> wrote: >>>>> >>>>> Hi, >>>>> >>>>> I'm trying to run BusyBox, and I'm getting this error message: >>>>> >>>>> KLEE: WARNING: executable has module level assembly (ignoring) >>>>> KLEE: WARNING: calling external: syscall(54, 0, 21505, 231590832) >>>>> KLEE: WARNING: calling __user_main with extra arguments. >>>>> KLEE: WARNING: calling external: __xstat64(3, 231196304, 231603064) >>>>> klee: Executor.cpp:1001: const klee::Cell& >>>>> klee::Executor::eval(klee::KInstruction*, unsigned int, >>>>> klee::ExecutionState&) const: Assertion `vnumber != -1&& "Invalid >>>>> >>>>> operand to eval(), not a value or constant!"' failed. >>>>> 0 klee 0x089a79f8 >>>>> Aborted >>>>> >>>>> Does anybody have any idea where the source of the problem might be? >>>>> I'm not quite sure where to get started to figure out where the >>>>> problem is. Is this due to a compilation or linking problem due to >>>>> missing code or libraries? >>>>> >>>>> Thanks! >>>>> Jiaqi Tan >>>> >>>> _______________________________________________ >>>> klee-dev mailing list >>>> [email protected] >>>> http://keeda.Stanford.EDU/mailman/listinfo/klee-dev >>> >>> _______________________________________________ klee-dev mailing list [email protected] http://keeda.Stanford.EDU/mailman/listinfo/klee-dev
