1 /* $Id: addLibrary.h,v 1.1 2001/12/11 20:22:22 chadd Exp $ */
4 #if defined(BPATCH_LIBRARY) && defined(sparc_sun_solaris2_4)
17 #include "ELF_Section.h"
20 typedef struct _relocationData{
22 unsigned int olddynstrIndx;
23 unsigned int olddynsymIndx;
24 unsigned int olddynamicIndx;
25 unsigned int newdynstrIndx;
26 unsigned int newdynsymIndx;
27 unsigned int newdynamicIndx;
29 Elf32_Word olddynstrAddr;
30 Elf32_Word olddynsymAddr;
31 Elf32_Word olddynamicAddr;
32 Elf32_Word newdynstrAddr;
33 Elf32_Word newdynsymAddr;
34 Elf32_Word newdynamicAddr;
61 #define DT_VERDEF 0x6ffffffc/* Points to SUNW_verdef */
62 #define DT_VERDEFNUM 0x6ffffffd/* #def */
63 #define DT_VERNEED 0x6ffffffe/* Points to SUNW_verneed */
64 #define DT_VERNEEDNUM 0x6fffffff/* #need */
67 #define DT_CHECKSUM 0x6ffffdf8
80 addrReloc *relocations;
82 Elf_Data *dynamicData, *dynstrData, *dynsymData, *strData, *newStrData;
83 RelocationData relocData;
85 Elf32_Shdr* dynstrShdr, *dynsymShdr, *dynamicShdr;
86 unsigned int gotAddr, sizeChange ;
87 Elf_Data *textData,*dynamicDataNew,*symtabData,*symstrData, *oldsymtabData;
88 Elf_Data *olddyn, symData,*GOTData,*hashData, *olddynsymData;
91 Elf32_Ehdr * ehdr,*newEhdr;
92 void updateDynamic(Elf_Data* dynamicData, unsigned int dynstrAddr, unsigned int dynsymAddr);
93 void remakeHash(Elf_Data* hashData, Elf_Data* dynsymData, Elf_Data* dynstrData);
94 void updateRela(Elf_Data* newData,int shift, unsigned int shiftIndex);
95 void updateGOT(Elf_Data* GOTData,unsigned int dynamicAddr);
96 void updateSymbols(Elf_Data* symtabData, Elf_Data *oldsymData,
97 RelocationData relocData, int maxShndx);
98 void updateSh_link(Elf32_Word *sh_link,RelocationData relocData);
100 void updateSymTab(Elf_Data* symData, RelocationData relocData, int shift,
101 int max, Elf_Data*symstrPtr);
102 void updateSectionHdrs(Elf * newElf);
103 void updateProgramHdrs(Elf *newElf,int size, unsigned int gotOffset, Elf32_Word dynamicAddr,
104 Elf32_Word dynamicOffset, int bssSize,int dynamicSize, int dynSize);
105 bool writeOutNewElf();
108 void padData(Elf32_Shdr* newDataShdr, Elf32_Shdr* newDynamicShdr, Elf_Scn* newDynSec,
109 Elf_Data* newDataData);
110 void verifyNewFile();
113 addLibrary(char*oldElfName, char* libname, int debugOutputFlag=false);
114 addLibrary(Elf *oldElfPtr, char* libname, int debugOutputFlag=false);
116 bool outputElf(char* filename=NULL);