]> asedeno.scripts.mit.edu Git - peal.git/blob - postlink/image.h
Greg Parker's Palm Elf Arm Loader (PEAL)
[peal.git] / postlink / image.h
1 /**********
2  * Copyright (c) 2004 Greg Parker.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
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.
12  *
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.
23  **********/
24
25 #ifndef IMAGE_H
26 #define IMAGE_H
27
28 #include <vector>
29
30 using namespace std;
31
32 class Section;
33 class SymbolTable;
34 class StringTable;
35 class GOT;
36
37 class Image {
38     uint8_t *mContents;
39     Elf32_Ehdr mEhdr;
40     vector<Elf32_Shdr *>sectionPointers;
41     vector<Section *> mSections;
42     SymbolTable *mSymtab;
43     StringTable *sectionNames;
44     GOT *mGOT;
45
46     void allocate_sections(void);
47     void read_sections(void);
48
49 public:
50     Image(uint8_t *buf);
51     uint8_t *contents(void) { return mContents; }
52     vector<Section *>& sections(void) { return mSections; }
53     const vector<Section *>& sections(void) const { return mSections; }
54     StringTable *strtab(void) { return sectionNames; }
55     const StringTable *strtab(void) const { return sectionNames; }
56     SymbolTable& symtab(void) { return *mSymtab; }
57     GOT& got(void) { return *mGOT; }
58
59     void addSectionGlobals(void);
60     void trimSections(void);
61     void buildSymbolStringTable(void);
62     void buildRelocations(void);
63     void buildSectionStringTable(void);
64
65     void write(const char *type, int id, const char *name);
66 };
67 #endif