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> 2332f7d036daa15302abd64e94fcb2dc718b375020TDYa#include <llvm/ADT/StringMap.h> 24921465005aca46a100d137c9608a0aedd846e290Logan Chien 2561dfca9e892597db79889addb7a3abf54cd50588Logan Chien#include <vector> 26541763d9f2395cf4170d6f8fad0b58098f35c70cTDYa#include <string> 2761dfca9e892597db79889addb7a3abf54cd50588Logan Chien 28a9ab5889e842a49ff16d06594efe96b0210fe1f7Logan Chientemplate <unsigned Bitwidth> 298ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chienclass ELFSectionHeaderTable { 3058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chienpublic: 3158611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien ELF_TYPE_INTRO_TO_TEMPLATE_SCOPE(Bitwidth); 3258611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien 3361dfca9e892597db79889addb7a3abf54cd50588Logan Chienprivate: 3458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien std::vector<ELFSectionHeaderTy *> table; 3532f7d036daa15302abd64e94fcb2dc718b375020TDYa llvm::StringMap<ELFSectionHeaderTy *> name_map; 3661dfca9e892597db79889addb7a3abf54cd50588Logan Chien 3761dfca9e892597db79889addb7a3abf54cd50588Logan Chienprivate: 3861dfca9e892597db79889addb7a3abf54cd50588Logan Chien ELFSectionHeaderTable() { 3961dfca9e892597db79889addb7a3abf54cd50588Logan Chien } 4061dfca9e892597db79889addb7a3abf54cd50588Logan Chien 4161dfca9e892597db79889addb7a3abf54cd50588Logan Chienpublic: 42bafb650811e8bcf6fbc014face6e127502869e68Logan Chien ~ELFSectionHeaderTable(); 43bafb650811e8bcf6fbc014face6e127502869e68Logan Chien 4461dfca9e892597db79889addb7a3abf54cd50588Logan Chien template <typename Archiver> 4558611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien static ELFSectionHeaderTableTy *read(Archiver &AR, ELFObjectTy *owner); 4661dfca9e892597db79889addb7a3abf54cd50588Logan Chien 4758611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien ELFSectionHeaderTy const *operator[](size_t i) const { 488ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien return table[i]; 498ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien } 508ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien 5158611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien ELFSectionHeaderTy *operator[](size_t i) { 528ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien return table[i]; 538ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien } 54af521b05a143c96604dbb7488e155c5248e34462Logan Chien 5532f7d036daa15302abd64e94fcb2dc718b375020TDYa void buildNameMap(); 5632f7d036daa15302abd64e94fcb2dc718b375020TDYa 5732f7d036daa15302abd64e94fcb2dc718b375020TDYa ELFSectionHeaderTy const *getByName(const std::string &name) const; 5832f7d036daa15302abd64e94fcb2dc718b375020TDYa ELFSectionHeaderTy *getByName(const std::string &name); 59541763d9f2395cf4170d6f8fad0b58098f35c70cTDYa 608ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien void print() const; 6161dfca9e892597db79889addb7a3abf54cd50588Logan Chien}; 6261dfca9e892597db79889addb7a3abf54cd50588Logan Chien 63bafb650811e8bcf6fbc014face6e127502869e68Logan Chien#include "impl/ELFSectionHeaderTable.hxx" 648ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien 6561dfca9e892597db79889addb7a3abf54cd50588Logan Chien#endif // ELF_SECTION_HEADER_TABLE_H 66