diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index 0da441f..e809487 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -154,7 +154,7 @@
 
   ArgList *Args = ParseArgStrings(Start, End);
 
-  Host = Driver::GetHostInfo(HostTriple);
+  Host = GetHostInfo(HostTriple);
   DefaultToolChain = Host->getToolChain(*Args);
 
   // FIXME: This behavior shouldn't be here.
@@ -816,7 +816,7 @@
   return llvm::sys::Path(Name);
 }
 
-const HostInfo *Driver::GetHostInfo(const char *Triple) {
+const HostInfo *Driver::GetHostInfo(const char *Triple) const {
   // Dice into arch, platform, and OS. This matches 
   //  arch,platform,os = '(.*?)-(.*?)-(.*?)'
   // and missing fields are left empty.
@@ -842,7 +842,9 @@
     Arch = "x86_64";
   
   if (memcmp(&OS[0], "darwin", 6) == 0)
-    return createDarwinHostInfo(Arch.c_str(), Platform.c_str(), OS.c_str());
+    return createDarwinHostInfo(*this, Arch.c_str(), Platform.c_str(), 
+                                OS.c_str());
     
-  return createUnknownHostInfo(Arch.c_str(), Platform.c_str(), OS.c_str());
+  return createUnknownHostInfo(*this, Arch.c_str(), Platform.c_str(), 
+                               OS.c_str());
 }
diff --git a/lib/Driver/HostInfo.cpp b/lib/Driver/HostInfo.cpp
index 5069bda..9e82138 100644
--- a/lib/Driver/HostInfo.cpp
+++ b/lib/Driver/HostInfo.cpp
@@ -21,9 +21,9 @@
  
 using namespace clang::driver;
 
-HostInfo::HostInfo(const char *_Arch, const char *_Platform,
+HostInfo::HostInfo(const Driver &D, const char *_Arch, const char *_Platform,
                    const char *_OS) 
-  : Arch(_Arch), Platform(_Platform), OS(_OS) 
+  : TheDriver(D), Arch(_Arch), Platform(_Platform), OS(_OS) 
 {
   
 }
@@ -47,7 +47,8 @@
   mutable llvm::StringMap<ToolChain*> ToolChains;
 
 public:
-  DarwinHostInfo(const char *Arch, const char *Platform, const char *OS);
+  DarwinHostInfo(const Driver &D, const char *Arch, 
+                 const char *Platform, const char *OS);
 
   virtual bool useDriverDriver() const;
 
@@ -55,9 +56,9 @@
                                   const char *ArchName) const;
 };
 
-DarwinHostInfo::DarwinHostInfo(const char *_Arch, const char *_Platform,
-                               const char *_OS) 
-  : HostInfo(_Arch, _Platform, _OS) {
+DarwinHostInfo::DarwinHostInfo(const Driver &D, const char *_Arch, 
+                               const char *_Platform, const char *_OS) 
+  : HostInfo(D, _Arch, _Platform, _OS) {
   
   assert((getArchName() == "i386" || getArchName() == "x86_64" || 
           getArchName() == "ppc" || getArchName() == "ppc64") &&
@@ -118,7 +119,8 @@
   mutable llvm::StringMap<ToolChain*> ToolChains;
 
 public:
-  UnknownHostInfo(const char *Arch, const char *Platform, const char *OS);
+  UnknownHostInfo(const Driver &D, const char *Arch, 
+                  const char *Platform, const char *OS);
 
   virtual bool useDriverDriver() const;
 
@@ -126,9 +128,9 @@
                                   const char *ArchName) const;
 };
 
-UnknownHostInfo::UnknownHostInfo(const char *Arch, const char *Platform,
-                                 const char *OS) 
-  : HostInfo(Arch, Platform, OS) {
+UnknownHostInfo::UnknownHostInfo(const Driver &D, const char *Arch, 
+                                 const char *Platform, const char *OS) 
+  : HostInfo(D, Arch, Platform, OS) {
 }
 
 bool UnknownHostInfo::useDriverDriver() const { 
@@ -161,14 +163,16 @@
 
 }
 
-const HostInfo *clang::driver::createDarwinHostInfo(const char *Arch, 
+const HostInfo *clang::driver::createDarwinHostInfo(const Driver &D,
+                                                    const char *Arch, 
                                                     const char *Platform, 
                                                     const char *OS) {
-  return new DarwinHostInfo(Arch, Platform, OS);
+  return new DarwinHostInfo(D, Arch, Platform, OS);
 }
 
-const HostInfo *clang::driver::createUnknownHostInfo(const char *Arch, 
+const HostInfo *clang::driver::createUnknownHostInfo(const Driver &D,
+                                                     const char *Arch, 
                                                      const char *Platform, 
                                                      const char *OS) {
-  return new UnknownHostInfo(Arch, Platform, OS);
+  return new UnknownHostInfo(D, Arch, Platform, OS);
 }
