Rev 2977 | Rev 2990 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2977 | Rev 2985 | ||
---|---|---|---|
Line 291... | Line 291... | ||
291 | ); |
291 | ); |
292 | return EE_INVALID; |
292 | return EE_INVALID; |
293 | } |
293 | } |
294 | } |
294 | } |
295 | 295 | ||
296 | /* if (entry->p_flags & PF_X) |
296 | if (entry->p_flags & PF_X) |
297 | flags |= AS_AREA_EXEC; |
297 | flags |= AS_AREA_EXEC; |
298 | if (entry->p_flags & PF_W) |
298 | if (entry->p_flags & PF_W) |
299 | flags |= AS_AREA_WRITE; |
299 | flags |= AS_AREA_WRITE; |
300 | if (entry->p_flags & PF_R) |
300 | if (entry->p_flags & PF_R) |
301 | flags |= AS_AREA_READ; |
301 | flags |= AS_AREA_READ; |
302 | flags |= AS_AREA_CACHEABLE; |
302 | flags |= AS_AREA_CACHEABLE; |
303 | */ |
303 | |
304 | /* FIXME: Kernel won't normally allow this, unless you "patch" it */ |
304 | /* Final flags for the memory area */ |
305 | // flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_EXEC | AS_AREA_CACHEABLE; |
- | |
306 | flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE; |
305 | flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE; |
307 | 306 | ||
308 | /* |
307 | /* |
309 | * Check if the virtual address starts on page boundary. |
308 | * Check if the virtual address starts on page boundary. |
310 | */ |
309 | */ |
Line 316... | Line 315... | ||
316 | } |
315 | } |
317 | 316 | ||
318 | printf("map to p_vaddr=0x%x-0x%x...\n", entry->p_vaddr + bias, |
317 | printf("map to p_vaddr=0x%x-0x%x...\n", entry->p_vaddr + bias, |
319 | entry->p_vaddr + bias + ALIGN_UP(entry->p_memsz, PAGE_SIZE)); |
318 | entry->p_vaddr + bias + ALIGN_UP(entry->p_memsz, PAGE_SIZE)); |
320 | 319 | ||
- | 320 | /* |
|
- | 321 | * For the course of loading, the area needs to be readable |
|
- | 322 | * and writeable. |
|
- | 323 | */ |
|
321 | a = as_area_create((uint8_t *)entry->p_vaddr + bias, |
324 | a = as_area_create((uint8_t *)entry->p_vaddr + bias, |
322 | entry->p_memsz, flags); |
325 | entry->p_memsz, AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); |
323 | if (a == (void *)(-1)) { |
326 | if (a == (void *)(-1)) { |
324 | printf("memory mapping failed\n"); |
327 | printf("memory mapping failed\n"); |
325 | return EE_MEMORY; |
328 | return EE_MEMORY; |
326 | } |
329 | } |
327 | 330 | ||
Line 353... | Line 356... | ||
353 | printf("->%d\n", rc); |
356 | printf("->%d\n", rc); |
354 | left -= now; |
357 | left -= now; |
355 | dp += now; |
358 | dp += now; |
356 | } |
359 | } |
357 | 360 | ||
- | 361 | printf("set area flags to %d\n", flags); |
|
- | 362 | rc = as_area_change_flags((uint8_t *)entry->p_vaddr + bias, flags); |
|
- | 363 | if (rc != 0) { |
|
- | 364 | printf("failed to set memory area flags\n"); |
|
- | 365 | return EE_MEMORY; |
|
- | 366 | } |
|
- | 367 | ||
358 | return EE_OK; |
368 | return EE_OK; |
359 | } |
369 | } |
360 | 370 | ||
361 | /** Process section header. |
371 | /** Process section header. |
362 | * |
372 | * |