Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1069 → Rev 1070

/kernel/trunk/generic/src/lib/elf.c
165,12 → 165,6
}
}
 
/*
* Check if the segment doesn't interfere with kernel address space.
*/
if (entry->p_vaddr + ALIGN_UP(entry->p_memsz, PAGE_SIZE) >= USER_ADDRESS_SPACE_END)
return EE_MEMORY;
if (entry->p_flags & PF_X)
flags |= AS_AREA_EXEC;
if (entry->p_flags & PF_W)
195,7 → 189,7
 
a = as_area_create(as, flags, entry->p_memsz, entry->p_vaddr);
if (!a)
return EE_IRRECOVERABLE;
return EE_MEMORY;
for (i = 0; i < SIZE2FRAMES(entry->p_filesz); i++) {
as_set_mapping(as, entry->p_vaddr + i*PAGE_SIZE, KA2PA(((__address) segment) + i*PAGE_SIZE));
/kernel/trunk/generic/src/mm/as.c
51,6 → 51,7
#include <arch/asm.h>
#include <debug.h>
#include <memstr.h>
#include <macros.h>
#include <arch.h>
#include <print.h>
 
537,9 → 538,15
link_t *cur;
as_area_t *a;
/*
* We don't want any area to have conflicts with NULL page.
*/
if (overlaps(va, size, NULL, PAGE_SIZE))
return false;
for (cur = as->as_area_head.next; cur != &as->as_area_head; cur = cur->next) {
__address start;
__address end;
__address a_start;
size_t a_size;
a = list_get_instance(cur, as_area_t, link);
if (a == avoid_area)
547,33 → 554,24
spinlock_lock(&a->lock);
 
start = a->base;
end = a->base + a->pages * PAGE_SIZE - 1;
a_start = a->base;
a_size = a->pages * PAGE_SIZE;
 
spinlock_unlock(&a->lock);
 
if ((va >= start) && (va <= end)) {
/*
* Tested area is inside another area.
*/
return false;
}
if ((start >= va) && (start < va + size)) {
/*
* Another area starts in tested area.
*/
return false;
}
if ((end >= va) && (end < va + size)) {
/*
* Another area ends in tested area.
*/
return false;
}
if (overlaps(va, size, a_start, a_size))
return false;
 
}
 
/*
* So far, the area does not conflict with other areas.
* Check if it doesn't conflict with kernel address space.
*/
if (!KERNEL_ADDRESS_SPACE_SHADOWED) {
return !overlaps(va, size,
KERNEL_ADDRESS_SPACE_START, KERNEL_ADDRESS_SPACE_END-KERNEL_ADDRESS_SPACE_START);
}
 
return true;
}