mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-10-18 18:34:20 +08:00
sync smart & dfs (#8672)
Signed-off-by: xqyjlj <xqyjlj@126.com> Signed-off-by: Shell <smokewood@qq.com> Co-authored-by: xqyjlj <xqyjlj@126.com>
This commit is contained in:
@@ -23,10 +23,7 @@
|
||||
|
||||
#ifdef ARCH_MM_MMU
|
||||
|
||||
#include <lwp.h>
|
||||
#include <lwp_arch.h>
|
||||
#include <lwp_mm.h>
|
||||
#include <lwp_user_mm.h>
|
||||
#include "lwp_internal.h"
|
||||
|
||||
#include <mm_aspace.h>
|
||||
#include <mm_fault.h>
|
||||
@@ -161,10 +158,10 @@ void lwp_aspace_switch(struct rt_thread *thread)
|
||||
|
||||
void lwp_unmap_user_space(struct rt_lwp *lwp)
|
||||
{
|
||||
arch_user_space_free(lwp);
|
||||
if (lwp->aspace)
|
||||
arch_user_space_free(lwp);
|
||||
}
|
||||
|
||||
|
||||
static void *_lwp_map_user(struct rt_lwp *lwp, void *map_va, size_t map_size,
|
||||
int text)
|
||||
{
|
||||
@@ -566,6 +563,14 @@ int lwp_munmap(struct rt_lwp *lwp, void *addr, size_t length)
|
||||
return lwp_errno_to_posix(ret);
|
||||
}
|
||||
|
||||
void *lwp_mremap(struct rt_lwp *lwp, void *old_address, size_t old_size,
|
||||
size_t new_size, int flags, void *new_address)
|
||||
{
|
||||
RT_ASSERT(lwp);
|
||||
|
||||
return rt_aspace_mremap_range(lwp->aspace, old_address, old_size, new_size, flags, new_address);
|
||||
}
|
||||
|
||||
size_t lwp_get_from_user(void *dst, void *src, size_t size)
|
||||
{
|
||||
struct rt_lwp *lwp = RT_NULL;
|
||||
@@ -621,11 +626,6 @@ size_t lwp_put_to_user(void *dst, void *src, size_t size)
|
||||
return lwp_data_put(lwp, dst, src, size);
|
||||
}
|
||||
|
||||
rt_inline rt_bool_t _in_user_space(const char *addr)
|
||||
{
|
||||
return (addr >= (char *)USER_VADDR_START && addr < (char *)USER_VADDR_TOP);
|
||||
}
|
||||
|
||||
rt_inline rt_bool_t _can_unaligned_access(const char *addr)
|
||||
{
|
||||
return rt_kmem_v2p((char *)addr) - PV_OFFSET == addr;
|
||||
@@ -636,9 +636,9 @@ void *lwp_memcpy(void * __restrict dst, const void * __restrict src, size_t size
|
||||
void *rc = dst;
|
||||
long len;
|
||||
|
||||
if (_in_user_space(dst))
|
||||
if (lwp_in_user_space(dst))
|
||||
{
|
||||
if (!_in_user_space(src))
|
||||
if (!lwp_in_user_space(src))
|
||||
{
|
||||
len = lwp_put_to_user(dst, (void *)src, size);
|
||||
if (!len)
|
||||
@@ -654,7 +654,7 @@ void *lwp_memcpy(void * __restrict dst, const void * __restrict src, size_t size
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_in_user_space(src))
|
||||
if (lwp_in_user_space(src))
|
||||
{
|
||||
len = lwp_get_from_user(dst, (void *)src, size);
|
||||
if (!len)
|
||||
@@ -979,6 +979,13 @@ size_t lwp_user_strlen(const char *s)
|
||||
return lwp_user_strlen_ext(lwp, s);
|
||||
}
|
||||
|
||||
size_t lwp_strlen(struct rt_lwp *lwp, const char *s)
|
||||
{
|
||||
if (lwp_in_user_space(s))
|
||||
return lwp_user_strlen_ext(lwp, s);
|
||||
else
|
||||
return strlen(s);
|
||||
}
|
||||
|
||||
char** lwp_get_command_line_args(struct rt_lwp *lwp)
|
||||
{
|
||||
|
Reference in New Issue
Block a user