2014-03-07 73 views
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 

我能做些什麼來解決這個問題?謝謝!

回答

相關問題