119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===- MemoryObject.cpp - Abstract memory interface -----------------------===// 219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// The LLVM Compiler Infrastructure 419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file is distributed under the University of Illinois Open Source 619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// License. See LICENSE.TXT for details. 719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/Support/MemoryObject.h" 1119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanusing namespace llvm; 1219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1319bac1e08be200c31efd26f0f5fd144c9b3eefd3John BaumanMemoryObject::~MemoryObject() { 1419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 1519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanint MemoryObject::readBytes(uint64_t address, 1719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman uint64_t size, 1819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman uint8_t* buf, 1919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman uint64_t* copied) const { 2019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman uint64_t current = address; 2119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman uint64_t limit = getBase() + getExtent(); 2219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (current + size > limit) 2419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman return -1; 2519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman while (current - address < size) { 2719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (readByte(current, &buf[(current - address)])) 2819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman return -1; 2919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman current++; 3119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 3219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (copied) 3419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman *copied = current - address; 3519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman return 0; 3719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 38