First pass of ImageWriter Change-Id: I4f189587a2e3cc1c265200b8fa64321b299947eb
diff --git a/src/object_bitmap.cc b/src/object_bitmap.cc index 85fee73..fc3c2ee4 100644 --- a/src/object_bitmap.cc +++ b/src/object_bitmap.cc
@@ -21,8 +21,6 @@ namespace art { -#define CLZ(x) __builtin_clz(x) - HeapBitmap* HeapBitmap::Create(byte* base, size_t length) { scoped_ptr<HeapBitmap> bitmap(new HeapBitmap(base, length)); if (!bitmap->Init(base, length)) { @@ -38,12 +36,12 @@ bool HeapBitmap::Init(const byte* base, size_t max_size) { CHECK(base != NULL); size_t length = HB_OFFSET_TO_INDEX(max_size) * kWordSize; - void* words = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - if (words == MAP_FAILED) { + mem_map_.reset(MemMap::Map(length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS)); + if (mem_map_ == NULL) { LOG(ERROR) << "mmap failed"; return false; } - words_ = static_cast<unsigned long*>(words); + words_ = reinterpret_cast<word*>(mem_map_->GetAddress()); num_bytes_ = length; base_ = reinterpret_cast<uintptr_t>(base); max_ = base_ - 1; @@ -51,15 +49,7 @@ } // Clean up any resources associated with the bitmap. -HeapBitmap::~HeapBitmap() { - if (words_ != NULL) { - int result = munmap(words_, num_bytes_); - if (result == -1) { - PLOG(WARNING) << "munmap failed"; - } - words_ = NULL; - } -} +HeapBitmap::~HeapBitmap() {} // Fill the bitmap with zeroes. Returns the bitmap's memory to the // system as a side-effect. @@ -169,8 +159,8 @@ void** pb = pointer_buf; size_t start = HB_OFFSET_TO_INDEX(base - live_bitmap.base_); size_t end = HB_OFFSET_TO_INDEX(max - live_bitmap.base_); - unsigned long* live = live_bitmap.words_; - unsigned long* mark = mark_bitmap.words_; + word* live = live_bitmap.words_; + word* mark = mark_bitmap.words_; for (size_t i = start; i <= end; i++) { unsigned long garbage = live[i] & ~mark[i]; if (garbage != 0) {