@inproceedings {204, title = {em-SPADE: A Compiler Extension for Checking Rules Extracted from Processor Specifications}, booktitle = {SIGPLAN/SIGBED Conference on Languages, Compilers and Tools for Embedded Systems (LCTES)}, year = {2014}, pages = {105--114}, publisher = {ACM}, organization = {ACM}, address = {New York, NY, USA}, abstract = {

Traditional compilers ignore processor specifications, thousands of pages of which are available for modern processors. To bridge this gap, em-SPADE analyzes processor specifications and creates processor-specific rules to reduce low-level programming er- rors. This work shows the potential of automatically analyzing processor- and other hardware specifications to detect low-level programming errors at compile time.

em-SPADE is a compiler extension to automatically detect software bugs in low-level programs. From processor specifications, a preprocessor extracts target-specific rules such as register use and read-only or reserved registers. A special LLVM pass then uses these rules to detect incorrect register assignments. Our experiments with em-SPADE have correctly extracted 652 rules from 15 specifications and consequently found 20 bugs in ten software projects. The work is generalizable to other types of specifications and shows the clear prospects of using hardware specifications to enhance compilers.

}, keywords = {compiler, embedded systems, llvm, static analysis}, isbn = {978-1-4503-2877-7}, doi = {10.1145/2597809.2597823}, url = {http://doi.acm.org/10.1145/2597809.2597823}, author = {Chaudhary, Sandeep and Fischmeister, Sebastian and Tan, Lin} } @inproceedings {173, title = {Non-intrusive Program Tracing and Debugging of Deployed Embedded Systems Through Side-channel Analysis}, booktitle = {Proc. of the 14th ACM SIGPLAN/SIGBED Conference on Languages, Compilers and Tools for Embedded Systems (LCTES)}, year = {2013}, note = {

(best paper award)

}, pages = {77-88}, publisher = {ACM}, organization = {ACM}, address = {Washington, USA}, abstract = {

One of the hardest aspects of embedded software development is that of debugging, especially when faulty behavior is observed at the production or deployment stage. Non-intrusive observation of the system\&$\#$39;s behavior is often insufficient to infer the cause of the problem and identify and fix the bug. In this work, we present a novel approach for non-intrusive program tracing aimed at assisting developers in the task of debugging embedded systems at deployment or production stage, where standard debugging tools are usually no longer available. The technique is rooted in cryptography, in particular the area of side-channel attacks. Our proposed technique expands the scope of these cryptographic techniques so that we recover the sequence of operations from power consumption observations (power traces). To this end, we use digital signal processing techniques (in particular, spectral analysis) combined with pattern recognition techniques to determine blocks of source code being executed given the observed power trace. One of the important highlights of our contribution is the fact that the system works on a standard PC, capturing the power traces through the recording input of the sound card. Experimental results are presented and confirm that the approach is viable.

}, keywords = {debugging, embedded systems, side-channel analysis, simple power analysis, tracing}, isbn = {978-1-4503-2085-6}, doi = {10.1145/2465554.2465570}, url = {http://doi.acm.org/10.1145/2465554.2465570}, author = {Moreno, Carlos and Fischmeister, Sebastian and Hasan, M. Anwar} } @article {69, title = {Tracing and Recording Interrupts in Embedded Software}, journal = {Journal of Systems Architecture}, volume = {58}, year = {2012}, month = {Oct}, pages = {372-385}, abstract = {

During the system development, developers often must correct wrong behavior in the software\–-an activity colloquially called program debugging. Debugging is a complex activity, especially in real-time embedded systems because such systems interact with the physical world and make heavy use of interrupts for timing and driving I/O devices. Debugging interrupts is difficult, because they cause non-linear control flow in programs which is hard to reproduce in software. Record/replay mechanisms have proven their use to debugging embedded systems, because they provide means to recreate control flows offline where they can be debugged. In this work, we present the data tracing part of the record/replay mechanism that is specifically targeted to record interrupt behavior. To tune our tracing mechanism, we use the observed principle of return address clustering and a formal model for quantitative reasoning about the tracing mechanism. The presented heuristic and mechanisms show surprisingly good results\–-with higher fingerprint widths an 800 percent speedup on the selector function and a 300 percent reduction on duplicates for non-optimal selector functions\–-considering the leanness of the approach. Using an equal portion for the fingerprint and for the return address lead to the best results in our experiments.

}, keywords = {debugging, embedded systems, record and replay, tracing}, issn = {1383-7621}, doi = {10.1016/j.sysarc.2012.06.003}, url = {http://www.sciencedirect.com/science/article/pii/S1383762112000574}, author = {Giovani Gracioli and Sebastian Fischmeister} }