diff --git a/tools/bugpoint/bugpoint.cpp b/tools/bugpoint/bugpoint.cpp
index 57d8e60..0cdbfd4 100644
--- a/tools/bugpoint/bugpoint.cpp
+++ b/tools/bugpoint/bugpoint.cpp
@@ -18,6 +18,7 @@
 #include "llvm/LinkAllPasses.h"
 #include "llvm/Support/PassNameParser.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/System/Process.h"
 #include "llvm/System/Signals.h"
@@ -59,6 +60,7 @@
 }
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   cl::ParseCommandLineOptions(argc, argv,
                               " LLVM automatic testcase reducer. See\nhttp://"
                               "llvm.org/docs/CommandGuide/bugpoint.html"
diff --git a/tools/gccas/gccas.cpp b/tools/gccas/gccas.cpp
index eda7d9b..a898d4c 100644
--- a/tools/gccas/gccas.cpp
+++ b/tools/gccas/gccas.cpp
@@ -24,6 +24,7 @@
 #include "llvm/Transforms/Scalar.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Streams.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 #include <memory>
@@ -133,6 +134,7 @@
 
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv,
                                 " llvm .s -> .o assembler for GCC\n");
diff --git a/tools/gccld/gccld.cpp b/tools/gccld/gccld.cpp
index 0327a3c..46ffac1 100644
--- a/tools/gccld/gccld.cpp
+++ b/tools/gccld/gccld.cpp
@@ -30,6 +30,7 @@
 #include "llvm/Transforms/Scalar.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FileUtilities.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/System/Signals.h"
 #include "llvm/Support/SystemUtils.h"
@@ -214,6 +215,7 @@
 }
 
 int main(int argc, char **argv, char **envp ) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   cl::ParseCommandLineOptions(argc, argv, " llvm linker for GCC\n");
   sys::PrintStackTraceOnErrorSignal();
 
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index cd04792..fd7afa9 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -24,6 +24,7 @@
 #include "llvm/PassManager.h"
 #include "llvm/Pass.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/Support/FileUtilities.h"
 #include "llvm/Analysis/Verifier.h"
@@ -168,6 +169,7 @@
 // main - Entry point for the llc compiler.
 //
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, " llvm system compiler\n");
     sys::PrintStackTraceOnErrorSignal();
diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp
index a9d9059..cce47fb 100644
--- a/tools/lli/lli.cpp
+++ b/tools/lli/lli.cpp
@@ -22,6 +22,7 @@
 #include "llvm/ExecutionEngine/Interpreter.h"
 #include "llvm/ExecutionEngine/GenericValue.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/System/Process.h"
 #include "llvm/System/Signals.h"
@@ -56,6 +57,7 @@
 // main Driver function
 //
 int main(int argc, char **argv, char * const *envp) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv,
                                 " llvm interpreter & dynamic compiler\n");
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp
index 1e8bcec..b9278ad 100644
--- a/tools/llvm-ar/llvm-ar.cpp
+++ b/tools/llvm-ar/llvm-ar.cpp
@@ -16,12 +16,12 @@
 #include "llvm/Bytecode/Archive.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Compressor.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 #include <algorithm>
 #include <iomanip>
 #include <memory>
-
 using namespace llvm;
 
 // Option for compatibility with ASIX, not used but must allow it to be present.
@@ -696,6 +696,7 @@
 
 // main - main program for llvm-ar .. see comments in the code
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
 
   // Have the command line options parsed and handle things
   // like --help and --version.
diff --git a/tools/llvm-as/llvm-as.cpp b/tools/llvm-as/llvm-as.cpp
index d8f487e..c1c0a0c 100644
--- a/tools/llvm-as/llvm-as.cpp
+++ b/tools/llvm-as/llvm-as.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Bytecode/Writer.h"
 #include "llvm/Analysis/Verifier.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/System/Signals.h"
@@ -50,6 +51,7 @@
               cl::desc("Do not run verifier on input LLVM (dangerous!)"));
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   cl::ParseCommandLineOptions(argc, argv, " llvm .ll -> .bc assembler\n");
   sys::PrintStackTraceOnErrorSignal();
 
