{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,8,24]],"date-time":"2026-08-24T09:17:25Z","timestamp":1787563045100,"version":"build-2736575974"},"reference-count":14,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2019,10,10]],"date-time":"2019-10-10T00:00:00Z","timestamp":1570665600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/100006785","name":"Google","doi-asserted-by":"publisher","award":["Faculty Research Award"],"award-info":[{"award-number":["Faculty Research Award"]}],"id":[{"id":"10.13039\/100006785","id-type":"DOI","asserted-by":"publisher"}]},{"DOI":"10.13039\/100007297","name":"Office of Naval Research","doi-asserted-by":"publisher","award":["503353"],"award-info":[{"award-number":["503353"]}],"id":[{"id":"10.13039\/100007297","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2019,10,10]]},"abstract":"<jats:p>Debug information, usually encoded in the DWARF format, is a hidden and obscure component of our computing infrastructure. Debug information is obviously used by debuggers, but it also plays a key role in program analysis tools, and, most surprisingly, it can be relied upon by the runtime of high-level programming languages. For instance the C++ runtime leverages DWARF stack unwind tables to implement exceptions! Alas, generating debug information adds significant burden to compiler implementations, and the debug information itself can be pervaded by subtle bugs, making the whole infrastructure unreliable. Additionally, interpreting the debug tables is a time-consuming task and, for some applications as sampling profilers, it turns out to be a performance bottleneck.<\/jats:p>\n                  <jats:p>In this paper we focus on the DWARF .eh_frame table, that enables stack unwinding in absence of frame-pointers. We will describe two techniques to perform validation and synthesis of the DWARF stack unwinding tables, and their implementation for the x86_64 architecture. The validation tool has proven effective for compiler and inline assembly testing, while the synthesis tool can generate DWARF unwind tables for arbitrary binaries lacking debug information. Additionally, we report on a technique to precompile unwind tables into native x86_64 code, which we have implemented and integrated into libunwind, resulting in 11x-25x DWARF-based unwind speedups.<\/jats:p>","DOI":"10.1145\/3360572","type":"journal-article","created":{"date-parts":[[2019,10,11]],"date-time":"2019-10-11T10:53:33Z","timestamp":1570791213000},"page":"1-24","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":9,"title":["Reliable and fast DWARF-based stack unwinding"],"prefix":"10.1145","volume":"3","author":[{"given":"Th\u00e9ophile","family":"Bastian","sequence":"first","affiliation":[{"name":"ENS, France"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Stephen","family":"Kell","sequence":"additional","affiliation":[{"name":"University of Kent, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Francesco","family":"Zappa Nardelli","sequence":"additional","affiliation":[{"name":"Inria, France"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2019,10,10]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1002\/cpe.v21:12"},{"key":"e_1_2_2_2_1","unstructured":"Eli Bendersky. 2019. pyelftools. https:\/\/github.com\/eliben\/pyelftools  Eli Bendersky. 2019. pyelftools. https:\/\/github.com\/eliben\/pyelftools"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-22110-1_37"},{"key":"e_1_2_2_5_1","volume-title":"The ORCs are coming. LWN.net","author":"Corbet Jonathan","year":"2017"},{"key":"e_1_2_2_6_1","unstructured":"DWARF. 2017. DWARF Debugging Information Format version 5. DWARF Debugging Information Format Committee. http:\/\/dwarfstd.org  DWARF. 2017. DWARF Debugging Information Format version 5. DWARF Debugging Information Format Committee. http:\/\/dwarfstd.org"},{"key":"e_1_2_2_7_1","unstructured":"Anonymous Google Engineer. 2018. Personal communication.  Anonymous Google Engineer. 2018. Personal communication."},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/3243734.3243866"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/512429.512449"},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814228.2814238"},{"key":"e_1_2_2_11_1","volume-title":"Exploiting the Hard-Working DWARF: Trojan and Exploit Techniques with No Native Executable Code. In 5th USENIX Workshop on Offensive Technologies, WOOT\u201911","author":"Oakley James","year":"2011"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/2254064.2254104"},{"key":"e_1_2_2_13_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45306-7_21"},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/1993498.1993532"},{"key":"e_1_2_2_15_1","unstructured":"Yanmin Zhang. 2008. Hackbench. https:\/\/people.redhat.com\/mingo\/cfs-scheduler\/tools\/hackbench.c  Yanmin Zhang. 2008. Hackbench. https:\/\/people.redhat.com\/mingo\/cfs-scheduler\/tools\/hackbench.c"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360572","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3360572","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3360572","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T19:22:59Z","timestamp":1750188179000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360572"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,10,10]]},"references-count":14,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2019,10,10]]}},"alternative-id":["10.1145\/3360572"],"URL":"https:\/\/doi.org\/10.1145\/3360572","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2019,10,10]]},"assertion":[{"value":"2019-10-10","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}