Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/mm/backend_elf.c

    r8f80c77 r98000fb  
    3838#include <lib/elf.h>
    3939#include <debug.h>
    40 #include <typedefs.h>
     40#include <arch/types.h>
    4141#include <mm/as.h>
    4242#include <mm/frame.h>
     
    8585        size_t i;
    8686        bool dirty = false;
    87 
    88         ASSERT(page_table_locked(AS));
    89         ASSERT(mutex_locked(&area->lock));
    9087
    9188        if (!as_area_check_access(area, access))
     
    235232void elf_frame_free(as_area_t *area, uintptr_t page, uintptr_t frame)
    236233{
     234        elf_header_t *elf = area->backend_data.elf;
    237235        elf_segment_header_t *entry = area->backend_data.segment;
    238         uintptr_t start_anon;
    239 
    240         ASSERT(page_table_locked(area->as));
    241         ASSERT(mutex_locked(&area->lock));
    242 
    243         ASSERT(page >= ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE));
    244         ASSERT(page < entry->p_vaddr + entry->p_memsz);
    245 
     236        uintptr_t base, start_anon;
     237        size_t i;
     238
     239        ASSERT((page >= ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE)) &&
     240            (page < entry->p_vaddr + entry->p_memsz));
     241        i = (page - ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE)) >> PAGE_WIDTH;
     242        base = (uintptr_t) (((void *) elf) +
     243            ALIGN_DOWN(entry->p_offset, FRAME_SIZE));
    246244        start_anon = entry->p_vaddr + entry->p_filesz;
    247245
     
    259257                 * lower part is backed by the ELF image and the upper is
    260258                 * anonymous). In any case, a frame needs to be freed.
    261                  */
     259                 */ 
    262260                frame_free(frame);
    263261        }
     
    269267 * Otherwise only portions of the area that are not backed by the ELF image
    270268 * are put into the pagemap.
     269 *
     270 * The address space and address space area must be locked prior to the call.
    271271 *
    272272 * @param area          Address space area.
     
    278278        btree_node_t *leaf, *node;
    279279        uintptr_t start_anon = entry->p_vaddr + entry->p_filesz;
    280 
    281         ASSERT(mutex_locked(&area->as->lock));
    282         ASSERT(mutex_locked(&area->lock));
    283280
    284281        /*
Note: See TracChangeset for help on using the changeset viewer.