Fix PR139:\
authorReid Spencer <rspencer@reidspencer.com>
Sun, 5 Dec 2004 19:15:29 +0000 (19:15 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Sun, 5 Dec 2004 19:15:29 +0000 (19:15 +0000)
When not linking as a library, use LinkItems to retain command line order of \
linking, otherwise use LinkFiles

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18549 91177308-0d34-0410-b5e6-96231b3b80d8

tools/gccld/gccld.cpp
tools/llvm-ld/llvm-ld.cpp

index c1f430affa4f6eac1126ec37b04f7391c943b40c..48fbd8b633daec561487573f8e67b428d862adc7 100644 (file)
@@ -168,31 +168,30 @@ int main(int argc, char **argv, char **envp) {
   int exitCode = 0;
 
   try {
-    std::string ModuleID("gccld-output");
-    std::auto_ptr<Module> Composite(new Module(ModuleID));
-
-    // We always look first in the current directory when searching for
-    // libraries.
-    LibPaths.insert(LibPaths.begin(), ".");
-
-    // If the user specified an extra search path in their environment, respect
-    // it.
-    if (char *SearchPath = getenv("LLVM_LIB_SEARCH_PATH"))
-      LibPaths.push_back(SearchPath);
-
     // Remove any consecutive duplicates of the same library...
     Libraries.erase(std::unique(Libraries.begin(), Libraries.end()),
                     Libraries.end());
 
-    // Link in all of the files
-    if (LinkFiles(argv[0], Composite.get(), InputFilenames, Verbose))
-      return 1; // Error already printed
-
-    if (!LinkAsLibrary)
-      LinkLibraries(argv[0], Composite.get(), Libraries, LibPaths,
-                    Verbose, Native);
-
-    // Link in all of the libraries next...
+    // Set up the Composite module.
+    std::auto_ptr<Module> Composite(0);
+
+    if (LinkAsLibrary) {
+      // Link in only the files, we ignore libraries in this case.
+      Composite.reset( new Module(argv[0]) );
+      if (LinkFiles(argv[0], Composite.get(), InputFilenames, Verbose))
+        return 1; // Error already printed
+    } else {
+      // Build a list of the items from our command line
+      LinkItemList Items;
+      BuildLinkItems(Items, InputFilenames, Libraries);
+
+      // Link all the items together
+      Composite.reset( LinkItems(argv[0], Items, LibPaths, Verbose, Native) );
+
+      // Check for an error during linker
+      if (!Composite.get())
+        return 1; // Error already printed
+    }
 
     // Create the output file.
     std::string RealBytecodeOutput = OutputFilename;
index 31c1812df7b9e495fa85b23b803d904eb76d57f5..3512c2a66a32f85afd5587adca11a36a66333024 100644 (file)
@@ -389,29 +389,30 @@ int main(int argc, char **argv, char **envp) {
   cl::ParseCommandLineOptions(argc, argv, " llvm linker for GCC\n");
   sys::PrintStackTraceOnErrorSignal();
 
-  std::string ModuleID("llvm-ld-output");
-  std::auto_ptr<Module> Composite(new Module(ModuleID));
-
-  // We always look first in the current directory when searching for libraries.
-  LibPaths.insert(LibPaths.begin(), ".");
-
-  // If the user specified an extra search path in their environment, respect
-  // it.
-  if (char *SearchPath = getenv("LLVM_LIB_SEARCH_PATH"))
-    LibPaths.push_back(SearchPath);
-
   // Remove any consecutive duplicates of the same library...
   Libraries.erase(std::unique(Libraries.begin(), Libraries.end()),
                   Libraries.end());
 
-  // Link in all of the files
-  if (LinkFiles(argv[0], Composite.get(), InputFilenames, Verbose))
-    return 1; // Error already printed
-
-  // Link in all of the libraries next...
-  if (!LinkAsLibrary)
-    LinkLibraries(argv[0], Composite.get(), Libraries, LibPaths,
-                  Verbose, Native);
+  // Set up the Composite module.
+  std::auto_ptr<Module> Composite(0);
+
+  if (LinkAsLibrary) {
+    // Link in only the files, we ignore libraries in this case.
+    Composite.reset( new Module(argv[0]) );
+    if (LinkFiles(argv[0], Composite.get(), InputFilenames, Verbose))
+      return 1; // Error already printed
+  } else {
+    // Build a list of the items from our command line
+    LinkItemList Items;
+    BuildLinkItems(Items, InputFilenames, Libraries);
+
+    // Link all the items together
+    Composite.reset( LinkItems(argv[0], Items, LibPaths, Verbose, Native) );
+
+    // Check for an error during linker
+    if (!Composite.get())
+      return 1; // Error already printed
+  }
 
   // Optimize the module
   Optimize(Composite.get());