ELFSectionHeaderTable.h revision 58611fc8193e7386698178f167a2e0cbdd6a4f6f
161dfca9e892597db79889addb7a3abf54cd50588Logan Chien#ifndef ELF_SECTION_HEADER_TABLE_H
261dfca9e892597db79889addb7a3abf54cd50588Logan Chien#define ELF_SECTION_HEADER_TABLE_H
361dfca9e892597db79889addb7a3abf54cd50588Logan Chien
458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include "ELFTypes.h"
558611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien
61f100419d794fa433336190aa47bb0862f93f978TDYa#include <llvm/ADT/OwningPtr.h>
7921465005aca46a100d137c9608a0aedd846e290Logan Chien
861dfca9e892597db79889addb7a3abf54cd50588Logan Chien#include <vector>
9541763d9f2395cf4170d6f8fad0b58098f35c70cTDYa#include <string>
1061dfca9e892597db79889addb7a3abf54cd50588Logan Chien
11a9ab5889e842a49ff16d06594efe96b0210fe1f7Logan Chientemplate <unsigned Bitwidth>
128ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chienclass ELFSectionHeaderTable {
1358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chienpublic:
1458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELF_TYPE_INTRO_TO_TEMPLATE_SCOPE(Bitwidth);
1558611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien
1661dfca9e892597db79889addb7a3abf54cd50588Logan Chienprivate:
1758611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  std::vector<ELFSectionHeaderTy *> table;
1861dfca9e892597db79889addb7a3abf54cd50588Logan Chien
1961dfca9e892597db79889addb7a3abf54cd50588Logan Chienprivate:
2061dfca9e892597db79889addb7a3abf54cd50588Logan Chien  ELFSectionHeaderTable() {
2161dfca9e892597db79889addb7a3abf54cd50588Logan Chien  }
2261dfca9e892597db79889addb7a3abf54cd50588Logan Chien
2361dfca9e892597db79889addb7a3abf54cd50588Logan Chienpublic:
24bafb650811e8bcf6fbc014face6e127502869e68Logan Chien  ~ELFSectionHeaderTable();
25bafb650811e8bcf6fbc014face6e127502869e68Logan Chien
2661dfca9e892597db79889addb7a3abf54cd50588Logan Chien  template <typename Archiver>
2758611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  static ELFSectionHeaderTableTy *read(Archiver &AR, ELFObjectTy *owner);
2861dfca9e892597db79889addb7a3abf54cd50588Logan Chien
2958611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy const *operator[](size_t i) const {
308ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien    return table[i];
318ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien  }
328ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien
3358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy *operator[](size_t i) {
348ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien    return table[i];
358ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien  }
36af521b05a143c96604dbb7488e155c5248e34462Logan Chien
3758611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy const *getByName(const std::string &str) const;
3858611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy *getByName(const std::string &str);
39541763d9f2395cf4170d6f8fad0b58098f35c70cTDYa
408ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien  void print() const;
4161dfca9e892597db79889addb7a3abf54cd50588Logan Chien};
4261dfca9e892597db79889addb7a3abf54cd50588Logan Chien
43bafb650811e8bcf6fbc014face6e127502869e68Logan Chien#include "impl/ELFSectionHeaderTable.hxx"
448ec15a3ebbf0037872574d364881f7c0c8533eacLogan Chien
4561dfca9e892597db79889addb7a3abf54cd50588Logan Chien#endif // ELF_SECTION_HEADER_TABLE_H
46