klee执行Objectfile,函数“sleep()”不起作用?

时间:2014-03-06 08:02:53

标签: c++ sleep klee

首先,我扩展了klee以支持多个线程,并在klee中实现了pthread.h的一些函数。 现在,我使用llvm-gcc编译c源文件test.c,生成Objectfile test.o,然后使用klee test.o执行.o文件。函数printf可以在屏幕上打印字符串,但函数sleep()不起作用,程序执行速度非常快,不会暂停。 klee网站说我可以使用uclibc链接c lib,但是当我添加参数--libc=uclibc时,就像klee --libc=uclibc test.o一样,结果是错误和奇怪的,就像klee没有执行测试一样。 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;
}

0 个答案:

没有答案