void thr1() { int l; glb_init(g>=0); glb_init(l==0); while (l < g) { l = l + 1; } assert(l <= g); }
void thr3() { //writer glb_init(w==0); glb_init(r==0); { __blockattribute__((atomic)) assume(w==0); assume(r==0); w = 1; } x = 3; w = 0; }
int main(int argc, char **argv) { char *config_xml; if (argc != 2) { printf("Usage: %s config.xml \n", argv[0]); return (EXIT_SUCCESS); } // GET Ctrl+C signal; signal(SIGINT, exit_proc); /** Read configure file */ config_xml = argv[1]; parse_doc(config_xml); /** Initialize NFQUEUE forwarding process, logging files e.t.c */ if(!nfqp_init() || !glb_init() || !stats_init() /* MYSQL , */){ exit_proc(); } nfqp_analyzer_function(); return(EXIT_SUCCESS); }
void thr1() { //writer #ifndef SATABS glb_init(w==0); glb_init(r==0); #endif #ifdef SATABS { __CPROVER_atomic_begin(); #else { __blockattribute__((atomic)) #endif assume(w==0); assume(r==0); w = 1; #ifdef SATABS __CPROVER_atomic_end(); } #else } #endif x = 3; w = 0; }
thr1(){ glb_init(inode == busy); acquire(m_inode); if(inode == 0){ acquire(m_busy); busy = 1; release(m_busy); inode = 1; } block = 1; assert(block == 1); release(m_inode); }
void* qrcu_updater() { int i; int readerstart1; int readerstart2; int readerstart3; int sum; glb_init(idx==0); glb_init(ctr1==1); glb_init(ctr2==0); glb_init(readerprogress1==0); glb_init(readerprogress2==0); glb_init(readerprogress3==0); glb_init(mutex==0); /* Snapshot reader state. */ { __blockattribute__((atomic)) readerstart1 = readerprogress1; readerstart2 = readerprogress2; readerstart3 = readerprogress3; } sum_unordered; if (sum <= 1) { sum_unordered; } if (sum > 1) { acquire(mutex); if (idx <= 0) { ctr2++; idx = 1; ctr1--; } else { ctr1++; idx = 0; ctr2--; } if (idx <= 0) { while (ctr2 > 0); } else { while (ctr1 > 0); } release(mutex); } /* Verify reader progress. */ { __blockattribute__((atomic)) if (NONDET) { assume(readerstart1 == 1); assume(readerprogress1 == 1); assert(0); } else { if (NONDET) { assume(readerstart2 == 1); assume(readerprogress2 == 1); assert(0); } else { if (NONDET) { assume(readerstart2 == 1); assume(readerprogress2 == 1); assert(0); } else { } } } } }
void thr1() { int l1; int junk = 0; glb_init(l1==0); junk++; junk++; junk++; junk++; junk++; while (l1 < g) { l1 = l1 + 1; } junk++; junk++; junk++; junk++; junk++; g1 = l1; }
void thr2() { int l2; int junk = 0; glb_init(l2==0); junk++; junk++; junk++; junk++; junk++; while (l2 < g) { l2 = l2 + 1; } junk++; junk++; junk++; junk++; junk++; g2 = l2; }
void* qrcu_updater() { int i; int readerstart1; int readerstart2; int readerstart3; int sum; #ifndef SATABS glb_init(idx==0); glb_init(ctr1==1); glb_init(ctr2==0); glb_init(readerprogress1==0); glb_init(readerprogress2==0); glb_init(readerprogress3==0); glb_init(mutex==0); #endif /* Snapshot reader state. */ #ifdef SATABS { __CPROVER_atomic_begin(); #else { __blockattribute__((atomic)) #endif readerstart1 = readerprogress1; readerstart2 = readerprogress2; readerstart3 = readerprogress3; #ifdef SATABS __CPROVER_atomic_end(); } #else } #endif sum_unordered; if (sum <= 1) { sum_unordered; } if (sum > 1) { acquire(mutex); if (idx <= 0) { ctr2++; idx = 1; ctr1--; } else { ctr1++; idx = 0; ctr2--; } if (idx <= 0) { while (ctr2 > 0); } else { while (ctr1 > 0); } release(mutex); } /* Verify reader progress. */ #ifdef SATABS { __CPROVER_atomic_begin(); #else { __blockattribute__((atomic)) #endif if (NONDET) { assume(readerstart1 == 1); assume(readerprogress1 == 1); assert(0); } else { if (NONDET) { assume(readerstart2 == 1); assume(readerprogress2 == 1); assert(0); } else { if (NONDET) { assume(readerstart2 == 1); assume(readerprogress2 == 1); assert(0); } else { } } } #ifdef SATABS __CPROVER_atomic_end(); } #else } #endif /* Frontend generates too many transitions: { __blockattribute__((atomic)) sum = 0; if (readerstart1 == 1 && readerprogress1 == 1) sum++; if (readerstart2 == 1 && readerprogress2 == 1) sum++; assert(sum == 0); } */ }
int main() { glb_init(g>0); assert(g1 <= g); assert(g2 <= g); assert(g1+g2 <= 2*g); }