Changeset 1cc2974 in mainline for kernel/generic/src/lib/elf.c


Ignore:
Timestamp:
2008-05-26T18:56:34Z (17 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5a55ae6
Parents:
fa832eb
Message:

Improve linking and loading of boot ELF images.
(Contributed by Jiri Svoboda)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/lib/elf.c

    rfa832eb r1cc2974  
    101101                return EE_UNSUPPORTED;
    102102
     103        /* Check if the ELF image starts on a page boundary */
     104        if (ALIGN_UP((uintptr_t)header, PAGE_SIZE) != (uintptr_t)header)
     105                return EE_UNSUPPORTED;
     106
    103107        /* Walk through all segment headers and process them. */
    104108        for (i = 0; i < header->e_phnum; i++) {
     
    183187        int flags = 0;
    184188        mem_backend_data_t backend_data;
     189        uintptr_t base;
     190        size_t mem_sz;
    185191       
    186192        backend_data.elf = elf;
     
    202208        flags |= AS_AREA_CACHEABLE;
    203209
    204         /*
    205          * Check if the virtual address starts on page boundary.
     210        /*
     211         * Align vaddr down, inserting a little "gap" at the beginning.
     212         * Adjust area size, so that its end remains in place.
    206213         */
    207         if (ALIGN_UP(entry->p_vaddr, PAGE_SIZE) != entry->p_vaddr)
    208                 return EE_UNSUPPORTED;
    209 
    210         a = as_area_create(as, flags, entry->p_memsz, entry->p_vaddr,
     214        base = ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE);
     215        mem_sz = entry->p_memsz + (entry->p_vaddr - base);
     216
     217        a = as_area_create(as, flags, mem_sz, base,
    211218            AS_AREA_ATTR_NONE, &elf_backend, &backend_data);
    212219        if (!a)
Note: See TracChangeset for help on using the changeset viewer.