[llvm-commits] CVS: llvm/tools/llvm-ld/llvm-ld.cpp

Reid Spencer reid at x10sys.com
Sun Aug 20 23:05:06 PDT 2006



Changes in directory llvm/tools/llvm-ld:

llvm-ld.cpp updated: 1.33 -> 1.34
---
Log message:

For PR797: http://llvm.org/PR797 :
Adjust usage of the ExecuteAndWait function to use the last argument which
is the ErrMsg string. This is necessitated because this function no longer
throws exceptions on error.


---
Diffs of the changes:  (+39 -12)

 llvm-ld.cpp |   51 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 39 insertions(+), 12 deletions(-)


Index: llvm/tools/llvm-ld/llvm-ld.cpp
diff -u llvm/tools/llvm-ld/llvm-ld.cpp:1.33 llvm/tools/llvm-ld/llvm-ld.cpp:1.34
--- llvm/tools/llvm-ld/llvm-ld.cpp:1.33	Tue Jun 27 13:07:29 2006
+++ llvm/tools/llvm-ld/llvm-ld.cpp	Mon Aug 21 01:04:45 2006
@@ -227,7 +227,8 @@
 ///
 static int GenerateAssembly(const std::string &OutputFilename,
                             const std::string &InputFilename,
-                            const sys::Path &llc) {
+                            const sys::Path &llc,
+                            std::string &ErrMsg ) {
   // Run LLC to convert the bytecode file into assembly code.
   std::vector<const char*> args;
   args.push_back(llc.c_str());
@@ -237,13 +238,14 @@
   args.push_back(InputFilename.c_str());
   args.push_back(0);
 
-  return sys::Program::ExecuteAndWait(llc,&args[0]);
+  return sys::Program::ExecuteAndWait(llc,&args[0],0,0,0,&ErrMsg);
 }
 
 /// GenerateCFile - generates a C source file from the specified bytecode file.
 static int GenerateCFile(const std::string &OutputFile,
                          const std::string &InputFile,
-                         const sys::Path &llc) {
+                         const sys::Path &llc,
+                         std::string& ErrMsg) {
   // Run LLC to convert the bytecode file into C.
   std::vector<const char*> args;
   args.push_back(llc.c_str());
@@ -253,7 +255,7 @@
   args.push_back(OutputFile.c_str());
   args.push_back(InputFile.c_str());
   args.push_back(0);
-  return sys::Program::ExecuteAndWait(llc, &args[0]);
+  return sys::Program::ExecuteAndWait(llc, &args[0],0,0,0,&ErrMsg);
 }
 
 /// GenerateNative - generates a native object file from the
@@ -275,7 +277,8 @@
 static int GenerateNative(const std::string &OutputFilename,
                           const std::string &InputFilename,
                           const std::vector<std::string> &Libraries,
-                          const sys::Path &gcc, char ** const envp) {
+                          const sys::Path &gcc, char ** const envp,
+                          std::string& ErrMsg) {
   // Remove these environment variables from the environment of the
   // programs that we will execute.  It appears that GCC sets these
   // environment variables so that the programs it uses can configure
@@ -329,7 +332,8 @@
   args.push_back(0);
 
   // Run the compiler to assembly and link together the program.
-  int R = sys::Program::ExecuteAndWait(gcc, &args[0], (const char**)clean_env);
+  int R = sys::Program::ExecuteAndWait(
+      gcc, &args[0], (const char**)clean_env,0,0,&ErrMsg);
   delete [] clean_env;
   return R;
 }
@@ -497,7 +501,8 @@
           args[1] = RealBytecodeOutput.c_str();
           args[2] = tmp_output.c_str();
           args[3] = 0;
-          if (0 == sys::Program::ExecuteAndWait(prog, args)) {
+          std::string ErrMsg;
+          if (0 == sys::Program::ExecuteAndWait(prog, args, 0,0,0, &ErrMsg)) {
             if (tmp_output.isBytecodeFile()) {
               sys::Path target(RealBytecodeOutput);
               target.eraseFromDisk();
@@ -505,6 +510,9 @@
             } else
               return PrintAndReturn(
                 "Post-link optimization output is not bytecode");
+          } else {
+            std::cerr << argv[0] << ": " << ErrMsg << "\n";
+            return 2;
           }
         }
       }
@@ -533,10 +541,19 @@
 
         // Generate an assembly language file for the bytecode.
         if (Verbose) std::cout << "Generating Assembly Code\n";
-        GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput, llc);
+        std::string ErrMsg;
+        if (0 != GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput,
+            llc, ErrMsg)) {
+          std::cerr << argv[0] << ": " << ErrMsg << "\n";
+          return 1;
+        }
+
         if (Verbose) std::cout << "Generating Native Code\n";
-        GenerateNative(OutputFilename, AssemblyFile.toString(), Libraries,
-                       gcc, envp);
+        if (0 != GenerateNative(OutputFilename, AssemblyFile.toString(),
+            Libraries,gcc,envp,ErrMsg)) {
+          std::cerr << argv[0] << ": " << ErrMsg << "\n";
+          return 1;
+        }
 
         // Remove the assembly language file.
         AssemblyFile.eraseFromDisk();
@@ -559,9 +576,19 @@
 
         // Generate an assembly language file for the bytecode.
         if (Verbose) std::cout << "Generating Assembly Code\n";
-        GenerateCFile(CFile.toString(), RealBytecodeOutput, llc);
+        std::string ErrMsg;
+        if (0 != GenerateCFile(
+            CFile.toString(), RealBytecodeOutput, llc, ErrMsg)) {
+          std::cerr << argv[0] << ": " << ErrMsg << "\n";
+          return 1;
+        }
+
         if (Verbose) std::cout << "Generating Native Code\n";
-        GenerateNative(OutputFilename, CFile.toString(), Libraries, gcc, envp);
+        if (0 != GenerateNative(OutputFilename, CFile.toString(), Libraries, 
+            gcc, envp, ErrMsg)) {
+          std::cerr << argv[0] << ": " << ErrMsg << "\n";
+          return 1;
+        }
 
         // Remove the assembly language file.
         CFile.eraseFromDisk();






More information about the llvm-commits mailing list