CIL: Intermediate Language and Tools for Analysis and Transformation of C Programs
CC '02 Proceedings of the 11th International Conference on Compiler Construction
An integrated experimental environment for distributed systems and networks
OSDI '02 Proceedings of the 5th symposium on Operating systems design and implementationCopyright restrictions prevent ACM from being able to make the PDFs for this conference available for downloading
Nonintrusive precision instrumentation of microcontroller software
LCTES '05 Proceedings of the 2005 ACM SIGPLAN/SIGBED conference on Languages, compilers, and tools for embedded systems
Random testing of C calling conventions
Proceedings of the sixth international symposium on Automated analysis-driven debugging
Valgrind: a framework for heavyweight dynamic binary instrumentation
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Practical testing of a C99 compiler using output comparison
Software—Practice & Experience
A Formally Verified Compiler Back-end
Journal of Automated Reasoning
A new verification method for embedded systems
ICCD'09 Proceedings of the 2009 IEEE international conference on Computer design
ABI compatibility through a customizable language
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
Range analysis of microcontroller code using bit-level congruences
FMICS'10 Proceedings of the 15th international conference on Formal methods for industrial critical systems
Finding and understanding bugs in C compilers
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Past time LTL runtime verification for microcontroller binary code
FMICS'11 Proceedings of the 16th international conference on Formal methods for industrial critical systems
Verifying fence elimination optimisations
SAS'11 Proceedings of the 18th international conference on Static analysis
Abstract interpretation of microcontroller code: Intervals meet congruences
Science of Computer Programming
Compiler testing via a theory of sound optimisations in the C11/C++11 memory model
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Runtime verification of microcontroller binary code
Science of Computer Programming
Hi-index | 0.00 |
C's volatile qualifier is intended to provide a reliable link between operations at the source-code level and operations at the memory-system level. We tested thirteen production-quality C compilers and, for each, found situations in which the compiler generated incorrect code for accessing volatile variables. This result is disturbing because it implies that embedded software and operating systems---both typically coded in C, both being bases for many mission-critical and safety-critical applications, and both relying on the correct translation of volatiles---may be being miscompiled. Our contribution is centered on a novel technique for finding volatile bugs and a novel technique for working around them. First, we present access summary testing: an efficient, practical, and automatic way to detect code-generation errors related to the volatile qualifier. We have found a number of compiler bugs by performing access summary testing on randomly generated C programs. Some of these bugs have been confirmed and fixed by compiler developers. Second, we present and evaluate a workaround for the compiler defects we discovered. In 96% of the cases in which one of our randomly generated programs is miscompiled, we can cause the faulty C compiler to produce correctly behaving code by applying a straightforward source-level transformation to the test program.