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