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