<div dir="ltr">Hi Alberto,<div><br></div><div>I know nothing about the infinite loop and its root cause. However, I think the order of loading the shared objects (i.e. the two different .so libraries) matters. I once defined a command line option in the firstly loaded shared object, and "extern" it in another shared object file which was loaded afterwards. And it works.</div>

<div><br></div><div>In your case,</div><div>1. Define the cl::opt in the AnalysisPass</div><div>2. Extern the cl::opt in the TransformPass</div><div>3. opt -load libanalysis.so -load libtransform.so -stats -debug foo.bc -o /dev/null</div>

<div><br></div><div>Regards.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, May 25, 2013 at 12:38 AM, Alberto Magni <span dir="ltr"><<a href="mailto:alberto.magni86@gmail.com" target="_blank">alberto.magni86@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi all, <br><br></div><div>I am experiencing a problem managing the command line option of a set of passes in my LLVM project.<br>

<br></div><div>Attached you find a toy project the triggers the problem.<br>
</div><div>The project is made up of two passes: "AnalysisPass" and "TransformPass". <br>"TransformPass" requires "AnalysisPass" and they both share a common integer command line option called "-command-line-option"<br>


<br>According to:<br><a href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-January/037722.html" target="_blank">http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-January/037722.html</a><br></div><div>the proper way of sharing a cl::opt variable among multiple passes is to define the variable once and declare it as "explicit" in all the<br>


</div><div>files of the passes that need it.<br><br></div><div>To keep the project tidy the  two "AnalysisPass" and "TransformPass" are compiled into two different .so libraries.<br></div><div>The only way I can think of to share the cl::opt variable is to define is to define it in a separate "Support" static library which is then <br>


linked by both "AnalysisPass" and "TransformPass".<br><br>When running "AnalysisPass" loading it with opt all works fine, while running "TransformPass" opt never returns stuck in an infinite loop.<br>


</div><div>GDB tells me that opt is trapped somewhere into llvm::cl::ParseCommandLineOptions, but I am not confident with command line option management.<br><br>Notice that if the cl::opt variable is not used at all in "TransformPass" everithing runs fine.<br>


</div><div><br></div><div>Does anybody have an idea on what is going on here ?<br></div><div>Is there a better way of sharing command line options among passes belonging to different libraries ?<br></div><div><br></div><div>


Thank you in advance.<br><br></div><div>Cheers, <br></div>Alberto<br></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><font face="arial, helvetica, sans-serif" style="background-color:rgb(255,255,255)" color="#666666">Mingliang LIU (刘明亮 in Chinese)<br><br>PACMAN Group,  Dept. of Computer Science & Technology<br>

Tsinghua University, Beijing 100084, China<br>Email: <a href="mailto:liuml07@mails.tsinghua.edu.cn" target="_blank">liuml07@mails.tsinghua.edu.cn</a></font><div><font face="arial, helvetica, sans-serif" style="background-color:rgb(255,255,255)" color="#666666">Homepage: <a href="http://pacman.cs.tsinghua.edu.cn/~liuml07" style="line-height:19px;text-align:center" target="_blank">http://pacman.cs.tsinghua.edu.cn/~liuml07/</a></font></div>


</div>