diff --git a/llvm/tools/llvm-ld/llvm-ld.cpp b/llvm/tools/llvm-ld/llvm-ld.cpp
index 8fb335c..bb1130b 100644
--- a/llvm/tools/llvm-ld/llvm-ld.cpp
+++ b/llvm/tools/llvm-ld/llvm-ld.cpp
@@ -59,6 +59,7 @@
   cl::desc("Specify libraries to link to"),
   cl::value_desc("library prefix"));
 
+// Options to control the linking, optimization, and code gen processes
 static cl::opt<bool> LinkAsLibrary("link-as-library",
   cl::desc("Link the .bc files together as a library, not an executable"));
 
@@ -84,7 +85,8 @@
 static cl::list<std::string> XLinker("Xlinker", cl::value_desc("option"),
   cl::desc("Pass options to the system linker"));
 
-// Compatibility options that are ignored but supported by LD
+// Compatibility options that llvm-ld ignores but are supported for 
+// compatibility with LD
 static cl::opt<std::string> CO3("soname", cl::Hidden,
   cl::desc("Compatibility option: ignored"));
 
@@ -107,15 +109,15 @@
 /// everywhere.
 static std::string progname;
 
-/// PrintAndReturn - Prints a message to standard error and returns true.
+/// PrintAndExit - Prints a message to standard error and exits with error code
 ///
 /// Inputs:
-///  progname - The name of the program (i.e. argv[0]).
 ///  Message  - The message to print to standard error.
 ///
-static int PrintAndReturn(const std::string &Message) {
+static void PrintAndExit(const std::string &Message, int errcode = 1) {
   cerr << progname << ": " << Message << "\n";
-  return 1;
+  llvm_shutdown();
+  exit(errcode);
 }
 
 /// CopyEnv - This function takes an array of environment variables and makes a
@@ -203,10 +205,8 @@
   std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
                                std::ios::binary;
   std::ofstream Out(FileName.c_str(), io_mode);
-  if (!Out.good()) {
-    PrintAndReturn("error opening '" + FileName + "' for writing!");
-    return;
-  }
+  if (!Out.good())
+    PrintAndExit("error opening '" + FileName + "' for writing!");
 
   // Ensure that the bytecode file gets removed from the disk if we get a
   // terminating signal.
@@ -356,15 +356,11 @@
   // build tree to the destination file.
   std::string ErrMsg;  
   sys::Path llvmstub = FindExecutable("llvm-stub.exe", argv[0]);
-  if (llvmstub.isEmpty()) {
-    cerr << "Could not find llvm-stub.exe executable!\n";
-    exit(1);
-  }
+  if (llvmstub.isEmpty())
+    PrintAndExit("Could not find llvm-stub.exe executable!");
 
-  if (0 != sys::CopyFile(sys::Path(OutputFilename), llvmstub, &ErrMsg)) {
-    cerr << argv[0] << ": " << ErrMsg << "\n";
-    exit(1);    
-  }
+  if (0 != sys::CopyFile(sys::Path(OutputFilename), llvmstub, &ErrMsg))
+    PrintAndExit(ErrMsg);
 
   return;
 #endif
@@ -372,7 +368,7 @@
   // Output the script to start the program...
   std::ofstream Out2(OutputFilename.c_str());
   if (!Out2.good())
-    exit(PrintAndReturn("error opening '" + OutputFilename + "' for writing!"));
+    PrintAndExit("error opening '" + OutputFilename + "' for writing!");
 
   Out2 << "#!/bin/sh\n";
   // Allow user to setenv LLVMINTERP if lli is not in their PATH.
@@ -481,7 +477,7 @@
 
       // Link all the items together
       if (TheLinker.LinkInItems(Items,LinkItems) )
-        return 1;
+        return 1; // Error already printed
     }
 
     std::auto_ptr<Module> Composite(TheLinker.releaseModule());
@@ -506,15 +502,15 @@
           if (!prog.canExecute()) {
             prog = sys::Program::FindProgramByName(*I);
             if (prog.isEmpty())
-              return PrintAndReturn(std::string("Optimization program '") + *I +
+              PrintAndExit(std::string("Optimization program '") + *I +
                 "' is not found or not executable.");
           }
           // Get the program arguments
           sys::Path tmp_output("opt_result");
           std::string ErrMsg;
-          if (tmp_output.createTemporaryFileOnDisk(true, &ErrMsg)) {
-            return PrintAndReturn(ErrMsg);
-          }
+          if (tmp_output.createTemporaryFileOnDisk(true, &ErrMsg))
+            PrintAndExit(ErrMsg);
+
           const char* args[4];
           args[0] = I->c_str();
           args[1] = RealBytecodeOutput.c_str();
@@ -524,16 +520,12 @@
             if (tmp_output.isBytecodeFile()) {
               sys::Path target(RealBytecodeOutput);
               target.eraseFromDisk();
-              if (tmp_output.renamePathOnDisk(target, &ErrMsg)) {
-                cerr << argv[0] << ": " << ErrMsg << "\n";
-                return 2;
-              }
+              if (tmp_output.renamePathOnDisk(target, &ErrMsg))
+                PrintAndExit(ErrMsg, 2);
             } else
-              return PrintAndReturn(
-                "Post-link optimization output is not bytecode");
+              PrintAndExit("Post-link optimization output is not bytecode");
           } else {
-            cerr << argv[0] << ": " << ErrMsg << "\n";
-            return 2;
+            PrintAndExit(ErrMsg);
           }
         }
       }
