<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jan 16, 2015 at 11:14 AM, Shankar Kalpathi Easwaran <span dir="ltr"><<a href="mailto:shankarke@gmail.com" target="_blank">shankarke@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">================<br>
Comment at: lib/Core/Resolver.cpp:285<br>
@@ +284,3 @@<br>
+        for (StringRef sym : archive->getDefinedSymbols())<br>
+          _archiveMap[sym] = archive;<br>
+}<br>
----------------<br>
If there is more than one archive having the same symbol name, the last file with the same symbol would be parsed. The archive library file which appears in link order should be the first one to get picked.<br></blockquote><div><br></div><div>That's not correct. Because _archiveMap is constructed from the last input file to the first input file (see makePreloadArchiveMap, specifically rbegin and rend), the first input file takes precedence over the second file. If two or more library files contain the same symbol, the first one will be instantiated.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Weak symbols and common symbols have the same name across different archives. This doesnot appear to handle the case where the right weak symbol need to be chosen or the right common symbol be chosen.<br></blockquote><div><br></div><div>The logic we use here doesn't have to be accurate. As long as it makes a reasonable guess, that's fine. It does something having no side effect speculatively for possible performance improvement. And because we've seen some performance improvements, I'd say the logic is not at least bad.</div></div></div></div>