int up_addrenv_destroy(FAR group_addrenv_t *addrenv) { binfo("addrenv=%p\n", addrenv); DEBUGASSERT(addrenv); /* Destroy the .text region */ arm_addrenv_destroy_region(addrenv->text, ARCH_TEXT_NSECTS, CONFIG_ARCH_TEXT_VBASE, false); /* Destroy the .bss/.data region */ arm_addrenv_destroy_region(addrenv->data, ARCH_DATA_NSECTS, CONFIG_ARCH_DATA_VBASE, false); #ifdef CONFIG_BUILD_KERNEL /* Destroy the heap region */ arm_addrenv_destroy_region(addrenv->heap, ARCH_HEAP_NSECTS, CONFIG_ARCH_HEAP_VBASE, false); #ifdef CONFIG_MM_SHM /* Destroy the shared memory region (without freeing the physical page * data). */ arm_addrenv_destroy_region(addrenv->heap, ARCH_SHM_NSECTS, CONFIG_ARCH_SHM_VBASE, true); #endif #endif memset(addrenv, 0, sizeof(group_addrenv_t)); return OK; }
int up_addrenv_destroy(FAR group_addrenv_t *addrenv) { bvdbg("addrenv=%p\n", addrenv); DEBUGASSERT(addrenv); /* Destroy the .text region */ arm_addrenv_destroy_region(addrenv->text, ARCH_TEXT_NSECTS, CONFIG_ARCH_TEXT_VBASE); /* Destroy the .bss/.data region */ arm_addrenv_destroy_region(addrenv->data, ARCH_DATA_NSECTS, CONFIG_ARCH_DATA_VBASE); #ifdef CONFIG_BUILD_KERNEL /* Destroy the heap region */ arm_addrenv_destroy_region(addrenv->heap, ARCH_HEAP_NSECTS, CONFIG_ARCH_HEAP_VBASE); #endif memset(addrenv, 0, sizeof(group_addrenv_t)); return OK; }
int up_addrenv_ustackfree(FAR struct tcb_s *tcb) { bvdbg("tcb=%p\n", tcb); DEBUGASSERT(tcb); /* Destroy the stack region */ arm_addrenv_destroy_region(tcb->xcp.ustack, ARCH_STACK_NSECTS, CONFIG_ARCH_STACK_VBASE); memset(tcb->xcp.ustack, 0, ARCH_STACK_NSECTS * sizeof(uintptr_t *)); return OK; }