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

0

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

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

Что я могу сделать для решения этой проблемы? Спасибо!

Теги:
uclibc
klee

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню