1 /* Copyright (C) 2007-2010 The Android Open Source Project
2 **
3 ** This software is licensed under the terms of the GNU General Public
4 ** License version 2, as published by the Free Software Foundation, and
5 ** may be copied, distributed, and modified under those terms.
6 **
7 ** This program is distributed in the hope that it will be useful,
8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 ** GNU General Public License for more details.
11 */
12
13 /*
14 * Contains implementation of a class ElfMappedSection, that encapsulates
15 * a section of an ELF file, mapped to memory.
16 */
17
18 #include "elf_defs.h"
19 #include "elf_mapped_section.h"
20
ElfMappedSection()21 ElfMappedSection::ElfMappedSection()
22 : mapped_at_(NULL),
23 data_(NULL),
24 size_(0) {
25 }
26
~ElfMappedSection()27 ElfMappedSection::~ElfMappedSection() {
28 if (mapped_at_ != NULL) {
29 mapfile_unmap(mapped_at_, diff_ptr(mapped_at_, data_) + size_);
30 }
31 }
32
map(MapFile * handle,Elf_Xword offset,Elf_Word size)33 bool ElfMappedSection::map(MapFile* handle,
34 Elf_Xword offset,
35 Elf_Word size) {
36 void* section_ptr;
37 size_t mapped_bytes;
38 mapped_at_ = mapfile_map(handle, offset, size, PROT_READ,
39 §ion_ptr, &mapped_bytes);
40 if (mapped_at_ == NULL) {
41 return false;
42 }
43
44 data_ = section_ptr;
45 size_ = (Elf_Word)mapped_bytes;
46
47 return true;
48 }
49