<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="orphans: 2; widows: 2;" class=""><font face="Arial" class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><span class="" style="font-size: 14px;">Hello,</span><br class=""><br class=""><font color="#000000" class=""><span class="" style="font-size: 14px;">I am a proposing a new tool, llvm-tapi-diff (<a href="https://reviews.llvm.org/D101835" class="">https://reviews.llvm.org/D101835</a>), that would compare two files and return the differences based on attributes that are specific to linking. The initial patch only supports TBD files. Text-based Dynamic Library Stubs (TBDs) are a representation of the information in dynamic libraries needed for the static linker in Apple’s SDK’s. LLVM already has support for reading and writing TBD files. Although the current patch only supports TBD files, we hope to have support for Mach-O dylib binaries in the future. This tool could also be extended to provide the same functionality for other formats. This tool emits a human readable output to easily see the differences in the two input files. </span></font><span textcolor="#ffffff" class="" style="font-size: 14px; --original-color:  #ffffff;">Since the initial support for this tool is focused on TBD files, one of its major purposes is helping in finding regressions in tools that emit tbd files like TAPI or the swift compiler. With the future expansion of file formats that this tool could support, it could serve a variety of purposes including tracking when clang emits more exported symbols between compiler versions.</span><br class=""><br class=""><span class="" style="font-size: 14px;">The introduction of an entirely new tool brings forth some questions.</span><br class=""><br class=""><span class="" style="font-size: 14px;">Why not use llvm-nm?</span><br class=""><br class=""><span class="" style="font-size: 14px;">llvm-nm lists the contents of symbol tables from the files but it does not list all of the additional attributes necessary for linking in TBD files. Adding this amount of functionality and restructuring didn’t seem as good of an option over creating a new tool for this functionality. </span><br class=""><br class=""><span class="" style="font-size: 14px;">Why not use llvm-diff?</span><br class=""><br class=""><span class="" style="font-size: 14px;">llvm-diff has a very different objective in comparison to llvm-tapi-diff as llvm-diff checks the structural differences between llvm modules focusing on function definitions and control flow. llvm-tapi-diff checks for differences that can be captured using other binary inspection tools like nm and otool. </span><br class=""><br class=""><br class=""><span textcolor="#ffffff" class="" style="font-size: 14px; --original-color:  #ffffff;">For more resources on TAPI and TBD files, please refer to the RFC for the introduction of TAPI in LLVM by Jürgen Ributzka (</span><a href="https://lists.llvm.org/pipermail/llvm-dev/2017-September/117264.html" class="" style="font-size: 14px;">https://lists.llvm.org/pipermail/llvm-dev/2017-September/117264.html</a><span textcolor="#ffffff" class="" style="font-size: 14px; --original-color:  #ffffff;">) and this presentation from the 2018 LLVM Developers’ Meeting by Steven Wu (</span><a href="https://www.youtube.com/watch?v=B9li6EkD5zA" class="" style="font-size: 14px;">https://www.youtube.com/watch?v=B9li6EkD5zA</a><span textcolor="#ffffff" class="" style="font-size: 14px; --original-color:  #ffffff;">).</span></font><div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);"><div class=""><font face="Arial" class="" style="font-size: 14px;"><br class=""></font></div><div class=""><font face="Arial" class="" style="font-size: 14px;">Thank you,</font></div><div class=""><font face="Arial" class="" style="font-size: 14px;"><br class=""></font></div><div class=""><font face="Arial" class="" style="font-size: 14px;">Sam Powell</font></div></div></div></body></html>