The processor architecture-independent portion of a mapping object consists of:
integer_t hash; /* object hash value */ oskit_addr_t region_off; /* offset in the region */ oskit_addr_t start_va; /* mapping start VA in task */ oskit_size_t size; /* size of mapping */ fluke_prot_t prot; /* access allowed */}
fluke_ref_t | *region_ref; fluke_ref_t | *task_ref; |
hash is the immutable hash value for the object. Note: Mapping objects contain an exported hash value even though they are not referencable objects.
region_off is the offset in the region at which the mapping starts. The offset may have processor architecture-specific alignment constraints.
start_va and size define the extent of the mapping. Both may have processor architecture-specific alignment constraints.
prot defines the desired access permission for the region. The actual access allowed may be constrained by the region's maximum protection value.
region_ref is a reference to the region object being mapped. If null, the mapping is treated as though its access permissions were zero.
task_ref is a reference to the task object into whose address space the region is being mapped. If null, the mapping has no effect.
The value of region_off + size may exceed the size of the region from which it is mapped (e.g., a region may shrink after it has been mapped). Accesses to that excess memory area will cause synchronous exceptions to be sent to the region keeper.