Ignore:
Timestamp:
2013-07-10T08:58:49Z (12 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3908355, 4c53333
Parents:
30c1b75 (diff), 98abd40 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Extending POSIX library

Merge from lp:~vojtech-horky/helenos/gcc-port.

This is work-in-progress merge from branch aimed at bringing GCC to run
inside HelenOS.

The most notable change is dealing with the name clashes in libposix and
libc. For ported applications, the libposix headers looks as normal
POSIX headers and there is no need to do preprocessor-based renaming inside
the ported application. The renaming is done inside object files instead.
See revision 1745 in lp:~vojtech-horky/helenos/gcc-port [1] for more
detailed explanation.
The solution is definitely not perfect but shall deal with the naming
conflicts in much safer manner than using the redefines.

There were some other changes as well, mostly small ones.

  • Add some functions, some as ToDo ones (i.e. empty implementation).
  • Add more POSIX headers, split some existing.

[1] http://bazaar.launchpad.net/~vojtech-horky/helenos/gcc-port/revision/1745

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/posix/include/posix/signal.h

    r30c1b75 rc8bb1633  
    3636#define POSIX_SIGNAL_H_
    3737
     38#ifndef __POSIX_DEF__
     39#define __POSIX_DEF__(x) x
     40#endif
     41
    3842#include "sys/types.h"
     43#include <posix/ucontext.h>
    3944
    4045extern void __posix_default_signal_handler(int signo);
     
    5156#define SIG_IGN ((void (*)(int)) __posix_ignore_signal_handler)
    5257
    53 typedef int posix_sig_atomic_t;
    54 typedef uint32_t posix_sigset_t;
    55 typedef struct posix_mcontext {
    56         /* must not be empty to avoid compiler warnings (-pedantic) */
    57         int dummy;
    58 } posix_mcontext_t;
    59 
    60 union posix_sigval {
    61         int sival_int;
    62         void *sival_ptr;
    63 };
    64 
    65 struct posix_sigevent {
    66         int sigev_notify; /* Notification type. */
    67         int sigev_signo; /* Signal number. */
    68         union posix_sigval sigev_value; /* Signal value. */
    69         void (*sigev_notify_function)(union posix_sigval); /* Notification function. */
    70         posix_thread_attr_t *sigev_notify_attributes; /* Notification attributes. */
    71 };
    7258
    7359typedef struct {
     
    7763        int si_errno;
    7864
    79         posix_pid_t si_pid;
    80         posix_uid_t si_uid;
     65        __POSIX_DEF__(pid_t) si_pid;
     66        __POSIX_DEF__(uid_t) si_uid;
    8167        void *si_addr;
    8268        int si_status;
     
    8470        long si_band;
    8571
    86         union posix_sigval si_value;
    87 } posix_siginfo_t;
    88 
    89 struct posix_sigaction {
     72        union __POSIX_DEF__(sigval) si_value;
     73} __POSIX_DEF__(siginfo_t);
     74
     75struct __POSIX_DEF__(sigaction) {
    9076        void (*sa_handler)(int);
    91         posix_sigset_t sa_mask;
     77        __POSIX_DEF__(sigset_t) sa_mask;
    9278        int sa_flags;
    93         void (*sa_sigaction)(int, posix_siginfo_t *, void *);
     79        void (*sa_sigaction)(int, __POSIX_DEF__(siginfo_t) *, void *);
    9480};
    9581
    96 typedef struct {
    97         void *ss_sp;
    98         size_t ss_size;
    99         int ss_flags;
    100 } posix_stack_t;
    101 
    102 typedef struct posix_ucontext {
    103         struct posix_ucontext *uc_link;
    104         posix_sigset_t uc_sigmask;
    105         posix_stack_t uc_stack;
    106         posix_mcontext_t uc_mcontext;
    107 } posix_ucontext_t;
    108 
    109 /* Values of posix_sigevent::sigev_notify */
     82
     83/* Values of __POSIX_DEF__(sigevent)::sigev_notify */
    11084#undef SIGEV_NONE
    11185#undef SIGEV_SIGNAL
     
    255229};
    256230
    257 extern int posix_sigaction(int sig, const struct posix_sigaction *restrict act,
    258     struct posix_sigaction *restrict oact);
    259 
    260 extern void (*posix_signal(int sig, void (*func)(int)))(int);
    261 extern int posix_raise(int sig);
    262 extern int posix_kill(posix_pid_t pid, int sig);
    263 extern int posix_killpg(posix_pid_t pid, int sig);
    264 
    265 extern void posix_psiginfo(const posix_siginfo_t *pinfo, const char *message);
    266 extern void posix_psignal(int signum, const char *message);
    267 
    268 extern int posix_sigemptyset(posix_sigset_t *set);
    269 extern int posix_sigfillset(posix_sigset_t *set);
    270 extern int posix_sigaddset(posix_sigset_t *set, int signo);
    271 extern int posix_sigdelset(posix_sigset_t *set, int signo);
    272 extern int posix_sigismember(const posix_sigset_t *set, int signo);
    273 
    274 extern int posix_thread_sigmask(int how, const posix_sigset_t *restrict set,
    275     posix_sigset_t *restrict oset);
    276 extern int posix_sigprocmask(int how, const posix_sigset_t *restrict set,
    277     posix_sigset_t *restrict oset);
    278 
    279 #ifndef LIBPOSIX_INTERNAL
    280         #define sig_atomic_t posix_sig_atomic_t
    281         #define sigset_t posix_sigset_t
    282         #define sigval posix_sigval
    283         #ifndef sigevent
    284                 #define sigevent posix_sigevent
    285         #endif
    286         #define mcontext_t posix_mcontext_t
    287         #define ucontext_t posix_ucontext_t
    288         #define stack_t posix_stack_t
    289         #define siginfo_t posix_siginfo_t
    290 
    291         #define sigaction posix_sigaction
    292 
    293         #define signal posix_signal
    294         #define raise posix_raise
    295         #define kill posix_kill
    296         #define killpg posix_killpg
    297 
    298         #define psiginfo posix_psiginfo
    299         #define psignal posix_psignal
    300 
    301         #define sigemptyset posix_sigemptyset
    302         #define sigfillset posix_sigfillset
    303         #define sigaddset posix_sigaddset
    304         #define sigdelset posix_sigdelset
    305         #define sigismember posix_sigismember
    306 
    307         #define pthread_sigmask posix_thread_sigmask
    308         #define sigprocmask posix_sigprocmask
    309 #endif
     231extern int __POSIX_DEF__(sigaction)(int sig, const struct __POSIX_DEF__(sigaction) *restrict act,
     232    struct __POSIX_DEF__(sigaction) *restrict oact);
     233
     234extern void (*__POSIX_DEF__(signal)(int sig, void (*func)(int)))(int);
     235extern int __POSIX_DEF__(raise)(int sig);
     236extern int __POSIX_DEF__(kill)(__POSIX_DEF__(pid_t) pid, int sig);
     237extern int __POSIX_DEF__(killpg)(__POSIX_DEF__(pid_t) pid, int sig);
     238
     239extern void __POSIX_DEF__(psiginfo)(const __POSIX_DEF__(siginfo_t) *pinfo, const char *message);
     240extern void __POSIX_DEF__(psignal)(int signum, const char *message);
     241
     242extern int __POSIX_DEF__(sigemptyset)(__POSIX_DEF__(sigset_t) *set);
     243extern int __POSIX_DEF__(sigfillset)(__POSIX_DEF__(sigset_t) *set);
     244extern int __POSIX_DEF__(sigaddset)(__POSIX_DEF__(sigset_t) *set, int signo);
     245extern int __POSIX_DEF__(sigdelset)(__POSIX_DEF__(sigset_t) *set, int signo);
     246extern int __POSIX_DEF__(sigismember)(const __POSIX_DEF__(sigset_t) *set, int signo);
     247
     248extern int __POSIX_DEF__(thread_sigmask)(int how, const __POSIX_DEF__(sigset_t) *restrict set,
     249    __POSIX_DEF__(sigset_t) *restrict oset);
     250extern int __POSIX_DEF__(sigprocmask)(int how, const __POSIX_DEF__(sigset_t) *restrict set,
     251    __POSIX_DEF__(sigset_t) *restrict oset);
     252
    310253
    311254#endif /* POSIX_SIGNAL_H_ */
Note: See TracChangeset for help on using the changeset viewer.