Changeset 740 for Whitix/trunk/user/linker/load_lib.c
- Timestamp:
- 07/07/08 15:24:08 (5 months ago)
- Files:
-
- 1 modified
-
Whitix/trunk/user/linker/load_lib.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/trunk/user/linker/load_lib.c
r733 r740 102 102 } 103 103 104 Elf_Addr DlGet DynamicAddress(struct ElfProgHeader* pHeaders, int numEntries, int* picLib)104 Elf_Addr DlGetAddresses(struct ElfProgHeader* pHeaders, int numEntries, int* picLib, DWORD* textAddr, DWORD* textLength) 105 105 { 106 106 int i; … … 115 115 /* Is it a position independent library? Most likely not. */ 116 116 *picLib=0; 117 118 if (pHeaders[i].type == PT_LOAD && pHeaders[i].segFlags == (PROT_EXEC | PROT_READ)) 119 { 120 *textAddr=pHeaders[i].vAddr; 121 *textLength=pHeaders[i].memSize; 122 } 117 123 } 118 124 … … 150 156 fd, /* Backing file */ 151 157 pHeaders[i].fileOffset-PAGE_OFFSET(pHeaders[i].vAddr), /* File offset */ 152 mmapFlags); /* Flags */158 mmapFlags); /* Flags */ 153 159 154 160 if (!mapAddr) … … 227 233 unsigned long dynEntries[DT_NUM+1]; 228 234 int picLib=1; 235 DWORD textAddr, textLength; 229 236 230 237 /* Check if we've loaded this library into memory already. */ … … 246 253 * has position independent code from here. 247 254 */ 248 dynamicAddr=DlGet DynamicAddress(pHeaders, fileHeader.phEntries, &picLib);255 dynamicAddr=DlGetAddresses(pHeaders, fileHeader.phEntries, &picLib, &textAddr, &textLength); 249 256 250 257 if (!dynamicAddr) … … 271 278 ElfParseDynInfo((struct ElfDyn*)dynamicAddr,dynEntries,loadAddr); 272 279 273 if (dynEntries[DT_TEXTREL])274 {275 link_puts("Todo: make pages writeable");276 SysExit(0);277 }278 279 280 entry=DlCreateResolveEntry(name, pHeaders, fileHeader.phEntries, loadAddr, dynamicAddr, dynEntries); 281 282 /* Fill in the rest of the structure. */ 283 entry->textAddr=entry->loadAddr+textAddr; 284 entry->textLength=textLength; 280 285 281 286 /* Initialize the global offset table (GOT) */