karelklic / canal

Abstract interpreter for real-world application programs
https://github.com/karelklic/canal/wiki
Other
32 stars 2 forks source link

Operations.cpp:195(interpretCall) assert failed: function #128

Open xbrukner opened 11 years ago

xbrukner commented 11 years ago
/home/tomas/projekty/canal/lib/Operations.cpp:195(interpretCall) assert failed: function
[bt]: (1) /home/tomas/projekty/canal/lib/libcanal.so : void Canal::Operations::interpretCall<llvm::CallInst>(llvm::CallInst const&, Canal::State&)+0x39 [0x400fe8d5]
[bt]: (2) /home/tomas/projekty/canal/lib/libcanal.so : Canal::Operations::call(llvm::CallInst const&, Canal::State&)+0x2b [0x400fb511]
[bt]: (3) /home/tomas/projekty/canal/lib/libcanal.so : Canal::Operations::interpretInstruction(llvm::Instruction const&, Canal::State&)+0x44 [0x400f716e]
[bt]: (4) /home/tomas/projekty/canal/lib/libcanal.so : Canal::Interpreter::Iterator::interpretInstruction()+0x3f [0x400f2fa5]
[bt]: (5) /home/tomas/projekty/canal/tool/canal : State::run()+0x2e [0x80cb1de]
[bt]: (6) /home/tomas/projekty/canal/tool/canal : CommandRun::run(std::vector<std::string, std::allocator<std::string> > const&)+0x7b [0x80c5527]
[bt]: (7) /home/tomas/projekty/canal/tool/canal : Commands::executeLine(std::string const&)+0x1c2 [0x80c62f0]
[bt]: (8) /home/tomas/projekty/canal/tool/canal : main+0x139 [0x80b487d]
[bt]: (9) /lib/i386-linux-gnu/libc.so.6 : __libc_start_main+0xf3 [0x404324d3]
[bt]: (10) /home/tomas/projekty/canal/tool/canal() [0x80b43b5]

Files: http://www.fi.muni.cz/~xbrukner/integration/tr.c, http://www.fi.muni.cz/~xbrukner/integration/tr.s http://www.fi.muni.cz/~xbrukner/integration/truncate.c, http://www.fi.muni.cz/~xbrukner/integration/truncate.s http://www.fi.muni.cz/~xbrukner/integration/tsort.c, http://www.fi.muni.cz/~xbrukner/integration/tsort.s http://www.fi.muni.cz/~xbrukner/integration/stat.c, http://www.fi.muni.cz/~xbrukner/integration/stat.s

xbrukner commented 11 years ago

Need to handle pointer to functions saved in register: tr.s

define internal void @squeeze_filter(i8* %buf, i32 %size, i32 (i8*, i32)* %reader) nounwind {
%3 = alloca i32 (i8*, i32)*, align 4
store i32 (i8*, i32)* %reader, i32 (i8*, i32)** %3, align 4
%9 = load i32 (i8*, i32)** %3, align 4
%12 = call i32 %9(i8* %10, i32 %11)
xbrukner commented 11 years ago

truncate.s

%23 = load %struct.stat** %1, align 4
%24 = call i32 bitcast (i32 (...)* @S_TYPEISTMO to i32 (%struct.stat*)*)(%struct.stat* %23)
xbrukner commented 11 years ago

tsort.s

%15 = load %struct.item** %2, align 4
%16 = call zeroext i1 %14(%struct.item* %15)
xbrukner commented 11 years ago

stat.s

%89 = call zeroext i1 %82(i8* %83, i32 %85, i32 %86, i8* %87, i8* %88)
xbrukner commented 11 years ago

Now also in sum: http://www.fi.muni.cz/~xbrukner/integration/sum.c, http://www.fi.muni.cz/~xbrukner/integration/sum.s