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 171e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa#ifndef ELF_SECTION_SYMTAB_H 181e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa#define ELF_SECTION_SYMTAB_H 191e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 2058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien#include "ELFTypes.h" 2158611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien 2232f7d036daa15302abd64e94fcb2dc718b375020TDYa#include <llvm/ADT/StringMap.h> 2332f7d036daa15302abd64e94fcb2dc718b375020TDYa 241e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa#include <vector> 253bab0cc4c1115bc4430aa97453bca914e1174858TDYa#include <string> 261e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 27a9ab5889e842a49ff16d06594efe96b0210fe1f7Logan Chientemplate <unsigned Bitwidth> 284cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chienclass ELFSectionSymTab : public ELFSection<Bitwidth> { 2958611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chienpublic: 3058611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien ELF_TYPE_INTRO_TO_TEMPLATE_SCOPE(Bitwidth); 3158611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien 321e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYaprivate: 3358611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien std::vector<ELFSymbolTy *> table; 3432f7d036daa15302abd64e94fcb2dc718b375020TDYa llvm::StringMap<ELFSymbolTy *> name_map; 351e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 361e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYaprivate: 371e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa ELFSectionSymTab() { } 381e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 391e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYapublic: 404cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien ~ELFSectionSymTab(); 411e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 424cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien template <typename Archiver> 434cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien static ELFSectionSymTab * 4458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien read(Archiver &AR, ELFObjectTy *owner, ELFSectionHeaderTy const *sh); 451e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 464cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien virtual void print() const; 471e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 484cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien size_t size() const { 494cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien return table.size(); 504cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien } 514cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien 5258611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien ELFSymbolTy const *operator[](size_t index) const { 534cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien return table[index]; 544cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien } 553bab0cc4c1115bc4430aa97453bca914e1174858TDYa 5658611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien ELFSymbolTy *operator[](size_t index) { 574cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien return table[index]; 584cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien } 594cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien 6032f7d036daa15302abd64e94fcb2dc718b375020TDYa void buildNameMap(); 6132f7d036daa15302abd64e94fcb2dc718b375020TDYa 6232f7d036daa15302abd64e94fcb2dc718b375020TDYa ELFSymbolTy const *getByName(std::string const &name) const; 634cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien 6458611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien ELFSymbolTy *getByName(std::string const &name) { 6558611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien return const_cast<ELFSymbolTy *>( 6658611fc8193e7386698178f167a2e0cbdd6a4f6fLogan Chien const_cast<ELFSectionSymTabTy const *>(this)->getByName(name)); 674cf36b0a42865bb8e1e95b910d3452bea23a8318Logan Chien } 681e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 69388f443ba0c474ffcc2e06f8d2a668c4488c3c1bLogan Chien size_t getFuncCount() const; 70388f443ba0c474ffcc2e06f8d2a668c4488c3c1bLogan Chien 71388f443ba0c474ffcc2e06f8d2a668c4488c3c1bLogan Chien void getFuncNameList(size_t size, char const **list) const; 72388f443ba0c474ffcc2e06f8d2a668c4488c3c1bLogan Chien 73e586f183e46f921301281352a87f67dbdc1a43b6Logan Chien size_t getExternFuncCount() const; 74e586f183e46f921301281352a87f67dbdc1a43b6Logan Chien 751e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa}; 761e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 7780085915e5918ad921b30e3fd4efe2154ee4ae49Logan Chien#include "impl/ELFSectionSymTab.hxx" 781e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa 791e278e29f1ce0a00a4626cb3c839ad37e46abcdfTDYa#endif // ELF_SECTION_SYMTAB_H 80