<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Would it be possible to cherry-pick this to 6.0? The corresponding COFF side change (r321498) made it in before the branch cut, and it would be really nice if the 6.0 release was able to handle -needed-libs for all three object file formats.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">llvm-commits <llvm-commits-bounces@lists.llvm.org> on behalf of Petr Hosek via llvm-commits <llvm-commits@lists.llvm.org><br>
<b>Reply-To: </b>Petr Hosek <phosek@chromium.org><br>
<b>Date: </b>Sunday, January 7, 2018 at 6:24 PM<br>
<b>To: </b>"llvm-commits@lists.llvm.org" <llvm-commits@lists.llvm.org><br>
<b>Subject: </b>[llvm] r321980 - [llvm-readobj] Support -needed-libs option for Mach-O files<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Author: phosek<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Date: Sun Jan  7 18:23:10 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">New Revision: 321980<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D321980-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=LQELnKiBH9s1JnAmAAvCU5GfmaHIlafImC2dApuVIE0&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D321980-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=LQELnKiBH9s1JnAmAAvCU5GfmaHIlafImC2dApuVIE0&e=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Log:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">[llvm-readobj] Support -needed-libs option for Mach-O files<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This implements the -needed-libs option in Mach-O dumper.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Differential Revision: <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D41527&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=oKPFZol1WEcNdf6Bm42mErZkMHAwUhJ0sDfG5RIuXNw&e=">
https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D41527&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=oKPFZol1WEcNdf6Bm42mErZkMHAwUhJ0sDfG5RIuXNw&e=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Added:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    llvm/trunk/test/tools/llvm-readobj/macho-needed-libs.test<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Modified:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    llvm/trunk/tools/llvm-readobj/MachODumper.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Added: llvm/trunk/test/tools/llvm-readobj/macho-needed-libs.test<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_tools_llvm-2Dreadobj_macho-2Dneeded-2Dlibs.test-3Frev-3D321980-26view-3Dauto&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=7tYe3o9epnd9-QpdboQ82TWJNLZADNwK01t60ZP2-RQ&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_tools_llvm-2Dreadobj_macho-2Dneeded-2Dlibs.test-3Frev-3D321980-26view-3Dauto&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=7tYe3o9epnd9-QpdboQ82TWJNLZADNwK01t60ZP2-RQ&e=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">==============================================================================<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">--- llvm/trunk/test/tools/llvm-readobj/macho-needed-libs.test (added)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+++ llvm/trunk/test/tools/llvm-readobj/macho-needed-libs.test Sun Jan  7 18:23:10 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">@@ -0,0 +1,26 @@<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+# RUN: yaml2obj %s -o %t.o<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+# RUN: llvm-readobj -needed-libs %t.o | FileCheck %s<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+# CHECK:      NeededLibraries [<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+# CHECK-NEXT:   /usr/lib/libSystem.B.dylib<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+# CHECK-NEXT: ]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+!mach-o<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+FileHeader:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  magic:           0xFEEDFACF<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  cputype:         0x01000007<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  cpusubtype:      0x00000003<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  filetype:        0x00000001<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  ncmds:           1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  sizeofcmds:      56<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  flags:           0x00002000<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  reserved:        0x00000000<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+LoadCommands:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  - cmd:             LC_LOAD_DYLIB<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+    cmdsize:         56<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+    dylib:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+      name:            24<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+      timestamp:       2<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+      current_version: 81985536<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+      compatibility_version: 65536<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+    PayloadString:   /usr/lib/libSystem.B.dylib<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Modified: llvm/trunk/tools/llvm-readobj/MachODumper.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_tools_llvm-2Dreadobj_MachODumper.cpp-3Frev-3D321980-26r1-3D321979-26r2-3D321980-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=bsrDlom1RmbOzZR9NRB6uDwxoguVOhlUZ1vRtkeyViU&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_tools_llvm-2Dreadobj_MachODumper.cpp-3Frev-3D321980-26r1-3D321979-26r2-3D321980-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=bsrDlom1RmbOzZR9NRB6uDwxoguVOhlUZ1vRtkeyViU&e=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">==============================================================================<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">--- llvm/trunk/tools/llvm-readobj/MachODumper.cpp (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+++ llvm/trunk/tools/llvm-readobj/MachODumper.cpp Sun Jan  7 18:23:10 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">@@ -39,6 +39,8 @@ public:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">   void printUnwindInfo() override;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">   void printStackMap() const override;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  void printNeededLibraries() override;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">   // MachO-specific.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">   void printMachODataInCode() override;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">   void printMachOVersionMin() override;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">@@ -675,6 +677,34 @@ void MachODumper::printStackMap() const<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                          StackMapV2Parser<support::big>(StackMapContentsArray));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+void MachODumper::printNeededLibraries() {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  ListScope D(W, "NeededLibraries");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  using LibsTy = std::vector<StringRef>;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  LibsTy Libs;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  for (const auto &Command : Obj->load_commands()) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+    if (Command.C.cmd == MachO::LC_LOAD_DYLIB ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+        Command.C.cmd == MachO::LC_ID_DYLIB ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+        Command.C.cmd == MachO::LC_LOAD_WEAK_DYLIB ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+        Command.C.cmd == MachO::LC_REEXPORT_DYLIB ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+        Command.C.cmd == MachO::LC_LAZY_LOAD_DYLIB ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+        Command.C.cmd == MachO::LC_LOAD_UPWARD_DYLIB) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+      MachO::dylib_command Dl = Obj->getDylibIDLoadCommand(Command);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+      if (Dl.dylib.name < Dl.cmdsize) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+        auto *P = static_cast<const char*>(Command.Ptr) + Dl.dylib.name;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+        Libs.push_back(P);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+      }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+    }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  std::stable_sort(Libs.begin(), Libs.end());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  for (const auto &L : Libs) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+    outs() << "  " << L << "\n";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+  }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">void MachODumper::printMachODataInCode() {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">   for (const auto &Load : Obj->load_commands()) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">     if (Load.C.cmd  == MachO::LC_DATA_IN_CODE) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">_______________________________________________<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">llvm-commits mailing list<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=TdyNyGmOlGChU1wvZhGFsO2qVNTKL_VS_ZvHHEs5Evg&e=">https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=E2FMyT23FarZeKRKWBGOndodNlyr-x_bTU7LSCiXUc0&s=TdyNyGmOlGChU1wvZhGFsO2qVNTKL_VS_ZvHHEs5Evg&e=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>