<html xmlns:v="urn:schemas-microsoft-com:vml" 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=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        color:#595959;}
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;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        color:#595959;}
p.Code, li.Code, div.Code
        {mso-style-name:Code;
        mso-style-link:"Code Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:Consolas;
        color:black;}
span.CodeChar
        {mso-style-name:"Code Char";
        mso-style-link:Code;
        font-family:Consolas;
        color:black;}
p.Red, li.Red, div.Red
        {mso-style-name:Red;
        mso-style-link:"Red Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        color:red;
        font-style:italic;}
span.RedChar
        {mso-style-name:"Red Char";
        mso-style-link:Red;
        font-family:"Calibri","sans-serif";
        color:red;
        font-style:italic;}
span.EmailStyle21
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:#404040;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:#595959;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";
        color:#595959;}
.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><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.5pt;color:#555555">Thanks John. Your approach worked fine for my small toy program. Now, I would like to run my module pass on a huge project (still a single executable) consisting of a few thousand bit code files
 scattered in many different directories. And some of them are static libraries. Do you still think it's a good idea to manually gather and link them with llvm-ld? I've seen other module pass implementations where they directly patch a specific version of LLVM
 or clang, instead of running a shared object implementation with opt. Which would be the ideal approach to analyze a program with a module pass? Thanks.<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:11.5pt;color:#555555"><o:p> </o:p></span></p>
</div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black">John Criswell <<a href="mailto:criswell@illinois.edu">criswell@illinois.edu</a>><br>
<b>Organization: </b>University of Illinois<br>
<b>Date: </b>Tue, 12 Jul 2011 16:19:06 -0500<br>
<b>To: </b>Jinwook Shin <<a href="mailto:Jinwook.Shin@microsoft.com">Jinwook.Shin@microsoft.com</a>><br>
<b>Cc: </b>"<a href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a>" <<a href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a>><br>
<b>Subject: </b>Re: [LLVMdev] running a module pass via opt on multiple bitcode files<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.5pt;color:#555555"><o:p> </o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.5pt;color:#555555">On 7/12/11 4:11 PM, Jinwook Shin (HOTWING) wrote:
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#404040">Hi,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040">I'm trying to implement a module pass as a share object to process an entire program as a unit. The target program is built from multiple object files, hence multiple bitcode files. However, it seems that opt
 does not take the whole program, but just one bitcode file, "test.bc" in the example run shown below.
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040">$ opt -load mypass.dylib -mymodulepass < test.bc > /dev/null</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040">How do I run my module pass in a library on a whole program?
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.5pt;color:#555555"><br>
Link the bitcode files together into a single bitcode file with llvm-ld.  You can then run the single bitcode file through opt.<br>
<br>
-- John T.<br>
<br>
<br>
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#404040"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040">Thanks.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#404040"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.5pt;color:#555555"><br>
<br>
<br>
<o:p></o:p></span></p>
<pre><span style="color:#555555">_______________________________________________<o:p></o:p></span></pre>
<pre><span style="color:#555555">LLVM Developers mailing list<o:p></o:p></span></pre>
<pre><span style="color:#555555"><a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><o:p></o:p></span></pre>
<p class="MsoNormal"><span style="font-size:11.5pt;color:#555555"><o:p> </o:p></span></p>
</div>
</div>
</div>
</body>
</html>