@@ -554,27 +546,25 @@
         // Determine the locations of the llc and gcc programs.
         sys::Path llc = FindExecutable("llc", argv[0]);
         if (llc.isEmpty())
-          return PrintAndReturn("Failed to find llc");
+          PrintAndExit("Failed to find llc");
 
         sys::Path gcc = FindExecutable("gcc", argv[0]);
         if (gcc.isEmpty())
-          return PrintAndReturn("Failed to find gcc");
+          PrintAndExit("Failed to find gcc");
 
         // Generate an assembly language file for the bytecode.
-        if (Verbose) cout << "Generating Assembly Code\n";
+        if (Verbose) 
+          cout << "Generating Assembly Code\n";
         std::string ErrMsg;
         if (0 != GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput,
-            llc, ErrMsg)) {
-          cerr << argv[0] << ": " << ErrMsg << "\n";
-          return 1;
-        }
+            llc, ErrMsg))
+          PrintAndExit(ErrMsg);
 
-        if (Verbose) cout << "Generating Native Code\n";
+        if (Verbose) 
+          cout << "Generating Native Code\n";
         if (0 != GenerateNative(OutputFilename, AssemblyFile.toString(),
-            LinkItems,gcc,envp,ErrMsg)) {
-          cerr << argv[0] << ": " << ErrMsg << "\n";
-          return 1;
-        }
+            LinkItems,gcc,envp,ErrMsg))
+          PrintAndExit(ErrMsg);
 
         // Remove the assembly language file.
         AssemblyFile.eraseFromDisk();
@@ -589,27 +579,25 @@
         // Determine the locations of the llc and gcc programs.
         sys::Path llc = FindExecutable("llc", argv[0]);
         if (llc.isEmpty())
-          return PrintAndReturn("Failed to find llc");
+          PrintAndExit("Failed to find llc");
 
         sys::Path gcc = FindExecutable("gcc", argv[0]);
         if (gcc.isEmpty())
-          return PrintAndReturn("Failed to find gcc");
+          PrintAndExit("Failed to find gcc");
 
         // Generate an assembly language file for the bytecode.
-        if (Verbose) cout << "Generating Assembly Code\n";
+        if (Verbose) 
+          cout << "Generating Assembly Code\n";
         std::string ErrMsg;
         if (0 != GenerateCFile(
-            CFile.toString(), RealBytecodeOutput, llc, ErrMsg)) {
-          cerr << argv[0] << ": " << ErrMsg << "\n";
-          return 1;
-        }
+            CFile.toString(), RealBytecodeOutput, llc, ErrMsg))
+          PrintAndExit(ErrMsg);
 
-        if (Verbose) cout << "Generating Native Code\n";
+        if (Verbose) 
+          cout << "Generating Native Code\n";
         if (0 != GenerateNative(OutputFilename, CFile.toString(), LinkItems, 
-            gcc, envp, ErrMsg)) {
-          cerr << argv[0] << ": " << ErrMsg << "\n";
-          return 1;
-        }
+            gcc, envp, ErrMsg))
+          PrintAndExit(ErrMsg);
 
         // Remove the assembly language file.
         CFile.eraseFromDisk();
@@ -620,27 +608,22 @@
 
       // Make the script executable...
       std::string ErrMsg;
-      if (sys::Path(OutputFilename).makeExecutableOnDisk(&ErrMsg)) {
-        cerr << argv[0] << ": " << ErrMsg << "\n";
-        return 1;
-      }
+      if (sys::Path(OutputFilename).makeExecutableOnDisk(&ErrMsg))
+        PrintAndExit(ErrMsg);
 
       // Make the bytecode file readable and directly executable in LLEE as well
-      if (sys::Path(RealBytecodeOutput).makeExecutableOnDisk(&ErrMsg)) {
-        cerr << argv[0] << ": " << ErrMsg << "\n";
-        return 1;
-      }
-      if (sys::Path(RealBytecodeOutput).makeReadableOnDisk(&ErrMsg)) {
-        cerr << argv[0] << ": " << ErrMsg << "\n";
-        return 1;
-      }
-    }
+      if (sys::Path(RealBytecodeOutput).makeExecutableOnDisk(&ErrMsg))
+        PrintAndExit(ErrMsg);
 
-    return 0;
+      if (sys::Path(RealBytecodeOutput).makeReadableOnDisk(&ErrMsg))
+        PrintAndExit(ErrMsg);
+    }
   } catch (const std::string& msg) {
-    cerr << argv[0] << ": " << msg << "\n";
+    PrintAndExit(msg,2);
   } catch (...) {
-    cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
+    PrintAndExit("Unexpected unknown exception occurred.", 2);
   }
-  return 1;
+
+  // Graceful exit
+  return 0;
 }
