1e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao/* 2e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Copyright 2011, The Android Open Source Project 3e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * 4e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 5e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * you may not use this file except in compliance with the License. 6e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * You may obtain a copy of the License at 7e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * 8e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 9e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * 10e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * Unless required by applicable law or agreed to in writing, software 11e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 12e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * See the License for the specific language governing permissions and 14e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao * limitations under the License. 15e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao */ 16e2cdbc6710aa43475f17e73aba143ceb786e968cShih-wei Liao 17fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa#ifndef ELF_SECTION_BITS_H 18fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa#define ELF_SECTION_BITS_H 19fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 2058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include "ELFTypes.h" 21fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa#include "ELFSection.h" 2274f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien#include "MemChunk.h" 23fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 249e6e26f6b28dfdceba2b93c536e6c5932be3ed2dTDYa#include <llvm/ADT/OwningPtr.h> 259a496791c2cc9efef30e30716e259195655cd343Logan Chien 26a9ab5889e842a49ff16d06594efe96b0210fe1f7Logan Chientemplate <unsigned Bitwidth> 27fca29b439931b32ac7864d58c9a34b87ad852cb2TDYaclass ELFSectionBits : public ELFSection<Bitwidth> { 28fca29b439931b32ac7864d58c9a34b87ad852cb2TDYaprotected: 2974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien ELFSectionHeader<Bitwidth> const *sh; 3074f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien MemChunk chunk; 31fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 32fca29b439931b32ac7864d58c9a34b87ad852cb2TDYaprotected: 3374f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien ELFSectionBits() : sh(NULL) { } 34fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 35fca29b439931b32ac7864d58c9a34b87ad852cb2TDYapublic: 3674f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien virtual void print() const; 3774f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien 3874f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien bool protect(); 3974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien 4074f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien unsigned char const *getBuffer() const { 4174f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien return chunk.getBuffer(); 4274f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien } 43fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 4474f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien unsigned char *getBuffer() { 4574f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien return chunk.getBuffer(); 4674f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien } 47fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 48fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa unsigned char &operator[](size_t index) { 4974f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien return chunk[index]; 50fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa } 51fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 52fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa unsigned char const &operator[](size_t index) const { 5374f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien return chunk[index]; 54fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa } 55fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 56fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa size_t size() const { 5774f7a939f44d926babd52f59978e6b093e4bb2d0Logan Chien return chunk.size(); 58fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa } 59fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 60fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa}; 61fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 62cf6522329b7a93193fbef761386bdaa4a07206f8Logan Chien#include "impl/ELFSectionBits.hxx" 63fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa 64fca29b439931b32ac7864d58c9a34b87ad852cb2TDYa#endif // ELF_SECTION_BITS_H 65