/* Generated by Frama-C */ typedef void *framac_mthread_name; typedef int framac_mthread_id; typedef framac_mthread_id pthread_t; typedef framac_mthread_id pthread_attr_t; typedef framac_mthread_id pthread_mutex_t; typedef framac_mthread_id pthread_mutexattr_t; extern int __FRAMAC_MTHREAD_SHARED; int __FRAMAC_MTHREAD_THREADS_RUNNING = 0; int __FRAMAC_MTHREAD_THREADS[16]; int __FRAMAC_MTHREAD_MUTEXES[16]; int __FRAMAC_MTHREAD_QUEUES[16]; /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern framac_mthread_id __FRAMAC_THREAD_CREATE(framac_mthread_name, void *(*)(void *) , ...); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern int __FRAMAC_THREAD_START(framac_mthread_id); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern int __FRAMAC_THREAD_SUSPEND(framac_mthread_id); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern int __FRAMAC_THREAD_CANCEL(framac_mthread_id); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern framac_mthread_id __FRAMAC_THREAD_ID(); /*@ terminates \false; ensures \false; assigns __FRAMAC_MTHREAD_SHARED; */ extern void __FRAMAC_THREAD_EXIT(void *); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern framac_mthread_id __FRAMAC_MUTEX_INIT(framac_mthread_name); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern int __FRAMAC_MUTEX_LOCK(framac_mthread_id); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern int __FRAMAC_MUTEX_UNLOCK(framac_mthread_id); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern framac_mthread_id __FRAMAC_QUEUE_INIT(framac_mthread_name, int); /*@ requires \valid(buf+(0..size-1)); assigns __FRAMAC_MTHREAD_SHARED; */ extern int __FRAMAC_MESSAGE_SEND(framac_mthread_id id, char const *buf, int size); /*@ requires \valid(buf+(0..size-1)); assigns *buf, __FRAMAC_MTHREAD_SHARED; assigns *buf \from \empty; */ extern int __FRAMAC_MESSAGE_RECEIVE(framac_mthread_id, int size, char *buf); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern void __FRAMAC_MTHREAD_SHOW(char const * , ...); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern void __FRAMAC_MTHREAD_NAME_THREAD(framac_mthread_id, framac_mthread_name); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern void __FRAMAC_MTHREAD_NAME_MUTEX(framac_mthread_id, framac_mthread_name); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern void __FRAMAC_MTHREAD_NAME_QUEUE(framac_mthread_id, framac_mthread_name); /*@ assigns __FRAMAC_MTHREAD_SHARED; */ extern void __FRAMAC_MTHREAD_SYNC(); int u1 = 0; int u2 = 0; int u3 = 0; int s4 = 0; int s5 = 0; int s6 = 0; pthread_t jobs1; pthread_t jobs2; pthread_t jobs3; pthread_t jobs31; pthread_t jobs4; pthread_t jobs5; pthread_t jobs51; pthread_t jobs6; void f1(void *) { int t; t = u1; u1 ++; return; } void f2(void *) { return; } void f31(int x) { int t; t = u3; u3 = 31; return; } void f3(void *) { u3 = 3; pthread_create(& jobs31,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f31),(void *)0); return; } void f4(void *) { int t; t = s4; s4 = 4; t = s6; s6 = 4; return; } void f51(int x) { int t; t = s5; s5 = 51; return; } void f5(void *) { pthread_create(& jobs51,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f51),(void *)0); s5 = 5; return; } void f6(void *) { int t; t = s6; s6 = 6; return; } void main(void) { int t; u1 = 1; t = u1; u2 = 1; u3 = 1; pthread_create(& jobs1,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f1),(void *)0); u2 = 1; t = u2; pthread_create(& jobs2,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f2),(void *)0); pthread_create(& jobs3,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f3),(void *)0); s4 = -1; s6 = 2; pthread_create(& jobs4,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f4),(void *)0); s4 = 1; pthread_create(& jobs5,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f5),(void *)0); pthread_create(& jobs6,(pthread_attr_t const *)((void *)0), (void *(*)(void *))(& f6),(void *)0); return; } int pthread_create(pthread_t *thread, pthread_attr_t const *attr, void *(*start_routine)(void *), void *arg) { int __retres; int result; result = __FRAMAC_THREAD_CREATE((void *)thread,start_routine,arg); if (result > 0) { *thread = result; __FRAMAC_THREAD_START(result); __retres = 0; goto return_label; } else { __retres = 11; goto return_label; } return_label: /* internal */ return (__retres); } int pthread_cancel(pthread_t thread) { int result; int tmp_0; result = __FRAMAC_THREAD_CANCEL(thread); if (result != -1) { tmp_0 = 0; } else { tmp_0 = 3; } return (tmp_0); } pthread_t pthread_self(void) { pthread_t tmp; tmp = __FRAMAC_THREAD_ID(); return (tmp); } int pthread_mutex_init(pthread_mutex_t * __restrict mutex, pthread_mutexattr_t const * __restrict attr) { int __retres; int result; result = __FRAMAC_MUTEX_INIT((void *)mutex); if (result > 0) { *mutex = result; __retres = 0; goto return_label; } else { __retres = 22; goto return_label; } return_label: /* internal */ return (__retres); } int pthread_mutex_lock(pthread_mutex_t *mutex) { int result; int tmp_0; result = __FRAMAC_MUTEX_LOCK(*mutex); if (result != -1) { tmp_0 = 0; } else { tmp_0 = 22; } return (tmp_0); } int pthread_mutex_trylock(pthread_mutex_t *mutex) { int result; int tmp_0; result = __FRAMAC_MUTEX_LOCK(*mutex); if (result != -1) { tmp_0 = 0; } else { tmp_0 = 22; } return (tmp_0); } int pthread_mutex_unlock(pthread_mutex_t *mutex) { int result; int tmp_0; result = __FRAMAC_MUTEX_UNLOCK(*mutex); if (result != -1) { tmp_0 = 0; } else { tmp_0 = 22; } return (tmp_0); } void pthread_exit(void *thread_return) { __FRAMAC_THREAD_EXIT(thread_return); return; } int volatile NON_DET_JOIN; int pthread_join(pthread_t thread, void **thread_return) { int tmp; *thread_return = (void *)NON_DET_JOIN; if (NON_DET_JOIN) { tmp = -1; } else { tmp = 0; } return (tmp); } int pthread_setcancelstate(int state, int *oldstate) { int __retres; __retres = 0; return (__retres); } int pthread_setcanceltype(int type, int *oldtype) { int __retres; __retres = 0; return (__retres); } void pthread_testcancel(void) { return; } int queuecreate(framac_mthread_name *q, int size) { int __retres; *((int *)q) = __FRAMAC_QUEUE_INIT((void *)q,size); __retres = 0; return (__retres); } int msgsnd(int msgqid, char const *mess, int size) { int result; result = __FRAMAC_MESSAGE_SEND(msgqid,mess,size); return (result); } int msgrcv(int msgqid, int size, char *mess) { int tmp; tmp = __FRAMAC_MESSAGE_RECEIVE(msgqid,size,mess); return (tmp); }