Eliminating stack overflow by abstract interpretation

John Regehr, Alastair Reid, Kirk Webb
University of Utah
[pdf] [doi]

ACM Transactions Embedded Computing Systems 4(4)
2005

Abstract

An important correctness criterion for software running on embedded microcontrollers is stack safety: a guarantee that the call stack does not overflow. Our first contribution is a method for statically guaranteeing stack safety of interrupt-driven embedded software using an approach based on context-sensitive dataflow analysis of object code. We have implemented a prototype stack analysis tool that targets software for Atmel AVR microcontrollers and tested it on embedded applications compiled from up to 30,000 lines of C. We experimentally validate the accuracy of the tool, which runs in under 10 sec on the largest programs that we tested. The second contribution of this paper is the development of two novel ways to reduce stack memory requirements of embedded software.

First page of paper

BibTeX

@article{DBLP:journals/tecs/RegehrRW05 , abstract = { An important correctness criterion for software running on embedded microcontrollers is stack safety: a guarantee that the call stack does not overflow. Our first contribution is a method for statically guaranteeing stack safety of interrupt-driven embedded software using an approach based on context-sensitive dataflow analysis of object code. We have implemented a prototype stack analysis tool that targets software for Atmel AVR microcontrollers and tested it on embedded applications compiled from up to 30,000 lines of C. We experimentally validate the accuracy of the tool, which runs in under 10 sec on the largest programs that we tested. The second contribution of this paper is the development of two novel ways to reduce stack memory requirements of embedded software. } , affiliation = {University of Utah} , ar_file = {TECS_05} , ar_shortname = {TECS 05} , author = {John Regehr and Alastair Reid and Kirk Webb} , doi = {10.1145/1113830.1113833} , file = {p751-regehr.pdf} , journal = {ACM Transactions Embedded Computing Systems} , number = {4} , pages = {751--778} , png = {p751-regehr.png} , title = {{E}liminating stack overflow by abstract interpretation} , volume = {4} , year = {2005} }