Во-первых, я расширил klee для поддержки нескольких потоков и реализовал некоторые функции pthread.h в klee.
Теперь я использую llvm-gcc для компиляции исходного файла c test.c, генерирую Objectfile test.o, затем использую klee test.o
выполнить .o файл. Функция printf
может печатать строки на экране, но функция sleep()
не работает, программа выполняется очень быстро, не останавливается. Веб-сайт кли говорит, что я могу использовать uclibc для связи с библиотекой, но когда я добавляю аргумент --libc=uclibc
, лайк klee --libc=uclibc test.o
результат неправильный и странный, точно так же, как klee не выполняет test.o, вместо этого выполняет klee сам !!! Как я могу заставить функцию sleep () работать?
C источник следовать
#define OS_GLOBALS
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
//#include "record_monitor.h"
int num;
int global;void * fun1(void *arg)
{
printf("1fun1 num = %d\n",num);
printf("fun1 gol = %d\n",global);
num = 8;
printf("2fun1 num = %d\n",num);
sleep(10);
printf("over fun1\n");
return 0;
}
void *fun2(void *arg)
{
printf("1fun2 num =%d\n",num);
global++;
num = 5;
printf("2fun2 glo = %d\n",global);
sleep(6);
printf("over fun2\n");
return 0;
}
int main()
{
pthread_t npid1,npid2;
num = 1;pthread_create(&npid1,NULL,fun1,NULL);
pthread_create(&npid2,NULL,fun2,NULL);
sleep(5);
printf("1main num = %d\n",num);global = 7;num++;
printf("2main num = %d\n",num);
pthread_join(npid1,NULL);
pthread_join(npid2,NULL);
return 0;
}
Задача ещё не решена.
Других решений пока нет …