ELFSectionStrTab.h revision 58611fc8193e7386698178f167a2e0cbdd6a4f6f
155b5e7c242e599b88f5727352758808461483000Logan Chien#ifndef ELF_SECTION_STRTAB_H
255b5e7c242e599b88f5727352758808461483000Logan Chien#define ELF_SECTION_STRTAB_H
355b5e7c242e599b88f5727352758808461483000Logan Chien
458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include "ELFTypes.h"
555b5e7c242e599b88f5727352758808461483000Logan Chien#include "ELFSection.h"
655b5e7c242e599b88f5727352758808461483000Logan Chien
7921465005aca46a100d137c9608a0aedd846e290Logan Chien#include <vector>
855b5e7c242e599b88f5727352758808461483000Logan Chien
9a9ab5889e842a49ff16d06594efe96b0210fe1f7Logan Chientemplate <unsigned Bitwidth>
1055b5e7c242e599b88f5727352758808461483000Logan Chienclass ELFSectionStrTab : public ELFSection<Bitwidth> {
1158611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chienpublic:
1258611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELF_TYPE_INTRO_TO_TEMPLATE_SCOPE(Bitwidth);
1358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien
1455b5e7c242e599b88f5727352758808461483000Logan Chienprivate:
1558611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  ELFSectionHeaderTy const *section_header;
1655b5e7c242e599b88f5727352758808461483000Logan Chien  std::vector<char> buf;
1755b5e7c242e599b88f5727352758808461483000Logan Chien
1855b5e7c242e599b88f5727352758808461483000Logan Chienprivate:
1955b5e7c242e599b88f5727352758808461483000Logan Chien  ELFSectionStrTab() { }
2055b5e7c242e599b88f5727352758808461483000Logan Chien
2155b5e7c242e599b88f5727352758808461483000Logan Chienpublic:
2255b5e7c242e599b88f5727352758808461483000Logan Chien  template <typename Archiver>
2358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien  static ELFSectionStrTab *read(Archiver &AR, ELFSectionHeaderTy const *sh);
2455b5e7c242e599b88f5727352758808461483000Logan Chien
258e233aace27dd4c658db39ddd223bdc21121a4f2Logan Chien  virtual void print() const;
2655b5e7c242e599b88f5727352758808461483000Logan Chien
2755b5e7c242e599b88f5727352758808461483000Logan Chien  char const *operator[](size_t index) const {
2855b5e7c242e599b88f5727352758808461483000Logan Chien    return &*buf.begin() + index;
2955b5e7c242e599b88f5727352758808461483000Logan Chien  }
3055b5e7c242e599b88f5727352758808461483000Logan Chien};
3155b5e7c242e599b88f5727352758808461483000Logan Chien
328e233aace27dd4c658db39ddd223bdc21121a4f2Logan Chien#include "impl/ELFSectionStrTab.hxx"
338e233aace27dd4c658db39ddd223bdc21121a4f2Logan Chien
3455b5e7c242e599b88f5727352758808461483000Logan Chien#endif // ELF_SECTION_STRTAB_H
35