get pd_process to use BPatch_thread instead of the process class; - - -
[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.6 2003/09/05 16:28:33 schendel Exp $ */\r
7 \r
8 #if 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         unsigned int newPhdrAddr;\r
43         unsigned int newPhdrOffset;\r
44         int libnameLen;\r
45         unsigned int phdrSize;\r
46         int libnameIndx;\r
47         unsigned int textSegEndIndx; \r
48         unsigned int dataSegStartIndx;\r
49 \r
50         \r
51         void createNewElf();\r
52         int findSection(const char *name);\r
53         void updateDynamic(Elf_Data*newData,unsigned int hashOff, unsigned int dynsymOff, unsigned int dynstrOff);\r
54         void updateProgramHeaders(Elf32_Phdr *phdr, unsigned int dynstrOffset);\r
55         void addStr(Elf_Data* newData, Elf_Data* oldData, const char *str);\r
56         int writeNewElf(char* filename, const char* libname);\r
57         unsigned int findEndOfTextSegment();\r
58         unsigned int findStartOfDataSegment();\r
59 \r
60         int findNewPhdrAddr();\r
61         int findNewPhdrOffset();\r
62         int checkFile();\r
63 \r
64         void fixUpPhdrForDynamic();\r
65         void moveDynamic();\r
66         void updateSymbols(Elf_Data* symtabData,Elf_Data* strData, unsigned int dynAddr);\r
67 \r
68 \r
69         unsigned int _pageSize, realPageSize;   \r
70         public:\r
71         int driver(Elf *elf, char *newfilename, const char *libname);\r
72         addLibrary();\r
73         ~addLibrary();\r
74 \r
75 };\r
76 \r
77 \r
78 #endif\r
79 \r