昨日、stackoverflowで質問したのですが、明確に記載していなかったので、質問の仕方を変えて、もしかしたら問題を明確にするかもしれません。まず、klee が提供する get_sign.c の例を変更unistd.h
し、プログラムに含め、次のように関数sleep()
を呼び出してスレッドを一時停止します。
/*
* 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 をコンパイルし、次に objectfileklee get_sign.o
を実行すると、スレッドが一時停止しません。つまり、sleep()
動作しません。get_sign.o を実行するときに引数を追加すると、このようklee --libc=uclibc get_sign.o
になりますが、残念ながら、スレッドはまだ中断されず、さらに klee はエラーを報告し、
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
この問題を解決するにはどうすればよいですか? ありがとう!