Rev 952 | Rev 973 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 952 | Rev 963 | ||
|---|---|---|---|
| Line 194... | Line 194... | ||
| 194 | segment = malloc(segment_size, 0); |
194 | segment = malloc(segment_size, 0); |
| 195 | if (entry->p_filesz < entry->p_memsz) |
195 | if (entry->p_filesz < entry->p_memsz) |
| 196 | memsetb((__address) (segment + entry->p_filesz), segment_size - entry->p_filesz, 0); |
196 | memsetb((__address) (segment + entry->p_filesz), segment_size - entry->p_filesz, 0); |
| 197 | memcpy(segment, (void *) (((__address) elf) + entry->p_offset), entry->p_filesz); |
197 | memcpy(segment, (void *) (((__address) elf) + entry->p_offset), entry->p_filesz); |
| 198 | 198 | ||
| 199 | a = as_area_create(as, AS_AREA_TEXT, SIZE2FRAMES(entry->p_memsz), entry->p_vaddr); |
199 | a = as_area_create(as, type, SIZE2FRAMES(entry->p_memsz), entry->p_vaddr); |
| 200 | if (!a) |
200 | if (!a) |
| 201 | return EE_IRRECOVERABLE; |
201 | return EE_IRRECOVERABLE; |
| 202 | 202 | ||
| 203 | for (i = 0; i < SIZE2FRAMES(entry->p_filesz); i++) { |
203 | for (i = 0; i < SIZE2FRAMES(entry->p_filesz); i++) { |
| 204 | as_set_mapping(as, entry->p_vaddr + i*PAGE_SIZE, KA2PA(((__address) segment) + i*PAGE_SIZE)); |
204 | as_set_mapping(as, entry->p_vaddr + i*PAGE_SIZE, KA2PA(((__address) segment) + i*PAGE_SIZE)); |