diff --git a/ChangeLog b/ChangeLog index 5f69f5d176..e6babbbbee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2017-08-16 Joseph Myers + + [BZ #21944] + * signal/bits/types/__sigval_t.h: New file. + * signal/Makefile (headers): Add bits/types/__sigval_t.h. + * signal/bits/types/sigval_t.h: Include + and define sigval_t using __sigval_t. + * include/bits/types/__sigval_t.h: New file. + * bits/types/sigevent_t.h: Include + instead of . + (struct sigevent): Use __sigval_t instead of sigval_t. + * bits/types/siginfo_t.h: Include + instead of . + (siginfo_t): Use __sigval_t instead of sigval_t. + * sysdeps/unix/sysv/linux/bits/types/sigevent_t.h: Include + instead of . + (struct sigevent): Use __sigval_t instead of sigval_t. + * sysdeps/unix/sysv/linux/bits/types/siginfo_t.h: Include + instead of . + (siginfo_t): Use __sigval_t instead of sigval_t. + * signal/signal.h [__USE_MISC]: Include . + 2017-08-16 H.J. Lu * NEWS: Remove "[Add new features here]" for 2.27. diff --git a/bits/types/sigevent_t.h b/bits/types/sigevent_t.h index 7b8cb054d7..5611268610 100644 --- a/bits/types/sigevent_t.h +++ b/bits/types/sigevent_t.h @@ -2,15 +2,15 @@ #define __sigevent_t_defined 1 #include -#include +#include /* Structure to transport application-defined values with signals. */ typedef struct sigevent { - sigval_t sigev_value; + __sigval_t sigev_value; int sigev_signo; int sigev_notify; - void (*sigev_notify_function) (sigval_t); /* Function to start. */ + void (*sigev_notify_function) (__sigval_t); /* Function to start. */ void *sigev_notify_attributes; /* Really pthread_attr_t.*/ } sigevent_t; diff --git a/bits/types/siginfo_t.h b/bits/types/siginfo_t.h index ab6bf18bec..1ac2a98fbd 100644 --- a/bits/types/siginfo_t.h +++ b/bits/types/siginfo_t.h @@ -2,7 +2,7 @@ #define __siginfo_t_defined 1 #include -#include +#include typedef struct siginfo { @@ -15,7 +15,7 @@ typedef struct siginfo void *si_addr; /* Address of faulting instruction. */ int si_status; /* Exit value or signal. */ long int si_band; /* Band event for SIGPOLL. */ - sigval_t si_value; /* Signal value. */ + __sigval_t si_value; /* Signal value. */ } siginfo_t; #endif diff --git a/include/bits/types/__sigval_t.h b/include/bits/types/__sigval_t.h new file mode 100644 index 0000000000..62f8e48ed8 --- /dev/null +++ b/include/bits/types/__sigval_t.h @@ -0,0 +1 @@ +#include diff --git a/signal/Makefile b/signal/Makefile index 8c9a7d1844..a6a1289437 100644 --- a/signal/Makefile +++ b/signal/Makefile @@ -30,7 +30,8 @@ headers := signal.h sys/signal.h \ bits/types/__sigset_t.h bits/types/sig_atomic_t.h \ bits/types/sigevent_t.h bits/types/siginfo_t.h \ bits/types/sigset_t.h bits/types/sigval_t.h \ - bits/types/stack_t.h bits/types/struct_sigstack.h + bits/types/stack_t.h bits/types/struct_sigstack.h \ + bits/types/__sigval_t.h routines := signal raise killpg \ sigaction sigprocmask kill \ diff --git a/signal/bits/types/__sigval_t.h b/signal/bits/types/__sigval_t.h new file mode 100644 index 0000000000..79b4ffe401 --- /dev/null +++ b/signal/bits/types/__sigval_t.h @@ -0,0 +1,41 @@ +/* Define __sigval_t. + Copyright (C) 1997-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef ____sigval_t_defined +#define ____sigval_t_defined + +/* Type for data associated with a signal. */ +#ifdef __USE_POSIX199309 +union sigval +{ + int sival_int; + void *sival_ptr; +}; + +typedef union sigval __sigval_t; +#else +union __sigval +{ + int __sival_int; + void *__sival_ptr; +}; + +typedef union __sigval __sigval_t; +#endif + +#endif diff --git a/signal/bits/types/sigval_t.h b/signal/bits/types/sigval_t.h index 666598f0ca..a05d7f469f 100644 --- a/signal/bits/types/sigval_t.h +++ b/signal/bits/types/sigval_t.h @@ -1,13 +1,18 @@ #ifndef __sigval_t_defined #define __sigval_t_defined -/* Type for data associated with a signal. */ -union sigval -{ - int sival_int; - void *sival_ptr; -}; +#include -typedef union sigval sigval_t; +/* To avoid sigval_t (not a standard type name) having C++ name + mangling depending on whether the selected standard includes union + sigval, it should not be defined at all when using a standard for + which the sigval name is not reserved; in that case, headers should + not include and should use only the + internal __sigval_t name. */ +#ifndef __USE_POSIX199309 +# error "sigval_t defined for standard not including union sigval" +#endif + +typedef __sigval_t sigval_t; #endif diff --git a/signal/signal.h b/signal/signal.h index c8f6100ac4..416c5a252a 100644 --- a/signal/signal.h +++ b/signal/signal.h @@ -58,6 +58,10 @@ typedef __uid_t uid_t; # include #endif +#ifdef __USE_MISC +# include +#endif + #ifdef __USE_POSIX199309 # include # include diff --git a/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h b/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h index 0d4857b16e..e8b28de7e3 100644 --- a/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h +++ b/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h @@ -3,7 +3,7 @@ #include #include -#include +#include #define __SIGEV_MAX_SIZE 64 #if __WORDSIZE == 64 @@ -21,7 +21,7 @@ typedef union pthread_attr_t pthread_attr_t; /* Structure to transport application-defined values with signals. */ typedef struct sigevent { - sigval_t sigev_value; + __sigval_t sigev_value; int sigev_signo; int sigev_notify; @@ -35,7 +35,7 @@ typedef struct sigevent struct { - void (*_function) (sigval_t); /* Function to start. */ + void (*_function) (__sigval_t); /* Function to start. */ pthread_attr_t *_attribute; /* Thread attributes. */ } _sigev_thread; } _sigev_un; diff --git a/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h b/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h index bed69148f9..33766d1813 100644 --- a/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h +++ b/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h @@ -3,7 +3,7 @@ #include #include -#include +#include #define __SI_MAX_SIZE 128 #if __WORDSIZE == 64 @@ -64,7 +64,7 @@ typedef struct { int si_tid; /* Timer ID. */ int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ + __sigval_t si_sigval; /* Signal value. */ } _timer; /* POSIX.1b signals. */ @@ -72,7 +72,7 @@ typedef struct { __pid_t si_pid; /* Sending process ID. */ __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ + __sigval_t si_sigval; /* Signal value. */ } _rt; /* SIGCHLD. */