Sfoglia il codice sorgente

Merge pull request #4879 from mysterywolf/signal

[rtlibc] remove libc_signal.h and libc_fdset.h
Bernard Xiong 3 anni fa
parent
commit
56d3abe301

+ 1 - 1
components/dfs/include/dfs_select.h

@@ -10,7 +10,7 @@
 #ifndef DFS_SELECT_H__
 #define DFS_SELECT_H__
 
-#include <libc/libc_fdset.h>
+#include <sys/select.h>
 
 #ifdef __cplusplus
 extern "C" {

+ 0 - 6
components/libc/aio/posix_aio.c

@@ -9,14 +9,8 @@
  */
 
 #include <stdint.h>
-#include <stdio.h>
-
 #include <rthw.h>
-#include <rtdevice.h>
-#include <rtthread.h>
-
 #include <dfs_posix.h>
-
 #include "posix_aio.h"
 
 struct rt_workqueue* aio_queue = NULL;

+ 4 - 0
components/libc/aio/posix_aio.h

@@ -11,6 +11,10 @@
 #ifndef POSIX_AIO_H__
 #define POSIX_AIO_H__
 
+#include <stdio.h>
+#include <sys/signal.h>
+#include <rtdevice.h>
+
 struct aiocb
 {
     int aio_fildes;         /* File descriptor. */

+ 2 - 2
components/libc/compilers/common/none-gcc/sys/errno.h

@@ -7,8 +7,8 @@
  * Date           Author       Notes
  * 2021-05-22     Meco Man     The first version.
  */
-#ifndef _SYS_ERRNO_H
-#define _SYS_ERRNO_H
+#ifndef __SYS_ERRNO_H__
+#define __SYS_ERRNO_H__
 
 #if defined(__ARMCC_VERSION)
 /*

+ 5 - 0
components/libc/compilers/common/none-gcc/sys/stat.h

@@ -6,3 +6,8 @@
  * Change Logs:
  * Date           Author       Notes
  */
+
+ #ifndef __SYS_STAT_H__
+ #define __SYS_STAT_H__
+
+ #endif

+ 2 - 2
components/libc/compilers/common/none-gcc/sys/types.h

@@ -8,8 +8,8 @@
  * 2020-09-05     Meco Man     fix bugs
  * 2020-12-16     Meco Man     add useconds_t
  */
-#ifndef __TYPES_H__
-#define __TYPES_H__
+#ifndef __SYS_TYPES_H__
+#define __SYS_TYPES_H__
 
 #include <stdint.h>
 

+ 2 - 2
components/libc/compilers/common/none-gcc/sys/unistd.h

@@ -7,8 +7,8 @@
  * Date           Author       Notes
  * 2020-12-16     Meco Man     add usleep
  */
-#ifndef _SYS_UNISTD_H
-#define _SYS_UNISTD_H
+#ifndef __SYS_UNISTD_H__
+#define __SYS_UNISTD_H__
 
 #include <rtconfig.h>
 #include "types.h"

+ 49 - 0
components/libc/compilers/common/sys/select.h

@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2021-07-21     Meco Man     The first version
+ */
+
+#ifndef __SYS_SELECT_H__
+#define __SYS_SELECT_H__
+
+#include <rtconfig.h>
+#include <sys/types.h>
+
+#ifndef  FD_SETSIZE
+#define  FD_SETSIZE  32
+#endif
+
+#ifdef SAL_USING_POSIX
+#ifdef FD_SETSIZE
+#undef FD_SETSIZE
+#endif
+#define FD_SETSIZE      DFS_FD_MAX
+#endif /* SAL_USING_POSIX */
+
+#define   NBBY    8       /* number of bits in a byte */
+
+typedef long    fd_mask;
+
+#define   NFDBITS (sizeof (fd_mask) * NBBY)   /* bits per mask */
+#ifndef   howmany
+#define   howmany(x,y)    (((x)+((y)-1))/(y))
+#endif
+
+#ifndef _SYS_TYPES_FD_SET /* MIPS */
+typedef struct _types_fd_set {
+    fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
+} _types_fd_set;
+#define fd_set _types_fd_set
+
+#define FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))
+#define FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))
+#define FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))
+#define FD_ZERO(p)      memset((void*)(p), 0, sizeof(*(p)))
+#endif /* _SYS_TYPES_FD_SET */
+
+#endif /* __SYS_SELECT_H__ */

+ 70 - 60
include/libc/libc_signal.h → components/libc/compilers/common/sys/signal.h

@@ -6,33 +6,27 @@
  * Change Logs:
  * Date           Author       Notes
  * 2017-09-12     Bernard      The first version
+ * 2021-07-21     Meco Man     move to libc/common
  */
 
-#ifndef LIBC_SIGNAL_H__
-#define LIBC_SIGNAL_H__
+#ifndef __SYS_SIGNAL_H__
+#define __SYS_SIGNAL_H__
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #include <stdint.h>
-#ifdef HAVE_CCONFIG_H
-#include <cconfig.h>
-#endif
 
-#ifndef HAVE_SIGVAL
 /*  Signal Generation and Delivery, P1003.1b-1993, p. 63
     NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and
           sigev_notify_attributes to the sigevent structure.  */
-
 union sigval
 {
     int    sival_int;    /* Integer signal value */
     void  *sival_ptr;    /* Pointer signal value */
 };
-#endif
 
-#ifndef HAVE_SIGEVENT
 struct sigevent
 {
     int          sigev_notify;               /* Notification type */
@@ -42,9 +36,7 @@ struct sigevent
                                              /* Notification function */
     void         *sigev_notify_attributes;   /* Notification Attributes, really pthread_attr_t */
 };
-#endif
 
-#ifndef HAVE_SIGINFO
 struct siginfo
 {
     uint16_t si_signo;
@@ -53,26 +45,37 @@ struct siginfo
     union sigval si_value;
 };
 typedef struct siginfo siginfo_t;
-#endif
 
 #define SI_USER     0x01    /* Signal sent by kill(). */
 #define SI_QUEUE    0x02    /* Signal sent by sigqueue(). */
-#define SI_TIMER    0x03    /* Signal generated by expiration of a
-                               timer set by timer_settime(). */
-#define SI_ASYNCIO  0x04    /* Signal generated by completion of an
-                               asynchronous I/O request. */
-#define SI_MESGQ    0x05    /* Signal generated by arrival of a
-                               message on an empty message queue. */
-
-#if !defined(RT_USING_NEWLIB)
+#define SI_TIMER    0x03    /* Signal generated by expiration of a timer set by timer_settime(). */
+#define SI_ASYNCIO  0x04    /* Signal generated by completion of an asynchronous I/O request. */
+#define SI_MESGQ    0x05    /* Signal generated by arrival of a message on an empty message queue. */
+
 typedef void (*_sig_func_ptr)(int);
 typedef unsigned long sigset_t;
-#endif
 
-#include <signal.h>
+struct sigaction
+{
+    _sig_func_ptr sa_handler;
+    sigset_t sa_mask;
+    int sa_flags;
+};
 
-#ifdef __ARMCC_VERSION
+#define SIG_SETMASK 0   /* set mask with sigprocmask() */
+#define SIG_BLOCK   1   /* set of signals to block */
+#define SIG_UNBLOCK 2   /* set of signals to, well, unblock */
 
+#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
+#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0)
+#define sigemptyset(what)   (*(what) = 0, 0)
+#define sigfillset(what)    (*(what) = ~(0), 0)
+#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0)
+
+int sigprocmask (int how, const sigset_t *set, sigset_t *oset);
+int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
+
+#ifdef __ARMCC_VERSION
 #define SIGHUP       1
 /* #define SIGINT       2 */
 #define SIGQUIT      3
@@ -103,28 +106,9 @@ typedef unsigned long sigset_t;
 #define SIGRTMAX    31
 #define NSIG        32
 
-#define SIG_SETMASK 0   /* set mask with sigprocmask() */
-#define SIG_BLOCK   1   /* set of signals to block */
-#define SIG_UNBLOCK 2   /* set of signals to, well, unblock */
-
-struct sigaction
-{
-    _sig_func_ptr sa_handler;
-    sigset_t sa_mask;
-    int sa_flags;
-};
-
-#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
-#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0)
-#define sigemptyset(what)   (*(what) = 0, 0)
-#define sigfillset(what)    (*(what) = ~(0), 0)
-#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0)
-
-int sigprocmask (int how, const sigset_t *set, sigset_t *oset);
-int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
+#include <signal.h>
 
 #elif defined(__IAR_SYSTEMS_ICC__)
-
 #define SIGHUP       1
 #define SIGINT       2
 #define SIGQUIT      3
@@ -155,25 +139,51 @@ int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)
 #define SIGRTMAX    31
 #define NSIG        32
 
-#define SIG_SETMASK 0   /* set mask with sigprocmask() */
-#define SIG_BLOCK   1   /* set of signals to block */
-#define SIG_UNBLOCK 2   /* set of signals to, well, unblock */
-
-struct sigaction
-{
-    _sig_func_ptr sa_handler;
-    sigset_t sa_mask;
-    int sa_flags;
-};
+#include <signal.h>
 
-#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
-#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0)
-#define sigemptyset(what)   (*(what) = 0, 0)
-#define sigfillset(what)    (*(what) = ~(0), 0)
-#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0)
+#elif defined(__GNUC__)
+#define SIGHUP  1   /* hangup */
+#define SIGINT  2   /* interrupt */
+#define SIGQUIT 3   /* quit */
+#define SIGILL  4   /* illegal instruction (not reset when caught) */
+#define SIGTRAP 5   /* trace trap (not reset when caught) */
+#define SIGIOT  6   /* IOT instruction */
+#define SIGABRT 6   /* used by abort, replace SIGIOT in the future */
+#define SIGEMT  7   /* EMT instruction */
+#define SIGFPE  8   /* floating point exception */
+#define SIGKILL 9   /* kill (cannot be caught or ignored) */
+#define SIGBUS  10  /* bus error */
+#define SIGSEGV 11  /* segmentation violation */
+#define SIGSYS  12  /* bad argument to system call */
+#define SIGPIPE 13  /* write on a pipe with no one to read it */
+#define SIGALRM 14  /* alarm clock */
+#define SIGTERM 15  /* software termination signal from kill */
+#define SIGURG  16  /* urgent condition on IO channel */
+#define SIGSTOP 17  /* sendable stop signal not from tty */
+#define SIGTSTP 18  /* stop signal from tty */
+#define SIGCONT 19  /* continue a stopped process */
+#define SIGCHLD 20  /* to parent on child stop or exit */
+#define SIGCLD  20  /* System V name for SIGCHLD */
+#define SIGTTIN 21  /* to readers pgrp upon background tty read */
+#define SIGTTOU 22  /* like TTIN for output if (tp->t_local&LTOSTOP) */
+#define SIGIO   23  /* input/output possible signal */
+#define SIGPOLL SIGIO   /* System V name for SIGIO */
+#define SIGXCPU 24  /* exceeded CPU time limit */
+#define SIGXFSZ 25  /* exceeded file size limit */
+#define SIGVTALRM 26    /* virtual time alarm */
+#define SIGPROF 27  /* profiling time alarm */
+#define SIGWINCH 28 /* window changed */
+#define SIGLOST 29  /* resource lost (eg, record-lock lost) */
+#define SIGUSR1 30  /* user defined signal 1 */
+#define SIGUSR2 31  /* user defined signal 2 */
+#define NSIG    32      /* signal 0 implied */
+
+#ifndef _SIGNAL_H_
+/* Some applications take advantage of the fact that <sys/signal.h>
+ * and <signal.h> are equivalent in glibc.  Allow for that here.  */
+#include <signal.h>
+#endif
 
-int sigprocmask (int how, const sigset_t *set, sigset_t *oset);
-int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
 #endif
 
 #ifdef __cplusplus

+ 1 - 0
components/libc/pthreads/mqueue.c

@@ -8,6 +8,7 @@
  */
 
 #include <string.h>
+#include <sys/signal.h>
 #include "mqueue.h"
 #include "pthread_internal.h"
 

+ 2 - 3
components/libc/signal/posix_signal.c

@@ -7,6 +7,7 @@
  * Date           Author       Notes
  * 2017/10/1      Bernard      The first version
  */
+
 #include <rthw.h>
 #include <rtthread.h>
 
@@ -14,6 +15,7 @@
 #include <sys/errno.h>
 
 #include "posix_signal.h"
+
 #define sig_valid(sig_no)   (sig_no >= 0 && sig_no < RT_SIG_MAX)
 
 void (*signal(int sig, void (*func)(int))) (int)
@@ -79,13 +81,10 @@ int sigtimedwait(const sigset_t *set, siginfo_t *info,
     int ret  = 0;
     int tick = RT_WAITING_FOREVER;
 
-#ifdef RT_USING_PTHREADS
     if (timeout)
     {
-        extern int clock_time_to_tick(const struct timespec *time);
         tick = clock_time_to_tick(timeout);
     }
-#endif
 
     ret = rt_signal_wait(set, info, tick);
     if (ret == 0) return 0;

+ 0 - 1
components/libc/signal/posix_signal.h

@@ -15,7 +15,6 @@
 extern "C" {
 #endif
 
-#include <rtthread.h>
 #include <sys/signal.h>
 
 enum rt_signal_value{

+ 0 - 60
include/libc/libc_fdset.h

@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date           Author       Notes
- * 2017-10-30     Bernard      The first version
- */
-
-#ifndef LIBC_FDSET_H__
-#define LIBC_FDSET_H__
-
-#include <rtconfig.h>
-
-#if defined(RT_USING_NEWLIB) || defined(_WIN32) || (defined( __GNUC__ ) && !defined(__ARMCC_VERSION))
-#include <sys/types.h>
-#if defined(HAVE_SYS_SELECT_H)
-#include <sys/select.h>
-#endif
-
-#else
-
-#ifdef SAL_USING_POSIX
-
-#ifdef FD_SETSIZE
-#undef FD_SETSIZE
-#endif
-
-#define FD_SETSIZE      DFS_FD_MAX
-#endif
-
-#  ifndef   FD_SETSIZE
-#   define  FD_SETSIZE  32
-#  endif
-
-#  define   NBBY    8       /* number of bits in a byte */
-
-typedef long    fd_mask;
-#  define   NFDBITS (sizeof (fd_mask) * NBBY)   /* bits per mask */
-#  ifndef   howmany
-#   define  howmany(x,y)    (((x)+((y)-1))/(y))
-#  endif
-
-/* We use a macro for fd_set so that including Sockets.h afterwards
-   can work.  */
-typedef struct _types_fd_set {
-    fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
-} _types_fd_set;
-
-#define fd_set _types_fd_set
-
-#  define   FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))
-#  define   FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))
-#  define   FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))
-#  define   FD_ZERO(p)      memset((void*)(p), 0, sizeof(*(p)))
-
-#endif
-
-#endif

+ 1 - 1
include/rtdef.h

@@ -510,7 +510,7 @@ typedef struct rt_timer *rt_timer_t;
  * @addtogroup Signal
  */
 #ifdef RT_USING_SIGNALS
-#include <libc/libc_signal.h>
+#include <sys/signal.h>
 typedef unsigned long rt_sigset_t;
 typedef void (*rt_sighandler_t)(int signo);
 typedef siginfo_t rt_siginfo_t;

+ 0 - 3
include/rtlibc.h

@@ -13,11 +13,8 @@
 
 /* definitions for libc if toolchain has no these definitions */
 #include "libc/libc_stat.h"
-
 #include "libc/libc_fcntl.h"
 #include "libc/libc_dirent.h"
-#include "libc/libc_signal.h"
-#include "libc/libc_fdset.h"
 
 #ifndef RT_USING_LIBC
 #if defined(__ARMCC_VERSION) || defined(__IAR_SYSTEMS_ICC__)