commit 6a9f9993df14bcd2005f48f0429625c571ab5c6f
Author: Richard Barton <richard.barton@arm.com>
Date:   Fri Dec 13 19:02:22 2013 +0000

    Only honour LIBRARY_PATH when targeting native architecture.

diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h
index 84e0b55..ceb1c76 100644
--- a/include/clang/Driver/ToolChain.h
+++ b/include/clang/Driver/ToolChain.h
@@ -113,6 +113,9 @@ public:
   StringRef getPlatform() const { return Triple.getVendorName(); }
   StringRef getOS() const { return Triple.getOSName(); }
 
+  /// \brief Returns true if the toolchain is targeting a non-native architecture.
+  bool isCrossCompiling() const;
+
   /// \brief Provide the default architecture name (as expected by -arch) for
   /// this toolchain. Note t
   std::string getDefaultUniversalArchName() const;
diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp
index 0b62f7a..29888bb 100644
--- a/lib/Driver/ToolChain.cpp
+++ b/lib/Driver/ToolChain.cpp
@@ -154,6 +154,20 @@ bool ToolChain::HasNativeLLVMSupport() const {
   return false;
 }
 
+bool ToolChain::isCrossCompiling() const {
+  llvm::Triple HostTriple(LLVM_HOST_TRIPLE);
+  switch (HostTriple.getArch()) {
+      // The A32/T32/T16 instruction sets are not seperate architectures in 
+      // this context.
+      case llvm::Triple::arm:
+      case llvm::Triple::thumb:
+          return getArch() != llvm::Triple::arm &&
+                 getArch() != llvm::Triple::thumb;
+      default:
+          return HostTriple.getArch() != getArch();
+  }
+}
+
 ObjCRuntime ToolChain::getDefaultObjCRuntime(bool isNonFragile) const {
   return ObjCRuntime(isNonFragile ? ObjCRuntime::GNUstep : ObjCRuntime::GCC,
                      VersionTuple());
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index d32a422..0b600c6 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -190,7 +190,9 @@ static void AddLinkerInputs(const ToolChain &TC,
   }
 
   // LIBRARY_PATH - included following the user specified library paths.
-  addDirectoryList(Args, CmdArgs, "-L", "LIBRARY_PATH");
+  //                and only supported on native toolchains.
+  if (!TC.isCrossCompiling())
+    addDirectoryList(Args, CmdArgs, "-L", "LIBRARY_PATH");
 }
 
 /// \brief Determine whether Objective-C automated reference counting is
diff --git a/test/Driver/linker-opts.c b/test/Driver/linker-opts.c
index 7668a75..3fc95ec 100644
--- a/test/Driver/linker-opts.c
+++ b/test/Driver/linker-opts.c
@@ -4,3 +4,4 @@
 // GCC driver is used as linker on cygming. It should be aware of LIBRARY_PATH.
 // XFAIL: win32
 // REQUIRES: clang-driver
+// REQUIRES: native
