diff --git a/components/lwp/lwp.c b/components/lwp/lwp.c index e2c197973f762aa2e34eb3598e583b5482b27d16..11fcdc41eaeb1080dbb0360d1dafde520d131ae0 100644 --- a/components/lwp/lwp.c +++ b/components/lwp/lwp.c @@ -1267,7 +1267,11 @@ pid_t lwp_execve(char *filename, int argc, char **argv, char **envp) return -RT_ERROR; } +#ifdef RT_USING_MUSL extern char **__environ; +#else +char __environ = 0; +#endif #ifdef RT_USING_GDBSERVER pid_t exec(char *filename, int debug, int argc, char **argv) diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index 2457dd698e8a13ae55ad20105ac2df753a3368d5..1826d0defb5770531feb46fa9e66a2b251864731 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -3917,8 +3917,6 @@ int sys_setsid(void) return (ret < 0 ? GET_ERRNO() : ret); } -int sys_cacheflush(void *addr, int len, int cache); - int sys_getrandom(void *buf, size_t buflen, unsigned int flags) { int ret = -1; @@ -3947,6 +3945,7 @@ int sys_getrandom(void *buf, size_t buflen, unsigned int flags) return -EFAULT; } +#ifdef RT_USING_USERSPACE kmem = kmem_get(buflen); if (!kmem) { @@ -3969,7 +3968,18 @@ int sys_getrandom(void *buf, size_t buflen, unsigned int flags) ret = lwp_put_to_user(buf, kmem, count); } kmem_put(kmem); +#else + while (count < buflen) + { + ret = rt_device_read(rd_dev, count, kmem + count, buflen - count); + if (ret <= 0) + break; + count += ret; + } + rt_device_close(rd_dev); + ret = count; +#endif return ret; }