diff --git a/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
index 01fa513..bba9c71 100644
--- a/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
+++ b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
@@ -32,6 +32,7 @@
 #include "llvm/Analysis/Verifier.h"
 #include "llvm/Bytecode/Analyzer.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/System/Signals.h"
 #include <fstream>
 #include <iostream>
@@ -48,8 +49,8 @@
 static cl::opt<bool> Dump      ("dump", cl::desc("Dump low level bytecode trace"));
 static cl::opt<bool> Verify    ("verify", cl::desc("Progressively verify module"));
 
-int
-main(int argc, char **argv) {
+int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv,
       " llvm-bcanalyzer Analysis of ByteCode Dumper\n");
diff --git a/tools/llvm-db/llvm-db.cpp b/tools/llvm-db/llvm-db.cpp
index 2680d8c..57994bf 100644
--- a/tools/llvm-db/llvm-db.cpp
+++ b/tools/llvm-db/llvm-db.cpp
@@ -14,9 +14,9 @@
 
 #include "CLIDebugger.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
-
 using namespace llvm;
 
 namespace {
@@ -49,6 +49,7 @@
 // main Driver function
 //
 int main(int argc, char **argv, char * const *envp) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   std::cout << "NOTE: llvm-db is known useless right now.\n";
   try {
     cl::ParseCommandLineOptions(argc, argv,
diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp
index 8c2b3fe..8d9e9aa 100644
--- a/tools/llvm-dis/llvm-dis.cpp
+++ b/tools/llvm-dis/llvm-dis.cpp
@@ -21,6 +21,7 @@
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Assembly/PrintModulePass.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
@@ -39,6 +40,7 @@
 Force("f", cl::desc("Overwrite output files"));
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, " llvm .bc -> .ll disassembler\n");
     sys::PrintStackTraceOnErrorSignal();
@@ -115,6 +117,7 @@
   } catch (...) {
     llvm_cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
   }
+
   return 1;
 }
 
diff --git a/tools/llvm-extract/llvm-extract.cpp b/tools/llvm-extract/llvm-extract.cpp
index 4f3236f..a6edc72 100644
--- a/tools/llvm-extract/llvm-extract.cpp
+++ b/tools/llvm-extract/llvm-extract.cpp
@@ -19,6 +19,7 @@
 #include "llvm/Transforms/IPO.h"
 #include "llvm/Target/TargetData.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
@@ -47,6 +48,7 @@
             cl::value_desc("function"));
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, " llvm extractor\n");
     sys::PrintStackTraceOnErrorSignal();
diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp
index fe825f9..20ea463 100644
--- a/tools/llvm-ld/llvm-ld.cpp
+++ b/tools/llvm-ld/llvm-ld.cpp
@@ -32,6 +32,7 @@
 #include "llvm/Target/TargetMachineRegistry.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/FileUtilities.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/System/Signals.h"
@@ -433,6 +434,7 @@
 }
 
 int main(int argc, char **argv, char **envp) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     // Initial global variable above for convenience printing of program name.
     progname = sys::Path(argv[0]).getBasename();
diff --git a/tools/llvm-link/llvm-link.cpp b/tools/llvm-link/llvm-link.cpp
index 4214a4a..35fce1e 100644
--- a/tools/llvm-link/llvm-link.cpp
+++ b/tools/llvm-link/llvm-link.cpp
@@ -18,6 +18,7 @@
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Bytecode/Writer.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/System/Signals.h"
 #include "llvm/System/Path.h"
@@ -75,6 +76,7 @@
 }
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, " llvm linker\n");
     sys::PrintStackTraceOnErrorSignal();
diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp
index 3e43953..422cdda 100644
--- a/tools/llvm-nm/llvm-nm.cpp
+++ b/tools/llvm-nm/llvm-nm.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Bytecode/Archive.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/System/Signals.h"
 #include <cctype>
 #include <cerrno>
@@ -65,18 +66,18 @@
   std::string ToolName;
 }
 
