Alive: Finding Non-Termination in Distributed Asynchronous Programs =================================================================== Unfortunately we are currently unable to provide the source or binaries for our `Alive` code-to-code translator, nor the `Hwsw` asynchronous program analysis tool. We have included here the source code of examples used in the experiments of our submission to SAS 2012. Our examples are coded as Boogie programs. Given a source file `P.bpl`, we have included the following: * The output of our `Alive` code-to-code translation: `P.alive.bpl` * The configuration flags used in our analysis tool: `P.config` We have applied the `Alive` and `Hwsw` tools as follows. First we translate `P.bpl` into `P.alive.bpl`: Alive P.bpl [/fair] For a given program `P.bpl`, the assertion added in `P.alive.bpl` can be violated if and only if there exists a (fair, when Alive is passed the `/fair` flag) nonterminating execution in `P.bpl`. Given the translated program `P.alive.bpl`, we run our `Hwsw` asynchronous program analysis tool to detect whether the added assertion can be violated: Hwsw P.alive.bpl /flags:P.config As our analysis tool is based on bounded verification, we must specify bounds on, e.g., maximum recursion depth, and a bound on the amount of interleaving / reordering between asynchronous tasks. All of the parameters passed to `Hwsw` are listed in `P.config`. The result of `Hwsw` is either `No bugs found`, which means that we are unable to conclude whether `P.bpl` has a nonterminating execution, or `True bug`, in which case `Hwsw` outputs a trace of `P.alive.bpl` witnessing a periodic nonterminating execution of `P.bpl`. The programs used in our experiments are listed below. Example Programs ---------------- PingPong / [bpl](PingPong.bpl) / [alive](PingPong.alive.bpl) / [flags](PingPong.config) PingPong-mod2 / [bpl](PingPong-counting-mod2.bpl) / [alive](PingPong-counting-mod2.alive.bpl) / [flags](PingPong-counting-mod2.config) PingPong-mod2-1md / [bpl](PingPong-counting-mod2-needs-more-delay.bpl) / [alive](PingPong-counting-mod2-needs-more-delay.alive.bpl) / [flags](PingPong-counting-mod2-needs-more-delay.config) PingPong-mod3 / [bpl](PingPong-counting-mod3.bpl) / [alive](PingPong-counting-mod3.alive.bpl) / [flags](PingPong-counting-mod3.config) PingPong-mod3-1md / [bpl](PingPong-counting-mod3-needs-one-more-delay.bpl) / [alive](PingPong-counting-mod3-needs-one-more-delay.alive.bpl) / [flags](PingPong-counting-mod3-needs-one-more-delay.config) PingPong-mod3-2md / [bpl](PingPong-counting-mod3-needs-two-more-delay.bpl) / [alive](PingPong-counting-mod3-needs-two-more-delay.alive.bpl) / [flags](PingPong-counting-mod3-needs-two-more-delay.config) PingPongPung / [bpl](PingPongPung.bpl) / [alive](PingPongPung.alive.bpl) / [flags](PingPongPung.config) PingPongPung-1md / [bpl](PingPongPung-needs-more-delay.bpl) / [alive](PingPongPung-needs-more-delay.alive.bpl) / [flags](PingPongPung-needs-more-delay.config) SpanningTree-bug / [bpl](SpanningTree-bug.bpl) / [alive](SpanningTree-bug.alive.bpl) / [flags](SpanningTree-bug.config) SpanningTree-correct / [bpl](SpanningTree-correct.bpl) / [alive](SpanningTree-correct.alive.bpl) / [flags](SpanningTree-correct.config) Bfs-bug / [bpl](Bfs-bug.bpl) / [alive](Bfs-bug.alive.bpl) / [flags](Bfs-bug.config) Bfs-correct / [bpl](Bfs-correct.bpl) / [alive](Bfs-correct.alive.bpl) / [flags](Bfs-correct.config) BellmanFord-bug / [bpl](BellmanFord-bug.bpl) / [alive](BellmanFord-bug.alive.bpl) / [flags](BellmanFord-bug.config) BellmanFord-correct / [bpl](BellmanFord-correct.bpl) / [alive](BellmanFord-correct.alive.bpl) / [flags](BellmanFord-correct.config) Paxos-bug-individual / [bpl](Paxos-individual-loop.bpl) / [alive](Paxos-individual-loop.alive.bpl) / [manual](Paxos-individual-loop.alive.manual.bpl) / [flags](Paxos-individual-loop.config) Paxos-bug-competition / [bpl](Paxos-coordinating-loop.bpl) / [alive](Paxos-coordinating-loop.alive.bpl) / [manual](Paxos-coordinating-loop.alive.manual.bpl) / [flags](Paxos-coordinating-loop.config)