llvm-cov: Handle missing source files as GCOV does
[oota-llvm.git] / include / llvm / Support / MemoryObject.h
index f8f29be5a7b354a3be55dbf058bfd60adf967c71..17aa9d2f675a485104b10c76561485c185a38d6b 100644 (file)
@@ -7,8 +7,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef MEMORYOBJECT_H
-#define MEMORYOBJECT_H
+#ifndef LLVM_SUPPORT_MEMORYOBJECT_H
+#define LLVM_SUPPORT_MEMORYOBJECT_H
 
 #include "llvm/Support/DataTypes.h"
 
@@ -17,65 +17,48 @@ namespace llvm {
 /// MemoryObject - Abstract base class for contiguous addressable memory.
 ///   Necessary for cases in which the memory is in another process, in a
 ///   file, or on a remote machine.
+///   All size and offset parameters are uint64_ts, to allow 32-bit processes
+///   access to 64-bit address spaces.
 class MemoryObject {
 public:
-  /// Constructor     - Override as necessary.
-  MemoryObject() {
-  }
-  
+  /// Destructor      - Override as necessary.
+  virtual ~MemoryObject();
+
   /// getBase         - Returns the lowest valid address in the region.
   ///
   /// @result         - The lowest valid address.
   virtual uint64_t getBase() const = 0;
-  
+
   /// getExtent       - Returns the size of the region in bytes.  (The region is
-  ///                   contiguous, so the highest valid address of the region 
+  ///                   contiguous, so the highest valid address of the region
   ///                   is getBase() + getExtent() - 1).
   ///
   /// @result         - The size of the region.
   virtual uint64_t getExtent() const = 0;
-  
+
   /// readByte        - Tries to read a single byte from the region.
   ///
   /// @param address  - The address of the byte, in the same space as getBase().
   /// @param ptr      - A pointer to a byte to be filled in.  Must be non-NULL.
   /// @result         - 0 if successful; -1 if not.  Failure may be due to a
   ///                   bounds violation or an implementation-specific error.
-  virtual int readByte(uint64_t address, uint8_tptr) const = 0;
-  
-  /// readByte        - Tries to read a contiguous range of bytes from the
+  virtual int readByte(uint64_t address, uint8_t *ptr) const = 0;
+
+  /// readBytes       - Tries to read a contiguous range of bytes from the
   ///                   region, up to the end of the region.
   ///                   You should override this function if there is a quicker
   ///                   way than going back and forth with individual bytes.
   ///
   /// @param address  - The address of the first byte, in the same space as 
   ///                   getBase().
-  /// @param size     - The maximum number of bytes to copy.
+  /// @param size     - The number of bytes to copy.
   /// @param buf      - A pointer to a buffer to be filled in.  Must be non-NULL
   ///                   and large enough to hold size bytes.
-  /// @result         - The number of bytes copied if successful; (uint64_t)-1
-  ///                   if not.
-  ///                   Failure may be due to a bounds violation or an
-  ///                   implementation-specific error.
-  virtual uint64_t readBytes(uint64_t address,
-                             uint64_t size,
-                             uint8_t* buf) const {
-    uint64_t current = address;
-    uint64_t limit = getBase() + getExtent();
-    uint64_t ret = 0;
-    
-    while(current - address < size && current < limit) {
-      if(readByte(current, &buf[(current - address)]))
-        return (uint64_t)-1;
-      
-      ret++;
-    }
-    
-    return ret;
-  }
+  /// @result         - 0 if successful; -1 if not.  Failure may be due to a
+  ///                   bounds violation or an implementation-specific error.
+  virtual int readBytes(uint64_t address, uint64_t size, uint8_t *buf) const;
 };
 
 }
 
 #endif
-