diff --git a/llvm/lib/System/DynamicLibrary.cpp b/llvm/lib/System/DynamicLibrary.cpp
new file mode 100644
index 0000000..ca7bee6
--- /dev/null
+++ b/llvm/lib/System/DynamicLibrary.cpp
@@ -0,0 +1,78 @@
+//===-- DynamicLibrary.cpp - Runtime link/load libraries --------*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Reid Spencer and is distributed under the 
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
+//
+//  This header file implements the operating system DynamicLibrary concept.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/System/DynamicLibrary.h"
+#include "llvm/Config/dlfcn.h"
+#include <cassert>
+
+//===----------------------------------------------------------------------===//
+//=== WARNING: Implementation here must contain only TRULY operating system
+//===          independent code. 
+//===----------------------------------------------------------------------===//
+
+#ifdef HAVE_LTDL_H
+
+namespace llvm {
+
+using namespace sys;
+
+#ifdef HAVE_LT_DLOPEN
+
+DynamicLibrary::DynamicLibrary(const char*filename) : handle(0) {
+  if (0 != lt_dlinit())
+    throw std::string(lt_dlerror());
+
+  handle = lt_dlopen(filename);
+
+  if (handle == 0)
+    handle = lt_dlopenext(filename);
+
+  if (handle == 0)
+    throw std::string("Can't open dynamic library:") + filename;
+}
+
+DynamicLibrary::~DynamicLibrary() {
+  if (handle)
+    lt_dlclose((lt_dlhandle)handle);
+
+  lt_dlexit();
+}
+
+void *DynamicLibrary::GetAddressOfSymbol(const char *symbolName) {
+  assert(handle != 0 && "Invalid DynamicLibrary handle");
+  return lt_dlsym((lt_dlhandle) handle,symbolName);
+}
+
+#else
+DynamicLibrary::DynamicLibrary(const char*filename) : handle(0) {
+  assert(!"Have ltdl.h but not libltdl.a!");
+}
+
+DynamicLibrary::~DynamicLibrary() {
+  assert(!"Have ltdl.h but not libltdl.a!");
+}
+
+void *DynamicLibrary::GetAddressOfSymbol(const char *symbolName) {
+  assert(!"Have ltdl.h but not libltdl.a!");
+  return 0;
+}
+
+#endif // HAVE_DLOPEN
+
+} // namespace llvm
+
+#else // HAVE_LTDL_H
+
+#include "platform/DynamicLibrary.cpp"
+
+#endif
