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
6 /* $Id: addLibrary.h,v 1.4 2003/01/02 19:51:34 schendel Exp $ */
\r
8 #if defined(BPATCH_LIBRARY) && defined(sparc_sun_solaris2_4)
\r
18 #include <sys/link.h>
\r
20 typedef struct _Elf_element{
\r
21 Elf32_Shdr *sec_hdr;
\r
33 Elf_element *newElfFileSec;
\r
34 Elf32_Phdr *newElfFilePhdr;
\r
35 Elf32_Ehdr *newElfFileEhdr;
\r
36 Elf *oldElf, *newElf;
\r
38 Elf_Data *strTabData;
\r
41 int numberExtraSegs;
\r
43 unsigned int newPhdrAddr;
\r
44 unsigned int newPhdrOffset;
\r
46 unsigned int phdrSize;
\r
48 unsigned int textSegEndIndx;
\r
49 unsigned int dataSegStartIndx;
\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
61 int findNewPhdrAddr();
\r
62 int findNewPhdrOffset();
\r
65 void fixUpPhdrForDynamic();
\r
67 void updateSymbols(Elf_Data* symtabData,Elf_Data* strData, unsigned int dynAddr);
\r
70 unsigned int _pageSize, realPageSize;
\r
72 int driver(Elf *elf, char *newfilename, const char *libname);
\r