diff --git a/include/llvm/Support/raw_ostream.h b/include/llvm/Support/raw_ostream.h
index 96adc46..b67d126 100644
--- a/include/llvm/Support/raw_ostream.h
+++ b/include/llvm/Support/raw_ostream.h
@@ -54,6 +54,9 @@
     delete [] OutBufStart;
   }
 
+  /// tell - Return the current offset with the file.
+  uint64_t tell() { return current_pos() + GetNumBytesInBuffer(); }
+
   //===--------------------------------------------------------------------===//
   // Configuration Interface
   //===--------------------------------------------------------------------===//
@@ -179,6 +182,10 @@
   // An out of line virtual method to provide a home for the class vtable.
   virtual void handle();
 
+  /// current_pos - Return the current position within the stream, not
+  /// counting the bytes currently in the buffer.
+  virtual uint64_t current_pos() = 0;
+
   //===--------------------------------------------------------------------===//
   // Private Interface
   //===--------------------------------------------------------------------===//
@@ -202,6 +209,11 @@
 
   /// write_impl - See raw_ostream::write_impl.
   virtual void write_impl(const char *Ptr, unsigned Size);
+
+  /// current_pos - Return the current position within the stream, not
+  /// counting the bytes currently in the buffer.
+  virtual uint64_t current_pos() { return pos; }
+
 public:
   /// raw_fd_ostream - Open the specified file for writing. If an
   /// error occurs, information about the error is put into ErrorInfo,
@@ -271,9 +283,17 @@
 
   /// write_impl - See raw_ostream::write_impl.
   virtual void write_impl(const char *Ptr, unsigned Size);
+
+  /// current_pos - Return the current position within the stream, not
+  /// counting the bytes currently in the buffer.
+  virtual uint64_t current_pos();
+
 public:
   raw_os_ostream(std::ostream &O) : OS(O) {}
   ~raw_os_ostream();
+
+  /// tell - Return the current offset with the stream.
+  uint64_t tell();
 };
 
 /// raw_string_ostream - A raw_ostream that writes to an std::string.  This is a
@@ -283,10 +303,17 @@
 
   /// write_impl - See raw_ostream::write_impl.
   virtual void write_impl(const char *Ptr, unsigned Size);
+
+  /// current_pos - Return the current position within the stream, not
+  /// counting the bytes currently in the buffer.
+  virtual uint64_t current_pos() { return OS.size(); }
 public:
   raw_string_ostream(std::string &O) : OS(O) {}
   ~raw_string_ostream();
 
+  /// tell - Return the current offset with the stream.
+  uint64_t tell() { return OS.size() + GetNumBytesInBuffer(); }
+
   /// str - Flushes the stream contents to the target string and returns
   ///  the string's reference.
   std::string& str() {
@@ -302,9 +329,16 @@
 
   /// write_impl - See raw_ostream::write_impl.
   virtual void write_impl(const char *Ptr, unsigned Size);
+
+  /// current_pos - Return the current position within the stream, not
+  /// counting the bytes currently in the buffer.
+  virtual uint64_t current_pos();
 public:
   raw_svector_ostream(SmallVectorImpl<char> &O) : OS(O) {}
   ~raw_svector_ostream();
+
+  /// tell - Return the current offset with the stream.
+  uint64_t tell();
 };
 
 } // end llvm namespace
diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp
index f62a31d..6ac37bc 100644
--- a/lib/Support/raw_ostream.cpp
+++ b/lib/Support/raw_ostream.cpp
@@ -339,6 +339,12 @@
   OS.write(Ptr, Size);
 }
 
+uint64_t raw_os_ostream::current_pos() { return OS.tellp(); }
+
+uint64_t raw_os_ostream::tell() { 
+  return (uint64_t)OS.tellp() + GetNumBytesInBuffer(); 
+}
+
 //===----------------------------------------------------------------------===//
 //  raw_string_ostream
 //===----------------------------------------------------------------------===//
@@ -363,3 +369,8 @@
   OS.append(Ptr, Ptr + Size);
 }
 
+uint64_t raw_svector_ostream::current_pos() { return OS.size(); }
+
+uint64_t raw_svector_ostream::tell() { 
+  return OS.size() + GetNumBytesInBuffer(); 
+}