-char TypeCharForSymbol (GlobalValue &GV) {
-  if (GV.isExternal ())                                     return 'U';
-  if (GV.hasLinkOnceLinkage ())                             return 'C';
-  if (GV.hasWeakLinkage ())                                 return 'W';
-  if (isa<Function> (GV) && GV.hasInternalLinkage ())       return 't';
-  if (isa<Function> (GV))                                   return 'T';
-  if (isa<GlobalVariable> (GV) && GV.hasInternalLinkage ()) return 'd';
-  if (isa<GlobalVariable> (GV))                             return 'D';
+static char TypeCharForSymbol(GlobalValue &GV) {
+  if (GV.isExternal())                                     return 'U';
+  if (GV.hasLinkOnceLinkage())                             return 'C';
+  if (GV.hasWeakLinkage())                                 return 'W';
+  if (isa<Function>(GV) && GV.hasInternalLinkage())       return 't';
+  if (isa<Function>(GV))                                   return 'T';
+  if (isa<GlobalVariable>(GV) && GV.hasInternalLinkage()) return 'd';
+  if (isa<GlobalVariable>(GV))                             return 'D';
                                                             return '?';
 }
 
-void DumpSymbolNameForGlobalValue (GlobalValue &GV) {
+static void DumpSymbolNameForGlobalValue(GlobalValue &GV) {
   const std::string SymbolAddrStr = "        "; // Not used yet...
   char TypeChar = TypeCharForSymbol (GV);
   if ((TypeChar != 'U') && UndefinedOnly)
@@ -101,7 +102,7 @@
   }
 }
 
-void DumpSymbolNamesFromModule (Module *M) {
+static void DumpSymbolNamesFromModule(Module *M) {
   const std::string &Filename = M->getModuleIdentifier ();
   if (OutputFormat == posix && MultipleFiles) {
     std::cout << Filename << ":\n";
@@ -116,7 +117,7 @@
   std::for_each (M->global_begin (), M->global_end (), DumpSymbolNameForGlobalValue);
 }
 
-void DumpSymbolNamesFromFile (std::string &Filename) {
+static void DumpSymbolNamesFromFile(std::string &Filename) {
   std::string ErrorMessage;
   sys::Path aPath(Filename);
   if (Filename != "-") {
@@ -135,16 +136,16 @@
     }
   } else if (aPath.isArchive()) {
     std::string ErrMsg;
-    Archive* archive = Archive::OpenAndLoad(sys::Path(Filename),&ErrorMessage);
+    Archive* archive = Archive::OpenAndLoad(sys::Path(Filename), &ErrorMessage);
     if (!archive)
       std::cerr << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
     std::vector<Module *> Modules;
-    if (archive->getAllModules(Modules,&ErrorMessage)) {
+    if (archive->getAllModules(Modules, &ErrorMessage)) {
       std::cerr << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
       return;
     }
     MultipleFiles = true;
-    std::for_each (Modules.begin (), Modules.end (), DumpSymbolNamesFromModule);
+    std::for_each (Modules.begin(), Modules.end(), DumpSymbolNamesFromModule);
   } else {
     std::cerr << ToolName << ": " << Filename << ": "
               << "unrecognizable file type\n";
@@ -153,6 +154,7 @@
 }
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, " llvm symbol table dumper\n");
     sys::PrintStackTraceOnErrorSignal();
diff --git a/tools/llvm-prof/llvm-prof.cpp b/tools/llvm-prof/llvm-prof.cpp
index 0b645f6..44bc6c5 100644
--- a/tools/llvm-prof/llvm-prof.cpp
+++ b/tools/llvm-prof/llvm-prof.cpp
@@ -19,6 +19,7 @@
 #include "llvm/Analysis/ProfileInfoLoader.h"
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 #include <iomanip>
@@ -107,6 +108,7 @@
 
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, " llvm profile dump decoder\n");
     sys::PrintStackTraceOnErrorSignal();
diff --git a/tools/llvm-ranlib/llvm-ranlib.cpp b/tools/llvm-ranlib/llvm-ranlib.cpp
index f499754..ef1704a 100644
--- a/tools/llvm-ranlib/llvm-ranlib.cpp
+++ b/tools/llvm-ranlib/llvm-ranlib.cpp
@@ -14,6 +14,7 @@
 #include "llvm/Module.h"
 #include "llvm/Bytecode/Archive.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 #include <iomanip>
@@ -41,6 +42,7 @@
 }
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
 
   // Have the command line options parsed and handle things
   // like --help and --version.
diff --git a/tools/llvm-upgrade/llvm-upgrade.cpp b/tools/llvm-upgrade/llvm-upgrade.cpp
index 1046736..d39aa92 100644
--- a/tools/llvm-upgrade/llvm-upgrade.cpp
+++ b/tools/llvm-upgrade/llvm-upgrade.cpp
@@ -21,6 +21,7 @@
 
 #include "ParserInternals.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/System/Signals.h"
@@ -44,6 +45,7 @@
     cl::init(false));
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   cl::ParseCommandLineOptions(argc, argv, " llvm .ll -> .bc assembler\n");
   sys::PrintStackTraceOnErrorSignal();
 
diff --git a/tools/llvm2cpp/CppWriter.cpp b/tools/llvm2cpp/CppWriter.cpp
index b1f717d..ef07d46 100644
--- a/tools/llvm2cpp/CppWriter.cpp
+++ b/tools/llvm2cpp/CppWriter.cpp
@@ -20,11 +20,12 @@
 #include "llvm/Instructions.h"
 #include "llvm/Module.h"
 #include "llvm/SymbolTable.h"
-#include "llvm/Support/CFG.h"
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/STLExtras.h"
-#include "llvm/Support/MathExtras.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/CFG.h"
+#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/MathExtras.h"
 #include "llvm/Config/config.h"
 #include <algorithm>
 #include <iostream>
diff --git a/tools/llvm2cpp/llvm2cpp.cpp b/tools/llvm2cpp/llvm2cpp.cpp
index 8d3653a..01c8fbd 100644
--- a/tools/llvm2cpp/llvm2cpp.cpp
+++ b/tools/llvm2cpp/llvm2cpp.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Analysis/Verifier.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/System/Signals.h"
 #include "CppWriter.h"
@@ -41,6 +42,7 @@
 Force("f", cl::desc("Overwrite output files"));
 
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   cl::ParseCommandLineOptions(argc, argv, " llvm .ll -> .cpp assembler\n");
   sys::PrintStackTraceOnErrorSignal();
 
diff --git a/tools/llvmc/llvmc.cpp b/tools/llvmc/llvmc.cpp
index 3b22149..081ae45 100644
--- a/tools/llvmc/llvmc.cpp
+++ b/tools/llvmc/llvmc.cpp
@@ -17,17 +17,16 @@
 #include "CompilerDriver.h"
 #include "Configuration.h"
 #include "llvm/Pass.h"
-#include "llvm/System/Signals.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
+#include "llvm/System/Signals.h"
 #include <iostream>
-
 using namespace llvm;
 
-namespace {
 //===----------------------------------------------------------------------===//
 //===          PHASE OPTIONS
 //===----------------------------------------------------------------------===//
-cl::opt<CompilerDriver::Phases> FinalPhase(cl::Optional,
+static cl::opt<CompilerDriver::Phases> FinalPhase(cl::Optional,
   cl::desc("Choose final phase of compilation:"),
   cl::init(CompilerDriver::LINKING),
   cl::values(
@@ -46,7 +45,7 @@
 //===----------------------------------------------------------------------===//
 //===          OPTIMIZATION OPTIONS
 //===----------------------------------------------------------------------===//
-cl::opt<CompilerDriver::OptimizationLevels> OptLevel(cl::ZeroOrMore,
+static cl::opt<CompilerDriver::OptimizationLevels> OptLevel(cl::ZeroOrMore,
   cl::desc("Choose level of optimization to apply:"),
   cl::init(CompilerDriver::OPT_FAST_COMPILE),
   cl::values(
@@ -70,48 +69,48 @@
 //===          TOOL OPTIONS
 //===----------------------------------------------------------------------===//
 
-cl::list<std::string> PreprocessorToolOpts("Tpre", cl::ZeroOrMore,
+static cl::list<std::string> PreprocessorToolOpts("Tpre", cl::ZeroOrMore,
   cl::desc("Pass specific options to the pre-processor"),
   cl::value_desc("option"));
 
-cl::alias PreprocessorToolOptsAlias("Wp,", cl::ZeroOrMore,
+static cl::alias PreprocessorToolOptsAlias("Wp,", cl::ZeroOrMore,
   cl::desc("Alias for -Tpre"), cl::aliasopt(PreprocessorToolOpts));
 
-cl::list<std::string> TranslatorToolOpts("Ttrn", cl::ZeroOrMore,
+static cl::list<std::string> TranslatorToolOpts("Ttrn", cl::ZeroOrMore,
   cl::desc("Pass specific options to the assembler"),
   cl::value_desc("option"));
 
-cl::list<std::string> AssemblerToolOpts("Tasm", cl::ZeroOrMore,
+static cl::list<std::string> AssemblerToolOpts("Tasm", cl::ZeroOrMore,
   cl::desc("Pass specific options to the assembler"),
   cl::value_desc("option"));
 
-cl::alias AssemblerToolOptsAlias("Wa,", cl::ZeroOrMore,
+static cl::alias AssemblerToolOptsAlias("Wa,", cl::ZeroOrMore,
   cl::desc("Alias for -Tasm"), cl::aliasopt(AssemblerToolOpts));
 
-cl::list<std::string> OptimizerToolOpts("Topt", cl::ZeroOrMore,
+static cl::list<std::string> OptimizerToolOpts("Topt", cl::ZeroOrMore,
   cl::desc("Pass specific options to the optimizer"),
   cl::value_desc("option"));
 
-cl::list<std::string> LinkerToolOpts("Tlnk", cl::ZeroOrMore,
+static cl::list<std::string> LinkerToolOpts("Tlnk", cl::ZeroOrMore,
   cl::desc("Pass specific options to the linker"),
   cl::value_desc("option"));
 
-cl::alias LinkerToolOptsAlias("Wl,", cl::ZeroOrMore,
+static cl::alias LinkerToolOptsAlias("Wl,", cl::ZeroOrMore,
   cl::desc("Alias for -Tlnk"), cl::aliasopt(LinkerToolOpts));
 
-cl::list<std::string> fOpts("f", cl::ZeroOrMore, cl::Prefix,
+static cl::list<std::string> fOpts("f", cl::ZeroOrMore, cl::Prefix,
   cl::desc("Pass through -f options to compiler tools"),
   cl::value_desc("option"));
 
-cl::list<std::string> MOpts("M", cl::ZeroOrMore, cl::Prefix,
+static cl::list<std::string> MOpts("M", cl::ZeroOrMore, cl::Prefix,
   cl::desc("Pass through -M options to compiler tools"),
   cl::value_desc("option"));
 
-cl::list<std::string> WOpts("W", cl::ZeroOrMore, cl::Prefix,
+static cl::list<std::string> WOpts("W", cl::ZeroOrMore, cl::Prefix,
   cl::desc("Pass through -W options to compiler tools"),
   cl::value_desc("option"));
 
-cl::list<std::string> BOpt("B", cl::ZeroOrMore, cl::Prefix,
+static cl::list<std::string> BOpt("B", cl::ZeroOrMore, cl::Prefix,
   cl::desc("Specify path to find llvmc sub-tools"),
   cl::value_desc("dir"));
 
@@ -119,17 +118,17 @@
 //===          INPUT OPTIONS
 //===----------------------------------------------------------------------===//
 
-cl::list<std::string> LibPaths("L", cl::Prefix,
+static cl::list<std::string> LibPaths("L", cl::Prefix,
   cl::desc("Specify a library search path"), cl::value_desc("dir"));
 
-cl::list<std::string> Libraries("l", cl::Prefix,
+static cl::list<std::string> Libraries("l", cl::Prefix,
   cl::desc("Specify base name of libraries to link to"), cl::value_desc("lib"));
 
-cl::list<std::string> Includes("I", cl::Prefix,
+static cl::list<std::string> Includes("I", cl::Prefix,
   cl::desc("Specify location to search for included source"),
   cl::value_desc("dir"));
 
-cl::list<std::string> Defines("D", cl::Prefix,
+static cl::list<std::string> Defines("D", cl::Prefix,
   cl::desc("Specify a pre-processor symbol to define"),
   cl::value_desc("symbol"));
 
@@ -137,22 +136,22 @@
 //===          OUTPUT OPTIONS
 //===----------------------------------------------------------------------===//
 
-cl::opt<std::string> OutputFilename("o",
+static cl::opt<std::string> OutputFilename("o",
   cl::desc("Override output filename"), cl::value_desc("file"));
 
-cl::opt<std::string> OutputMachine("m", cl::Prefix,
+static cl::opt<std::string> OutputMachine("m", cl::Prefix,
   cl::desc("Specify a target machine"), cl::value_desc("machine"));
 
-cl::opt<bool> Native("native", cl::init(false),
+static cl::opt<bool> Native("native", cl::init(false),
   cl::desc("Generative native code instead of bytecode"));
 
-cl::opt<bool> DebugOutput("g", cl::init(false),
+static cl::opt<bool> DebugOutput("g", cl::init(false),
   cl::desc("Generate objects that include debug symbols"));
 
-cl::opt<bool> StripOutput("strip", cl::init(false),
+static cl::opt<bool> StripOutput("strip", cl::init(false),
   cl::desc("Strip all symbols from linked output file"));
 
-cl::opt<std::string> PrintFileName("print-fname", cl::Optional,
+static cl::opt<std::string> PrintFileName("print-fname", cl::Optional,
   cl::value_desc("file"),
   cl::desc("Print the full path for the option's value"));
 
@@ -160,28 +159,28 @@
 //===          INFORMATION OPTIONS
 //===----------------------------------------------------------------------===//
 
-cl::opt<bool> DryRun("dry-run", cl::Optional, cl::init(false),
+static cl::opt<bool> DryRun("dry-run", cl::Optional, cl::init(false),
   cl::desc("Do everything but perform the compilation actions"));
 
-cl::alias DryRunAlias("y", cl::Optional,
+static cl::alias DryRunAlias("y", cl::Optional,
   cl::desc("Alias for -dry-run"), cl::aliasopt(DryRun));
 
-cl::opt<bool> Verbose("verbose", cl::Optional, cl::init(false),
+static cl::opt<bool> Verbose("verbose", cl::Optional, cl::init(false),
   cl::desc("Print out each action taken"));
 
-cl::alias VerboseAlias("v", cl::Optional,
+static cl::alias VerboseAlias("v", cl::Optional,
   cl::desc("Alias for -verbose"), cl::aliasopt(Verbose));
 
-cl::opt<bool> Debug("debug", cl::Optional, cl::init(false),
+static cl::opt<bool> Debug("debug", cl::Optional, cl::init(false),
   cl::Hidden, cl::desc("Print out debugging information"));
 
-cl::alias DebugAlias("d", cl::Optional,
+static cl::alias DebugAlias("d", cl::Optional,
   cl::desc("Alias for -debug"), cl::aliasopt(Debug));
 
-cl::opt<bool> TimeActions("time-actions", cl::Optional, cl::init(false),
+static cl::opt<bool> TimeActions("time-actions", cl::Optional, cl::init(false),
   cl::desc("Print execution time for each action taken"));
 
-cl::opt<bool> ShowStats("stats", cl::Optional, cl::init(false),
+static cl::opt<bool> ShowStats("stats", cl::Optional, cl::init(false),
   cl::desc("Print statistics accumulated during optimization"));
 
 //===----------------------------------------------------------------------===//
@@ -215,7 +214,7 @@
 //===----------------------------------------------------------------------===//
 //===          GetFileType - determine type of a file
 //===----------------------------------------------------------------------===//
-const std::string GetFileType(const std::string& fname, unsigned pos) {
+static const std::string GetFileType(const std::string& fname, unsigned pos) {
   static std::vector<std::string>::iterator langIt = Languages.begin();
   static std::string CurrLang = "";
 
@@ -236,9 +235,7 @@
   return fname.substr(fname.rfind('.', fname.size()) + 1);
 }
 
-} // end anonymous namespace
-
-void handleTerminatingOptions(CompilerDriver* CD) {
+static void handleTerminatingOptions(CompilerDriver* CD) {
   if (!PrintFileName.empty()) {
     sys::Path path = CD->GetPathForLinkageItem(PrintFileName, false);
     std::string p = path.toString();
@@ -252,6 +249,7 @@
 
 /// @brief The main program for llvmc
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   // Make sure we print stack trace if we get bad signals
   sys::PrintStackTraceOnErrorSignal();
 
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index d0accb5..6afdc68 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -22,6 +22,7 @@
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Support/PassNameParser.h"
 #include "llvm/System/Signals.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/SystemUtils.h"
@@ -156,6 +157,7 @@
 // main for opt
 //
 int main(int argc, char **argv) {
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv,
       " llvm .bc -> .bc modular optimizer and analysis printer \n");
