<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Sep 29, 2015 at 8:32 PM, Igor Kudrin <span dir="ltr"><<a href="mailto:ikudrin.dev@gmail.com" target="_blank">ikudrin.dev@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">ikudrin added a subscriber: ikudrin.<br>
<span class=""><br>
================<br>
Comment at: ELF/DriverUtils.cpp:202<br>
@@ +201,3 @@<br>
+// Returns true if Path seems to be a linker script.<br>
+bool isLinkerScript(llvm::StringRef Path) {<br>
+  // Because the linker script is just a text file that has no magic bytes,<br>
----------------<br>
</span><span class="">rafael wrote:<br>
> This opens a file, mmaps it, calls identify_magic and then drops everything and returns a bool :-(<br>
><br>
</span><span class="">> Could this be reorganized into something like<br>
><br>
> addInptsForArg(StringRef Arg) {<br>
>   open file<br>
>   check type<br>
>    if (archiver or elf) {<br>
>       add it.<br>
>       return;<br>
>   }<br>
>   parse linker script.<br>
> }<br>
><br>
> That way we only open, mmap and identify each file once.<br>
</span>What if we remove intermediate containers like Inputs or InputFiles and just put all files into SymbolTable directly? Anyway, I'm going to suggest this change in my next patch for support --[no-]whole-archive.<br></blockquote><div><br></div><div>The issue I had when I was writing this patch is ownership of MemoryBuffer. Currently all files are owned by Driver, which opens files as it sees them in the command line. All files are kept open until the linker exits, and we are using MemoryBufferRef pointing these files everywhere.</div><div><br></div><div>Linker scripts changes the situation. They also see list of files we have to use, and for simplicity we just open them while reading linker scripts. Someone has to be the owner of these files.</div></div></div></div>