Abstract

The paper describes an extension to summary based static program analysis to find deadlock errors. Summary based analysis is a popular approach aimed at the detection of bugs in programs due to its high performance and scalability. At the same time, the implementation of deadlock detectors in such an analysis is nontrivial, because there is no information about the locks held higher in the call stack during the process of function intraprocedural analysis. A lock graph, which is built during the main analysis, is used to model the semantics of multithreaded programs. Lock graph is a modification of call graph which contains additional information about held locks. After the lock graph is built, the deadlock detector is launched. Both the construction of the lock graph and the deadlock detection algorithm do not require significant processor time. On the performed measurements, the total analysis time increased by 4%. Based on the results of the analysis of 8 open source projects in C/C++/Java with a total size of more than 14 million lines of code, the proposed algorithm showed a high level of true positives. The described algorithms were implemented in the Svace tool.

Highlights

  • Современные вычислительные устройства в основном являются многоядерными и многопроцессорными

  • В описываемом подходе во время фазы обхода графа вызовов собирается необходимая информация, которая будет использована после обхода всех функций

  • Скорость анализа достигается за счёт того, что каждая функция анализируется только один раз

Read more

Summary

Introduction

Современные вычислительные устройства в основном являются многоядерными и многопроцессорными. В отличие от однопоточных, могут быть допущены специфические ошибки проектирования (дефекты): состояния гонки и взаимные блокировки. В статье описывается подход для обнаружения взаимных блокировок в многопоточных программах с помощью статического анализа. На используемые алгоритмы накладываются несколько ограничений: найти как можно больше ошибок за ограниченное время при приемлемом уровне ложных срабатываний. В данной статье описывается подход для обнаружения взаимных блокировок двух потоков. В качестве анализируемого языка будем использовать императивный язык, содержащий вызовы функций, в том числе по указателю, и операции ветвления. Упоминание и краткое описание графа блокировок приведено в статье [1], описывающей особенности анализа Java программ. Данная статья содержит описание модифицированного алгоритма для анализа программ на языках C, C++ и Java, в том числе для «несбалансированных» вызовов блокировки и разблокировки мьютексов

Базовый анализ
Расширение анализа на основе резюме
Определение графа блокировок
Вспомогательные анализы
Построение графа блокировок
Анализ графа блокировок
Результаты
Похожие работы
Findings
Заключение
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call