[LLVMbugs] [Bug 10241] New: Shell scripts generated by llvm-ld attempt to dynamically load archives

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Jul 1 06:48:46 PDT 2011


http://llvm.org/bugs/show_bug.cgi?id=10241

           Summary: Shell scripts generated by llvm-ld attempt to
                    dynamically load archives
           Product: new-bugs
           Version: 2.9
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: srk31 at srcf.ucam.org
                CC: llvmbugs at cs.uiuc.edu


When looking up a library name in sys::Path returns an archive, llvm-ld will
happily generate a shell script containing a -load= argument to lli for that
archive. This fails at run-time, because archives cannot be dynamically loaded.

To reproduce: same as bug 10240 <http://llvm.org/bugs/show_bug.cgi?id=10240>.
In general, passing using -l to link any library will trigger the bug if that
library's only appearance in the library search path is as an archive. I'm
seeing this on an x86-64 FC13 machine, but guess it's an issue for any system
that uses archives.

The following quick fix seems to sort it out. The problem is that the
FindLibrary call can return an archive, but this code only wants shared
objects. 

--- tools/llvm-ld/llvm-ld.cpp
+++ tools/llvm-ld/llvm-ld.cpp.patched-3 2011-07-01 14:35:47.000000000 +0100
@@ -465,7 +465,7 @@
     }
     if (FullLibraryPath.isEmpty())
       FullLibraryPath = sys::Path::FindLibrary(*i);
-    if (!FullLibraryPath.isEmpty())
+    if (!FullLibraryPath.isEmpty() && FullLibraryPath.isDynamicLibrary())
       Out2.os() << "    -load=" << FullLibraryPath.str() << " \\\n";
   }
   Out2.os() << "    "  << BitcodeOutputFilename << " ${1+\"$@\"}\n";


I'm not actually sure why the FindLibrary call is there, since the preceding
chunk of code is all about locating the input libraries (and is careful to
exclude non-shared-objects). But it might make sense if sys::Path includes some
directories that aren't in LibPaths.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list