Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp	(revision 139933)
+++ lib/Driver/ToolChains.cpp	(working copy)
@@ -1513,6 +1513,14 @@
     std::string t3 = "/usr/lib/" + GccTriple + "/gcc/" + Suffix;
     if (!llvm::sys::fs::exists(t3 + "/crtbegin.o", Exists) && Exists)
       return t3;
+    // For ubuntu 11.04
+    if (GccTriple == "i386-linux-gnu") {
+      std::string t4 =
+          std::string("/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/") +
+          GccVersions[i];
+      if (!llvm::sys::fs::exists(t4 + "/crtbegin.o", Exists) && Exists)
+        return t4;
+    }
   }
   return "";
 }
@@ -1578,6 +1586,10 @@
   } else if (Arch == llvm::Triple::x86) {
     if (!llvm::sys::fs::exists("/usr/lib/gcc/i686-linux-gnu", Exists) && Exists)
       GccTriple = "i686-linux-gnu";
+    // For ubuntu-11.04 x86
+    else if (!llvm::sys::fs::exists("/usr/lib/i386-linux-gnu", Exists) &&
+             Exists)
+      GccTriple = "i386-linux-gnu";
     else if (!llvm::sys::fs::exists("/usr/lib/gcc/i686-pc-linux-gnu", Exists) &&
              Exists)
       GccTriple = "i686-pc-linux-gnu";
@@ -1793,7 +1805,8 @@
     case Action::CompileJobClass:
       T = new tools::Clang(*this); break;
     case Action::AssembleJobClass:
-      if (!UseIntegratedAs && getTriple().getEnvironment() == llvm::Triple::MachO)
+      if (!UseIntegratedAs && getTriple().getEnvironment() ==
+          llvm::Triple::MachO)
         T = new tools::darwin::Assemble(*this);
       else
         T = new tools::ClangAs(*this);
