diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/apos/elf.h | 2 | ||||
| -rw-r--r-- | include/apos/mem.h | 10 | ||||
| -rw-r--r-- | include/apos/mem_regions.h | 6 | ||||
| -rw-r--r-- | include/apos/vmem.h | 6 | ||||
| -rw-r--r-- | include/libfdt.h | 2 |
5 files changed, 20 insertions, 6 deletions
diff --git a/include/apos/elf.h b/include/apos/elf.h index cea504e..1e9a4aa 100644 --- a/include/apos/elf.h +++ b/include/apos/elf.h @@ -194,6 +194,6 @@ struct __packed section64_header { #define section_header_prop(c, e, p) \ (c == ELFCLASS64 ? section64_header(e)->p : section32_header(e)->p) -vm_t load_elf(struct tcb *t, vm_t b); +vm_t load_elf(struct tcb *t, vm_t binary, vm_t interp); #endif /* APOS_ELF_H */ diff --git a/include/apos/mem.h b/include/apos/mem.h index 7d24e0e..b6d76c1 100644 --- a/include/apos/mem.h +++ b/include/apos/mem.h @@ -48,14 +48,16 @@ __page((x) + BASE_PAGE_SIZE)) #define __bytes(x) (__addr(x)) -/* if memory region is used or not */ +/** If memory region is used or not */ #define MR_USED (1 << 8) -/* if memory region is shared */ +/** If memory region is shared */ #define MR_SHARED (1 << 9) -/* owner of shared region */ +/** Owner of shared region */ #define MR_OWNED (1 << 10) -/* copy on write */ +/** Copy on write. */ #define MR_COW (1 << 11) +/** Don't free memory on flush. */ +#define MR_KEEP (1 << 12) extern size_t __mm_shifts[10]; extern size_t __mm_widths[10]; diff --git a/include/apos/mem_regions.h b/include/apos/mem_regions.h index 8e9125f..bd1ce2b 100644 --- a/include/apos/mem_regions.h +++ b/include/apos/mem_regions.h @@ -14,6 +14,9 @@ #define mem_container(ptr) container_of(ptr, struct mem_region, sp_n) #define is_region_used(r) __is_set(r->flags, MR_USED) +#define is_region_owned(r) __is_set(r->flags, MR_OWNED) +#define is_region_shared(r) __is_set(r->flags, MR_SHARED) +#define is_region_kept(r) __is_set(r->flags, MR_KEEP) struct mem_region_root { struct sp_root free_regions; @@ -54,6 +57,9 @@ typedef stat_t region_callback_t(struct vmem *b, pm_t *offset, vm_t vaddr, vmflags_t flags, enum mm_order order, void *data); +stat_t stat_region(struct mem_region_root *r, vm_t va, vmflags_t *flags); +stat_t mod_region(struct mem_region_root *r, vm_t va, vmflags_t flags); + vm_t map_fill_region(struct vmem *b, region_callback_t *mem_handler, pm_t offset, vm_t start, size_t bytes, vmflags_t flags, void *data); diff --git a/include/apos/vmem.h b/include/apos/vmem.h index 663b2ab..1451c82 100644 --- a/include/apos/vmem.h +++ b/include/apos/vmem.h @@ -16,6 +16,7 @@ vm_t alloc_fixed_uvmem(struct tcb *r, vm_t start, size_t size, vmflags_t flags); vm_t alloc_shared_uvmem(struct tcb *r, size_t size, vmflags_t flags); vm_t ref_shared_uvmem(struct tcb *r1, struct tcb *r2, vm_t va, vmflags_t flags); +stat_t clear_uvmem(struct tcb *r, bool force); stat_t free_uvmem(struct tcb *r, vm_t a); stat_t init_uvmem(struct tcb *r, vm_t base, vm_t top); @@ -25,6 +26,8 @@ stat_t alloc_uvmem_wrapper(struct vmem *b, pm_t *offset, vm_t vaddr, vmflags_t flags, enum mm_order order, void *data); stat_t alloc_shared_wrapper(struct vmem *b, pm_t *offset, vm_t vaddr, vmflags_t flags, enum mm_order order, void *data); +stat_t clone_allocd_wrapper(struct vmem *b, pm_t *offset, vm_t vaddr, + vmflags_t flags, enum mm_order order, void *data); stat_t free_uvmem_wrapper(struct vmem *b, pm_t *offset, vm_t vaddr, vmflags_t flags, enum mm_order order, void *data); @@ -34,6 +37,9 @@ stat_t free_uvmem_wrapper(struct vmem *b, pm_t *offset, vm_t vaddr, #define map_shared_region(b, start, bytes, flags, data) \ map_fill_region(b, &alloc_shared_wrapper, 0, start, bytes, flags, data) +#define clone_allocd_region(b, start, bytes, flags, data) \ + map_fill_region(b, &clone_allocd_wrapper, 0, start, bytes, flags, data) + #define unmap_freed_region(b, start, bytes, flags, data) \ map_fill_region(b, &free_uvmem_wrapper, 0, start, bytes, flags, data) diff --git a/include/libfdt.h b/include/libfdt.h index a1266c9..f6e159d 100644 --- a/include/libfdt.h +++ b/include/libfdt.h @@ -83,7 +83,7 @@ void __dbg_fdt(const void *fdt, int node_offset, int depth); /** * Load int{32,64} from FDT at location specified by pointer. - * + * * @param c Size of int, where 2 == int64 and everything else int32. Query int * size from FDT with \ref get_cellinfo() and \ref get_reginfo(). * @param p Pointer to int{32,64} inside the global FDT. |
