ELFSectionHeaderTable.h revision e2cdbc6710aa43475f17e73aba143ceb786e968c
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
1761dfca9e892597db79889addb7a3abf54cd50588Logan Chien#ifndef ELF_SECTION_HEADER_TABLE_H
1861dfca9e892597db79889addb7a3abf54cd50588Logan Chien#define ELF_SECTION_HEADER_TABLE_H
1961dfca9e892597db79889addb7a3abf54cd50588Logan Chien
2058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include "ELFTypes.h"
2158611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien
221f100419d794fa433336190aa47bb0862f93f978TDYa#include <llvm/ADT/OwningPtr.h>
23921465005aca46a100d137c9608a0aedd846e290Logan Chien
2461dfca9e892597db79889addb7a3abf54cd50588Logan Chien#include <vector>
25541763d9f2395cf4170d6f8fad0b58098f35c70cTDYa#include <string>
2661dfca9e892597db79889addb7a3abf54cd50588Logan Chien
27a9ab5889e842a49ff16d06594efe96b0210fe1f7Logan Chientemplate <unsigned Bitwidth>
288ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chienclass ELFSectionHeaderTable {
2958611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chienpublic:
3058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELF_TYPE_INTRO_TO_TEMPLATE_SCOPE(Bitwidth);
3158611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien
3261dfca9e892597db79889addb7a3abf54cd50588Logan Chienprivate:
3358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  std::vector<ELFSectionHeaderTy *> table;
3461dfca9e892597db79889addb7a3abf54cd50588Logan Chien
3561dfca9e892597db79889addb7a3abf54cd50588Logan Chienprivate:
3661dfca9e892597db79889addb7a3abf54cd50588Logan Chien  ELFSectionHeaderTable() {
3761dfca9e892597db79889addb7a3abf54cd50588Logan Chien  }
3861dfca9e892597db79889addb7a3abf54cd50588Logan Chien
3961dfca9e892597db79889addb7a3abf54cd50588Logan Chienpublic:
40bafb650811e8bcf6fbc014face6e127502869e68Logan Chien  ~ELFSectionHeaderTable();
41bafb650811e8bcf6fbc014face6e127502869e68Logan Chien
4261dfca9e892597db79889addb7a3abf54cd50588Logan Chien  template <typename Archiver>
4358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  static ELFSectionHeaderTableTy *read(Archiver &AR, ELFObjectTy *owner);
4461dfca9e892597db79889addb7a3abf54cd50588Logan Chien
4558611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy const *operator[](size_t i) const {
468ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien    return table[i];
478ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien  }
488ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien
4958611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy *operator[](size_t i) {
508ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien    return table[i];
518ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien  }
52af521b05a143c96604dbb7488e155c5248e34462Logan Chien
5358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy const *getByName(const std::string &str) const;
5458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy *getByName(const std::string &str);
55541763d9f2395cf4170d6f8fad0b58098f35c70cTDYa
568ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien  void print() const;
5761dfca9e892597db79889addb7a3abf54cd50588Logan Chien};
5861dfca9e892597db79889addb7a3abf54cd50588Logan Chien
59bafb650811e8bcf6fbc014face6e127502869e68Logan Chien#include "impl/ELFSectionHeaderTable.hxx"
608ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien
6161dfca9e892597db79889addb7a3abf54cd50588Logan Chien#endif // ELF_SECTION_HEADER_TABLE_H
62