diff --git a/bsp/qemu-vexpress-a9/drivers/board.c b/bsp/qemu-vexpress-a9/drivers/board.c index 2c6e172f0b5661295ba50cdeaf2ec45e57b2f6cb..5fe7cf9b9796018f95cf2cb733650607975dd5ee 100644 --- a/bsp/qemu-vexpress-a9/drivers/board.c +++ b/bsp/qemu-vexpress-a9/drivers/board.c @@ -18,12 +18,12 @@ #include "drv_timer.h" #include -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #include #include #endif -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP struct mem_desc platform_mem_desc[] = { {KERNEL_VADDR_START, KERNEL_VADDR_START + 0x0fffffff, KERNEL_VADDR_START + PV_OFFSET, NORMAL_MEM} }; @@ -53,7 +53,7 @@ rt_mmu_info mmu_info; extern size_t MMUTable[]; -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP rt_region_t init_page_region = { (uint32_t)PAGE_START, (uint32_t)PAGE_END, @@ -62,7 +62,7 @@ rt_region_t init_page_region = { void rt_hw_board_init(void) { -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP rt_hw_mmu_map_init(&mmu_info, (void*)0xf0000000, 0x10000000, MMUTable, PV_OFFSET); rt_page_init(init_page_region); diff --git a/bsp/qemu-vexpress-a9/drivers/board.h b/bsp/qemu-vexpress-a9/drivers/board.h index 9564ac41dc66e4a656a759afbc88e62d334f3770..e79276264430e6f0164a513575a1d99047e8d223 100644 --- a/bsp/qemu-vexpress-a9/drivers/board.h +++ b/bsp/qemu-vexpress-a9/drivers/board.h @@ -29,7 +29,7 @@ extern int __bss_end; #define HEAP_BEGIN ((void*)&__bss_end) #endif -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #define HEAP_END (void*)(KERNEL_VADDR_START + 16 * 1024 * 1024) #define PAGE_START HEAP_END #define PAGE_END (void*)(KERNEL_VADDR_START + 128 * 1024 * 1024) diff --git a/bsp/qemu-vexpress-a9/drivers/drv_clcd.c b/bsp/qemu-vexpress-a9/drivers/drv_clcd.c index 389191a4e51daf57bdb49f93a37a4e7152784b3d..965c0fb7c52f2ae4f95ee34d9e15b2182a87f073 100644 --- a/bsp/qemu-vexpress-a9/drivers/drv_clcd.c +++ b/bsp/qemu-vexpress-a9/drivers/drv_clcd.c @@ -3,10 +3,14 @@ #include #include +#ifdef RT_USING_LWP #include +#endif #include +#ifdef RT_USING_LWP #include +#endif #include "drv_clcd.h" #include "rt_lcd.h" @@ -83,7 +87,7 @@ static rt_err_t drv_clcd_control(struct rt_device *device, int cmd, void *args) case FBIOGET_FSCREENINFO: { -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP struct fb_fix_screeninfo *info = (struct fb_fix_screeninfo *)args; strncpy(info->id, "lcd", sizeof(info->id)); info->smem_len = lcd->width * lcd->height * 2; @@ -133,7 +137,7 @@ int drv_clcd_hw_init(void) _lcd.width = CLCD_WIDTH; _lcd.height = CLCD_HEIGHT; rt_kprintf("try to allocate fb... | w - %d, h - %d | ", _lcd.width, _lcd.height); -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP _lcd.fb_virt= rt_pages_alloc (rt_page_bits(_lcd.width * _lcd.height * 2)); _lcd.fb = _lcd.fb_virt + PV_OFFSET; rt_kprintf("done!\n"); diff --git a/bsp/qemu-vexpress-a9/drivers/secondary_cpu.c b/bsp/qemu-vexpress-a9/drivers/secondary_cpu.c index 5c43ec03bb307ffb38b1055fe637e4b987ab4b0c..71db87d7d0963bc2658d4a494810db0602fb1ef5 100644 --- a/bsp/qemu-vexpress-a9/drivers/secondary_cpu.c +++ b/bsp/qemu-vexpress-a9/drivers/secondary_cpu.c @@ -19,7 +19,7 @@ #ifdef RT_USING_SMP #include -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #include #endif @@ -30,7 +30,7 @@ static void rt_hw_timer2_isr(int vector, void *param) timer_clear_pending(0); } -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP extern void set_secondary_cpu_boot_address(uint32_t pv_off, void *second_boot_reg); #else extern void set_secondary_cpu_boot_address(void); @@ -38,7 +38,7 @@ extern void set_secondary_cpu_boot_address(void); void rt_hw_secondary_cpu_up(void) { -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP void *plat_boot_reg; plat_boot_reg = rt_hw_mmu_map(&mmu_info, 0, (void*)0x10000034, 0x1000, MMU_MAP_K_RW); diff --git a/components/finsh/cmd.c b/components/finsh/cmd.c index 1af66f8eeb7fdf694d022729d6d540df674ab1bb..f3f772213a2f0b821885a4ff155a8de929620925 100644 --- a/components/finsh/cmd.c +++ b/components/finsh/cmd.c @@ -895,9 +895,7 @@ MSH_CMD_EXPORT(list, list all symbol in system) #ifdef RT_USING_LWP #include -#ifdef RT_USING_USERSPACE #include -#endif #ifdef RT_USING_HEAP extern void list_mem(void); @@ -1047,7 +1045,6 @@ long top(void) rt_hw_interrupt_enable(level); pid = lwp_to_pid(lwp); rt_kprintf("%-*.*s %5d %3d ", maxlen, RT_NAME_MAX, thread->name, pid, thread->current_priority); -#ifdef RT_USING_USERSPACE { size_t virt; @@ -1056,9 +1053,6 @@ long top(void) rt_hw_interrupt_enable(level); rt_kprintf(" U %3d 0x%08x\n", thread->run_tick * 100/tick_diff, virt); } -#else - rt_kprintf(" U %3d\n", thread->run_tick * 100/tick_diff); -#endif lwp_ref_dec(lwp); } else diff --git a/components/lwp/Kconfig b/components/lwp/Kconfig index 0c0c5a47f6a14cdfc0c0a2e3a31e1c293a59059c..d30ae76042188026224958368a2f7b5a128bb491 100644 --- a/components/lwp/Kconfig +++ b/components/lwp/Kconfig @@ -22,7 +22,7 @@ config LWP_TASK_STACK_SIZE config RT_USING_GDBSERVER bool "Using gdbserver" default y - depends on RT_USING_USERSPACE + depends on RT_USING_LWP config RT_CH_MSG_MAX_NR int "The maximum number of channel messages" diff --git a/components/lwp/arch/arm/common/reloc.c b/components/lwp/arch/arm/common/reloc.c deleted file mode 100644 index cab0b76fd793eca96c1a1fefa6feaa0506c81904..0000000000000000000000000000000000000000 --- a/components/lwp/arch/arm/common/reloc.c +++ /dev/null @@ -1,120 +0,0 @@ -#include -#include -#include -#include -#ifdef RT_USING_USERSPACE -#include -#include -#endif - -typedef struct -{ - Elf32_Word st_name; - Elf32_Addr st_value; - Elf32_Word st_size; - unsigned char st_info; - unsigned char st_other; - Elf32_Half st_shndx; -} Elf32_sym; - -#ifdef RT_USING_USERSPACE -void lwp_elf_reloc(rt_mmu_info *m_info, void *text_start, void *rel_dyn_start, size_t rel_dyn_size, void *got_start, size_t got_size, Elf32_sym *dynsym) -{ - size_t rel_off; - void* addr; - - if (rel_dyn_size && !dynsym) - { - return; - } - for (rel_off = 0; rel_off < rel_dyn_size; rel_off += 8) - { - uint32_t v1, v2; - - /* - memcpy(&v1, rel_dyn_start + rel_off, 4); - memcpy(&v2, rel_dyn_start + rel_off + 4, 4); - */ - - addr = rt_hw_mmu_v2p(m_info, (void*)((char*)rel_dyn_start + rel_off)); - addr = (void*)((char*)addr - PV_OFFSET); - memcpy(&v1, addr, 4); - addr = rt_hw_mmu_v2p(m_info, (void*)((char*)rel_dyn_start + rel_off + 4)); - addr = (void*)((char*)addr - PV_OFFSET); - memcpy(&v2, addr, 4); - - addr = rt_hw_mmu_v2p(m_info, (void*)((char*)text_start + v1)); - addr = (void*)((char*)addr - PV_OFFSET); - if ((v2 & 0xff) == R_ARM_RELATIVE) - { - // *(uint32_t*)(text_start + v1) += (uint32_t)text_start; - *(uint32_t*)addr += (uint32_t)text_start; - } - else if ((v2 & 0xff) == R_ARM_ABS32) - { - uint32_t t; - t = (v2 >> 8); - if (t) /* 0 is UDF */ - { - // *(uint32_t*)(text_start + v1) = (uint32_t)(text_start + dynsym[t].st_value); - *(uint32_t*)addr = (uint32_t)((char*)text_start + dynsym[t].st_value); - } - } - } - /* modify got */ - if (got_size) - { - uint32_t *got_item = (uint32_t*)got_start; - - for (rel_off = 0; rel_off < got_size; rel_off += 4, got_item++) - { - //*got_item += (uint32_t)text_start; - addr = rt_hw_mmu_v2p(m_info, got_item); - addr = (void*)((char*)addr - PV_OFFSET); - *(uint32_t *)addr += (uint32_t)text_start; - } - } -} -#else - -void lwp_elf_reloc(void *text_start, void *rel_dyn_start, size_t rel_dyn_size, void *got_start, size_t got_size, Elf32_sym *dynsym) -{ - size_t rel_off; - - if (rel_dyn_size && !dynsym) - { - return; - } - for (rel_off = 0; rel_off < rel_dyn_size; rel_off += 8) - { - uint32_t v1, v2; - - memcpy(&v1, (void*)((char*)rel_dyn_start + rel_off), 4); - memcpy(&v2, (void*)((char*)rel_dyn_start + rel_off + 4), 4); - - if ((v2 & 0xff) == R_ARM_RELATIVE) - { - *(uint32_t*)((char*)text_start + v1) += (uint32_t)text_start; - } - else if ((v2 & 0xff) == R_ARM_ABS32) - { - uint32_t t; - t = (v2 >> 8); - if (t) /* 0 is UDF */ - { - *(uint32_t*)((char*)text_start + v1) = (uint32_t)((char*)text_start + dynsym[t].st_value); - } - } - } - /* modify got */ - if (got_size) - { - uint32_t *got_item = (uint32_t*)got_start; - - for (rel_off = 0; rel_off < got_size; rel_off += 4, got_item++) - { - *got_item += (uint32_t)text_start; - } - } -} -#endif diff --git a/components/lwp/arch/arm/cortex-a/arch_user_space_init.c b/components/lwp/arch/arm/cortex-a/arch_user_space_init.c index 7a2f612aab3a8b2eb9dbbd41b63178201a6b4d2c..d96051abdfd845b3d67dfca61e1acbe67b70675c 100644 --- a/components/lwp/arch/arm/cortex-a/arch_user_space_init.c +++ b/components/lwp/arch/arm/cortex-a/arch_user_space_init.c @@ -11,8 +11,6 @@ #include #include -#ifdef RT_USING_USERSPACE - #include #include #include @@ -60,4 +58,3 @@ void arch_kuser_init(rt_mmu_info *mmu_info, void *vectors) rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, (void*)((char*)vectors + 0x1000 - kuser_sz), kuser_sz); rt_hw_cpu_icache_ops(RT_HW_CACHE_INVALIDATE, (void*)((char*)vectors + 0x1000 - kuser_sz), kuser_sz); } -#endif diff --git a/components/lwp/arch/arm/cortex-a/arch_user_stack.c b/components/lwp/arch/arm/cortex-a/arch_user_stack.c index 767e75292ceace3979ea1693af6ed336cf085e24..5c1e0e53a0bac2aa9c3e0f30ad460e3c15e644eb 100644 --- a/components/lwp/arch/arm/cortex-a/arch_user_stack.c +++ b/components/lwp/arch/arm/cortex-a/arch_user_stack.c @@ -11,8 +11,6 @@ #include #include -#ifdef RT_USING_USERSPACE - #include #include #include @@ -36,4 +34,3 @@ int arch_expand_user_stack(void *addr) } return ret; } -#endif diff --git a/components/lwp/arch/arm/cortex-a/lwp_arch.h b/components/lwp/arch/arm/cortex-a/lwp_arch.h index 22a0f1fc6cabb04035e47dc544269faa70c17ce0..ef619b5c76d93a357695ee59bff9da35acf6817b 100644 --- a/components/lwp/arch/arm/cortex-a/lwp_arch.h +++ b/components/lwp/arch/arm/cortex-a/lwp_arch.h @@ -12,8 +12,6 @@ #include -#ifdef RT_USING_USERSPACE - #define USER_HEAP_VADDR 0x80000000 #define USER_STACK_VSTART 0x70000000 #define USER_STACK_VEND USER_HEAP_VADDR @@ -37,6 +35,4 @@ rt_inline unsigned long ffz(unsigned long x) } #endif -#endif - #endif /*LWP_ARCH_H__*/ diff --git a/components/lwp/lwp.c b/components/lwp/lwp.c index 3826306d98ffd6944582b820213d5bac87b85484..a0e972cb721c661b180aeadc6875fd022427e0db 100644 --- a/components/lwp/lwp.c +++ b/components/lwp/lwp.c @@ -27,7 +27,6 @@ #define DBG_LVL DBG_WARNING #include -#ifdef RT_USING_USERSPACE #ifdef RT_USING_GDBSERVER #include #include @@ -41,7 +40,6 @@ #else #define USER_LOAD_VADDR 0x100000 #endif -#endif static const char elf_magic[] = {0x7f, 'E', 'L', 'F'}; @@ -58,14 +56,9 @@ void lwp_set_kernel_sp(uint32_t *sp) uint32_t *lwp_get_kernel_sp(void) { -#ifdef RT_USING_USERSPACE return (uint32_t *)rt_thread_self()->sp; -#else - return (uint32_t *)rt_thread_self()->kernel_sp; -#endif } -#ifdef RT_USING_USERSPACE struct process_aux *lwp_argscopy(struct rt_lwp *lwp, int argc, char **argv, char **envp) { int size = sizeof(int) * 5; /* store argc, argv, envp, aux, NULL */ @@ -162,86 +155,6 @@ struct process_aux *lwp_argscopy(struct rt_lwp *lwp, int argc, char **argv, char return aux; } -#else -static struct process_aux *lwp_argscopy(struct rt_lwp *lwp, int argc, char **argv, char **envp) -{ - int size = sizeof(int) * 5; /* store argc, argv, envp, aux, NULL */ - int *args; - char *str; - char **new_argve; - int i; - int len; - struct process_aux *aux; - - for (i = 0; i < argc; i++) - { - size += (rt_strlen(argv[i]) + 1); - } - size += (sizeof(int) * argc); - - i = 0; - if (envp) - { - while (envp[i] != 0) - { - size += (rt_strlen(envp[i]) + 1); - size += sizeof(int); - i++; - } - } - - /* for aux */ - size += sizeof(struct process_aux); - - args = (int *)rt_malloc(size); - if (args == RT_NULL) - { - return RT_NULL; - } - - /* argc, argv[], 0, envp[], 0 */ - str = (char *)((size_t)args + (argc + 2 + i + 1 + AUX_ARRAY_ITEMS_NR * 2 + 1) * sizeof(int)); - - new_argve = (char **)&args[1]; - args[0] = argc; - - for (i = 0; i < argc; i++) - { - len = rt_strlen(argv[i]) + 1; - new_argve[i] = str; - rt_memcpy(str, argv[i], len); - str += len; - } - new_argve[i] = 0; - i++; - - new_argve[i] = 0; - if (envp) - { - int j; - for (j = 0; envp[j] != 0; j++) - { - len = rt_strlen(envp[j]) + 1; - new_argve[i] = str; - rt_memcpy(str, envp[j], len); - str += len; - i++; - } - new_argve[i] = 0; - } - - /* aux */ - aux = (struct process_aux *)(new_argve + i); - aux->item[0].key = AT_EXECFN; - aux->item[0].value = (uint32_t)(size_t)new_argve[0]; - i += AUX_ARRAY_ITEMS_NR * 2; - new_argve[i] = 0; - - lwp->args = args; - - return aux; -} -#endif #define check_off(voff, vlen) \ do \ @@ -312,12 +225,6 @@ typedef struct Elf_Half st_shndx; } Elf_sym; -#ifdef RT_USING_USERSPACE -void lwp_elf_reloc(rt_mmu_info *m_info, void *text_start, void *rel_dyn_start, size_t rel_dyn_size, void *got_start, size_t got_size, Elf_sym *dynsym); -#else -void lwp_elf_reloc(void *text_start, void *rel_dyn_start, size_t rel_dyn_size, void *got_start, size_t got_size, Elf_sym *dynsym); -#endif - struct map_range { void *start; @@ -378,28 +285,17 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str uint32_t i; uint32_t off = 0; char *p_section_str = 0; - Elf_sym *dynsym = 0; Elf_Ehdr eheader; Elf_Phdr pheader; Elf_Shdr sheader; int result = RT_EOK; uint32_t magic; size_t read_len; - void *got_start = 0; - size_t got_size = 0; - void *rel_dyn_start = 0; - size_t rel_dyn_size = 0; - size_t dynsym_off = 0; - size_t dynsym_size = 0; struct map_range text_area = {NULL, 0}; struct map_range data_area = {NULL, 0}; -#ifdef RT_USING_USERSPACE void *pa, *va; -#endif -#ifdef RT_USING_USERSPACE rt_mmu_info *m_info = &lwp->mmu_info; -#endif if (len < sizeof eheader) { @@ -436,11 +332,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str return -RT_ERROR; } - if ((eheader.e_type != ET_DYN) -#ifdef RT_USING_USERSPACE - && (eheader.e_type != ET_EXEC) -#endif - ) + if (eheader.e_type != ET_EXEC) { /* not pie or exec elf */ return -RT_ERROR; @@ -456,7 +348,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str { return -RT_ERROR; } -#ifdef RT_USING_USERSPACE + va = (uint8_t *)lwp_map_user(lwp, (void *)(KERNEL_VADDR_START - ARCH_PAGE_SIZE * 2), process_header_size, 0); if (!va) { @@ -464,41 +356,27 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str } pa = rt_hw_mmu_v2p(m_info, va); process_header = (uint8_t *)pa - PV_OFFSET; -#else - process_header = (uint8_t *)rt_malloc(process_header_size); - if (!process_header) - { - return -RT_ERROR; - } -#endif + check_off(off, len); lseek(fd, off, SEEK_SET); read_len = load_fread(process_header, 1, process_header_size, fd); check_read(read_len, process_header_size); -#ifdef RT_USING_USERSPACE + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, process_header, process_header_size); -#endif aux->item[1].key = AT_PAGESZ; aux->item[1].value = ARCH_PAGE_SIZE; aux->item[2].key = AT_RANDOM; aux->item[2].value = rt_tick_get(); aux->item[3].key = AT_PHDR; -#ifdef RT_USING_USERSPACE aux->item[3].value = (uint32_t)(size_t)va; -#else - aux->item[3].value = (uint32_t)(size_t)process_header; -#endif aux->item[4].key = AT_PHNUM; aux->item[4].value = eheader.e_phnum; aux->item[5].key = AT_PHENT; aux->item[5].value = sizeof pheader; -#ifdef RT_USING_USERSPACE rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, aux, sizeof *aux); -#endif } -#ifdef RT_USING_USERSPACE /* map user */ off = eheader.e_shoff; for (i = 0; i < eheader.e_shnum; i++, off += sizeof sheader) @@ -555,7 +433,6 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str goto _exit; } } -#endif off = eheader.e_phoff; for (i = 0; i < eheader.e_phnum; i++, off += sizeof pheader) @@ -582,7 +459,6 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str } else { -#ifdef RT_USING_USERSPACE void *va; if (eheader.e_type == ET_EXEC) @@ -603,13 +479,7 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str { lwp->text_entry = RT_NULL; } -#else -#ifdef RT_USING_CACHE - lwp->text_entry = (rt_uint8_t *)rt_malloc_align(pheader.p_memsz, RT_CPU_CACHE_LINE_SZ); -#else - lwp->text_entry = (rt_uint8_t *)rt_malloc(pheader.p_memsz); -#endif -#endif + if (lwp->text_entry == RT_NULL) { LOG_E("alloc text memory faild!"); @@ -622,7 +492,6 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str } check_off(pheader.p_offset, len); lseek(fd, pheader.p_offset, SEEK_SET); -#ifdef RT_USING_USERSPACE { uint32_t size = pheader.p_filesz; void *va_self; @@ -643,14 +512,10 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str va = (void *)((char *)va + ARCH_PAGE_SIZE); } } -#else - read_len = load_fread(lwp->text_entry, 1, pheader.p_filesz, fd); -#endif check_read(read_len, pheader.p_filesz); } if (pheader.p_filesz < pheader.p_memsz) { -#ifdef RT_USING_USERSPACE void *va = (void *)((char *)lwp->text_entry + pheader.p_filesz); void *va_self; void *pa; @@ -671,96 +536,15 @@ static int load_elf(int fd, int len, struct rt_lwp *lwp, uint8_t *load_addr, str size -= size_s; va = (void *)((char *)va + ARCH_PAGE_SIZE); } -#else - memset((uint8_t *)lwp->text_entry + pheader.p_filesz, 0, (size_t)(pheader.p_memsz - pheader.p_filesz)); -#endif } break; } } - if (eheader.e_type == ET_DYN) - { - /* section info */ - off = eheader.e_shoff; - /* find section string table */ - check_off(off, len); - lseek(fd, off + (sizeof sheader) * eheader.e_shstrndx, SEEK_SET); - read_len = load_fread(&sheader, 1, sizeof sheader, fd); - check_read(read_len, sizeof sheader); - - p_section_str = (char *)rt_malloc(sheader.sh_size); - if (!p_section_str) - { - LOG_E("out of memory!"); - result = -ENOMEM; - goto _exit; - } - - check_off(sheader.sh_offset, len); - lseek(fd, sheader.sh_offset, SEEK_SET); - read_len = load_fread(p_section_str, 1, sheader.sh_size, fd); - check_read(read_len, sheader.sh_size); - - check_off(off, len); - lseek(fd, off, SEEK_SET); - for (i = 0; i < eheader.e_shnum; i++, off += sizeof sheader) - { - read_len = load_fread(&sheader, 1, sizeof sheader, fd); - check_read(read_len, sizeof sheader); - - if (strcmp(p_section_str + sheader.sh_name, "text") == 0) - { - lwp->text_size = sheader.sh_size; - } - else if (strcmp(p_section_str + sheader.sh_name, ".got") == 0) - { - got_start = (void *)((uint8_t *)lwp->text_entry + sheader.sh_addr); - got_size = (size_t)sheader.sh_size; - } - else if (strcmp(p_section_str + sheader.sh_name, ".rel.dyn") == 0) - { - rel_dyn_start = (void *)((uint8_t *)lwp->text_entry + sheader.sh_addr); - rel_dyn_size = (size_t)sheader.sh_size; - } - else if (strcmp(p_section_str + sheader.sh_name, ".dynsym") == 0) - { - dynsym_off = (size_t)sheader.sh_offset; - dynsym_size = (size_t)sheader.sh_size; - } - } - /* reloc */ - if (dynsym_size) - { - dynsym = rt_malloc(dynsym_size); - if (!dynsym) - { - LOG_E("ERROR: Malloc error!"); - result = -ENOMEM; - goto _exit; - } - check_off(dynsym_off, len); - lseek(fd, dynsym_off, SEEK_SET); - read_len = load_fread(dynsym, 1, dynsym_size, fd); - check_read(read_len, dynsym_size); - } -#ifdef RT_USING_USERSPACE - lwp_elf_reloc(m_info, (void *)lwp->text_entry, rel_dyn_start, rel_dyn_size, got_start, got_size, dynsym); -#else - lwp_elf_reloc((void *)lwp->text_entry, rel_dyn_start, rel_dyn_size, got_start, got_size, dynsym); - - rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, lwp->text_entry, lwp->text_size); - rt_hw_cpu_icache_ops(RT_HW_CACHE_INVALIDATE, lwp->text_entry, lwp->text_size); -#endif - } LOG_D("lwp->text_entry = 0x%p", lwp->text_entry); LOG_D("lwp->text_size = 0x%p", lwp->text_size); _exit: - if (dynsym) - { - rt_free(dynsym); - } if (p_section_str) { rt_free(p_section_str); @@ -838,12 +622,10 @@ void lwp_cleanup(struct rt_thread *tid) LOG_I("cleanup thread: %s, stack_addr: %08X", tid->name, tid->stack_addr); -#ifndef RT_USING_USERSPACE if (tid->user_stack != RT_NULL) { rt_free(tid->user_stack); } -#endif level = rt_hw_interrupt_disable(); lwp = (struct rt_lwp *)tid->lwp; @@ -948,14 +730,12 @@ pid_t lwp_execve(char *filename, int argc, char **argv, char **envp) lwp_ref_dec(lwp); return -ENOMEM; } -#ifdef RT_USING_USERSPACE if (lwp_user_space_init(lwp) != 0) { lwp_tid_put(tid); lwp_ref_dec(lwp); return -ENOMEM; } -#endif if (argv_last[0] == '&' && argv_last[1] == '\0') { diff --git a/components/lwp/lwp.h b/components/lwp/lwp.h index 7cf876c9a60f2533107b3fd41d60d99b527d8a85..bdd87ba0b0365208d84cfe941ab1fc5f0363cb12 100644 --- a/components/lwp/lwp.h +++ b/components/lwp/lwp.h @@ -29,12 +29,10 @@ #include "lwp_signal.h" #include "lwp_syscall.h" -#ifdef RT_USING_USERSPACE #include "lwp_shm.h" #include "mmu.h" #include "page.h" -#endif #ifdef __cplusplus extern "C" { @@ -51,11 +49,9 @@ typedef int32_t pid_t; struct rt_lwp { -#ifdef RT_USING_USERSPACE rt_mmu_info mmu_info; struct lwp_avl_struct *map_area; size_t end_heap; -#endif uint8_t lwp_type; uint8_t reserv[3]; @@ -125,11 +121,8 @@ void lwp_tid_set_thread(int tid, rt_thread_t thread); size_t lwp_user_strlen(const char *s, int *err); -#ifdef RT_USING_USERSPACE void lwp_mmu_switch(struct rt_thread *thread); -#endif -#ifdef RT_USING_USERSPACE struct __pthread { /* Part 1 -- these fields may be external or * * internal (accessed via asm) ABI. Do not change. */ @@ -171,7 +164,6 @@ struct __pthread { uintptr_t canary_at_end; uintptr_t *dtv_copy; }; -#endif /* for futex op */ #define FUTEX_WAIT 0 diff --git a/components/lwp/lwp_futex.c b/components/lwp/lwp_futex.c index 44c798f31b7f6a40e3695eaa97f320334ab1af46..7255bf1618675992da653dcf9624188b8036f222 100644 --- a/components/lwp/lwp_futex.c +++ b/components/lwp/lwp_futex.c @@ -10,9 +10,7 @@ #include #include -#ifdef RT_USING_USERSPACE #include -#endif #include "clock_time.h" struct rt_futex diff --git a/components/lwp/lwp_mm_area.c b/components/lwp/lwp_mm_area.c index 08ecf0684ad48b89e7ccc6f40eac5d62cdf4c93d..239e624068ec61aa68b029474e06d0714621bd87 100644 --- a/components/lwp/lwp_mm_area.c +++ b/components/lwp/lwp_mm_area.c @@ -8,8 +8,6 @@ * 2019-10-28 Jesven first version */ #include - -#ifdef RT_USING_USERSPACE #include int lwp_map_area_insert(struct lwp_avl_struct **avl_tree, size_t addr, size_t size, int ma_type) @@ -119,4 +117,3 @@ size_t lwp_vmem_count(struct lwp_avl_struct *ptree) lwp_avl_traversal(ptree, top_mem_fun, &vsize); return vsize; } -#endif diff --git a/components/lwp/lwp_mm_area.h b/components/lwp/lwp_mm_area.h index 555a03ce48f6b7d90a7df60696f7daed02934ac5..fffbcf8d049382479913a55a339ee6aa0eaee7b3 100644 --- a/components/lwp/lwp_mm_area.h +++ b/components/lwp/lwp_mm_area.h @@ -15,8 +15,6 @@ #include -#ifdef RT_USING_USERSPACE - #ifdef __cplusplus extern "C" { #endif @@ -48,6 +46,4 @@ size_t lwp_vmem_count(struct lwp_avl_struct *ptree); } #endif -#endif - #endif /*__LWP_MM_AREA_H__*/ diff --git a/components/lwp/lwp_pid.c b/components/lwp/lwp_pid.c index 928c9143c75c2c919c827bacd141957f56fc7cbf..00776b449ed77353bcb606e8da495f0403c5e675 100644 --- a/components/lwp/lwp_pid.c +++ b/components/lwp/lwp_pid.c @@ -17,7 +17,6 @@ #include "lwp_pid.h" #include "lwp_console.h" -#ifdef RT_USING_USERSPACE #include "lwp_user_mm.h" #ifdef RT_USING_GDBSERVER @@ -25,8 +24,6 @@ #include #endif -#endif - #define DBG_TAG "LWP_PID" #define DBG_LVL DBG_INFO #include @@ -355,9 +352,6 @@ void lwp_free(struct rt_lwp* lwp) lwp->finish = 1; if (lwp->args != RT_NULL) { -#ifndef RT_USING_USERSPACE - rt_free(lwp->args); -#endif lwp->args = RT_NULL; } @@ -379,26 +373,7 @@ void lwp_free(struct rt_lwp* lwp) lwp->data_entry = RT_NULL; } - /* free text section */ - if (lwp->lwp_type == LWP_TYPE_DYN_ADDR) - { - if (lwp->text_entry) - { - LOG_D("lwp text free: %p", lwp->text_entry); -#ifndef RT_USING_USERSPACE -#ifdef RT_USING_CACHE - rt_free_align(lwp->text_entry); -#else - rt_free(lwp->text_entry); -#endif -#endif - lwp->text_entry = RT_NULL; - } - } - -#ifdef RT_USING_USERSPACE lwp_unmap_user_space(lwp); -#endif /* for children */ while (lwp->first_child) diff --git a/components/lwp/lwp_pmutex.c b/components/lwp/lwp_pmutex.c index a11b24c9869432d4c1a710c55c035f69c1508647..bb29383bcbe4eb5ff40d6b1f93a5960c5d5f4783 100644 --- a/components/lwp/lwp_pmutex.c +++ b/components/lwp/lwp_pmutex.c @@ -10,9 +10,7 @@ #include #include -#ifdef RT_USING_USERSPACE #include -#endif #include "clock_time.h" struct rt_pmutex diff --git a/components/lwp/lwp_shm.c b/components/lwp/lwp_shm.c index 5312c049eff09cdc2c3ce00394fe1a72af16d742..2a54d2b64353e5bcec24cc86670c1e71426db37e 100644 --- a/components/lwp/lwp_shm.c +++ b/components/lwp/lwp_shm.c @@ -10,7 +10,6 @@ #include #include -#ifdef RT_USING_USERSPACE #include #include @@ -420,5 +419,3 @@ void list_shm(void) } MSH_CMD_EXPORT(list_shm, show share memory info); #endif - -#endif diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index e57976e25e0f119f683baea69a5cc80b6128694c..e42d24388dd0afb9c7193f6e527522689d6f0646 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -17,10 +17,8 @@ #include #include -#ifdef RT_USING_USERSPACE #include #include -#endif #ifdef RT_USING_DFS #include @@ -36,7 +34,7 @@ #define SYSCALL_NET(f) ((void *)sys_notimpl) #endif -#if defined(RT_USING_DFS) && defined(RT_USING_USERSPACE) +#if defined(RT_USING_DFS) #define SYSCALL_USPACE(f) ((void *)(f)) #else #define SYSCALL_USPACE(f) ((void *)sys_notimpl) @@ -69,7 +67,7 @@ extern void lwp_user_entry(void *args, const void *text, void *data, void *user_ extern void set_user_context(void *stack); void lwp_cleanup(struct rt_thread *tid); -#ifdef RT_USING_USERSPACE + static void *kmem_get(size_t size) { return rt_malloc(size); @@ -79,7 +77,6 @@ static void kmem_put(void *kptr) { rt_free(kptr); } -#endif int sys_futex(int *uaddr, int op, int val, void *timeout, void *uaddr2, int val3); @@ -178,66 +175,66 @@ static void convert_sockopt(int *level, int *optname) switch (*optname) { - case INTF_SO_REUSEADDR: - *optname = IMPL_SO_REUSEADDR; - break; - case INTF_SO_KEEPALIVE: - *optname = IMPL_SO_KEEPALIVE; - break; - case INTF_SO_BROADCAST: - *optname = IMPL_SO_BROADCAST; - break; - case INTF_SO_ACCEPTCONN: - *optname = IMPL_SO_ACCEPTCONN; - break; - case INTF_SO_DONTROUTE: - *optname = IMPL_SO_DONTROUTE; - break; - case INTF_SO_LINGER: - *optname = IMPL_SO_LINGER; - break; - case INTF_SO_OOBINLINE: - *optname = IMPL_SO_OOBINLINE; - break; - case INTF_SO_REUSEPORT: - *optname = IMPL_SO_REUSEPORT; - break; - case INTF_SO_SNDBUF: - *optname = IMPL_SO_SNDBUF; - break; - case INTF_SO_RCVBUF: - *optname = IMPL_SO_RCVBUF; - break; - case INTF_SO_SNDLOWAT: - *optname = IMPL_SO_SNDLOWAT; - break; - case INTF_SO_RCVLOWAT: - *optname = IMPL_SO_RCVLOWAT; - break; - case INTF_SO_SNDTIMEO: - *optname = IMPL_SO_SNDTIMEO; - break; - case INTF_SO_RCVTIMEO: - *optname = IMPL_SO_RCVTIMEO; - break; - case INTF_SO_ERROR: - *optname = IMPL_SO_ERROR; - break; - case INTF_SO_TYPE: - *optname = IMPL_SO_TYPE; - break; - case INTF_SO_NO_CHECK: - *optname = IMPL_SO_NO_CHECK; - break; + case INTF_SO_REUSEADDR: + *optname = IMPL_SO_REUSEADDR; + break; + case INTF_SO_KEEPALIVE: + *optname = IMPL_SO_KEEPALIVE; + break; + case INTF_SO_BROADCAST: + *optname = IMPL_SO_BROADCAST; + break; + case INTF_SO_ACCEPTCONN: + *optname = IMPL_SO_ACCEPTCONN; + break; + case INTF_SO_DONTROUTE: + *optname = IMPL_SO_DONTROUTE; + break; + case INTF_SO_LINGER: + *optname = IMPL_SO_LINGER; + break; + case INTF_SO_OOBINLINE: + *optname = IMPL_SO_OOBINLINE; + break; + case INTF_SO_REUSEPORT: + *optname = IMPL_SO_REUSEPORT; + break; + case INTF_SO_SNDBUF: + *optname = IMPL_SO_SNDBUF; + break; + case INTF_SO_RCVBUF: + *optname = IMPL_SO_RCVBUF; + break; + case INTF_SO_SNDLOWAT: + *optname = IMPL_SO_SNDLOWAT; + break; + case INTF_SO_RCVLOWAT: + *optname = IMPL_SO_RCVLOWAT; + break; + case INTF_SO_SNDTIMEO: + *optname = IMPL_SO_SNDTIMEO; + break; + case INTF_SO_RCVTIMEO: + *optname = IMPL_SO_RCVTIMEO; + break; + case INTF_SO_ERROR: + *optname = IMPL_SO_ERROR; + break; + case INTF_SO_TYPE: + *optname = IMPL_SO_TYPE; + break; + case INTF_SO_NO_CHECK: + *optname = IMPL_SO_NO_CHECK; + break; /* * SO_DONTLINGER (*level = ((int)(~SO_LINGER))), * SO_USELOOPBACK (*level = 0x0040) and * SO_CONTIMEO (*level = 0x1009) are not supported for now. */ - default: - *optname = 0; - break; + default: + *optname = 0; + break; } return; } @@ -248,29 +245,29 @@ static void convert_sockopt(int *level, int *optname) switch (*optname) { - case INTF_IP_TTL: - *optname = IMPL_IP_TTL; - break; - case INTF_IP_TOS: - *optname = IMPL_IP_TOS; - break; - case INTF_IP_MULTICAST_TTL: - *optname = IMPL_IP_MULTICAST_TTL; - break; - case INTF_IP_MULTICAST_IF: - *optname = IMPL_IP_MULTICAST_IF; - break; - case INTF_IP_MULTICAST_LOOP: - *optname = IMPL_IP_MULTICAST_LOOP; - break; - case INTF_IP_ADD_MEMBERSHIP: - *optname = IMPL_IP_ADD_MEMBERSHIP; - break; - case INTF_IP_DROP_MEMBERSHIP: - *optname = IMPL_IP_DROP_MEMBERSHIP; - break; - default: - break; + case INTF_IP_TTL: + *optname = IMPL_IP_TTL; + break; + case INTF_IP_TOS: + *optname = IMPL_IP_TOS; + break; + case INTF_IP_MULTICAST_TTL: + *optname = IMPL_IP_MULTICAST_TTL; + break; + case INTF_IP_MULTICAST_IF: + *optname = IMPL_IP_MULTICAST_IF; + break; + case INTF_IP_MULTICAST_LOOP: + *optname = IMPL_IP_MULTICAST_LOOP; + break; + case INTF_IP_ADD_MEMBERSHIP: + *optname = IMPL_IP_ADD_MEMBERSHIP; + break; + case INTF_IP_DROP_MEMBERSHIP: + *optname = IMPL_IP_DROP_MEMBERSHIP; + break; + default: + break; } } @@ -280,23 +277,23 @@ static void convert_sockopt(int *level, int *optname) switch (*optname) { - case INTF_TCP_NODELAY: - *optname = IMPL_TCP_NODELAY; - break; - case INTF_TCP_KEEPALIVE: - *optname = IMPL_TCP_KEEPALIVE; - break; - case INTF_TCP_KEEPIDLE: - *optname = IMPL_TCP_KEEPIDLE; - break; - case INTF_TCP_KEEPINTVL: - *optname = IMPL_TCP_KEEPINTVL; - break; - case INTF_TCP_KEEPCNT: - *optname = IMPL_TCP_KEEPCNT; - break; - default: - break; + case INTF_TCP_NODELAY: + *optname = IMPL_TCP_NODELAY; + break; + case INTF_TCP_KEEPALIVE: + *optname = IMPL_TCP_KEEPALIVE; + break; + case INTF_TCP_KEEPIDLE: + *optname = IMPL_TCP_KEEPIDLE; + break; + case INTF_TCP_KEEPINTVL: + *optname = IMPL_TCP_KEEPINTVL; + break; + case INTF_TCP_KEEPCNT: + *optname = IMPL_TCP_KEEPCNT; + break; + default: + break; } return; } @@ -307,11 +304,11 @@ static void convert_sockopt(int *level, int *optname) switch (*optname) { - case INTF_IPV6_V6ONLY: - *optname = IMPL_IPV6_V6ONLY; - break; - default: - break; + case INTF_IPV6_V6ONLY: + *optname = IMPL_IPV6_V6ONLY; + break; + default: + break; } return; } @@ -319,24 +316,24 @@ static void convert_sockopt(int *level, int *optname) } #ifdef RT_USING_LWIP - static void sockaddr_tolwip(const struct musl_sockaddr *std, struct sockaddr *lwip) +static void sockaddr_tolwip(const struct musl_sockaddr *std, struct sockaddr *lwip) +{ + if (std && lwip) { - if (std && lwip) - { - lwip->sa_len = sizeof(*lwip); - lwip->sa_family = (sa_family_t) std->sa_family; - memcpy(lwip->sa_data, std->sa_data, sizeof(lwip->sa_data)); - } + lwip->sa_len = sizeof(*lwip); + lwip->sa_family = (sa_family_t) std->sa_family; + memcpy(lwip->sa_data, std->sa_data, sizeof(lwip->sa_data)); } +} - static void sockaddr_tomusl(const struct sockaddr *lwip, struct musl_sockaddr *std) +static void sockaddr_tomusl(const struct sockaddr *lwip, struct musl_sockaddr *std) +{ + if (std && lwip) { - if (std && lwip) - { - std->sa_family = (uint16_t) lwip->sa_family; - memcpy(std->sa_data, lwip->sa_data, sizeof(std->sa_data)); - } + std->sa_family = (uint16_t) lwip->sa_family; + memcpy(std->sa_data, lwip->sa_data, sizeof(std->sa_data)); } +} #endif static void lwp_user_thread(void *parameter) @@ -401,7 +398,6 @@ void sys_exit_group(int status) /* syscall: "read" ret: "ssize_t" args: "int" "void *" "size_t" */ ssize_t sys_read(int fd, void *buf, size_t nbyte) { -#ifdef RT_USING_USERSPACE void *kmem = RT_NULL; ssize_t ret = -1; @@ -432,15 +428,11 @@ ssize_t sys_read(int fd, void *buf, size_t nbyte) kmem_put(kmem); return ret; -#else - return read(fd, buf, nbyte); -#endif } /* syscall: "write" ret: "ssize_t" args: "int" "const void *" "size_t" */ ssize_t sys_write(int fd, const void *buf, size_t nbyte) { -#ifdef RT_USING_USERSPACE void *kmem = RT_NULL; ssize_t ret = -1; @@ -468,9 +460,6 @@ ssize_t sys_write(int fd, const void *buf, size_t nbyte) kmem_put(kmem); return ret; -#else - return write(fd, buf, nbyte); -#endif } /* syscall: "lseek" ret: "off_t" args: "int" "off_t" "int" */ @@ -482,7 +471,6 @@ off_t sys_lseek(int fd, off_t offset, int whence) /* syscall: "open" ret: "int" args: "const char *" "int" "..." */ int sys_open(const char *name, int flag, ...) { -#ifdef RT_USING_USERSPACE int ret = -1; rt_size_t len = 0; char *kname = RT_NULL; @@ -512,9 +500,6 @@ int sys_open(const char *name, int flag, ...) kmem_put(kname); return ret; -#else - return open(name, flag, 0); -#endif } /* syscall: "close" ret: "int" args: "int" */ @@ -531,7 +516,6 @@ int sys_ioctl(int fd, unsigned long cmd, void* data) int sys_fstat(int file, struct stat *buf) { -#ifdef RT_USING_USERSPACE int ret = -1; struct stat statbuff; @@ -546,9 +530,6 @@ int sys_fstat(int file, struct stat *buf) lwp_put_to_user(buf, &statbuff, sizeof statbuff); } return ret; -#else - return fstat(file, buf); -#endif } /* DFS and lwip definitions */ @@ -647,7 +628,6 @@ int sys_poll(struct pollfd *fds, nfds_t nfds, int timeout) { int ret = -1; int i = 0; -#ifdef RT_USING_USERSPACE struct pollfd *kfds = RT_NULL; if (!lwp_user_accessable((void *)fds, nfds * sizeof *fds)) @@ -681,27 +661,10 @@ int sys_poll(struct pollfd *fds, nfds_t nfds, int timeout) kmem_put(kfds); return ret; -#else - for (i = 0; i < nfds; i++) - { - musl2dfs_events(&fds->events); - } - ret = poll(fds, nfds, timeout); - if (ret > 0) - { - for (i = 0; i < nfds; i++) - { - dfs2musl_events(&fds->revents); - } - } - - return ret; -#endif } int sys_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { -#ifdef RT_USING_USERSPACE int ret = -1; fd_set *kreadfds = RT_NULL, *kwritefds = RT_NULL, *kexceptfds = RT_NULL; @@ -778,14 +741,10 @@ quit: kmem_put(kexceptfds); } return ret; -#else - return select(nfds, readfds, writefds, exceptfds, timeout); -#endif } int sys_unlink(const char *pathname) { -#ifdef RT_USING_USERSPACE int ret = -1; rt_size_t len = 0; char *kname = RT_NULL; @@ -817,16 +776,12 @@ int sys_unlink(const char *pathname) kmem_put(kname); return ret; -#else - return unlink(pathname); -#endif } /* syscall: "nanosleep" ret: "int" args: "const struct timespec *" "struct timespec *" */ int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp) { rt_tick_t tick; -#ifdef RT_USING_USERSPACE struct timespec rqtp_k; struct timespec rmtp_k; @@ -858,20 +813,6 @@ int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp) lwp_put_to_user(rmtp, (void *)&rmtp_k, sizeof rmtp_k); } -#else - dbg_log(DBG_LOG, "sys_nanosleep\n"); - - tick = rqtp->tv_sec * RT_TICK_PER_SECOND + ((uint64_t)rqtp->tv_nsec * RT_TICK_PER_SECOND) / 1000000000; - rt_thread_delay(tick); - - if (rmtp) - { - tick = rt_tick_get() - tick; - /* get the passed time */ - rmtp->tv_sec = tick / RT_TICK_PER_SECOND; - rmtp->tv_nsec = (tick % RT_TICK_PER_SECOND) * (1000000000 / RT_TICK_PER_SECOND); - } -#endif return 0; } @@ -881,7 +822,6 @@ int sys_gettimeofday(struct timeval *tp, struct timezone *tzp) { struct timeval t_k; -#ifdef RT_USING_USERSPACE if (tp) { if (!lwp_user_accessable((void *)tp, sizeof *tp)) @@ -895,13 +835,6 @@ int sys_gettimeofday(struct timeval *tp, struct timezone *tzp) lwp_put_to_user(tp, (void *)&t_k, sizeof t_k); } -#else - if (tp) - { - tp->tv_sec = rt_tick_get() / RT_TICK_PER_SECOND; - tp->tv_usec = (rt_tick_get() % RT_TICK_PER_SECOND) * (1000000 / RT_TICK_PER_SECOND); - } -#endif return 0; } @@ -1023,7 +956,6 @@ rt_err_t sys_mutex_release(rt_mutex_t mutex) return rt_mutex_release(mutex); } -#ifdef RT_USING_USERSPACE /* memory allocation */ extern rt_base_t lwp_brk(void *addr); rt_base_t sys_brk(void *addr) @@ -1044,7 +976,6 @@ int sys_munmap(void *addr, size_t length) { return lwp_munmap(addr); } -#endif rt_event_t sys_event_create(const char *name, rt_uint8_t flag) { @@ -1068,10 +999,10 @@ rt_err_t sys_event_send(rt_event_t event, rt_uint32_t set) } rt_err_t sys_event_recv(rt_event_t event, - rt_uint32_t set, - rt_uint8_t opt, - rt_int32_t timeout, - rt_uint32_t *recved) + rt_uint32_t set, + rt_uint8_t opt, + rt_int32_t timeout, + rt_uint32_t *recved) { return rt_event_recv(event, set, opt, timeout, recved); } @@ -1098,8 +1029,8 @@ rt_err_t sys_mb_send(rt_mailbox_t mb, rt_uint32_t value) } rt_err_t sys_mb_send_wait(rt_mailbox_t mb, - rt_uint32_t value, - rt_int32_t timeout) + rt_uint32_t value, + rt_int32_t timeout) { return rt_mb_send_wait(mb, value, timeout); } @@ -1110,9 +1041,9 @@ rt_err_t sys_mb_recv(rt_mailbox_t mb, rt_uint32_t *value, rt_int32_t timeout) } rt_mq_t sys_mq_create(const char *name, - rt_size_t msg_size, - rt_size_t max_msgs, - rt_uint8_t flag) + rt_size_t msg_size, + rt_size_t max_msgs, + rt_uint8_t flag) { rt_mq_t mq = rt_mq_create(name, msg_size, max_msgs, flag); if (lwp_user_object_add(lwp_self(), (rt_object_t)mq) != 0) @@ -1139,9 +1070,9 @@ rt_err_t sys_mq_urgent(rt_mq_t mq, void *buffer, rt_size_t size) } rt_err_t sys_mq_recv(rt_mq_t mq, - void *buffer, - rt_size_t size, - rt_int32_t timeout) + void *buffer, + rt_size_t size, + rt_int32_t timeout) { return rt_mq_recv(mq, buffer, size, timeout); } @@ -1196,11 +1127,7 @@ rt_thread_t sys_thread_create(void *arg[]) lwp = rt_thread_self()->lwp; lwp_ref_inc(lwp); -#ifdef RT_USING_USERSPACE user_stack = lwp_map_user(lwp, 0, (size_t)arg[3], 0); -#else - user_stack = (void *)RT_KERNEL_MALLOC((uint32_t)arg[3]); -#endif if (!user_stack) { rt_set_errno(EINVAL); @@ -1238,12 +1165,6 @@ rt_thread_t sys_thread_create(void *arg[]) fail: lwp_tid_put(tid); -#ifndef RT_USING_USERSPACE - if (user_stack) - { - RT_KERNEL_FREE(user_stack); - } -#endif if (lwp) { lwp_ref_dec(lwp); @@ -1412,9 +1333,7 @@ static int _copy_process(struct rt_lwp *dest_lwp, struct rt_lwp *src_lwp) static void lwp_struct_copy(struct rt_lwp *dst, struct rt_lwp *src) { -#ifdef RT_USING_USERSPACE dst->end_heap = src->end_heap; -#endif dst->lwp_type = src->lwp_type; dst->text_entry = src->text_entry; dst->text_size = src->text_size; @@ -2026,11 +1945,10 @@ int sys_execve(const char *path, char *const argv[], char *const envp[]) rt_pages_free(page, 0); -#ifdef RT_USING_USERSPACE _swap_lwp_data(lwp, new_lwp, rt_mmu_info, mmu_info); _swap_lwp_data(lwp, new_lwp, struct lwp_avl_struct *, map_area); _swap_lwp_data(lwp, new_lwp, size_t, end_heap); -#endif + _swap_lwp_data(lwp, new_lwp, uint8_t, lwp_type); _swap_lwp_data(lwp, new_lwp, void *, text_entry); _swap_lwp_data(lwp, new_lwp, uint32_t, text_size); @@ -2190,7 +2108,6 @@ void sys_hw_interrupt_enable(uint32_t level) rt_hw_interrupt_enable(level); } -#ifdef RT_USING_USERSPACE int sys_shmget(size_t key, size_t size, int create) { return lwp_shmget(key, size, create); @@ -2210,7 +2127,6 @@ int sys_shmdt(void* shm_vaddr) { return lwp_shmdt(shm_vaddr); } -#endif /* device interfaces */ rt_err_t sys_device_init(rt_device_t dev) @@ -2476,16 +2392,13 @@ static int netflags_muslc_2_lwip(int flags) } int sys_recvfrom(int socket, void *mem, size_t len, int flags, - struct musl_sockaddr *from, socklen_t *fromlen) + struct musl_sockaddr *from, socklen_t *fromlen) { int flgs = 0; -#ifdef RT_USING_USERSPACE int ret = -1; void *kmem = RT_NULL; -#endif flgs = netflags_muslc_2_lwip(flags); -#ifdef RT_USING_USERSPACE if (!len) { rt_set_errno(EINVAL); @@ -2529,19 +2442,6 @@ int sys_recvfrom(int socket, void *mem, size_t len, int flags, kmem_put(kmem); return ret; -#else - if (from) - { - int ret = -1; - struct sockaddr sa = {0}; - - ret = recvfrom(socket, mem, len, flgs, &sa, fromlen); - sockaddr_tomusl(&sa, from); - return ret; - } - - return recvfrom(socket, mem, len, flags, NULL, NULL); -#endif } int sys_recv(int socket, void *mem, size_t len, int flags) @@ -2553,16 +2453,13 @@ int sys_recv(int socket, void *mem, size_t len, int flags) } int sys_sendto(int socket, const void *dataptr, size_t size, int flags, - const struct musl_sockaddr *to, socklen_t tolen) + const struct musl_sockaddr *to, socklen_t tolen) { int flgs = 0; -#ifdef RT_USING_USERSPACE int ret = -1; void *kmem = RT_NULL; -#endif flgs = netflags_muslc_2_lwip(flags); -#ifdef RT_USING_USERSPACE if (!size) { rt_set_errno(EINVAL); @@ -2598,16 +2495,6 @@ int sys_sendto(int socket, const void *dataptr, size_t size, int flags, kmem_put(kmem); return ret; -#else - if (to) - { - struct sockaddr sa; - sockaddr_tolwip(to, &sa); - - return sendto(socket, dataptr, size, flgs, &sa, tolen); - } - return sendto(socket, dataptr, size, flgs, NULL, tolen); -#endif } int sys_send(int socket, const void *dataptr, size_t size, int flags) @@ -2677,7 +2564,7 @@ struct k_sigaction { }; int sys_sigaction(int sig, const struct k_sigaction *act, - struct k_sigaction *oact, size_t sigsetsize) + struct k_sigaction *oact, size_t sigsetsize) { int ret = -RT_EINVAL; struct lwp_sigaction kact, *pkact = RT_NULL; @@ -2819,20 +2706,15 @@ int sys_thread_sigprocmask(int how, const lwp_sigset_t *sigset, lwp_sigset_t *os } if (oset) { -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)oset, size)) { rt_set_errno(EFAULT); return ret; } poldset = &oldset; -#else - poldset = oset; -#endif } if (sigset) { -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)sigset, size)) { rt_set_errno(EFAULT); @@ -2840,28 +2722,22 @@ int sys_thread_sigprocmask(int how, const lwp_sigset_t *sigset, lwp_sigset_t *os } lwp_get_from_user(&newset, (void *)sigset, sizeof(lwp_sigset_t)); pnewset = &newset; -#else - pnewset = sigset; -#endif } ret = lwp_thread_sigprocmask(how, pnewset, poldset); if (ret < 0) { return ret; } -#ifdef RT_USING_USERSPACE if (oset) { lwp_put_to_user(oset, poldset, sizeof(lwp_sigset_t)); } -#endif return ret; } int32_t sys_waitpid(int32_t pid, int *status, int options) { int ret = -1; -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)status, sizeof(int))) { rt_set_errno(EFAULT); @@ -2871,9 +2747,6 @@ int32_t sys_waitpid(int32_t pid, int *status, int options) { ret = waitpid(pid, status, options); } -#else - ret = waitpid(pid, status, options); -#endif return ret; } @@ -2902,27 +2775,21 @@ int sys_getaddrinfo(const char *nodename, char *k_nodename = NULL; char *k_servname = NULL; struct addrinfo *k_hints = NULL; -#ifdef RT_USING_USERSPACE int err; -#endif -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)res, sizeof(*res))) { rt_set_errno(EFAULT); goto exit; } -#endif if (nodename) { -#ifdef RT_USING_USERSPACE lwp_user_strlen(nodename, &err); if (err) { rt_set_errno(EFAULT); goto exit; } -#endif k_nodename = rt_strdup(nodename); if (!k_nodename) { @@ -2932,14 +2799,12 @@ int sys_getaddrinfo(const char *nodename, } if (servname) { -#ifdef RT_USING_USERSPACE lwp_user_strlen(servname, &err); if (err) { rt_set_errno(EFAULT); goto exit; } -#endif k_servname = rt_strdup(servname); if (!k_servname) { @@ -2950,13 +2815,11 @@ int sys_getaddrinfo(const char *nodename, if (hints) { -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)hints, sizeof(*hints))) { rt_set_errno(EFAULT); goto exit; } -#endif k_hints = (struct addrinfo *) rt_malloc(sizeof *hints); if (!k_hints) { @@ -3025,16 +2888,15 @@ int sys_gethostbyname2_r(const char *name, int af, struct hostent *ret, char *k_name = NULL; int a_err = 0; -#ifdef RT_USING_USERSPACE - if (!lwp_user_accessable((void *)err, sizeof(*err))) + if (!lwp_user_accessable((void *)err, sizeof(*err))) { rt_set_errno(EFAULT); goto __exit; } if (!lwp_user_accessable((void *)result, sizeof(*result)) - || !lwp_user_accessable((void *)ret, sizeof(*ret)) - || !lwp_user_accessable((void *)buf, buflen)) + || !lwp_user_accessable((void *)ret, sizeof(*ret)) + || !lwp_user_accessable((void *)buf, buflen)) { /* not all arguments given */ *err = EFAULT; @@ -3049,7 +2911,6 @@ int sys_gethostbyname2_r(const char *name, int af, struct hostent *ret, rt_set_errno(EFAULT); goto __exit; } -#endif *result = ret; sal_buf = (char *)malloc(HOSTENT_BUFSZ); @@ -3123,19 +2984,16 @@ __exit: char *sys_getcwd(char *buf, size_t size) { -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)buf, size)) { rt_set_errno(EFAULT); return RT_NULL; } -#endif return getcwd(buf, size); } int sys_chdir(const char *path) { -#ifdef RT_USING_USERSPACE int err = 0; lwp_user_strlen(path, &err); @@ -3144,13 +3002,11 @@ int sys_chdir(const char *path) rt_set_errno(EFAULT); return -1; } -#endif return chdir(path); } int sys_mkdir(const char *path, mode_t mode) { -#ifdef RT_USING_USERSPACE int err = 0; lwp_user_strlen(path, &err); @@ -3159,13 +3015,11 @@ int sys_mkdir(const char *path, mode_t mode) rt_set_errno(EFAULT); return -1; } -#endif return mkdir(path, mode); } int sys_rmdir(const char *path) { -#ifdef RT_USING_USERSPACE int err = 0; lwp_user_strlen(path, &err); @@ -3174,7 +3028,6 @@ int sys_rmdir(const char *path) rt_set_errno(EFAULT); return -1; } -#endif return unlink(path); } @@ -3194,13 +3047,11 @@ int sys_getdents(int fd, struct libc_dirent *dirp, size_t nbytes) size_t rtt_nbytes = 0; struct dirent *rtt_dirp; -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)dirp, sizeof(struct libc_dirent))) { rt_set_errno(EFAULT); return -1; } -#endif if (cnt == 0) { @@ -3254,13 +3105,11 @@ int sys_set_tid_address(int *tidptr) { rt_thread_t thread; -#ifdef RT_USING_USERSPACE if (!lwp_user_accessable((void *)tidptr, sizeof(int))) { rt_set_errno(EFAULT); return -1; } -#endif thread = rt_thread_self(); thread->clear_child_tid = tidptr; return thread->tid; @@ -3274,7 +3123,6 @@ int sys_gettid(void) int sys_access(const char *filename, int mode) { int ret = 0; -#ifdef RT_USING_USERSPACE rt_size_t len = 0; char *kname = RT_NULL; int a_err = 0; @@ -3299,9 +3147,6 @@ int sys_access(const char *filename, int mode) ret = access(kname, mode); kmem_put(kname); } -#else - ret = access(filename, mode); -#endif return (ret >= 0) ? 0: ret; } @@ -3327,7 +3172,6 @@ int sys_clock_settime(clockid_t clk, const struct timespec *ts) return -ENODEV; } -#ifdef RT_USING_USERSPACE size_t size = sizeof(struct timespec); struct timespec *kts = NULL; @@ -3346,9 +3190,6 @@ int sys_clock_settime(clockid_t clk, const struct timespec *ts) now = kts->tv_sec; kmem_put(kts); -#else - now = ts->tv_sec; -#endif return rt_device_control(device, RT_DEVICE_CTRL_RTC_SET_TIME, &now); } @@ -3357,6 +3198,8 @@ int sys_clock_gettime(clockid_t clk, struct timespec *ts) int ret = 0; rt_device_t device; time_t now; + size_t size = sizeof(struct timespec); + struct timespec *kts = NULL; device = rt_device_find("rtc"); if (device == RT_NULL) @@ -3365,10 +3208,6 @@ int sys_clock_gettime(clockid_t clk, struct timespec *ts) } ret = rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &now); -#ifdef RT_USING_USERSPACE - size_t size = sizeof(struct timespec); - struct timespec *kts = NULL; - if (!lwp_user_accessable((void *)ts, size)) { return -EFAULT; @@ -3385,16 +3224,11 @@ int sys_clock_gettime(clockid_t clk, struct timespec *ts) lwp_put_to_user(ts, kts, size); kmem_put(kts); -#else - ts->tv_sec = now; - ts->tv_nsec = 0; -#endif return ret; } int sys_clock_getres(clockid_t clk, struct timespec *ts) { -#ifdef RT_USING_USERSPACE struct timespec kts; size_t size = sizeof(struct timespec); @@ -3406,10 +3240,6 @@ int sys_clock_getres(clockid_t clk, struct timespec *ts) kts.tv_sec = 1; kts.tv_nsec = 0; lwp_put_to_user(ts, &kts, size); -#else - ts->tv_sec = 1; - ts->tv_nsec = 0; -#endif return 0; } @@ -3422,7 +3252,6 @@ int sys_dup2(int oldfd, int new); int sys_rename(const char *oldpath, const char *newpath) { int ret = -1; -#ifdef RT_USING_USERSPACE int err; lwp_user_strlen(oldpath, &err); @@ -3438,7 +3267,6 @@ int sys_rename(const char *oldpath, const char *newpath) rt_set_errno(EFAULT); return -1; } -#endif ret = rename(oldpath, newpath); return (ret >= 0) ? 0: ret; } diff --git a/components/lwp/lwp_tid.c b/components/lwp/lwp_tid.c index 3caa9207d51cebb5a9d7860419efaa8cca78e12e..7c3fa31bd7dff5182f3ce954a1ad94a032873fd2 100644 --- a/components/lwp/lwp_tid.c +++ b/components/lwp/lwp_tid.c @@ -13,7 +13,6 @@ #include "lwp.h" -#ifdef RT_USING_USERSPACE #include "lwp_user_mm.h" #ifdef RT_USING_GDBSERVER @@ -21,8 +20,6 @@ #include #endif -#endif - #define DBG_TAG "LWP_TID" #define DBG_LVL DBG_INFO #include diff --git a/components/lwp/lwp_user_mm.c b/components/lwp/lwp_user_mm.c index a46b65931c304b05f98fc34ae10c424363c5cf6a..92fe77424fd9c4ac713ae4d27dc6f6bcdfa40c22 100644 --- a/components/lwp/lwp_user_mm.c +++ b/components/lwp/lwp_user_mm.c @@ -14,8 +14,6 @@ #include #include -#ifdef RT_USING_USERSPACE - #include #include #include @@ -627,4 +625,3 @@ void lwp_data_cache_flush(rt_mmu_info *mmu_info, void *vaddr, size_t size) rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, paddr, size); } -#endif diff --git a/components/lwp/lwp_user_mm.h b/components/lwp/lwp_user_mm.h index 07cb27e722beb168ceb00239da95035d7556f1bf..e116e0358f7aeecefe43abb74c1bdb58f9555b52 100644 --- a/components/lwp/lwp_user_mm.h +++ b/components/lwp/lwp_user_mm.h @@ -14,7 +14,6 @@ #include #include -#ifdef RT_USING_USERSPACE #include #include @@ -50,6 +49,4 @@ void lwp_data_cache_flush(rt_mmu_info *mmu_info, void *vaddr, size_t size); } #endif -#endif - #endif /*__LWP_USER_MM_H__*/ diff --git a/include/rtdef.h b/include/rtdef.h index 6c1ccfee456e47e3b03b00c3def88d21867bd118..2358e115179bc19a8c1368d15ba260ec47402d8d 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -735,7 +735,7 @@ struct rt_thread struct rt_wakeup wakeup; /**< wakeup data */ int exit_request; -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP int step_exec; int debug_ret_user; int debug_suspend; diff --git a/libcpu/Kconfig b/libcpu/Kconfig index 93a534a57d65bb223e4bb96ebb5ddaf5650c95c3..c42e9b1a913beb2f0a10d46f3c0d31bee4686790 100644 --- a/libcpu/Kconfig +++ b/libcpu/Kconfig @@ -55,20 +55,15 @@ config ARCH_ARM_MMU select RT_USING_CACHE depends on ARCH_ARM -config RT_USING_USERSPACE - bool "Isolated user space" - default n - depends on ARCH_ARM_MMU - config KERNEL_VADDR_START hex "The virtural address of kernel start" default 0xc0000000 - depends on RT_USING_USERSPACE + depends on RT_USING_LWP config PV_OFFSET hex "The offset of kernel physical address and virtural address" default 0 - depends on RT_USING_USERSPACE + depends on RT_USING_LWP config RT_IOREMAP_LATE bool "Support to create IO mapping in the kernel address space after system initlalization." diff --git a/libcpu/arm/cortex-a/backtrace.c b/libcpu/arm/cortex-a/backtrace.c index 1d4d444aa96a37dd659d65b94bc3a27c46a10f23..b1c6c490fa0d5a6ac34226c3f50bacbcafde1d0b 100644 --- a/libcpu/arm/cortex-a/backtrace.c +++ b/libcpu/arm/cortex-a/backtrace.c @@ -17,7 +17,7 @@ #define DBG_LVL DBG_INFO #include -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #include #include #include @@ -522,7 +522,7 @@ void rt_unwind(struct rt_hw_exp_stack *regs, unsigned int pc_adj) e_regs.ARM_sp = regs->sp; e_regs.ARM_lr = regs->lr; e_regs.ARM_pc = regs->pc - pc_adj; -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP if (!lwp_user_accessable((void *)e_regs.ARM_pc, sizeof (void *))) { e_regs.ARM_pc = regs->lr - sizeof(void *); diff --git a/libcpu/arm/cortex-a/context_gcc.S b/libcpu/arm/cortex-a/context_gcc.S index 7fa3a26a88f7a45de6cb300d0bd1454819082342..0396c78fb0e637d8217501a11325a1ed1e060670 100644 --- a/libcpu/arm/cortex-a/context_gcc.S +++ b/libcpu/arm/cortex-a/context_gcc.S @@ -46,7 +46,7 @@ rt_hw_context_switch_to: mov r0, r1 bl rt_cpus_lock_status_restore #else -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP ldr r1, =rt_current_thread ldr r0, [r1] bl lwp_mmu_switch @@ -102,7 +102,7 @@ rt_hw_context_switch: mov r0, r2 bl rt_cpus_lock_status_restore #else -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP ldr r1, =rt_current_thread ldr r0, [r1] bl lwp_mmu_switch diff --git a/libcpu/arm/cortex-a/interrupt.c b/libcpu/arm/cortex-a/interrupt.c index 85cf1de23e17ba80e50ce82b077a008af249d3a6..4ebfc0bcd40ff696b670992f41a5106c49b5cfd9 100644 --- a/libcpu/arm/cortex-a/interrupt.c +++ b/libcpu/arm/cortex-a/interrupt.c @@ -95,7 +95,7 @@ void rt_hw_interrupt_init(void) rt_memset(isr_table, 0x00, sizeof(isr_table)); /* initialize ARM GIC */ -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP gic_dist_base = (uint32_t)rt_hw_mmu_map(&mmu_info, 0, (void*)platform_get_gic_dist_base(), 0x2000, MMU_MAP_K_RW); gic_cpu_base = (uint32_t)rt_hw_mmu_map(&mmu_info, 0, (void*)platform_get_gic_cpu_base(), 0x1000, MMU_MAP_K_RW); #else diff --git a/libcpu/arm/cortex-a/mmu.c b/libcpu/arm/cortex-a/mmu.c index 0c3a7bb9a7a58e42bf9d98cf0f9ca2fdea8beab3..91cc65a31cc6b0f2d4bcc5c3cf7f07d18cd202f2 100644 --- a/libcpu/arm/cortex-a/mmu.c +++ b/libcpu/arm/cortex-a/mmu.c @@ -15,7 +15,7 @@ #include "cp15.h" #include "mmu.h" -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #include "page.h" #endif @@ -51,15 +51,15 @@ void rt_hw_cpu_dump_page_table_2nd(rt_uint32_t *ptb) if ((pte2 & 0x3) == 0x1) { rt_kprintf("L,ap:%x,xn:%d,texcb:%02x\n", - ((pte2 >> 7) | (pte2 >> 4))& 0xf, - (pte2 >> 15) & 0x1, - ((pte2 >> 10) | (pte2 >> 2)) & 0x1f); + ((pte2 >> 7) | (pte2 >> 4))& 0xf, + (pte2 >> 15) & 0x1, + ((pte2 >> 10) | (pte2 >> 2)) & 0x1f); } else { rt_kprintf("S,ap:%x,xn:%d,texcb:%02x\n", - ((pte2 >> 7) | (pte2 >> 4))& 0xf, pte2 & 0x1, - ((pte2 >> 4) | (pte2 >> 2)) & 0x1f); + ((pte2 >> 7) | (pte2 >> 4))& 0xf, pte2 & 0x1, + ((pte2 >> 4) | (pte2 >> 2)) & 0x1f); } } } @@ -98,7 +98,7 @@ void rt_hw_cpu_dump_page_table(rt_uint32_t *ptb) else if ((pte1 & 0x3) == 0x1) { rt_kprintf("pte,ns:%d,domain:%d\n", - (pte1 >> 3) & 0x1, (pte1 >> 5) & 0xf); + (pte1 >> 3) & 0x1, (pte1 >> 5) & 0xf); /* *rt_hw_cpu_dump_page_table_2nd((void*)((pte1 & 0xfffffc000) * - 0x80000000 + 0xC0000000)); @@ -107,21 +107,21 @@ void rt_hw_cpu_dump_page_table(rt_uint32_t *ptb) else if (pte1 & (1 << 18)) { rt_kprintf("super section,ns:%d,ap:%x,xn:%d,texcb:%02x\n", - (pte1 >> 19) & 0x1, - ((pte1 >> 13) | (pte1 >> 10))& 0xf, - (pte1 >> 4) & 0x1, - ((pte1 >> 10) | (pte1 >> 2)) & 0x1f); + (pte1 >> 19) & 0x1, + ((pte1 >> 13) | (pte1 >> 10))& 0xf, + (pte1 >> 4) & 0x1, + ((pte1 >> 10) | (pte1 >> 2)) & 0x1f); } else { rt_kprintf("section,ns:%d,ap:%x," - "xn:%d,texcb:%02x,domain:%d\n", - (pte1 >> 19) & 0x1, - ((pte1 >> 13) | (pte1 >> 10))& 0xf, - (pte1 >> 4) & 0x1, - (((pte1 & (0x7 << 12)) >> 10) | - ((pte1 & 0x0c) >> 2)) & 0x1f, - (pte1 >> 5) & 0xf); + "xn:%d,texcb:%02x,domain:%d\n", + (pte1 >> 19) & 0x1, + ((pte1 >> 13) | (pte1 >> 10))& 0xf, + (pte1 >> 4) & 0x1, + (((pte1 & (0x7 << 12)) >> 10) | + ((pte1 & 0x0c) >> 2)) & 0x1f, + (pte1 >> 5) & 0xf); } } } @@ -129,9 +129,9 @@ void rt_hw_cpu_dump_page_table(rt_uint32_t *ptb) /* level1 page table, each entry for 1MB memory. */ volatile unsigned long MMUTable[4*1024] __attribute__((aligned(16*1024))); void rt_hw_mmu_setmtt(rt_uint32_t vaddrStart, - rt_uint32_t vaddrEnd, - rt_uint32_t paddrStart, - rt_uint32_t attr) + rt_uint32_t vaddrEnd, + rt_uint32_t paddrStart, + rt_uint32_t attr) { volatile rt_uint32_t *pTT; volatile int i, nSec; @@ -187,8 +187,8 @@ void rt_hw_mmu_init(void) } /* - mem map -*/ + mem map + */ void rt_hw_cpu_dcache_clean(void *addr, int size); @@ -248,7 +248,7 @@ int rt_hw_mmu_ioremap_init(rt_mmu_info *mmu_info, void* v_address, size_t size) size_t l1_off; size_t *mmu_l1, *mmu_l2; size_t sections; -#ifndef RT_USING_USERSPACE +#ifndef RT_USING_LWP size_t *ref_cnt; #endif @@ -276,7 +276,7 @@ int rt_hw_mmu_ioremap_init(rt_mmu_info *mmu_info, void* v_address, size_t size) mmu_l1 = (size_t*)mmu_info->vtable + l1_off; RT_ASSERT((*mmu_l1 & ARCH_MMU_USED_MASK) == 0); -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP mmu_l2 = (size_t*)rt_pages_alloc(0); #else mmu_l2 = (size_t*)rt_malloc_align(ARCH_PAGE_TBL_SIZE * 2, ARCH_PAGE_TBL_SIZE); @@ -297,7 +297,7 @@ int rt_hw_mmu_ioremap_init(rt_mmu_info *mmu_info, void* v_address, size_t size) return -1; } -#ifndef RT_USING_USERSPACE +#ifndef RT_USING_LWP ref_cnt = mmu_l2 + (ARCH_SECTION_SIZE / ARCH_PAGE_SIZE); *ref_cnt = 1; #endif @@ -371,7 +371,7 @@ static size_t find_vaddr(rt_mmu_info *mmu_info, int pages) return 0; } -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP static int check_vaddr(rt_mmu_info *mmu_info, void *va, int pages) { size_t loop_va = (size_t)va & ~ARCH_PAGE_MASK; @@ -413,7 +413,7 @@ static void __rt_hw_mmu_unmap(rt_mmu_info *mmu_info, void* v_addr, size_t npages size_t loop_va = (size_t)v_addr & ~ARCH_PAGE_MASK; size_t l1_off, l2_off; size_t *mmu_l1, *mmu_l2; -#ifndef RT_USING_USERSPACE +#ifndef RT_USING_LWP size_t *ref_cnt; #endif @@ -448,7 +448,7 @@ static void __rt_hw_mmu_unmap(rt_mmu_info *mmu_info, void* v_addr, size_t npages /* cache maintain */ rt_hw_cpu_dcache_clean(mmu_l2 + l2_off, 4); -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP if (rt_pages_free(mmu_l2, 0)) { *mmu_l1 = 0; @@ -477,7 +477,7 @@ static int __rt_hw_mmu_map(rt_mmu_info *mmu_info, void* v_addr, void* p_addr, si size_t loop_pa = (size_t)p_addr & ~ARCH_PAGE_MASK; size_t l1_off, l2_off; size_t *mmu_l1, *mmu_l2; -#ifndef RT_USING_USERSPACE +#ifndef RT_USING_LWP size_t *ref_cnt; #endif @@ -499,7 +499,7 @@ static int __rt_hw_mmu_map(rt_mmu_info *mmu_info, void* v_addr, void* p_addr, si } else { -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP mmu_l2 = (size_t*)rt_pages_alloc(0); #else mmu_l2 = (size_t*)rt_malloc_align(ARCH_PAGE_TBL_SIZE * 2, ARCH_PAGE_TBL_SIZE); @@ -522,7 +522,7 @@ static int __rt_hw_mmu_map(rt_mmu_info *mmu_info, void* v_addr, void* p_addr, si } } -#ifndef RT_USING_USERSPACE +#ifndef RT_USING_LWP ref_cnt = mmu_l2 + (ARCH_SECTION_SIZE / ARCH_PAGE_SIZE); (*ref_cnt)++; #endif @@ -542,7 +542,7 @@ static void rt_hw_cpu_tlb_invalidate(void) asm volatile ("mcr p15, 0, r0, c8, c7, 0\ndsb\nisb" ::: "memory"); } -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP void *_rt_hw_mmu_map(rt_mmu_info *mmu_info, void *v_addr, void* p_addr, size_t size, size_t attr) { size_t pa_s, pa_e; @@ -613,7 +613,7 @@ void *_rt_hw_mmu_map(rt_mmu_info *mmu_info, void* p_addr, size_t size, size_t at } #endif -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP static int __rt_hw_mmu_map_auto(rt_mmu_info *mmu_info, void* v_addr, size_t npages, size_t attr) { size_t loop_va = (size_t)v_addr & ~ARCH_PAGE_MASK; @@ -742,41 +742,42 @@ void _rt_hw_mmu_unmap(rt_mmu_info *mmu_info, void* v_addr, size_t size) extern void *_rt_hw_mmu_v2p(rt_mmu_info *mmu_info, void* v_addr); -//va --> pa -// void *rt_hw_kernel_virt_to_phys(void *v_addr, size_t size) +/* va --> pa + * void *rt_hw_kernel_virt_to_phys(void *v_addr, size_t size) + */ void *rt_hw_kernel_virt_to_phys(void *v_addr) { void *p_addr = 0; - #ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP rt_base_t level; - extern rt_mmu_info mmu_info; + level = rt_hw_interrupt_disable(); p_addr = _rt_hw_mmu_v2p(&mmu_info, v_addr); rt_hw_interrupt_enable(level); - #else +#else p_addr = v_addr; - #endif +#endif return p_addr; } -//pa --> va +/* pa --> va */ void *rt_hw_kernel_phys_to_virt(void *p_addr, size_t size) { void *v_addr = 0; - #ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP extern rt_mmu_info mmu_info; v_addr = rt_hw_mmu_map(&mmu_info, 0, p_addr, size, MMU_MAP_K_RW); - #else +#else v_addr = p_addr; - #endif +#endif return v_addr; } -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP void *rt_hw_mmu_map(rt_mmu_info *mmu_info, void *v_addr, void* p_addr, size_t size, size_t attr) { void *ret; @@ -829,35 +830,35 @@ void *_rt_hw_mmu_v2p(rt_mmu_info *mmu_info, void* v_addr) switch (tmp & ARCH_MMU_USED_MASK) { - case 0: /* not used */ - break; - case 1: /* page table */ - mmu_l2 = (size_t *)((tmp & ~ARCH_PAGE_TBL_MASK) - mmu_info->pv_off); - l2_off = (((size_t)v_addr & ARCH_SECTION_MASK) >> ARCH_PAGE_SHIFT); - pa = *(mmu_l2 + l2_off); - if (pa & ARCH_MMU_USED_MASK) - { - if ((pa & ARCH_MMU_USED_MASK) == 1) - { - /* large page, not support */ - break; - } - pa &= ~(ARCH_PAGE_MASK); - pa += ((size_t)v_addr & ARCH_PAGE_MASK); - return (void*)pa; - } - break; - case 2: - case 3: - /* section */ - if (tmp & ARCH_TYPE_SUPERSECTION) + case 0: /* not used */ + break; + case 1: /* page table */ + mmu_l2 = (size_t *)((tmp & ~ARCH_PAGE_TBL_MASK) - mmu_info->pv_off); + l2_off = (((size_t)v_addr & ARCH_SECTION_MASK) >> ARCH_PAGE_SHIFT); + pa = *(mmu_l2 + l2_off); + if (pa & ARCH_MMU_USED_MASK) + { + if ((pa & ARCH_MMU_USED_MASK) == 1) { - /* super section, not support */ + /* large page, not support */ break; } - pa = (tmp & ~ARCH_SECTION_MASK); - pa += ((size_t)v_addr & ARCH_SECTION_MASK); + pa &= ~(ARCH_PAGE_MASK); + pa += ((size_t)v_addr & ARCH_PAGE_MASK); return (void*)pa; + } + break; + case 2: + case 3: + /* section */ + if (tmp & ARCH_TYPE_SUPERSECTION) + { + /* super section, not support */ + break; + } + pa = (tmp & ~ARCH_SECTION_MASK); + pa += ((size_t)v_addr & ARCH_SECTION_MASK); + return (void*)pa; } return (void*)0; } @@ -873,7 +874,7 @@ void *rt_hw_mmu_v2p(rt_mmu_info *mmu_info, void* v_addr) return ret; } -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP void init_mm_setup(unsigned int *mtbl, unsigned int size, unsigned int pv_off) { unsigned int va; diff --git a/libcpu/arm/cortex-a/mmu.h b/libcpu/arm/cortex-a/mmu.h index ecbd3e70532d01f97110495f120c2786bd7fae86..86a94e70ff3e1e1a300bf065b530ee61bbd4f87e 100644 --- a/libcpu/arm/cortex-a/mmu.h +++ b/libcpu/arm/cortex-a/mmu.h @@ -19,7 +19,7 @@ #define SHAREDEVICE (1<<2) /* shared device */ #define STRONGORDER (0<<2) /* strong ordered */ #define XN (1<<4) /* eXecute Never */ -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #define AP_RW (1<<10) /* supervisor=RW, user=No */ #define AP_RO ((1<<10) |(1 << 15)) /* supervisor=RW, user=No */ #else @@ -98,7 +98,7 @@ typedef struct int rt_hw_mmu_map_init(rt_mmu_info *mmu_info, void* v_address, size_t size, size_t *vtable, size_t pv_off); int rt_hw_mmu_ioremap_init(rt_mmu_info *mmu_info, void* v_address, size_t size); -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP void *rt_hw_mmu_map(rt_mmu_info *mmu_info, void *v_addr, void* p_addr, size_t size, size_t attr); void *rt_hw_mmu_map_auto(rt_mmu_info *mmu_info, void *v_addr, size_t size, size_t attr); #else diff --git a/libcpu/arm/cortex-a/page.c b/libcpu/arm/cortex-a/page.c index 5154f8a92bbc27a01de783d2af50baf8ddf68a3a..e36b8585d7251c935213006461cd7429b5b18f51 100644 --- a/libcpu/arm/cortex-a/page.c +++ b/libcpu/arm/cortex-a/page.c @@ -12,7 +12,7 @@ #include #include -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #include #include diff --git a/libcpu/arm/cortex-a/page.h b/libcpu/arm/cortex-a/page.h index 24c6356d39ae9d2152239d8c7c0bf92cff99f781..925484484ccce1fab26032cd2f213f17c0bbd4f9 100644 --- a/libcpu/arm/cortex-a/page.h +++ b/libcpu/arm/cortex-a/page.h @@ -11,7 +11,7 @@ #ifndef __PAGE_H__ #define __PAGE_H__ -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP typedef struct tag_region { diff --git a/libcpu/arm/cortex-a/start_gcc.S b/libcpu/arm/cortex-a/start_gcc.S index 9b3bb4a932c780c8d3fb8105e880d229191c2914..9011d455ea6ab2e33a6f3253f6bbbd3da2f721ad 100644 --- a/libcpu/arm/cortex-a/start_gcc.S +++ b/libcpu/arm/cortex-a/start_gcc.S @@ -43,7 +43,7 @@ stack_start: .endr stack_top: -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP .data .align 14 init_mtbl: @@ -109,7 +109,7 @@ continue: msr cpsr_c, r0 #endif -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP ldr r5, =PV_OFFSET mov r7, #0x100000 @@ -180,7 +180,7 @@ bss_loop: ldr r1, [r1] bl rt_hw_init_mmu_table -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP ldr r0, =MMUTable /* vaddr */ add r0, r5 /* to paddr */ bl switch_mmu @@ -238,7 +238,7 @@ stack_setup: msr cpsr_c, #Mode_SVC|I_Bit|F_Bit bx lr -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP .align 2 .global enable_mmu enable_mmu: @@ -461,7 +461,7 @@ rt_hw_context_switch_interrupt_do: ldr r6, [r6] ldr sp, [r6] @ get new task's stack pointer -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP ldr r1, =rt_current_thread ldr r0, [r1] bl lwp_mmu_switch @@ -553,7 +553,7 @@ vector_undef: .globl vector_pabt vector_pabt: push_svc_reg -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP /* cp Mode_ABT stack to SVC */ sub sp, sp, #17 * 4 @/* Sizeof(struct rt_hw_exp_stack) */ mov lr, r0 @@ -581,7 +581,7 @@ vector_pabt: .globl vector_dabt vector_dabt: push_svc_reg -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP /* cp Mode_ABT stack to SVC */ sub sp, sp, #17 * 4 @/* Sizeof(struct rt_hw_exp_stack) */ mov lr, r0 @@ -615,7 +615,7 @@ vector_resv: #ifdef RT_USING_SMP .global set_secondary_cpu_boot_address set_secondary_cpu_boot_address: -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP ldr r2, =secondary_cpu_start add r0, r2 @@ -639,7 +639,7 @@ rt_clz: .global secondary_cpu_start secondary_cpu_start: -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP ldr r5, =PV_OFFSET ldr lr, =after_enable_mmu2 @@ -683,7 +683,7 @@ after_enable_mmu2: ldr sp, =abt_stack_2_limit /* initialize the mmu table and enable mmu */ -#ifndef RT_USING_USERSPACE +#ifndef RT_USING_LWP bl rt_hw_mmu_init #endif diff --git a/libcpu/arm/cortex-a/trap.c b/libcpu/arm/cortex-a/trap.c index bc4cf36a8cbddee3cd75e59b41991e51cb12af1c..158a826ff347df8ff90feae2a1d78d5ca3a67ebc 100644 --- a/libcpu/arm/cortex-a/trap.c +++ b/libcpu/arm/cortex-a/trap.c @@ -161,7 +161,7 @@ void rt_hw_show_register(struct rt_hw_exp_stack *regs) rt_kprintf("fp :0x%08x ip :0x%08x\n", regs->fp, regs->ip); rt_kprintf("sp :0x%08x lr :0x%08x pc :0x%08x\n", regs->sp, regs->lr, regs->pc); rt_kprintf("cpsr:0x%08x\n", regs->cpsr); -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP { uint32_t v; asm volatile ("MRC p15, 0, %0, c5, c0, 0":"=r"(v)); diff --git a/libcpu/arm/cortex-a/vector_gcc.S b/libcpu/arm/cortex-a/vector_gcc.S index eb872db71f31d9a5caafa13e6a9b6ae16fa55f1a..1fca3c639056d96d4c89a6cb02495ec1377b881d 100644 --- a/libcpu/arm/cortex-a/vector_gcc.S +++ b/libcpu/arm/cortex-a/vector_gcc.S @@ -15,7 +15,7 @@ .globl system_vectors system_vectors: -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP b _reset #else ldr pc, _vector_reset diff --git a/src/cpu.c b/src/cpu.c index 2f71c4f8aac6eb09b7c0a2e52930428dd8eb6c62..8277f8cd86c834721eec08e6caced127dcf58988 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -10,7 +10,7 @@ #include #include -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP #include #endif @@ -200,7 +200,7 @@ void rt_cpus_lock_status_restore(struct rt_thread *thread) { struct rt_cpu* pcpu = rt_cpu_self(); -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP if (pcpu->current_thread) { pcpu->current_thread->thread_idr = rt_cpu_get_thread_idr(); diff --git a/src/mem.c b/src/mem.c index 971e04dbd84ecc79e4dd60bfcb9033d52a8c35f7..6f624e801b49fcc7d00ff0ad4adf3a2c3e0fd3ee 100644 --- a/src/mem.c +++ b/src/mem.c @@ -642,7 +642,7 @@ void rt_memory_info(rt_uint32_t *total, void list_mem(void) { size_t total_pages = 0, free_pages = 0; -#ifdef RT_USING_USERSPACE +#ifdef RT_USING_LWP rt_page_get_info(&total_pages, &free_pages); #endif