Почему функция sleep () не может работать, когда ключ выполняет Objectfile?

Вчера я задавал вопрос по stackoverflow, но я не описал его четко, поэтому я изменил способ запроса, возможно, прояснить проблему.
Во-первых, я изменяю пример 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, затем используйте klee get_sign.o чтобы выполнить объектный файл, поток не делает паузу, означает, что 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

Что я могу сделать, чтобы решить эту проблему? благодарю вас!

0

Решение

Похоже, кли использует сигналы, которые могут сделать sleep возвращаться раньше, чем ожидалось, как указано в http://www.delorie.com/gnu/docs/glibc/libc_445.html. Эта ссылка также предоставляет способы обойти ограничение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]