Debug information is a hidden and obscure component of our computing infrastructure obviously used by debuggers, but also playing a key role in program analysis tools, and, most surprisingly, in the runtime of programming languages. For instance C++ leverages DWARF stack unwind tables to implement exceptions! Alas, generating debug information adds significant burden to compilers, and the debug info itself can be pervaded by subtle bugs, making the whole infrastructure unreliable. Additionally, interpreting the debug tables is a bottleneck. My talk focuses on the DWARF unwind table, that enables stack unwinding in absence of frame-pointer information. I show two techniques to perform validation and synthesis of unwinding tables, and their implementation for x86_64. Our validator has proven effective for compiler and inline assembly testing, while the synthesis tool can generate unwind tables for arbitrary binaries lacking debug information. Additionally, I will report on a technique to precompile unwind tables into native x86_64 code, which we have implemented and integrated into libunwind, resulting in a 25x DWARF-based unwind speedup.
My work is at boundaries between programming languages, system programming, and computer architectures, with the overall goal of producing systems which are better-understood, more robust, and more secure.
Mon 16 Nov Times are displayed in time zone: Central Time (US & Canada) change
|07:00 - 07:40|
Francesco Zappa NardelliFacebook