Mix Testing: Specifying and Testing ABI Compatibility of C/C++ Atomics Implementations
Luke Geeson, James Brotherston, Wilco Dijkstra, Alastair F., Donaldson, Lee Smith, Tyler Sorensen, John Wickerson

TL;DR
This paper introduces mix testing, a technique for detecting compiler bugs related to ABI compatibility of C/C++ atomics when code compiled separately is combined, revealing new bugs and proposing an atomic ABI for Armv8.
Contribution
The paper presents mix testing and the atomic-mixer tool, which identify mixing bugs in compilers and validate an atomic ABI for Armv8, advancing compiler correctness and interoperability.
Findings
Reproduced a known non-mixing bug with atomic-mixer.
Discovered four new mixing bugs in LLVM and GCC.
Validated the Armv8 atomic ABI using atomic-mixer.
Abstract
The correctness of complex software depends on the correctness of both the source code and the compilers that generate corresponding binary code. Compilers must do more than preserve the semantics of a single source file: they must ensure that generated binaries can be composed with other binaries to form a final executable. The compatibility of composition is ensured using an Application Binary Interface (ABI), which specifies details of calling conventions, exception handling, and so on. Unfortunately, there are no official ABIs for concurrent programs, so different atomics mappings, although correct in isolation, may induce bugs when composed. Indeed, today, mixing binaries generated by different compilers can lead to an erroneous resulting binary. We present mix testing: a new technique designed to find compiler bugs when the instructions of a C/C++ test are separately compiled…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
