/* 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; | |
} |