{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,8,24]],"date-time":"2026-08-24T08:43:17Z","timestamp":1787560997218,"version":"build-2736575974"},"reference-count":26,"publisher":"Association for Computing Machinery (ACM)","issue":"PLDI","content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,6,10]]},"abstract":"<jats:p>\n                    Optimizing compilers, such as LLVM, generate\n                    <jats:italic toggle=\"yes\">debug information<\/jats:italic>\n                    in machine code to aid debugging. This information is particularly important when debugging optimized code, as modern software is often compiled with optimization enabled. However, properly updating debug information to reflect code transformations during optimization is a complex task that often relies on manual effort. This complexity makes the process prone to errors, which can lead to incorrect or lost debug information. Finding and fixing potential debug information update errors is vital to maintaining the accuracy and reliability of the overall debugging process. To our knowledge, no existing techniques can rectify debug information update errors in LLVM. While black-box testing approaches can find such bugs, they can neither pinpoint the root causes nor suggest fixes.\n                  <\/jats:p>\n                  <jats:p>\n                    To fill the gap, we propose the\n                    <jats:italic toggle=\"yes\">first<\/jats:italic>\n                    technique to\n                    <jats:italic toggle=\"yes\">robustify<\/jats:italic>\n                    debug information updates in LLVM. In particular, our robustification approach can find and fix incorrect debug location updates. Central to our approach is the observation that the debug locations in the original and optimized programs must satisfy a\n                    <jats:italic toggle=\"yes\">conformance relation.<\/jats:italic>\n                    The relation ensures that LLVM optimizations do not introduce extraneous debug location information on the control-flow paths of the optimized programs. We introduce\n                    <jats:italic toggle=\"yes\">control-flow conformance analysis,<\/jats:italic>\n                    a novel approach that determines the reference updates ensuring the conformance relation by observing the execution of LLVM optimization passes and analyzing the debug locations in the control-flow graphs of programs under optimization. The determined reference updates are then used to check developer-written updates in LLVM. When discrepancies arise, the reference updates serve as the update skeletons to guide the fixing.\n                  <\/jats:p>\n                  <jats:p>\n                    We realized our approach as a tool named M\n                    <jats:sc>eta<\/jats:sc>\n                    L\n                    <jats:sc>oc<\/jats:sc>\n                    which determines proper debug location updates for LLVM optimizations. More importantly, with M\n                    <jats:sc>eta<\/jats:sc>\n                    L\n                    <jats:sc>oc<\/jats:sc>\n                    , we have reported and patched 46 previously unknown update errors in LLVM. All the patches, along with 22 new regression tests, have been merged into the LLVM codebase, effectively improving the accuracy and reliability of debug information in all programs optimized by LLVM. Furthermore, our approach uncovered and led to corrections in two issues within LLVM\u2019s official documentation on debug information updates.\n                  <\/jats:p>","DOI":"10.1145\/3729267","type":"journal-article","created":{"date-parts":[[2025,6,13]],"date-time":"2025-06-13T16:02:27Z","timestamp":1749830547000},"page":"527-549","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":0,"title":["Robustifying Debug Information Updates in LLVM via Control-Flow Conformance Analysis"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0009-0008-2856-5851","authenticated-orcid":false,"given":"Shan","family":"Huang","sequence":"first","affiliation":[{"name":"East China Normal University, Shanghai, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0009-0001-7905-5690","authenticated-orcid":false,"given":"Jingjing","family":"Liang","sequence":"additional","affiliation":[{"name":"East China Normal University, Shanghai, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-1628-9796","authenticated-orcid":false,"given":"Ting","family":"Su","sequence":"additional","affiliation":[{"name":"East China Normal University, Shanghai, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-5367-9377","authenticated-orcid":false,"given":"Qirun","family":"Zhang","sequence":"additional","affiliation":[{"name":"Georgia Institute of Technology, Atlanta, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,6,13]]},"reference":[{"key":"e_1_3_2_2_2","doi-asserted-by":"publisher","unstructured":"Ali-Reza Adl-Tabatabai and Thomas Gross. 1996. Source-level debugging of scalar optimized code. In Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation (Philadelphia Pennsylvania USA) (PLDI \u201996). Association for Computing Machinery New York NY USA 33-43. doi:10.1145\/231379.231388","DOI":"10.1145\/231379.231388"},{"key":"e_1_3_2_3_2","doi-asserted-by":"crossref","unstructured":"Sanjeev Kumar Aggarwal and M. Sarath Kumar. 2002. Debuggers for Programming Languages. In The Compiler Design Handbook 295-382.","DOI":"10.1201\/9781420040579.ch9"},{"key":"e_1_3_2_4_2","doi-asserted-by":"publisher","unstructured":"Cristian Assaiante Daniele Cono D\u2019Elia Giuseppe Antonio Di Luna and Leonardo Querzoni. 2023. Where Did My Variable Go? Poking Holes in Incomplete Debug Information. In Proceedings of the 28th ACM International Conference on Architectural Support for Programming Languages and Operating Systems Volume 2 (ASPLOS 2023) (Vancouver BC Canada). Association for Computing Machinery New York NY USA 935-947. doi:10.1145\/3575693.3575720","DOI":"10.1145\/3575693.3575720"},{"key":"e_1_3_2_5_2","unstructured":"John Calcote. 2010. Autotools: A Practioner\u2019s Guide to GNU Autoconf Automake and Libtool (1st ed.). No Starch Press USA."},{"key":"e_1_3_2_6_2","doi-asserted-by":"publisher","DOI":"10.1145\/177492.177517"},{"key":"e_1_3_2_7_2","doi-asserted-by":"publisher","unstructured":"Giuseppe Antonio Di Luna Davide Italiano Luca Massarelli Sebastian \u00f6sterlund Cristiano Giuffrida and Leonardo Querzoni. 2021. Who\u2019s debugging the debuggers? exposing debug information bugs in optimized binaries. In Proceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS \u201921). Association for Computing Machinery New York NY USA 1034-1045. doi:10.1145\/3445814.3446695","DOI":"10.1145\/3445814.3446695"},{"key":"e_1_3_2_8_2","unstructured":"GDB Developers. 2024. GDB: The GNU Project Debugger. Retrieved 2024-7 from https:\/\/sourceware.org\/gdb\/"},{"key":"e_1_3_2_9_2","unstructured":"Gentoo Authors. 2024. Project:Quality Assurance\/Backtraces. Retrieved 2024-8 from https:\/\/wiki.gentoo.org\/wiki\/Project:Quality_Assurance\/Backtraces"},{"key":"e_1_3_2_10_2","doi-asserted-by":"publisher","DOI":"10.1145\/357172.357173"},{"key":"e_1_3_2_11_2","unstructured":"Vedant Kumar. 2020. How to Update Debug Info: A Guide for LLVM Pass Authors. Retrieved 2024-2 from https:\/\/llvm.org\/docs\/HowToUpdateDebugInfo.html"},{"issue":"1","key":"e_1_3_2_12_2","first-page":"54","article-title":"Genprog: A generic method for automatic software repair","volume":"38","year":"2011","unstructured":"Claire Le Goues, ThanhVu Nguyen, Stephanie Forrest, and Westley Weimer. 2011. Genprog: A generic method for automatic software repair. IEEE transactions on software engineering 38, 1 (2011), 54-72.","journal-title":"IEEE transactions on software engineering"},{"key":"e_1_3_2_13_2","doi-asserted-by":"publisher","unstructured":"Yuanbo Li Shuo Ding Qirun Zhang and Davide Italiano. 2020. Debug information validation for optimized code. In Proceedings of the 41st ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2020). Association for Computing Machinery New York NY USA 1052-1065. doi:10.1145\/3385412.3386020","DOI":"10.1145\/3385412.3386020"},{"key":"e_1_3_2_14_2","doi-asserted-by":"crossref","unstructured":"Kui Liu Anil Koyuncu Dongsun Kim and Tegawend\u00e9 F Bissyand\u00e9. 2019. TBar: Revisiting template-based automated program repair. In Proceedings of the 28th ACM SIGSOFT international symposium on software testing and analysis 31-42.","DOI":"10.1145\/3293882.3330577"},{"key":"e_1_3_2_15_2","unstructured":"LLVM Developers. 2023. Incorrect debug info generated at -O3. Retrieved 2024-8 from https:\/\/github.com\/llvm\/llvm-project\/issues\/68898#issuecomment-1760446717"},{"key":"e_1_3_2_16_2","unstructured":"LLVM Project. 2024a. DILocation - LLVM Language Reference. Retrieved 2024-7 from https:\/\/llvm.org\/docs\/LangRef.html#dilocation"},{"key":"e_1_3_2_17_2","unstructured":"LLVM Project. 2024b. LLVM\u2019s Analysis and Transform Passes. Retrieved 2024-10 from https:\/\/llvm.org\/docs\/Passes.html"},{"key":"e_1_3_2_18_2","doi-asserted-by":"crossref","unstructured":"Hoang Duong Thien Nguyen Dawei Qi Abhik Roychoudhury and Satish Chandra. 2013. Semfix: Program repair via semantic analysis. In 2013 35th International Conference on Software Engineering (ICSE). IEEE 772-781.","DOI":"10.1109\/ICSE.2013.6606623"},{"key":"e_1_3_2_19_2","doi-asserted-by":"publisher","unstructured":"Diego Novillo. 2014. SamplePGO - The Power of Profile Guided Optimizations without the Usability Burden. In 2014 LLVM Compiler Infrastructure in HPC 22-28. doi:10.1109\/LLVM-HPC.2014.8","DOI":"10.1109\/LLVM-HPC.2014.8"},{"key":"e_1_3_2_20_2","unstructured":"Konstantin Serebryany Derek Bruening Alexander Potapenko and Dmitriy Vyukov. 2012. AddressSanitizer: A Fast Address Sanity Checker. In 2012 USENIX Annual Technical Conference (USENIX ATC 12). USENIX Association Boston MA 309-318. https:\/\/www.usenix.org\/conference\/atc12\/technical-sessions\/presentation\/serebryany"},{"key":"e_1_3_2_21_2","doi-asserted-by":"publisher","unstructured":"Huang Shan Liang Jingjing Su Ting and Zhang Qirun. 2025. Artifact for MetaLoc - Robustifying Debug Location Updates in LLVM via Control-Flow Conformance Analysis. doi:10.5281\/zenodo.15023927","DOI":"10.5281\/zenodo.15023927"},{"key":"e_1_3_2_22_2","doi-asserted-by":"publisher","DOI":"10.1145\/3643737"},{"key":"e_1_3_2_23_2","doi-asserted-by":"publisher","unstructured":"J. Ryan Stinnett and Stephen Kell. 2024. Accurate Coverage Metrics for Compiler-Generated Debugging Information. In Proceedings of the 33rd ACM SIGPLAN International Conference on Compiler Construction (CC 2024) (Edinburgh United Kingdom). Association for Computing Machinery New York NY USA 126-136. doi:10.1145\/3640537.3641578","DOI":"10.1145\/3640537.3641578"},{"key":"e_1_3_2_24_2","unstructured":"The LLDB Team. 2024. The LLDB Debugger. Retrieved 2024-2 from https:\/\/lldb.llvm.org"},{"key":"e_1_3_2_25_2","doi-asserted-by":"crossref","unstructured":"Rijnard van Tonder and Claire Le Goues. 2018. Static automated program repair for heap properties. In Proceedings of the 40th International Conference on Software Engineering 151-162.","DOI":"10.1145\/3180155.3180250"},{"key":"e_1_3_2_26_2","unstructured":"Vedant Kumar. 2017. The debugify utility pass. Retrieved 2024-9 from https:\/\/llvm.org\/docs\/HowToUpdateDebugInfo.html#the-debugify-utility-pass"},{"issue":"2","key":"e_1_3_2_27_2","doi-asserted-by":"crossref","first-page":"1","DOI":"10.1145\/3631974","article-title":"A survey of learning-based automated program repair","volume":"33","author":"Zhang Quanjun","year":"2023","unstructured":"Quanjun Zhang, Chunrong Fang, Yuxiang Ma, Weisong Sun, and Zhenyu Chen. 2023. A survey of learning-based automated program repair. ACM Transactions on Software Engineering and Methodology 33, 2 (2023), 1-69.","journal-title":"ACM Transactions on Software Engineering and Methodology"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3729267","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:02:43Z","timestamp":1784196163000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3729267"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,6,10]]},"references-count":26,"journal-issue":{"issue":"PLDI","published-print":{"date-parts":[[2025,6,10]]}},"alternative-id":["10.1145\/3729267"],"URL":"https:\/\/doi.org\/10.1145\/3729267","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,6,10]]},"assertion":[{"value":"2024-11-15","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-03-06","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-06-13","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}