/* Copyright (C) 2007-2010 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
*/
/*
* Contains implementation of a class ElfMappedSection, that encapsulates
* a section of an ELF file, mapped to memory.
*/
#include "elf_defs.h"
#include "elf_mapped_section.h"
ElfMappedSection::ElfMappedSection()
: mapped_at_(NULL),
data_(NULL),
size_(0) {
}
ElfMappedSection::~ElfMappedSection() {
if (mapped_at_ != NULL) {
mapfile_unmap(mapped_at_, diff_ptr(mapped_at_, data_) + size_);
}
}
bool ElfMappedSection::map(MapFile* handle,
Elf_Xword offset,
Elf_Word size) {
void* section_ptr;
size_t mapped_bytes;
mapped_at_ = mapfile_map(handle, offset, size, PROT_READ,
§ion_ptr, &mapped_bytes);
if (mapped_at_ == NULL) {
return false;
}
data_ = section_ptr;
size_ = (Elf_Word)mapped_bytes;
return true;
}