From 86bb54fde6f3ed59050d724a7e98defd7c4f47a9 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Mon, 27 Sep 2021 06:51:40 -0400 Subject: [PATCH] =?UTF-8?q?[libc][syscalls]=20=E5=9C=A8=E6=A0=87=E5=87=86?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E8=BE=93=E5=87=BA=E5=89=8D=E5=8A=A0=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=EF=BC=8C=E5=8F=8D=E6=AD=A3=E5=9C=A8libc=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=B9=8B=E5=89=8D=E8=B0=83=E7=94=A8printf?= =?UTF-8?q?=E5=87=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/armlibc/syscalls.c | 14 ++++++++++++++ components/libc/compilers/dlib/syscall_read.c | 9 +++++++++ components/libc/compilers/dlib/syscall_write.c | 9 +++++++++ components/libc/compilers/newlib/syscalls.c | 16 ++++++++++++++-- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/components/libc/compilers/armlibc/syscalls.c b/components/libc/compilers/armlibc/syscalls.c index d942bdb984..a3ba57a280 100644 --- a/components/libc/compilers/armlibc/syscalls.c +++ b/components/libc/compilers/armlibc/syscalls.c @@ -25,6 +25,10 @@ #include #endif +#define DBG_TAG "armlibc.syscalls" +#define DBG_LVL DBG_INFO +#include + #ifdef __CLANG_ARM __asm(".global __use_no_semihosting\n\t"); #else @@ -146,6 +150,11 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode) if (fh == STDIN) { #ifdef RT_USING_POSIX + if (libc_stdio_get_console() < 0) + { + LOG_E("invoke standard output before initializing libc"); + return -1; + } size = read(STDIN_FILENO, buf, len); return len - size; #else @@ -186,6 +195,11 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode) return 0; #else #ifdef RT_USING_POSIX + if (libc_stdio_get_console() < 0) + { + LOG_E("invoke standard input before initializing libc"); + return -1; + } size = write(STDOUT_FILENO, buf, len); return len - size; #else diff --git a/components/libc/compilers/dlib/syscall_read.c b/components/libc/compilers/dlib/syscall_read.c index e716d0b024..bdc694b7d8 100644 --- a/components/libc/compilers/dlib/syscall_read.c +++ b/components/libc/compilers/dlib/syscall_read.c @@ -15,6 +15,10 @@ #include #include "libc.h" +#define DBG_TAG "dlib.syscall_read" +#define DBG_LVL DBG_INFO +#include + #pragma module_name = "?__read" size_t __read(int handle, unsigned char *buf, size_t len) { @@ -25,6 +29,11 @@ size_t __read(int handle, unsigned char *buf, size_t len) if (handle == _LLIO_STDIN) { #ifdef RT_USING_POSIX + if (libc_stdio_get_console() < 0) + { + LOG_E("invoke standard input before initializing libc"); + return _LLIO_ERROR; + } return read(STDIN_FILENO, buf, len); #else return _LLIO_ERROR; diff --git a/components/libc/compilers/dlib/syscall_write.c b/components/libc/compilers/dlib/syscall_write.c index a5462653bf..bd7cc83d99 100644 --- a/components/libc/compilers/dlib/syscall_write.c +++ b/components/libc/compilers/dlib/syscall_write.c @@ -15,6 +15,10 @@ #include #include "libc.h" +#define DBG_TAG "dlib.syscall_write" +#define DBG_LVL DBG_INFO +#include + #pragma module_name = "?__write" size_t __write(int handle, const unsigned char *buf, size_t len) @@ -30,6 +34,11 @@ size_t __write(int handle, const unsigned char *buf, size_t len) #else #ifdef RT_USING_POSIX + if (libc_stdio_get_console() < 0) + { + LOG_E("invoke standard output before initializing libc"); + return _LLIO_ERROR; + } return write(STDOUT_FILENO, (void*)buf, len); #else rt_device_t console_device; diff --git a/components/libc/compilers/newlib/syscalls.c b/components/libc/compilers/newlib/syscalls.c index aeb4d123e7..d46a264408 100644 --- a/components/libc/compilers/newlib/syscalls.c +++ b/components/libc/compilers/newlib/syscalls.c @@ -26,6 +26,10 @@ #include #endif +#define DBG_TAG "newlib.syscalls" +#define DBG_LVL DBG_INFO +#include + /* Reentrant versions of system calls. */ #ifndef _REENT_ONLY @@ -155,7 +159,11 @@ _ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes) return -1; #else _ssize_t rc; - + if (libc_stdio_get_console() < 0 && fd == STDIN_FILENO) + { + LOG_E("invoke standard input before initializing libc"); + return -1; + } rc = read(fd, buf, nbytes); return rc; #endif @@ -227,7 +235,11 @@ _ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes) #endif /*RT_USING_DEVICE*/ #else _ssize_t rc; - + if (libc_stdio_get_console() < 0 && fd == STDOUT_FILENO) + { + LOG_E("invoke standard output before initializing libc"); + return -1; + } rc = write(fd, buf, nbytes); return rc; #endif