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