diff options
Diffstat (limited to 'libc/include')
| -rw-r--r-- | libc/include/signal.h | 62 | ||||
| -rw-r--r-- | libc/include/sys/cdefs.h | 8 | ||||
| -rw-r--r-- | libc/include/sys/ucontext.h | 43 | ||||
| -rw-r--r-- | libc/include/time.h | 5 |
4 files changed, 99 insertions, 19 deletions
diff --git a/libc/include/signal.h b/libc/include/signal.h index 6432c18..bcb58c2 100644 --- a/libc/include/signal.h +++ b/libc/include/signal.h @@ -29,29 +29,61 @@ #define _SIGNAL_H_ #include <sys/cdefs.h> -#include <limits.h> /* For LONG_BIT */ -#include <string.h> /* For memset() */ #include <sys/types.h> -#include <asm/signal.h> +#include <machine/signal.h> +#include <machine/ucontext.h> -#define __ARCH_SI_UID_T __kernel_uid32_t -#include <asm/siginfo.h> -#undef __ARCH_SI_UID_T +#include <limits.h> /* For LONG_BIT */ +#include <string.h> /* For memset() */ __BEGIN_DECLS -typedef int sig_atomic_t; +/* Previous versions of <signal.h> didn't define 'struct sigcontext'. This + * has led client code to redefine the structure, sometimes in a custom and + * incompatible way. + * + * The __BIONIC_HAVE_STRUCT_SIGCONTEXT macro is defined in <sys/cdefs.h> + * to indicate that <signal.h> does indeed define the structure. For + * maximum source compatibility, client code should follow these guidelines: + * + * - If client code is guaranteed to build against a recent NDK/platform + * version, just include <signal.h> as usual, and use the + * 'struct sigcontext'. + * + * - If client code wants to build against older NDK/platform versions, + * and only uses 'struct sigcontext' without accessing _any_ + * of its fields, just always include <asm/sigcontext.h> on Android + * to ensure maximum portability (i.e. to old platform/NDK releases). + * As in: + * + * #include <signal.h> + * #ifdef __BIONIC__ + * #include <asm/sigcontext.h> + * #endif + * + * - Otherwise, if the client has a custom sigcontext definition and wants to + * keep it to minimize source changes, use a macro trick as below to avoid + * naming conflicts: + * + * #include <signal.h> + * #ifdef __BIONIC__ + * # include <asm/sigcontext.h> + * # ifdef __BIONIC_HAVE_STRUCT_SIGCONTEXT + * # undef sigcontext + * # define sigcontext my_custom_sigcontext + * # endif + * #endif + */ -/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however - * its definition is part of a #if __KERNEL__ .. #endif block in the original - * kernel headers and is thus not part of our cleaned-up versions. +/* Similarly, previous versions of the C library didn't define ucontext_t + * and mcontext_t in <signal.h>, or <sys/ucontext.h>. Client code can check + * against the macro __BIONIC_HAVE_UCONTEXT_T to determine if it does. * - * Looking at the current kernel sources, it is defined as 64 for all - * architectures except for the 'mips' one which set it to 128. + * Beware, that does _not_ mean that <ucontext.h> and related functions are + * available. */ -#ifndef _NSIG -# define _NSIG 64 -#endif + +typedef int sig_atomic_t; extern const char * const sys_siglist[]; extern const char * const sys_signame[]; diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h index ca81cb6..6bae25c 100644 --- a/libc/include/sys/cdefs.h +++ b/libc/include/sys/cdefs.h @@ -510,4 +510,12 @@ #define __BIONIC_FORTIFY_UNKNOWN_SIZE ((size_t) -1) #endif +/* Indicates to client code that <signal.h> now defines 'struct sigcontext' + * properly. See comments in <signal.h> */ +#define __BIONIC_HAVE_STRUCT_SIGCONTEXT 1 + +/* Indicates to client code that <signal.h> now defines 'ucontext_t' */ +/* NOTE: That does not mean that <ucontext.h> is available! */ +#define __BIONIC_HAVE_UCONTEXT_T 1 + #endif /* !_SYS_CDEFS_H_ */ diff --git a/libc/include/sys/ucontext.h b/libc/include/sys/ucontext.h new file mode 100644 index 0000000..8c7b3d7 --- /dev/null +++ b/libc/include/sys/ucontext.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#ifndef _SYS_UCONTEXT_H_ +#define _SYS_UCONTEXT_H_ + +/* While not standard, this header is typically provided by GLibc and the + * BSD C library to provide for the definition of ucontext_t and mcontext_t, + * without the declarations of the deprecated *context() functions in + * <ucontext.h>. + * + * Client code that directly includes this file exists. Note that + * the better, POSIX-compliant, way to get these declarations is to include + * <signal.h>. + */ + +#include <machine/ucontext.h> + +#endif /* _SYS_UCONTEXT_H_ */ diff --git a/libc/include/time.h b/libc/include/time.h index e280e0a..f65ac4e 100644 --- a/libc/include/time.h +++ b/libc/include/time.h @@ -30,10 +30,7 @@ #include <sys/cdefs.h> #include <sys/time.h> - -#define __ARCH_SI_UID_T __kernel_uid32_t -#include <asm/siginfo.h> -#undef __ARCH_SI_UID_T +#include <machine/signal.h> /* for struct sigevent */ __BEGIN_DECLS |
