Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1424 → Rev 1425

/kernel/trunk/generic/include/elf.h
31,7 → 31,7
 
#include <arch/elf.h>
#include <arch/types.h>
#include <mm/as.h>
#include <typedefs.h>
 
/**
* current ELF version
/kernel/trunk/generic/include/mm/as.h
46,6 → 46,7
#include <synch/mutex.h>
#include <adt/list.h>
#include <adt/btree.h>
#include <elf.h>
 
/** Defined to be true if user address space and kernel address space shadow each other. */
#define KERNEL_ADDRESS_SPACE_SHADOWED KERNEL_ADDRESS_SPACE_SHADOWED_ARCH
118,9 → 119,15
} mem_backend_t;
 
/** Backend data stored in address space area. */
typedef struct backend_data {
__native d1;
__native d2;
typedef union {
struct { /**< elf_backend members */
elf_header_t *elf;
elf_segment_header_t *segment;
};
struct { /**< phys_backend members */
__address base;
count_t frames;
};
} mem_backend_data_t;
 
/** Address space area structure.
/kernel/trunk/generic/src/ddi/ddi.c
65,7 → 65,10
cap_t caps;
task_t *t;
int flags;
mem_backend_data_t backend_data = { .d1 = (__native) pf, .d2 = (__native) pages };
mem_backend_data_t backend_data;
 
backend_data.base = pf;
backend_data.frames = pages;
/*
* Make sure the caller is authorised to make this syscall.
/kernel/trunk/generic/src/lib/elf.c
162,7 → 162,10
{
as_area_t *a;
int flags = 0;
mem_backend_data_t backend_data = { .d1 = (__native) elf, .d2 = (__native) entry };
mem_backend_data_t backend_data;
backend_data.elf = elf;
backend_data.segment = entry;
 
if (entry->p_align > 1) {
if ((entry->p_offset % entry->p_align) != (entry->p_vaddr % entry->p_align)) {
/kernel/trunk/generic/src/mm/backend_anon.c
51,9 → 51,6
static void anon_frame_free(as_area_t *area, __address page, __address frame);
static void anon_share(as_area_t *area);
 
/*
* Anonymous memory backend.
*/
mem_backend_t anon_backend = {
.page_fault = anon_page_fault,
.frame_free = anon_frame_free,
/kernel/trunk/generic/src/mm/backend_phys.c
63,8 → 63,8
*/
int phys_page_fault(as_area_t *area, __address addr, pf_access_t access)
{
__address base = (__address) area->backend_data.d1;
count_t frames = (count_t) area->backend_data.d2;
__address base = area->backend_data.base;
count_t frames = area->backend_data.frames;
 
if (!as_area_check_access(area, access))
return AS_PF_FAULT;
/kernel/trunk/generic/src/mm/backend_elf.c
64,8 → 64,8
*/
int elf_page_fault(as_area_t *area, __address addr, pf_access_t access)
{
elf_header_t *elf = (elf_header_t *) area->backend_data.d1;
elf_segment_header_t *entry = (elf_segment_header_t *) area->backend_data.d2;
elf_header_t *elf = area->backend_data.elf;
elf_segment_header_t *entry = area->backend_data.segment;
__address base, frame;
index_t i;
 
132,8 → 132,8
*/
void elf_frame_free(as_area_t *area, __address page, __address frame)
{
elf_header_t *elf = (elf_header_t *) area->backend_data.d1;
elf_segment_header_t *entry = (elf_segment_header_t *) area->backend_data.d2;
elf_header_t *elf = area->backend_data.elf;
elf_segment_header_t *entry = area->backend_data.segment;
__address base;
index_t i;