2 * Copyright (c) 2004 Greg Parker. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY GREG PARKER ``AS IS'' AND ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 class SymbolTable : public Section {
37 vector<Symbol *> mSymbols;
40 SymbolTable(Image& newImage);
41 void read(Elf32_Shdr *shdr);
42 void strip(vector<string> *keep);
43 void addSymbol(Symbol *sym);
45 vector<Symbol *>::reference operator[](int index) {
46 return mSymbols[index];
49 Symbol *get(int index) {
50 return mSymbols[index];
53 vector<Symbol *>::const_reference operator[](int index) const {
54 return mSymbols[index];
57 size_t indexOf(const Symbol *sym) const {
58 return find(mSymbols.begin(), mSymbols.end(), sym) - mSymbols.begin();
61 size_t size(void) const { return mSymbols.size(); }
63 void emit(Elf32_Shdr *shdr, uint8_t *&buf, uint32_t& bufLen);