0
昨天我问了一个关于stackoverflow的问题,但我没有清楚地描述它,所以我改变了问题的方式,或许可以让问题清楚。 首先,我修改的例子get_sign.c其中克利提供,包括我在节目中unistd.h
,并调用该函数sleep()
,以使线程暂停,具体如下为什么函数sleep()在klee执行Objectfile时无法工作?
/*
* First KLEE tutorial: testing a small function
*/
#include <unistd.h>
int get_sign(int x) {
if (x == 0)
return 0;
if (x < 0)
return -1;
else
return 1;
}
int main() {
int a;
klee_make_symbolic(&a, sizeof(a), "a");
sleep(10);
return get_sign(a);
}
我使用了“llvm-gcc
”编译get_sign.c,然后使用klee get_sign.o
来执行objectfile,线程不会暂停,意味着sleep()
不起作用。 所以我添加了一个说法,当我执行get_sign.o,这样klee --libc=uclibc get_sign.o
,不幸的是,该线程仍然没有停止,而且,克利报告一个错误,
KLEE: ERROR: /home/lab/work/klee-uclibc/libc/signal/sigaction.c:58: failed external call: __syscall_rt_sigaction
KLEE: NOTE: now ignoring this error at this location
我能做些什么来解决这个问题?谢谢!