diff --git a/lib/Debugger/FDHandle.cpp b/lib/Debugger/FDHandle.cpp
new file mode 100644
index 0000000..47322b0
--- /dev/null
+++ b/lib/Debugger/FDHandle.cpp
@@ -0,0 +1,34 @@
+//===- Support/FileUtilities.cpp - File System Utilities ------------------===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
+//
+// This file implements a family of utility functions which are useful for doing
+// various things with files.
+//
+//===----------------------------------------------------------------------===//
+
+#include "FDHandle.h"
+#include <unistd.h>
+
+using namespace llvm;
+
+//===----------------------------------------------------------------------===//
+// FDHandle class implementation
+//
+
+FDHandle::~FDHandle() throw() {
+  if (FD != -1) 
+    ::close(FD);
+}
+
+FDHandle &FDHandle::operator=(int fd) throw() {
+  if (FD != -1) 
+    ::close(FD);
+  FD = fd;
+  return *this;
+}
diff --git a/lib/Debugger/FDHandle.h b/lib/Debugger/FDHandle.h
new file mode 100644
index 0000000..cf95874
--- /dev/null
+++ b/lib/Debugger/FDHandle.h
@@ -0,0 +1,62 @@
+//===- lib/Debugger/FDHandle.h - File Descriptor Handle ---------*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
+//
+// This file defines a family of utility functions which are useful for doing
+// various things with files.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LIB_DEBUGGER_FDHANDLE_H
+#define LIB_DEBUGGER_FDHANDLE_H
+
+#include "llvm/System/Path.h"
+
+namespace llvm {
+
+/// FDHandle - Simple handle class to make sure a file descriptor gets closed
+/// when the object is destroyed.  This handle acts similarly to an
+/// std::auto_ptr, in that the copy constructor and assignment operators
+/// transfer ownership of the handle.  This means that FDHandle's do not have
+/// value semantics.
+///
+class FDHandle {
+  int FD;
+public:
+  FDHandle() : FD(-1) {}
+  FDHandle(int fd) : FD(fd) {}
+  FDHandle(FDHandle &RHS) : FD(RHS.FD) {
+    RHS.FD = -1;       // Transfer ownership
+  }
+
+  ~FDHandle() throw();
+
+  /// get - Get the current file descriptor, without releasing ownership of it.
+  int get() const { return FD; }
+  operator int() const { return FD; }
+
+  FDHandle &operator=(int fd) throw();
+
+  FDHandle &operator=(FDHandle &RHS) {
+    int fd = RHS.FD;
+    RHS.FD = -1;       // Transfer ownership
+    return operator=(fd);
+  }
+
+  /// release - Take ownership of the file descriptor away from the FDHandle
+  /// object, so that the file is not closed when the FDHandle is destroyed.
+  int release() {
+    int Ret = FD;
+    FD = -1;
+    return Ret;
+  }
+};
+
+} // End llvm namespace
+
+#endif
