WeaveCC: Symbolically-Guided Joint Exploration of Inputs and Schedules for Concurrency Bug Detection
Author ORCID Identifier
https://orcid.org/0009-0007-0633-422X
Date of Award
Spring 5-2026
Document Type
Thesis (Master's)
Department or Program
Computer Science
First Advisor
Christophe Hauser
Second Advisor
Sergey Bratus
Third Advisor
Siddhartha Jayanti
Abstract
Concurrent programs introduce a class of bugs that depend jointly on both program inputs and thread schedules. Exposing these bugs requires simultaneously reasoning about which code paths are reachable and which thread interleavings are possible. At the same time, many existing tools handle the problem insufficiently. Race detectors observe only the interleavings that the OS happens to produce. Fuzzers explore inputs without controlling schedules. Tools that address both dimensions together exist, but are built on interpretation-based symbolic executors that incur considerable overhead.
We present WeaveCC, a practical concurrency testing tool for C/C++ programs that jointly explores inputs and thread schedules. We implement WeaveCC on top of SymCC, a compiler-based concolic execution engine that instruments programs at the LLVM IR level and executes them at near-native speed. In particular, WeaveCC combines SymCC’s input exploration with a deterministic preemption-bounded scheduler, a happens-before race detector, and a record-and-replay mechanism that enables deterministic bug reproduction. We further introduce a symbolic-aware scheduling heuristic that prioritizes thread interleavings involving accesses to symbolically tracked shared memory.
To evaluate WeaveCC, we introduce WeaveBench, a benchmark suite of 12 C programs (8 buggy, 4 safe) in which each buggy program is designed to require joint reasoning over both inputs and schedules. Experiments show that neither input-only nor schedule-only exploration is sufficient to expose the target bugs, whereas WeaveCC's joint exploration finds all eight, most within seconds. Against AFL++ with ThreadSanitizer, WeaveCC finds the bug in all eight vulnerable programs, while AFL++ misses it in seven of eight and detects the remaining bug unreliably. All bug-triggering executions are deterministically reproducible via WeaveCC's record-and-replay system.
Recommended Citation
Dinauer, William Philip, "WeaveCC: Symbolically-Guided Joint Exploration of Inputs and Schedules for Concurrency Bug Detection" (2026). Dartmouth College Master’s Theses. 300.
https://digitalcommons.dartmouth.edu/masters_theses/300
Included in
Cybersecurity Commons, OS and Networks Commons, Programming Languages and Compilers Commons, Software Engineering Commons
