updates so dyninstAPI and the dyninstAPI tests can be built with the
[dyninst.git] / dyninstAPI / src / addLibrary.h
1 /* -*- Mode: C; indent-tabs-mode: true -*- */\r
2 // Since the author of this file chose to use tabs instead of spaces\r
3 // for the indentation mode, the above line switches users into tabs\r
4 // mode with emacs when editing this file.\r
5 \r
6 /* $Id: addLibrary.h,v 1.4 2003/01/02 19:51:34 schendel Exp $ */\r
7 \r
8 #if defined(BPATCH_LIBRARY) && defined(sparc_sun_solaris2_4)\r
9 \r
10 #include <unistd.h>\r
11 #include  <fcntl.h>\r
12 #include  <stdio.h>\r
13 #include  <libelf.h>\r
14 #include  <stdlib.h>\r
15 #include  <string.h>\r
16 #include <errno.h>\r
17 #include <elf.h>\r
18 #include <sys/link.h>\r
19 \r
20 typedef struct _Elf_element{\r
21         Elf32_Shdr *sec_hdr;\r
22         Elf_Data *sec_data;\r
23 } Elf_element;\r
24 \r
25 #define TEXTGAP 1\r
26 #define DATAGAP 2\r
27 \r
28 class addLibrary {\r
29 \r
30         private:\r
31 \r
32         int arraySize;\r
33         Elf_element *newElfFileSec;\r
34         Elf32_Phdr *newElfFilePhdr;\r
35         Elf32_Ehdr *newElfFileEhdr;\r
36         Elf *oldElf, *newElf;\r
37         int newFd;\r
38         Elf_Data *strTabData;\r
39 \r
40 \r
41         int numberExtraSegs;\r
42         int gapFlag;\r
43         unsigned int newPhdrAddr;\r
44         unsigned int newPhdrOffset;\r
45         int libnameLen;\r
46         unsigned int phdrSize;\r
47         int libnameIndx;\r
48         unsigned int textSegEndIndx; \r
49         unsigned int dataSegStartIndx;\r
50 \r
51         \r
52         void createNewElf();\r
53         int findSection(const char *name);\r
54         void updateDynamic(Elf_Data*newData,unsigned int hashOff, unsigned int dynsymOff, unsigned int dynstrOff);\r
55         void updateProgramHeaders(Elf32_Phdr *phdr, unsigned int dynstrOffset, Elf32_Shdr**newSegs);\r
56         void addStr(Elf_Data* newData, Elf_Data* oldData, const char *str);\r
57         int writeNewElf(char* filename, const char* libname);\r
58         unsigned int findEndOfTextSegment();\r
59         unsigned int findStartOfDataSegment();\r
60 \r
61         int findNewPhdrAddr();\r
62         int findNewPhdrOffset();\r
63         int checkFile();\r
64 \r
65         void fixUpPhdrForDynamic();\r
66         void moveDynamic();\r
67         void updateSymbols(Elf_Data* symtabData,Elf_Data* strData, unsigned int dynAddr);\r
68 \r
69 \r
70         unsigned int _pageSize, realPageSize;   \r
71         public:\r
72         int driver(Elf *elf, char *newfilename, const char *libname);\r
73         addLibrary();\r
74         ~addLibrary();\r
75 \r
76 };\r
77 \r
78 \r
79 #endif\r
80 \r