diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 18:26:36 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 18:26:36 +0000 |
commit | 0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (patch) | |
tree | 2ea1f8305970753e4a657acb2ccc15ca3eec8e2c /include | |
parent | 7d58530341304d403a6626d7f7a1913165fe2f32 (diff) | |
download | glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.gz glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.xz glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.zip |
2.5-18.1
Diffstat (limited to 'include')
58 files changed, 666 insertions, 375 deletions
diff --git a/include/aio.h b/include/aio.h index e3dc86f99a..be40c0bcef 100644 --- a/include/aio.h +++ b/include/aio.h @@ -1,6 +1,12 @@ #ifndef _AIO_H #include <rt/aio.h> -/* Now define the internal interfaces. */ +/* Now define the internal interfaces. */ extern void __aio_init (__const struct aioinit *__init); + +/* Flag to signal we need to be compatible with glibc < 2.4 in + lio_listio and we do not issue events for each individual list + element. */ +#define LIO_NO_INDIVIDUAL_EVENT 128 + #endif diff --git a/include/alloca.h b/include/alloca.h index de541f4e5a..563d7868bd 100644 --- a/include/alloca.h +++ b/include/alloca.h @@ -42,7 +42,7 @@ extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const)); len = __newlen; \ __newbuf; }) #else -# define extern_alloca(buf, len, newlen) \ +# define extend_alloca(buf, len, newlen) \ __alloca (((len) = (newlen))) #endif diff --git a/include/arpa/nameser.h b/include/arpa/nameser.h index 944fe732a6..efbe956602 100644 --- a/include/arpa/nameser.h +++ b/include/arpa/nameser.h @@ -1 +1,46 @@ #include <resolv/arpa/nameser.h> + +/* If the machine allows unaligned access we can do better than using + the NS_GET16, NS_GET32, NS_PUT16, and NS_PUT32 macros from the + installed header. */ +#include <string.h> +#include <stdint.h> +#include <netinet/in.h> + +extern struct _ns_flagdata _ns_flagdata[] attribute_hidden; + +#if _STRING_ARCH_unaligned + +# undef NS_GET16 +# define NS_GET16(s, cp) \ + do { \ + uint16_t *t_cp = (uint16_t *) (cp); \ + (s) = ntohs (*t_cp); \ + (cp) += NS_INT16SZ; \ + } while (0) + +# undef NS_GET32 +# define NS_GET32(l, cp) \ + do { \ + uint32_t *t_cp = (uint32_t *) (cp); \ + (l) = ntohl (*t_cp); \ + (cp) += NS_INT32SZ; \ + } while (0) + +# undef NS_PUT16 +# define NS_PUT16(s, cp) \ + do { \ + uint16_t *t_cp = (uint16_t *) (cp); \ + *t_cp = htons (s); \ + (cp) += NS_INT16SZ; \ + } while (0) + +# undef NS_PUT32 +# define NS_PUT32(l, cp) \ + do { \ + uint32_t *t_cp = (uint32_t *) (cp); \ + *t_cp = htonl (l); \ + (cp) += NS_INT32SZ; \ + } while (0) + +#endif diff --git a/include/atomic.h b/include/atomic.h index 8a23f6ee9e..d44728b215 100644 --- a/include/atomic.h +++ b/include/atomic.h @@ -1,5 +1,5 @@ /* Internal macros for atomic operations for GNU C Library. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -108,7 +108,7 @@ __typeof (*(mem)) __value = (newvalue); \ \ do \ - __oldval = (*__memp); \ + __oldval = *__memp; \ while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \ __value, \ __oldval),\ @@ -130,7 +130,7 @@ __typeof (*(mem)) __value = (value); \ \ do \ - __oldval = (*__memp); \ + __oldval = *__memp; \ while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \ __oldval \ + __value,\ @@ -141,6 +141,41 @@ #endif + +#ifndef atomic_max +# define atomic_max(mem, value) \ + do { \ + __typeof (*(mem)) __oldval; \ + __typeof (mem) __memp = (mem); \ + __typeof (*(mem)) __value = (value); \ + do { \ + __oldval = *__memp; \ + if (__oldval >= __value) \ + break; \ + } while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \ + __value, \ + __oldval),\ + 0)); \ + } while (0) +#endif + +#ifndef atomic_min +# define atomic_min(mem, value) \ + do { \ + __typeof (*(mem)) __oldval; \ + __typeof (mem) __memp = (mem); \ + __typeof (*(mem)) __value = (value); \ + do { \ + __oldval = *__memp; \ + if (__oldval <= __value) \ + break; \ + } while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \ + __value, \ + __oldval),\ + 0)); \ + } while (0) +#endif + #ifndef atomic_add # define atomic_add(mem, value) (void) atomic_exchange_and_add ((mem), (value)) #endif @@ -238,6 +273,41 @@ __oldval & __mask; }) #endif +/* Atomically *mem &= mask and return the old value of *mem. */ +#ifndef atomic_and +# define atomic_and(mem, mask) \ + ({ __typeof (*(mem)) __oldval; \ + __typeof (mem) __memp = (mem); \ + __typeof (*(mem)) __mask = (mask); \ + \ + do \ + __oldval = (*__memp); \ + while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \ + __oldval \ + & __mask, \ + __oldval),\ + 0)); \ + \ + __oldval; }) +#endif + +/* Atomically *mem |= mask and return the old value of *mem. */ +#ifndef atomic_or +# define atomic_or(mem, mask) \ + ({ __typeof (*(mem)) __oldval; \ + __typeof (mem) __memp = (mem); \ + __typeof (*(mem)) __mask = (mask); \ + \ + do \ + __oldval = (*__memp); \ + while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp, \ + __oldval \ + | __mask, \ + __oldval),\ + 0)); \ + \ + __oldval; }) +#endif #ifndef atomic_full_barrier # define atomic_full_barrier() __asm ("" ::: "memory") @@ -254,6 +324,12 @@ #endif +#ifndef atomic_forced_read +# define atomic_forced_read(x) \ + ({ __typeof (x) __x; __asm ("" : "=r" (__x) : "0" (x)); __x; }) +#endif + + #ifndef atomic_delay # define atomic_delay() do { /* nothing */ } while (0) #endif diff --git a/include/bits/socket2.h b/include/bits/socket2.h new file mode 100644 index 0000000000..a81fd9fa78 --- /dev/null +++ b/include/bits/socket2.h @@ -0,0 +1 @@ +#include <socket/bits/socket2.h> diff --git a/include/bits/stdlib-ldbl.h b/include/bits/stdlib-ldbl.h new file mode 100644 index 0000000000..62509494a3 --- /dev/null +++ b/include/bits/stdlib-ldbl.h @@ -0,0 +1 @@ +#include <stdlib/bits/stdlib-ldbl.h> diff --git a/include/bits/stdlib.h b/include/bits/stdlib.h new file mode 100644 index 0000000000..8541e278c7 --- /dev/null +++ b/include/bits/stdlib.h @@ -0,0 +1 @@ +#include <stdlib/bits/stdlib.h> diff --git a/include/bits/syslog.h b/include/bits/syslog.h new file mode 100644 index 0000000000..060b893482 --- /dev/null +++ b/include/bits/syslog.h @@ -0,0 +1 @@ +#include <misc/bits/syslog.h> diff --git a/include/bits/unistd.h b/include/bits/unistd.h new file mode 100644 index 0000000000..1a91dcc72e --- /dev/null +++ b/include/bits/unistd.h @@ -0,0 +1 @@ +#include <posix/bits/unistd.h> diff --git a/include/bits/wchar-ldbl.h b/include/bits/wchar-ldbl.h new file mode 100644 index 0000000000..29baa2f4d5 --- /dev/null +++ b/include/bits/wchar-ldbl.h @@ -0,0 +1 @@ +#include <wcsmbs/bits/wchar-ldbl.h> diff --git a/include/bits/wchar2.h b/include/bits/wchar2.h new file mode 100644 index 0000000000..a18dccfc55 --- /dev/null +++ b/include/bits/wchar2.h @@ -0,0 +1 @@ +#include <wcsmbs/bits/wchar2.h> diff --git a/include/dirent.h b/include/dirent.h index f09a88f21c..8f23aee234 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -1,9 +1,12 @@ #ifndef _DIRENT_H # include <dirstream.h> # include <dirent/dirent.h> +# include <sys/stat.h> +# include <stdbool.h> /* Now define the internal interfaces. */ extern DIR *__opendir (__const char *__name); +extern DIR *__fdopendir (int __fd); extern int __closedir (DIR *__dirp); extern struct dirent *__readdir (DIR *__dirp); extern struct dirent64 *__readdir64 (DIR *__dirp); @@ -23,4 +26,7 @@ extern int __alphasort64 (const void *a, const void *b) __attribute_pure__; extern int __versionsort64 (const void *a, const void *b) __attribute_pure__; +extern DIR *__alloc_dir (int fd, bool close_fd, const struct stat64 *statp) + internal_function; + #endif diff --git a/include/dlfcn.h b/include/dlfcn.h index bfa1b9041b..9144dd2f3f 100644 --- a/include/dlfcn.h +++ b/include/dlfcn.h @@ -1,15 +1,31 @@ #ifndef _DLFCN_H #include <dlfcn/dlfcn.h> #include <link.h> /* For ElfW. */ +#include <stdbool.h> /* Internally used flag. */ #define __RTLD_DLOPEN 0x80000000 #define __RTLD_SPROF 0x40000000 #define __RTLD_OPENEXEC 0x20000000 #define __RTLD_CALLMAP 0x10000000 +#define __RTLD_AUDIT 0x08000000 #define __LM_ID_CALLER -2 +#ifdef SHARED +/* Locally stored program arguments. */ +extern int __dlfcn_argc attribute_hidden; +extern char **__dlfcn_argv attribute_hidden; +#else +/* These variables are defined and initialized in the startup code. */ +extern int __libc_argc attribute_hidden; +extern char **__libc_argv attribute_hidden; + +# define __dlfcn_argc __libc_argc +# define __dlfcn_argv __libc_argv +#endif + + /* Now define the internal interfaces. */ #define __libc_dlopen(name) \ @@ -29,18 +45,8 @@ extern int _dl_addr (const void *address, Dl_info *info, libc_hidden_proto (_dl_addr) #endif -/* Open the shared object NAME, relocate it, and run its initializer if it - hasn't already been run. MODE is as for `dlopen' (see <dlfcn.h>). If - the object is already opened, returns its existing map. */ -extern void *_dl_open (const char *name, int mode, const void *caller, - Lmid_t nsid) - internal_function; -libc_hidden_proto (_dl_open) - /* Close an object previously opened by _dl_open. */ -extern void _dl_close (void *map) - internal_function; -libc_hidden_proto (_dl_close) +extern void _dl_close (void *map) attribute_hidden; /* Look up NAME in shared object HANDLE (which may be RTLD_DEFAULT or RTLD_NEXT). WHO is the calling function, for RTLD_NEXT. Returns @@ -62,9 +68,10 @@ extern void *_dl_vsym (void *handle, const char *name, const char *version, and the error code passed is the return value and *OBJNAME is set to the object name which experienced the problems. ERRSTRING if nonzero points to a malloc'ed string which the caller has to free after use. - ARGS is passed as argument to OPERATE. */ + ARGS is passed as argument to OPERATE. MALLOCEDP is set to true only + if the returned string is allocated using the libc's malloc. */ extern int _dl_catch_error (const char **objname, const char **errstring, - void (*operate) (void *), + bool *mallocedp, void (*operate) (void *), void *args) internal_function; diff --git a/include/errno.h b/include/errno.h index 9865903b86..fe8bca44c5 100644 --- a/include/errno.h +++ b/include/errno.h @@ -2,7 +2,7 @@ #include <stdlib/errno.h> -#if defined _ERRNO_H && !defined _ISOMAC +#if defined _ERRNO_H && !defined _ISOMAC && !defined __cplusplus # ifdef IS_IN_rtld # include <dl-sysdep.h> diff --git a/include/execinfo.h b/include/execinfo.h index 143a9cc4ce..840a0818cb 100644 --- a/include/execinfo.h +++ b/include/execinfo.h @@ -2,10 +2,12 @@ #include <debug/execinfo.h> extern int __backtrace (void **__array, int __size); +libc_hidden_proto (__backtrace) extern char **__backtrace_symbols (void *__const *__array, int __size); extern void __backtrace_symbols_fd (void *__const *__array, int __size, int __fd); +libc_hidden_proto (__backtrace_symbols_fd) #endif diff --git a/include/fcntl.h b/include/fcntl.h index 7764f1cd62..e23af1c3d3 100644 --- a/include/fcntl.h +++ b/include/fcntl.h @@ -17,5 +17,23 @@ extern int __open (__const char *__file, int __oflag, ...); libc_hidden_proto (__open) extern int __fcntl (int __fd, int __cmd, ...); libc_hidden_proto (__fcntl) +extern int __openat (int __fd, __const char *__file, int __oflag, ...) + __nonnull ((2)); +libc_hidden_proto (__openat) +extern int __openat64 (int __fd, __const char *__file, int __oflag, ...) + __nonnull ((2)); +libc_hidden_proto (__openat64) + + +/* Helper functions for the various *at functions. For Linux. */ +extern void __atfct_seterrno (int errval, int fd, const char *buf) + attribute_hidden; +extern void __atfct_seterrno_2 (int errval, int fd1, const char *buf1, + int fd2, const char *buf2) + attribute_hidden; + + +/* Flag determining whether the *at system calls are available. */ +extern int __have_atfcts attribute_hidden; #endif diff --git a/include/features.h b/include/features.h index e9227bfca0..4eb49a92b1 100644 --- a/include/features.h +++ b/include/features.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1991-1993,1995-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991,1992,1993,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006 + 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 @@ -38,6 +39,7 @@ _FILE_OFFSET_BITS=N Select default filesystem interface. _BSD_SOURCE ISO C, POSIX, and 4.3BSD things. _SVID_SOURCE ISO C, POSIX, and SVID things. + _ATFILE_SOURCE Additional *at interfaces. _GNU_SOURCE All of the above, plus GNU extensions. _REENTRANT Select additionally reentrant object. _THREAD_SAFE Same as _REENTRANT, often used by other systems. @@ -47,7 +49,7 @@ The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__. If none of these are defined, the default is to have _SVID_SOURCE, _BSD_SOURCE, and _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to - 199506L. If more than one of these are defined, they accumulate. + 200112L. If more than one of these are defined, they accumulate. For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE together give you ISO C, 1003.1, and 1003.2, but nothing else. @@ -69,6 +71,7 @@ __USE_BSD Define 4.3BSD things. __USE_SVID Define SVID things. __USE_MISC Define things common to BSD and System V Unix. + __USE_ATFILE Define *at interfaces and AT_* constants for them. __USE_GNU Define GNU extensions. __USE_REENTRANT Define reentrant/thread-safe *_r functions. __USE_FORTIFY_LEVEL Additional security measures used, according to level. @@ -102,6 +105,7 @@ #undef __USE_BSD #undef __USE_SVID #undef __USE_MISC +#undef __USE_ATFILE #undef __USE_GNU #undef __USE_REENTRANT #undef __USE_FORTIFY_LEVEL @@ -147,7 +151,7 @@ # undef _POSIX_SOURCE # define _POSIX_SOURCE 1 # undef _POSIX_C_SOURCE -# define _POSIX_C_SOURCE 199506L +# define _POSIX_C_SOURCE 200112L # undef _XOPEN_SOURCE # define _XOPEN_SOURCE 600 # undef _XOPEN_SOURCE_EXTENDED @@ -158,6 +162,8 @@ # define _BSD_SOURCE 1 # undef _SVID_SOURCE # define _SVID_SOURCE 1 +# undef _ATFILE_SOURCE +# define _ATFILE_SOURCE 1 #endif /* If nothing (other than _GNU_SOURCE) is defined, @@ -181,13 +187,15 @@ /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2 (and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */ -#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \ - !defined _POSIX_C_SOURCE) +#if ((!defined __STRICT_ANSI__ || (_XOPEN_SOURCE - 0) >= 500) && \ + !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE) # define _POSIX_SOURCE 1 # if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500 # define _POSIX_C_SOURCE 2 -# else +# elif defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 600 # define _POSIX_C_SOURCE 199506L +# else +# define _POSIX_C_SOURCE 200112L # endif #endif @@ -254,6 +262,10 @@ # define __USE_SVID 1 #endif +#ifdef _ATFILE_SOURCE +# define __USE_ATFILE 1 +#endif + #ifdef _GNU_SOURCE # define __USE_GNU 1 #endif @@ -262,12 +274,21 @@ # define __USE_REENTRANT 1 #endif -#if _FORTIFY_SOURCE > 0 && __GNUC_PREREQ (4, 1) && __OPTIMIZE__ > 0 -# if _FORTIFY_SOURCE == 1 -# define __USE_FORTIFY_LEVEL 1 -# elif _FORTIFY_SOURCE > 1 +#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \ + && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 \ + && (__GNUC_PREREQ (4, 1) \ + || (defined __GNUC_RH_RELEASE__ && __GNUC_PREREQ (4, 0)) \ + || (defined __GNUC_RH_RELEASE__ && __GNUC_PREREQ (3, 4) \ + && __GNUC_MINOR__ == 4 \ + && (__GNUC_PATCHLEVEL__ > 2 \ + || (__GNUC_PATCHLEVEL__ == 2 && __GNUC_RH_RELEASE__ >= 8)))) +# if _FORTIFY_SOURCE > 1 # define __USE_FORTIFY_LEVEL 2 +# else +# define __USE_FORTIFY_LEVEL 1 # endif +#else +# define __USE_FORTIFY_LEVEL 0 #endif /* We do support the IEC 559 math functionality, real and complex. */ @@ -289,7 +310,7 @@ /* Major and minor version number of the GNU C library package. Use these macros to test for features in specific releases. */ #define __GLIBC__ 2 -#define __GLIBC_MINOR__ 4 +#define __GLIBC_MINOR__ 5 #define __GLIBC_PREREQ(maj, min) \ ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min)) diff --git a/include/fenv.h b/include/fenv.h index 206309179f..673eb4b977 100644 --- a/include/fenv.h +++ b/include/fenv.h @@ -13,5 +13,7 @@ extern int __feupdateenv (__const fenv_t *__envp); libm_hidden_proto (feraiseexcept) libm_hidden_proto (fesetenv) +libm_hidden_proto (fesetround) +libm_hidden_proto (feholdexcept) #endif diff --git a/include/ifaddrs.h b/include/ifaddrs.h index aa20c35101..71bdaeb180 100644 --- a/include/ifaddrs.h +++ b/include/ifaddrs.h @@ -1,10 +1,23 @@ #ifndef _IFADDRS_H #include <inet/ifaddrs.h> #include <stdbool.h> +#include <stdint.h> libc_hidden_proto (getifaddrs) libc_hidden_proto (freeifaddrs) -extern void __check_pf (bool *seen_ipv4, bool *seen_ipv6) attribute_hidden; +struct in6addrinfo +{ + enum { + in6ai_deprecated = 1, + in6ai_temporary = 2, + in6ai_homeaddress = 4 + } flags; + uint32_t addr[4]; +}; + +extern void __check_pf (bool *seen_ipv4, bool *seen_ipv6, + struct in6addrinfo **in6ai, size_t *in6ailen) + attribute_hidden; #endif /* ifaddrs.h */ diff --git a/include/libc-symbols.h b/include/libc-symbols.h index dcc46cc80f..da46f5e804 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -1,6 +1,7 @@ /* Support macros for making weak and strong aliases for symbols, and for using symbol sets and linker warnings with GNU ld. - Copyright (C) 1995-1998,2000-2003,2004 Free Software Foundation, Inc. + Copyright (C) 1995-1998,2000-2003,2004,2005,2006 + 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 @@ -31,8 +32,6 @@ * ASM_GLOBAL_DIRECTIVE with `.globl' or `.global'. * ASM_TYPE_DIRECTIVE_PREFIX with `@' or `#' or whatever for .type, or leave it undefined if there is no .type directive. - * HAVE_GNU_LD if using GNU ld, with support for weak symbols in a.out, - and for symbol set and warning messages extensions in a.out and ELF. * HAVE_ELF if using ELF, which supports weak symbols using `.weak'. * HAVE_ASM_WEAK_DIRECTIVE if we have weak symbols using `.weak'. * HAVE_ASM_WEAKEXT_DIRECTIVE if we have weak symbols using `.weakext'. @@ -56,7 +55,7 @@ #include <config.h> /* The symbols in all the user (non-_) macros are C symbols. - HAVE_GNU_LD without HAVE_ELF implies a.out. */ + NO HAVE_ELF implies a.out. */ #if defined HAVE_ASM_WEAK_DIRECTIVE || defined HAVE_ASM_WEAKEXT_DIRECTIVE # define HAVE_WEAK_SYMBOLS @@ -220,55 +219,48 @@ /* When a reference to SYMBOL is encountered, the linker will emit a warning message MSG. */ -#ifdef HAVE_GNU_LD -# ifdef HAVE_ELF +#ifdef HAVE_ELF /* We want the .gnu.warning.SYMBOL section to be unallocated. */ -# ifdef HAVE_ASM_PREVIOUS_DIRECTIVE -# define __make_section_unallocated(section_string) \ +# ifdef HAVE_ASM_PREVIOUS_DIRECTIVE +# define __make_section_unallocated(section_string) \ asm (".section " section_string "\n\t.previous"); -# elif defined HAVE_ASM_POPSECTION_DIRECTIVE -# define __make_section_unallocated(section_string) \ +# elif defined HAVE_ASM_POPSECTION_DIRECTIVE +# define __make_section_unallocated(section_string) \ asm (".pushsection " section_string "\n\t.popsection"); -# else -# define __make_section_unallocated(section_string) -# endif +# else +# define __make_section_unallocated(section_string) +# endif /* Tacking on "\n\t#" to the section name makes gcc put it's bogus section attributes on what looks like a comment to the assembler. */ -# ifdef HAVE_SECTION_QUOTES -# define __sec_comment "\"\n\t#\"" -# else -# define __sec_comment "\n\t#" -# endif -# define link_warning(symbol, msg) \ +# ifdef HAVE_SECTION_QUOTES +# define __sec_comment "\"\n\t#\"" +# else +# define __sec_comment "\n\t#" +# endif +# define link_warning(symbol, msg) \ __make_section_unallocated (".gnu.warning." #symbol) \ static const char __evoke_link_warning_##symbol[] \ __attribute__ ((used, section (".gnu.warning." #symbol __sec_comment))) \ = msg; -# define libc_freeres_ptr(decl) \ +# define libc_freeres_ptr(decl) \ __make_section_unallocated ("__libc_freeres_ptrs, \"aw\", %nobits") \ decl __attribute__ ((section ("__libc_freeres_ptrs" __sec_comment))) -# define __libc_freeres_fn_section \ +# define __libc_freeres_fn_section \ __attribute__ ((section ("__libc_freeres_fn"))) -# else /* Not ELF: a.out */ -# ifdef HAVE_XCOFF +#else /* Not ELF: a.out */ +# ifdef HAVE_XCOFF /* XCOFF does not support .stabs. The native aix linker will remove the .stab and .stabstr sections The gnu linker will have a fatal error if there is a relocation for symbol in the .stab section. Silently disable this macro. */ -# define link_warning(symbol, msg) -# else -# define link_warning(symbol, msg) \ +# define link_warning(symbol, msg) +# else +# define link_warning(symbol, msg) \ asm (".stabs \"" msg "\",30,0,0,0\n\t" \ ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n"); -# endif /* XCOFF */ -# define libc_freeres_ptr(decl) decl -# define __libc_freeres_fn_section -# endif -#else -/* We will never be heard; they will all die horribly. */ -# define link_warning(symbol, msg) +# endif /* XCOFF */ # define libc_freeres_ptr(decl) decl # define __libc_freeres_fn_section #endif @@ -279,6 +271,7 @@ /* A canned warning for sysdeps/stub functions. */ #define stub_warning(name) \ + __make_section_unallocated (".gnu.glibc-stub." #name) \ link_warning (name, \ "warning: " #name " is not implemented and will always fail") @@ -324,92 +317,79 @@ for linking") */ -#ifdef HAVE_GNU_LD - /* Symbol set support macros. */ -# ifdef HAVE_ELF +#ifdef HAVE_ELF /* Make SYMBOL, which is in the text segment, an element of SET. */ -# define text_set_element(set, symbol) _elf_set_element(set, symbol) +# define text_set_element(set, symbol) _elf_set_element(set, symbol) /* Make SYMBOL, which is in the data segment, an element of SET. */ -# define data_set_element(set, symbol) _elf_set_element(set, symbol) +# define data_set_element(set, symbol) _elf_set_element(set, symbol) /* Make SYMBOL, which is in the bss segment, an element of SET. */ -# define bss_set_element(set, symbol) _elf_set_element(set, symbol) +# define bss_set_element(set, symbol) _elf_set_element(set, symbol) /* These are all done the same way in ELF. There is a new section created for each set. */ -# ifdef SHARED +# ifdef SHARED /* When building a shared library, make the set section writable, because it will need to be relocated at run time anyway. */ -# define _elf_set_element(set, symbol) \ +# define _elf_set_element(set, symbol) \ static const void *__elf_set_##set##_element_##symbol##__ \ __attribute__ ((used, section (#set))) = &(symbol) -# else -# define _elf_set_element(set, symbol) \ +# else +# define _elf_set_element(set, symbol) \ static const void *const __elf_set_##set##_element_##symbol##__ \ __attribute__ ((used, section (#set))) = &(symbol) -# endif +# endif /* Define SET as a symbol set. This may be required (it is in a.out) to be able to use the set's contents. */ -# define symbol_set_define(set) symbol_set_declare(set) +# define symbol_set_define(set) symbol_set_declare(set) /* Declare SET for use in this module, if defined in another module. In a shared library, this is always local to that shared object. For static linking, the set might be wholly absent and so we use weak references. */ -# define symbol_set_declare(set) \ +# define symbol_set_declare(set) \ extern char const __start_##set[] __symbol_set_attribute; \ extern char const __stop_##set[] __symbol_set_attribute; -# ifdef SHARED -# define __symbol_set_attribute attribute_hidden -# else -# define __symbol_set_attribute __attribute__ ((weak)) -# endif +# ifdef SHARED +# define __symbol_set_attribute attribute_hidden +# else +# define __symbol_set_attribute __attribute__ ((weak)) +# endif /* Return a pointer (void *const *) to the first element of SET. */ -# define symbol_set_first_element(set) ((void *const *) (&__start_##set)) +# define symbol_set_first_element(set) ((void *const *) (&__start_##set)) /* Return true iff PTR (a void *const *) has been incremented past the last element in SET. */ -# define symbol_set_end_p(set, ptr) ((ptr) >= (void *const *) &__stop_##set) +# define symbol_set_end_p(set, ptr) ((ptr) >= (void *const *) &__stop_##set) -# else /* Not ELF: a.out. */ +#else /* Not ELF: a.out. */ -# ifdef HAVE_XCOFF +# ifdef HAVE_XCOFF /* XCOFF does not support .stabs. The native aix linker will remove the .stab and .stabstr sections The gnu linker will have a fatal error if there is a relocation for symbol in the .stab section. Silently disable these macros. */ -# define text_set_element(set, symbol) -# define data_set_element(set, symbol) -# define bss_set_element(set, symbol) -# else -# define text_set_element(set, symbol) \ +# define text_set_element(set, symbol) +# define data_set_element(set, symbol) +# define bss_set_element(set, symbol) +# else +# define text_set_element(set, symbol) \ asm (".stabs \"" __SYMBOL_PREFIX #set "\",23,0,0," __SYMBOL_PREFIX #symbol) -# define data_set_element(set, symbol) \ +# define data_set_element(set, symbol) \ asm (".stabs \"" __SYMBOL_PREFIX #set "\",25,0,0," __SYMBOL_PREFIX #symbol) -# define bss_set_element(set, symbol) ?error Must use initialized data. -# endif /* XCOFF */ -# define symbol_set_define(set) void *const (set)[1]; -# define symbol_set_declare(set) extern void *const (set)[1]; - -# define symbol_set_first_element(set) &(set)[1] -# define symbol_set_end_p(set, ptr) (*(ptr) == 0) - -# endif /* ELF. */ -#else -/* We cannot do anything in generial. */ -# define text_set_element(set, symbol) asm ("") -# define data_set_element(set, symbol) asm ("") -# define bss_set_element(set, symbol) asm ("") -# define symbol_set_define(set) void *const (set)[1]; +# define bss_set_element(set, symbol) ?error Must use initialized data. +# endif /* XCOFF */ +# define symbol_set_define(set) void *const (set)[1]; # define symbol_set_declare(set) extern void *const (set)[1]; # define symbol_set_first_element(set) &(set)[1] # define symbol_set_end_p(set, ptr) (*(ptr) == 0) -#endif /* Have GNU ld. */ + +#endif /* ELF. */ #if DO_VERSIONING # define symbol_version(real, name, version) \ @@ -523,7 +503,7 @@ for linking") } libc_hidden_weak (foo) - Simularly for global data. If references to foo within libc.so should + Similarly for global data. If references to foo within libc.so should always go to foo defined in libc.so, then in include/foo.h you add: libc_hidden_proto (foo) @@ -538,7 +518,7 @@ for linking") int foo = INITIAL_FOO_VALUE; libc_hidden_data_weak (foo) - If foo is normally just an alias (strong or weak) of some other function, + If foo is normally just an alias (strong or weak) to some other function, you should use the normal strong_alias first, then add libc_hidden_def or libc_hidden_weak: @@ -582,78 +562,23 @@ for linking") # define hidden_proto(name, attrs...) \ __hidden_proto (name, __GI_##name, ##attrs) # define __hidden_proto(name, internal, attrs...) \ - extern __typeof (name) internal; \ extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \ __hidden_proto_hiddenattr (attrs); # define __hidden_asmname(name) \ __hidden_asmname1 (__USER_LABEL_PREFIX__, name) # define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name) # define __hidden_asmname2(prefix, name) #prefix name -# ifdef HAVE_ASM_SET_DIRECTIVE -# define __hidden_def1(original, alias) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \ - .set C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_def1(original, alias) ASM_LINE_SEP \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ - .set C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_def1(original, alias) -# endif -# else -# define __hidden_def1(original, alias) \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_def1(original, alias) ASM_LINE_SEP \ - ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_def1(original, alias) -# endif -# endif -# define __hidden_def2(...) #__VA_ARGS__ -# define __hidden_def3(...) __hidden_def2 (__VA_ARGS__) -# define hidden_def(name) \ - __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name) \ - __hidden_dot_def1 (__GI_##name, name))); -# define hidden_data_def(name) \ - __asm__ (__hidden_def3 (__hidden_def1 (__GI_##name, name))); -# define hidden_ver(local, name) \ - __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name) \ - __hidden_dot_def1 (local, __GI_##name))); -# define hidden_data_ver(local, name) \ - __asm__ (__hidden_def3 (__hidden_def1 (local, __GI_##name))); -# ifdef HAVE_WEAK_SYMBOLS -# ifdef HAVE_ASM_WEAKEXT_DIRECTIVE -# define __hidden_weak1(original, alias) \ - .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_weak1(original, alias) ASM_LINE_SEP \ - .weakext C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_weak1(original, alias) -# endif -# else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */ -# define __hidden_weak1(original, alias) \ - .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) -# ifdef HAVE_ASM_GLOBAL_DOT_NAME -# define __hidden_dot_weak1(original, alias) ASM_LINE_SEP \ - .weak C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ - C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original) -# else -# define __hidden_dot_weak1(original, alias) -# endif -# endif -# define hidden_weak(name) \ - __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name) \ - __hidden_dot_weak1 (__GI_##name, name))); -# define hidden_data_weak(name) \ - __asm__ (__hidden_def3 (__hidden_weak1 (__GI_##name, name))); -# else -# define hidden_weak(name) hidden_def (name) -# endif +# define __hidden_ver1(local, internal, name) \ + extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \ + extern __typeof (name) __EI_##name \ + __attribute__((alias (__hidden_asmname (#local)))) +# define hidden_ver(local, name) __hidden_ver1(local, __GI_##name, name); +# define hidden_data_ver(local, name) hidden_ver(local, name) +# define hidden_def(name) __hidden_ver1(__GI_##name, name, name); +# define hidden_data_def(name) hidden_def(name) +# define hidden_weak(name) \ + __hidden_ver1(__GI_##name, name, name) __attribute__((weak)); +# define hidden_data_weak(name) hidden_weak(name) # else /* For assembly, we need to do the opposite of what we do in C: in assembly gcc __REDIRECT stuff is not in place, so functions @@ -762,6 +687,24 @@ for linking") # define libresolv_hidden_data_ver(local, name) #endif +#if defined NOT_IN_libc && defined IS_IN_librt +# define librt_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) +# define librt_hidden_def(name) hidden_def (name) +# define librt_hidden_weak(name) hidden_weak (name) +# define librt_hidden_ver(local, name) hidden_ver (local, name) +# define librt_hidden_data_def(name) hidden_data_def (name) +# define librt_hidden_data_weak(name) hidden_data_weak (name) +# define librt_hidden_data_ver(local, name) hidden_data_ver (local, name) +#else +# define librt_hidden_proto(name, attrs...) +# define librt_hidden_def(name) +# define librt_hidden_weak(name) +# define librt_hidden_ver(local, name) +# define librt_hidden_data_def(name) +# define librt_hidden_data_weak(name) +# define librt_hidden_data_ver(local, name) +#endif + #if defined NOT_IN_libc && defined IS_IN_libdl # define libdl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) # define libdl_hidden_def(name) hidden_def (name) diff --git a/include/libintl.h b/include/libintl.h index 8f312f1042..8875c9444f 100644 --- a/include/libintl.h +++ b/include/libintl.h @@ -11,6 +11,7 @@ extern char *__dgettext (__const char *__domainname, extern char *__dcgettext (__const char *__domainname, __const char *__msgid, int __category) __attribute_format_arg__ (2); +libc_hidden_proto (__dcgettext) extern char *__dcgettext_internal (__const char *__domainname, __const char *__msgid, int __category) __attribute_format_arg__ (2) @@ -41,7 +42,7 @@ extern char *__bind_textdomain_codeset (__const char *__domainname, __const char *__codeset); extern const char _libc_intl_domainname[]; -extern const char _libc_intl_domainname_internal[] attribute_hidden; +libc_hidden_proto (_libc_intl_domainname) /* Define the macros `_' and `N_' for conveniently marking translatable strings in the libc source code. We have to make sure we get the @@ -52,12 +53,7 @@ extern const char _libc_intl_domainname_internal[] attribute_hidden; # undef _ /* This is defined as an optimizing macro, so use it. */ -# if !defined NOT_IN_libc && defined SHARED -# define _(msgid) \ - __dcgettext_internal (_libc_intl_domainname_internal, msgid, LC_MESSAGES) -# else -# define _(msgid) \ +# define _(msgid) \ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) -#endif #endif diff --git a/include/limits.h b/include/limits.h index 45cd6f2532..3e9a5df88a 100644 --- a/include/limits.h +++ b/include/limits.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1991, 92, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2005 + 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 @@ -122,20 +123,20 @@ #if defined __GNUC__ && !defined _GCC_LIMITS_H_ /* `_GCC_LIMITS_H_' is what GCC's file defines. */ # include_next <limits.h> +#endif /* The <limits.h> files in some gcc versions don't define LLONG_MIN, LLONG_MAX, and ULLONG_MAX. Instead only the values gcc defined for ages are available. */ -# ifdef __USE_ISOC99 -# ifndef LLONG_MIN -# define LLONG_MIN LONG_LONG_MIN -# endif -# ifndef LLONG_MAX -# define LLONG_MAX LONG_LONG_MAX -# endif -# ifndef ULLONG_MAX -# define ULLONG_MAX ULONG_LONG_MAX -# endif +#if defined __USE_ISOC99 && defined __GNUC__ +# ifndef LLONG_MIN +# define LLONG_MIN (-LLONG_MAX-1) +# endif +# ifndef LLONG_MAX +# define LLONG_MAX __LONG_LONG_MAX__ +# endif +# ifndef ULLONG_MAX +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1) # endif #endif diff --git a/include/link.h b/include/link.h index 3078b72a87..9311256aff 100644 --- a/include/link.h +++ b/include/link.h @@ -1,6 +1,6 @@ /* Data structure for communication from the run-time dynamic linker for loaded ELF shared objects. - Copyright (C) 1995-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1995-2006, 2007 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 @@ -18,65 +18,32 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef _LINK_H -#define _LINK_H 1 +#ifndef _PRIVATE_LINK_H +#define _PRIVATE_LINK_H 1 -#include <elf.h> -#include <dlfcn.h> -#include <stddef.h> -#include <sys/types.h> - -/* We use this macro to refer to ELF types independent of the native wordsize. - `ElfW(TYPE)' is used in place of `Elf32_TYPE' or `Elf64_TYPE'. */ -#define ElfW(type) _ElfW (Elf, __ELF_NATIVE_CLASS, type) -#define _ElfW(e,w,t) _ElfW_1 (e, w, _##t) -#define _ElfW_1(e,w,t) e##w##t - -#include <bits/elfclass.h> /* Defines __ELF_NATIVE_CLASS. */ -#include <bits/link.h> -#include <dl-lookupcfg.h> -#include <tls.h> /* Defines USE_TLS. */ - -/* Rendezvous structure used by the run-time dynamic linker to communicate - details of shared object loading to the debugger. If the executable's - dynamic section has a DT_DEBUG element, the run-time linker sets that - element's value to the address where this structure can be found. */ - -struct r_debug - { - int r_version; /* Version number for this protocol. */ +#ifdef _LINK_H +# error this should be impossible +#endif - struct link_map *r_map; /* Head of the chain of loaded objects. */ +/* Get most of the contents from the public header, but we define a + different `struct link_map' type for private use. The la_objopen + prototype uses the type, so we have to declare it separately. */ +#define link_map link_map_public +#define la_objopen la_objopen_wrongproto +#include <elf/link.h> +#undef link_map +#undef la_objopen - /* This is the address of a function internal to the run-time linker, - that will always be called when the linker begins to map in a - library or unmap it, and again when the mapping change is complete. - The debugger can set a breakpoint at this address if it wants to - notice shared object mapping changes. */ - ElfW(Addr) r_brk; - enum - { - /* This state value describes the mapping change taking place when - the `r_brk' address is called. */ - RT_CONSISTENT, /* Mapping change is complete. */ - RT_ADD, /* Beginning to add a new object. */ - RT_DELETE /* Beginning to remove an object mapping. */ - } r_state; - - ElfW(Addr) r_ldbase; /* Base address the linker is loaded at. */ - }; +struct link_map; +extern unsigned int la_objopen (struct link_map *__map, Lmid_t __lmid, + uintptr_t *__cookie); -/* This is the instance of that structure used by the dynamic linker. */ -extern struct r_debug _r_debug; -/* This symbol refers to the "dynamic structure" in the `.dynamic' section - of whatever module refers to `_DYNAMIC'. So, to find its own - `struct r_debug', a program could do: - for (dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn) - if (dyn->d_tag == DT_DEBUG) - r_debug = (struct r_debug *) dyn->d_un.d_ptr; - */ -extern ElfW(Dyn) _DYNAMIC[]; +#include <stddef.h> +#include <bits/linkmap.h> +#include <dl-lookupcfg.h> +#include <tls.h> +#include <bits/libc-lock.h> /* Some internal data structures of the dynamic linker used in the @@ -158,7 +125,7 @@ struct link_map const ElfW(Phdr) *l_phdr; /* Pointer to program header table in core. */ ElfW(Addr) l_entry; /* Entry point location. */ ElfW(Half) l_phnum; /* Number of program header entries. */ - ElfW(Half) l_ldnum; /* Number of dynamic segment entries. */ + ElfW(Half) l_ldnum; /* Number of dynamic segment entries. */ /* Array of DT_NEEDED dependencies and their dependencies, in dependency order for symbol lookup (with and without @@ -175,9 +142,20 @@ struct link_map /* Symbol hash table. */ Elf_Symndx l_nbuckets; - const Elf_Symndx *l_buckets, *l_chain; + Elf32_Word l_gnu_bitmask_idxbits; + Elf32_Word l_gnu_shift; + const ElfW(Addr) *l_gnu_bitmask; + union + { + const Elf32_Word *l_gnu_buckets; + const Elf_Symndx *l_chain; + }; + union + { + const Elf32_Word *l_gnu_chain_zero; + const Elf_Symndx *l_buckets; + }; - unsigned int l_opencount; /* Counter for direct and indirect usage. */ unsigned int l_direct_opencount; /* Reference count for dlopen/dlclose. */ enum /* Where this object came from. */ { @@ -199,6 +177,15 @@ struct link_map should be called on this link map when relocation finishes. */ unsigned int l_used:1; /* Nonzero if the DSO is used. */ + unsigned int l_auditing:1; /* Nonzero if the DSO is used in auditing. */ + unsigned int l_audit_any_plt:1; /* Nonzero if at least one audit module + is interested in the PLT interception.*/ + unsigned int l_removed:1; /* Nozero if the object cannot be used anymore + since it is removed. */ + unsigned int l_contiguous:1; /* Nonzero if inter-segment holes are + mprotected or if no holes are present at + all. */ + /* Array with version names. */ unsigned int l_nversions; struct r_found_version *l_versions; @@ -207,7 +194,14 @@ struct link_map struct r_search_path_struct l_rpath_dirs; /* Collected results of relocation while profiling. */ - ElfW(Addr) *l_reloc_result; + struct reloc_result + { + DL_FIXUP_VALUE_TYPE addr; + struct link_map *bound; + unsigned int boundndx; + uint32_t enterexit; + unsigned int flags; + } *l_reloc_result; /* Pointer to the version information if available. */ ElfW(Versym) *l_versyms; @@ -226,7 +220,7 @@ struct link_map /* Size of array allocated for 'l_scope'. */ size_t l_scope_max; /* This is an array defining the lookup scope for this link map. - There are at most three different scope lists. */ + There are initially at most three different scope lists. */ struct r_scope_elem **l_scope; /* A similar array, this time only with the local scope. This is @@ -255,7 +249,7 @@ struct link_map ElfW(Word) l_flags; /* Temporarily used in `dl_close'. */ - unsigned int l_idx; + int l_idx; struct link_map_machine l_mach; @@ -263,11 +257,7 @@ struct link_map { const ElfW(Sym) *sym; int type_class; -#ifdef DL_LOOKUP_RETURNS_MAP struct link_map *value; -#else - ElfW(Addr) value; -#endif const ElfW(Sym) *ret; } l_lookup_cache; @@ -297,24 +287,27 @@ struct link_map done. */ ElfW(Addr) l_relro_addr; size_t l_relro_size; + + /* Audit information. This array apparent must be the last in the + structure. Never add something after it. */ + struct auditstate + { + uintptr_t cookie; + unsigned int bindflags; + } l_audit[0]; }; -struct dl_phdr_info - { - ElfW(Addr) dlpi_addr; - const char *dlpi_name; - const ElfW(Phdr) *dlpi_phdr; - ElfW(Half) dlpi_phnum; - unsigned long long int dlpi_adds; - unsigned long long int dlpi_subs; - }; +#if __ELF_NATIVE_CLASS == 32 +# define symbind symbind32 +#elif __ELF_NATIVE_CLASS == 64 +# define symbind symbind64 +#else +# error "__ELF_NATIVE_CLASS must be defined" +#endif -extern int dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, - size_t size, void *data), - void *data); extern int __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, size_t size, void *data), void *data); -#endif /* link.h */ +#endif /* include/link.h */ diff --git a/include/locale.h b/include/locale.h index 22770b9ad2..5226001929 100644 --- a/include/locale.h +++ b/include/locale.h @@ -11,7 +11,8 @@ libc_hidden_proto (setlocale) extern struct loaded_l10nfile *_nl_locale_file_list[] attribute_hidden; /* Locale object for C locale. */ -extern struct __locale_struct _nl_C_locobj attribute_hidden; +extern const struct __locale_struct _nl_C_locobj attribute_hidden; +#define _nl_C_locobj_ptr ((struct __locale_struct *) &_nl_C_locobj) /* Now define the internal interfaces. */ extern struct lconv *__localeconv (void); diff --git a/include/malloc.h b/include/malloc.h index f0164a6273..1a20248559 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -12,7 +12,6 @@ extern int __malloc_initialized attribute_hidden; struct malloc_state; typedef struct malloc_state *mstate; -extern mstate _int_new_arena (size_t __ini_size) attribute_hidden; extern __malloc_ptr_t _int_malloc (mstate __m, size_t __size) attribute_hidden; extern void _int_free (mstate __m, __malloc_ptr_t __ptr) attribute_hidden; diff --git a/include/netinet/in.h b/include/netinet/in.h index 2018ed21c3..876f1a4369 100644 --- a/include/netinet/in.h +++ b/include/netinet/in.h @@ -5,6 +5,5 @@ libc_hidden_proto (bindresvport) libc_hidden_proto (in6addr_loopback) libc_hidden_proto (in6addr_any) -libc_hidden_proto (inet6_option_alloc) #endif diff --git a/include/regex.h b/include/regex.h index 81789be897..a7606c5e0d 100644 --- a/include/regex.h +++ b/include/regex.h @@ -2,45 +2,42 @@ #include <posix/regex.h> /* Document internal interfaces. */ -extern reg_syntax_t __re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); +extern reg_syntax_t __re_set_syntax (reg_syntax_t syntax); -extern const char *__re_compile_pattern - _RE_ARGS ((const char *pattern, size_t length, - struct re_pattern_buffer *buffer)); +extern const char *__re_compile_pattern (const char *pattern, size_t length, + struct re_pattern_buffer *buffer); -extern int __re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); +extern int __re_compile_fastmap (struct re_pattern_buffer *buffer); -extern int __re_search - _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, - int length, int start, int range, struct re_registers *regs)); +extern int __re_search (struct re_pattern_buffer *buffer, const char *string, + int length, int start, int range, + struct re_registers *regs); extern int __re_search_2 - _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, - int length1, const char *string2, int length2, - int start, int range, struct re_registers *regs, int stop)); + (struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, int range, struct re_registers *regs, int stop); extern int __re_match - _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, - int length, int start, struct re_registers *regs)); + (struct re_pattern_buffer *buffer, const char *string, + int length, int start, struct re_registers *regs); extern int __re_match_2 - _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, - int length1, const char *string2, int length2, - int start, struct re_registers *regs, int stop)); + (struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, struct re_registers *regs, int stop); extern void __re_set_registers - _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, - unsigned num_regs, regoff_t *starts, regoff_t *ends)); + (struct re_pattern_buffer *buffer, struct re_registers *regs, + unsigned num_regs, regoff_t *starts, regoff_t *ends); -extern int __regcomp _RE_ARGS ((regex_t *__preg, const char *__pattern, - int __cflags)); +extern int __regcomp (regex_t *__preg, const char *__pattern, int __cflags); -extern int __regexec _RE_ARGS ((const regex_t *__preg, - const char *__string, size_t __nmatch, - regmatch_t __pmatch[], int __eflags)); +extern int __regexec (const regex_t *__preg, const char *__string, + size_t __nmatch, regmatch_t __pmatch[], int __eflags); -extern size_t __regerror _RE_ARGS ((int __errcode, const regex_t *__preg, - char *__errbuf, size_t __errbuf_size)); +extern size_t __regerror (int __errcode, const regex_t *__preg, + char *__errbuf, size_t __errbuf_size); -extern void __regfree _RE_ARGS ((regex_t *__preg)); +extern void __regfree (regex_t *__preg); #endif diff --git a/include/resolv.h b/include/resolv.h index 9c24bd3bc7..189e4fb58b 100644 --- a/include/resolv.h +++ b/include/resolv.h @@ -8,6 +8,7 @@ } \ while (0) +#include <stdbool.h> #include <resolv/resolv.h> #ifdef _RESOLV_H_ @@ -46,9 +47,11 @@ extern void res_send_setqhook (res_send_qhook __hook); extern void res_send_setrhook (res_send_rhook __hook); extern int res_ourserver_p (const res_state __statp, const struct sockaddr_in6 *__inp); +extern void __res_iclose (res_state statp, bool free_addr); libc_hidden_proto (__res_ninit) libc_hidden_proto (__res_maybe_init) libc_hidden_proto (__res_nclose) +libc_hidden_proto (__res_iclose) libc_hidden_proto (__res_randomid) libc_hidden_proto (__res_state) diff --git a/include/rpc/auth.h b/include/rpc/auth.h index a5e290b898..bc433b5930 100644 --- a/include/rpc/auth.h +++ b/include/rpc/auth.h @@ -22,8 +22,10 @@ DECLARE_NSS_PROTOTYPES (nisplus) #undef DECLARE_NSS_PROTOTYPES -extern bool_t xdr_des_block_internal (XDR *__xdrs, des_block *__blkp); -extern bool_t xdr_opaque_auth_internal (XDR *, struct opaque_auth *); +extern bool_t xdr_des_block_internal (XDR *__xdrs, des_block *__blkp) + attribute_hidden; +extern bool_t xdr_opaque_auth_internal (XDR *, struct opaque_auth *) + attribute_hidden; extern AUTH *authunix_create_internal (char *__machname, __uid_t __uid, __gid_t __gid, int __len, diff --git a/include/rpc/key_prot.h b/include/rpc/key_prot.h index ee30c65d3b..2da5de7f70 100644 --- a/include/rpc/key_prot.h +++ b/include/rpc/key_prot.h @@ -1,11 +1,15 @@ #include <sunrpc/rpc/key_prot.h> -extern bool_t xdr_cryptkeyres_internal (XDR *xdrs, cryptkeyres *objp); -extern bool_t xdr_keystatus_internal (XDR *, keystatus*); -extern bool_t xdr_keybuf_internal (XDR *, keybuf); -extern bool_t xdr_cryptkeyarg_internal (XDR *, cryptkeyarg*); -extern bool_t xdr_cryptkeyarg2_internal (XDR *, cryptkeyarg2*); -extern bool_t xdr_key_netstres_internal (XDR *, key_netstres*); -extern bool_t xdr_key_netstarg_internal (XDR *, key_netstarg*); -extern bool_t xdr_netnamestr_internal (XDR *, netnamestr*); -extern bool_t xdr_unixcred_internal (XDR *, unixcred*); +extern bool_t xdr_cryptkeyres_internal (XDR *xdrs, cryptkeyres *objp) + attribute_hidden; +extern bool_t xdr_keystatus_internal (XDR *, keystatus*) attribute_hidden; +extern bool_t xdr_keybuf_internal (XDR *, keybuf) attribute_hidden; +extern bool_t xdr_cryptkeyarg_internal (XDR *, cryptkeyarg*) attribute_hidden; +extern bool_t xdr_cryptkeyarg2_internal (XDR *, cryptkeyarg2*) + attribute_hidden; +extern bool_t xdr_key_netstres_internal (XDR *, key_netstres*) + attribute_hidden; +extern bool_t xdr_key_netstarg_internal (XDR *, key_netstarg*) + attribute_hidden; +extern bool_t xdr_netnamestr_internal (XDR *, netnamestr*) attribute_hidden; +extern bool_t xdr_unixcred_internal (XDR *, unixcred*) attribute_hidden; diff --git a/include/rpc/pmap_clnt.h b/include/rpc/pmap_clnt.h index 2d02ff2096..9a22082287 100644 --- a/include/rpc/pmap_clnt.h +++ b/include/rpc/pmap_clnt.h @@ -5,4 +5,8 @@ libc_hidden_proto (pmap_getport) libc_hidden_proto (pmap_set) libc_hidden_proto (pmap_unset) +/* Defined in pm_getport.c. */ +extern int __get_socket (struct sockaddr_in *saddr) + attribute_hidden internal_function; + #endif diff --git a/include/rpc/pmap_prot.h b/include/rpc/pmap_prot.h index e50d5e0c79..902faba019 100644 --- a/include/rpc/pmap_prot.h +++ b/include/rpc/pmap_prot.h @@ -1,5 +1,7 @@ #include <sunrpc/rpc/pmap_prot.h> -extern bool_t xdr_pmap_internal (XDR *__xdrs, struct pmap *__regs); -extern bool_t xdr_pmaplist_internal (XDR *__xdrs, struct pmaplist **__rp); +extern bool_t xdr_pmap_internal (XDR *__xdrs, struct pmap *__regs) + attribute_hidden; +extern bool_t xdr_pmaplist_internal (XDR *__xdrs, struct pmaplist **__rp) + attribute_hidden; diff --git a/include/rpc/pmap_rmt.h b/include/rpc/pmap_rmt.h index f8e586c27e..63e41cab28 100644 --- a/include/rpc/pmap_rmt.h +++ b/include/rpc/pmap_rmt.h @@ -1,5 +1,7 @@ #include <sunrpc/rpc/pmap_rmt.h> extern bool_t xdr_rmtcall_args_internal (XDR *__xdrs, - struct rmtcallargs *__crp); -extern bool_t xdr_rmtcallres_internal (XDR *__xdrs, struct rmtcallres *__crp); + struct rmtcallargs *__crp) + attribute_hidden; +extern bool_t xdr_rmtcallres_internal (XDR *__xdrs, struct rmtcallres *__crp) + attribute_hidden; diff --git a/include/rpc/xdr.h b/include/rpc/xdr.h index ab43f83dcb..e10d53e3b1 100644 --- a/include/rpc/xdr.h +++ b/include/rpc/xdr.h @@ -1,36 +1,54 @@ #include <sunrpc/rpc/xdr.h> -extern bool_t xdr_void_internal (void); -extern bool_t xdr_bool_internal (XDR *__xdrs, bool_t *__bp); -extern bool_t xdr_u_hyper_internal (XDR *__xdrs, u_quad_t *__ullp); -extern bool_t xdr_u_long_internal (XDR *__xdrs, u_long *__ulp); -extern bool_t xdr_u_int_internal (XDR *__xdrs, u_int *__up); -extern bool_t xdr_u_short_internal (XDR *__xdrs, u_short *__usp); -extern bool_t xdr_hyper_internal (XDR *__xdrs, quad_t *__ullp); -extern bool_t xdr_long_internal (XDR *__xdrs, long *__ulp); -extern bool_t xdr_int_internal (XDR *__xdrs, int *__up); -extern bool_t xdr_short_internal (XDR *__xdrs, short *__usp); -extern bool_t xdr_enum_internal (XDR *__xdrs, enum_t *__ep); +extern bool_t xdr_void_internal (void) attribute_hidden; +extern bool_t xdr_bool_internal (XDR *__xdrs, bool_t *__bp) attribute_hidden; +extern bool_t xdr_u_hyper_internal (XDR *__xdrs, u_quad_t *__ullp) + attribute_hidden; +extern bool_t xdr_u_long_internal (XDR *__xdrs, u_long *__ulp) + attribute_hidden; +extern bool_t xdr_u_int_internal (XDR *__xdrs, u_int *__up) + attribute_hidden; +extern bool_t xdr_u_short_internal (XDR *__xdrs, u_short *__usp) + attribute_hidden; +extern bool_t xdr_hyper_internal (XDR *__xdrs, quad_t *__ullp) + attribute_hidden; +extern bool_t xdr_long_internal (XDR *__xdrs, long *__ulp) + attribute_hidden; +extern bool_t xdr_int_internal (XDR *__xdrs, int *__up) + attribute_hidden; +extern bool_t xdr_short_internal (XDR *__xdrs, short *__usp) + attribute_hidden; +extern bool_t xdr_enum_internal (XDR *__xdrs, enum_t *__ep) + attribute_hidden; extern bool_t xdr_union_internal (XDR *__xdrs, enum_t *__dscmp, char *__unp, const struct xdr_discrim *choices, - xdrproc_t dfault); + xdrproc_t dfault) attribute_hidden; extern bool_t xdr_string_internal (XDR *__xdrs, char **__cpp, u_int __maxsize); extern bool_t xdr_array_internal (XDR * _xdrs, caddr_t *__addrp, u_int *__sizep, u_int __maxsize, - u_int __elsize, xdrproc_t __elproc); + u_int __elsize, xdrproc_t __elproc) + attribute_hidden; extern bool_t xdr_reference_internal (XDR *__xdrs, caddr_t *__xpp, - u_int __size, xdrproc_t __proc); + u_int __size, xdrproc_t __proc) + attribute_hidden; extern bool_t xdr_bytes_internal (XDR *xdrs, char **cpp, u_int *sizep, - u_int maxsize); -extern bool_t xdr_netobj_internal (XDR *__xdrs, struct netobj *__np); -extern bool_t xdr_opaque_internal (XDR *__xdrs, caddr_t __cp, u_int __cnt); + u_int maxsize) attribute_hidden; +extern bool_t xdr_netobj_internal (XDR *__xdrs, struct netobj *__np) + attribute_hidden; +extern bool_t xdr_opaque_internal (XDR *__xdrs, caddr_t __cp, u_int __cnt) + attribute_hidden; extern void xdrrec_create_internal (XDR *__xdrs, u_int __sendsize, u_int __recvsize, caddr_t __tcp_handle, int (*__readit) (char *, char *, int), - int (*__writeit) (char *, char *, int)); -extern void xdrmem_create_internal (XDR *, const caddr_t, u_int, enum xdr_op); -extern bool_t xdrrec_endofrecord_internal (XDR *__xdrs, bool_t __sendnow); -extern bool_t xdrrec_skiprecord_internal (XDR *__xdrs); -extern bool_t xdrrec_eof_internal (XDR *__xdrs); + int (*__writeit) (char *, char *, int)) + attribute_hidden; +extern void xdrmem_create_internal (XDR *, const caddr_t, u_int, enum xdr_op) + attribute_hidden; +extern bool_t xdrrec_endofrecord_internal (XDR *__xdrs, bool_t __sendnow) + attribute_hidden; +extern bool_t xdrrec_skiprecord_internal (XDR *__xdrs) + attribute_hidden; +extern bool_t xdrrec_eof_internal (XDR *__xdrs) + attribute_hidden; libc_hidden_proto (xdrstdio_create) diff --git a/include/rpcsvc/nis_callback.h b/include/rpcsvc/nis_callback.h new file mode 100644 index 0000000000..dfa9cd3ef7 --- /dev/null +++ b/include/rpcsvc/nis_callback.h @@ -0,0 +1,7 @@ +#ifndef _RPCSVC_NIS_CALLBACK_H +#include <nis/rpcsvc/nis_callback.h> + +libnsl_hidden_proto (xdr_obj_p) +libnsl_hidden_proto (xdr_cback_data) + +#endif diff --git a/include/rpcsvc/nislib.h b/include/rpcsvc/nislib.h index 9c2be0e811..635c513e4d 100644 --- a/include/rpcsvc/nislib.h +++ b/include/rpcsvc/nislib.h @@ -42,4 +42,6 @@ libnsl_hidden_proto (__nis_default_group) libnsl_hidden_proto (__nis_default_access) libnsl_hidden_proto (nis_clone_object) +extern const_nis_name __nis_domain_of (const_nis_name) __THROW; + #endif diff --git a/include/rpcsvc/yp.h b/include/rpcsvc/yp.h index cc4e00fd0b..04a973eae7 100644 --- a/include/rpcsvc/yp.h +++ b/include/rpcsvc/yp.h @@ -14,5 +14,13 @@ libnsl_hidden_proto (xdr_ypresp_all) libnsl_hidden_proto (xdr_yppush_status) libnsl_hidden_proto (xdr_ypbind_resptype) libnsl_hidden_proto (xdr_ypbind_binding) +libnsl_hidden_proto (xdr_ypreq_nokey) +libnsl_hidden_proto (xdr_ypmaplist) +libnsl_hidden_proto (xdr_ypreq_key) +libnsl_hidden_proto (xdr_ypresp_val) +libnsl_hidden_proto (xdr_ypresp_maplist) +libnsl_hidden_proto (xdr_ypresp_order) +libnsl_hidden_proto (xdr_ypbind_resp) +libnsl_hidden_proto (xdr_ypresp_master) #endif diff --git a/include/rpcsvc/ypupd.h b/include/rpcsvc/ypupd.h index 68116e629f..7601971512 100644 --- a/include/rpcsvc/ypupd.h +++ b/include/rpcsvc/ypupd.h @@ -2,5 +2,7 @@ #include <nis/rpcsvc/ypupd.h> libnsl_hidden_proto (xdr_yp_buf) +libnsl_hidden_proto (xdr_ypdelete_args) +libnsl_hidden_proto (xdr_ypupdate_args) #endif diff --git a/include/sched.h b/include/sched.h index 4a142c69af..7b057ea833 100644 --- a/include/sched.h +++ b/include/sched.h @@ -10,6 +10,7 @@ extern int __sched_setscheduler (__pid_t __pid, int __policy, libc_hidden_proto (__sched_setscheduler) extern int __sched_getscheduler (__pid_t __pid); extern int __sched_yield (void); +libc_hidden_proto (__sched_yield) extern int __sched_get_priority_max (int __algorithm); extern int __sched_get_priority_min (int __algorithm); extern int __sched_rr_get_interval (__pid_t __pid, struct timespec *__t); diff --git a/include/signal.h b/include/signal.h index 104ea8f83a..6bbfbcf808 100644 --- a/include/signal.h +++ b/include/signal.h @@ -26,6 +26,9 @@ extern int __sigprocmask (int __how, __const sigset_t *__set, sigset_t *__oset); extern int __sigsuspend (__const sigset_t *__set); libc_hidden_proto (__sigsuspend) +#ifndef NO_CANCELLATION +extern int __sigsuspend_nocancel (__const sigset_t *__set) attribute_hidden; +#endif extern int __sigwait (__const sigset_t *__set, int *__sig); libc_hidden_proto (__sigwait) extern int __sigwaitinfo (__const sigset_t *__set, siginfo_t *__info); @@ -48,6 +51,9 @@ extern int __sigpause (int sig_or_mask, int is_sig); extern int __default_sigpause (int mask); extern int __xpg_sigpause (int sig); +/* Simplified sigemptyset() implementation without the parameter checking. */ +#undef __sigemptyset +#define __sigemptyset(ss) (__builtin_memset (ss, '\0', sizeof (sigset_t)), 0) /* Allocate real-time signal with highest/lowest available priority. */ diff --git a/include/stdio.h b/include/stdio.h index 0c1e8fca10..e040380d79 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -38,6 +38,8 @@ extern int __printf_chk (int, const char *, ...); extern int __fprintf_chk (FILE *, int, const char *, ...); extern int __vprintf_chk (int, const char *, _G_va_list); extern int __vfprintf_chk (FILE *, int, const char *, _G_va_list); +extern char *__fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp); +extern char *__fgets_chk (char *buf, size_t size, int n, FILE *fp); /* Prototypes for compatibility functions. */ extern FILE *__new_tmpfile (void); @@ -77,6 +79,8 @@ extern int __ftrylockfile (FILE *__stream); extern int __getc_unlocked (FILE *__fp); extern wint_t __getwc_unlocked (FILE *__fp); +extern int __fxprintf (FILE *__fp, const char *__fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); extern __const char *__const _sys_errlist_internal[] attribute_hidden; extern int _sys_nerr_internal attribute_hidden; @@ -124,6 +128,7 @@ libc_hidden_proto (open_memstream) libc_hidden_proto (__libc_fatal) libc_hidden_proto (__vsprintf_chk) libc_hidden_proto (__vsnprintf_chk) +libc_hidden_proto (__vfprintf_chk) # if !defined NOT_IN_libc && defined SHARED && defined DO_VERSIONING \ && defined HAVE_VISIBILITY_ATTRIBUTE && !defined HAVE_BROKEN_ALIAS_ATTRIBUTE\ diff --git a/include/stdlib.h b/include/stdlib.h index 7723bf6856..27111b8a85 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -10,6 +10,8 @@ /* Now define the internal interfaces. */ #ifndef __Need_M_And_C +__BEGIN_DECLS + extern __typeof (strtol_l) __strtol_l; extern __typeof (strtoul_l) __strtoul_l; extern __typeof (strtoll_l) __strtoll_l; @@ -23,10 +25,6 @@ libc_hidden_proto (abort) libc_hidden_proto (getenv) libc_hidden_proto (bsearch) libc_hidden_proto (qsort) -libc_hidden_proto (ecvt_r) -libc_hidden_proto (fcvt_r) -libc_hidden_proto (qecvt_r) -libc_hidden_proto (qfcvt_r) libc_hidden_proto (lrand48_r) libc_hidden_proto (wctomb) libc_hidden_proto (__secure_getenv) @@ -95,8 +93,8 @@ extern int __cxa_atexit_internal (void (*func) (void *), void *arg, void *d) extern void __cxa_finalize (void *d); -extern int __posix_memalign (void **memptr, size_t alignment, size_t size) - __attribute_malloc__; +extern int __posix_memalign (void **memptr, size_t alignment, size_t size); + extern void *__libc_memalign (size_t alignment, size_t size) __attribute_malloc__; @@ -142,48 +140,70 @@ libc_hidden_proto (____strtoul_l_internal) libc_hidden_proto (____strtoull_l_internal) extern __inline double -__strtod_l (__const char *__restrict __nptr, char **__restrict __endptr, - __locale_t __loc) +__NTH (__strtod_l (__const char *__restrict __nptr, char **__restrict __endptr, + __locale_t __loc)) { return ____strtod_l_internal (__nptr, __endptr, 0, __loc); } extern __inline long int -__strtol_l (__const char *__restrict __nptr, char **__restrict __endptr, - int __base, __locale_t __loc) +__NTH (__strtol_l (__const char *__restrict __nptr, char **__restrict __endptr, + int __base, __locale_t __loc)) { return ____strtol_l_internal (__nptr, __endptr, __base, 0, __loc); } extern __inline unsigned long int -__strtoul_l (__const char *__restrict __nptr, char **__restrict __endptr, - int __base, __locale_t __loc) +__NTH (__strtoul_l (__const char *__restrict __nptr, + char **__restrict __endptr, int __base, __locale_t __loc)) { return ____strtoul_l_internal (__nptr, __endptr, __base, 0, __loc); } extern __inline float -__strtof_l (__const char *__restrict __nptr, char **__restrict __endptr, - __locale_t __loc) +__NTH (__strtof_l (__const char *__restrict __nptr, char **__restrict __endptr, + __locale_t __loc)) { return ____strtof_l_internal (__nptr, __endptr, 0, __loc); } extern __inline long double -__strtold_l (__const char *__restrict __nptr, char **__restrict __endptr, - __locale_t __loc) +__NTH (__strtold_l (__const char *__restrict __nptr, + char **__restrict __endptr, __locale_t __loc)) { return ____strtold_l_internal (__nptr, __endptr, 0, __loc); } __extension__ extern __inline long long int -__strtoll_l (__const char *__restrict __nptr, char **__restrict __endptr, - int __base, __locale_t __loc) +__NTH (__strtoll_l (__const char *__restrict __nptr, + char **__restrict __endptr, int __base, __locale_t __loc)) { return ____strtoll_l_internal (__nptr, __endptr, __base, 0, __loc); } __extension__ extern __inline unsigned long long int -__strtoull_l (__const char * __restrict __nptr, char **__restrict __endptr, - int __base, __locale_t __loc) +__NTH (__strtoull_l (__const char * __restrict __nptr, + char **__restrict __endptr, int __base, __locale_t __loc)) { return ____strtoull_l_internal (__nptr, __endptr, __base, 0, __loc); } +extern char *__ecvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign); +extern char *__fcvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign); +extern char *__gcvt (double __value, int __ndigit, char *__buf); +extern int __ecvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len); +extern int __fcvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len); +extern char *__qecvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign); +extern char *__qfcvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign); +extern char *__qgcvt (long double __value, int __ndigit, char *__buf); +extern int __qecvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len); +extern int __qfcvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len); # ifndef NOT_IN_libc # undef MB_CUR_MAX @@ -194,9 +214,11 @@ __strtoull_l (__const char * __restrict __nptr, char **__restrict __endptr, #endif -extern void * __default_morecore (ptrdiff_t); +extern void *__default_morecore (ptrdiff_t) __THROW; libc_hidden_proto (__default_morecore) +__END_DECLS + #undef __Need_M_And_C #endif /* include/stdlib.h */ diff --git a/include/string.h b/include/string.h index 738dd8e27c..c196007dcb 100644 --- a/include/string.h +++ b/include/string.h @@ -83,6 +83,7 @@ libc_hidden_proto (__strxfrm_l) libc_hidden_proto (__strtok_r) extern char *__strsep_g (char **__stringp, __const char *__delim); libc_hidden_proto (__strsep_g) +libc_hidden_proto (strnlen) libc_hidden_builtin_proto (memchr) libc_hidden_builtin_proto (memcpy) diff --git a/include/stub-tag.h b/include/stub-tag.h index 3004d6f429..d4d10c8341 100644 --- a/include/stub-tag.h +++ b/include/stub-tag.h @@ -1,5 +1,4 @@ /* This header is included into every file that declares a stub function. - * The build process looks for this header in .d files to decide whether - * or not it needs to scan the corresponding .c file for entries to add to - * <gnu/stubs.h>. - */ + It is obsolete now, but hasn't died to avoid removing all those + #include's. Every such file should use the `stub_warning' macro for + each of its functions, and that is sufficient. */ diff --git a/include/stubs-biarch.h b/include/stubs-biarch.h new file mode 100644 index 0000000000..fc086bd894 --- /dev/null +++ b/include/stubs-biarch.h @@ -0,0 +1,12 @@ +/* This file selects the right generated file of `__stub_FUNCTION' macros + based on the architecture being compiled for. */ + +#include <bits/wordsize.h> + +#if __WORDSIZE == 32 +# include <gnu/stubs-32.h> +#elif __WORDSIZE == 64 +# include <gnu/stubs-64.h> +#else +# error "unexpected value for __WORDSIZE macro" +#endif diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h index 8ba980477d..cd0750b452 100644 --- a/include/sys/cdefs.h +++ b/include/sys/cdefs.h @@ -2,6 +2,12 @@ #include <misc/sys/cdefs.h> +/* The compiler will optimize based on the knowledge the parameter is + not NULL. This will omit tests. A robust implementation cannot allow + this so when compiling glibc itself we ignore this attribute. */ +#undef __nonnull +#define __nonnull(params) + extern void __chk_fail (void) __attribute__ ((__noreturn__)); libc_hidden_proto (__chk_fail) rtld_hidden_proto (__chk_fail) diff --git a/include/sys/mman.h b/include/sys/mman.h index 14e757892e..a4687b30f7 100644 --- a/include/sys/mman.h +++ b/include/sys/mman.h @@ -11,5 +11,8 @@ extern int __mprotect (void *__addr, size_t __len, int __prot); /* This one is Linux specific. */ extern void *__mremap (void *__addr, size_t __old_len, - size_t __new_len, int __may_move); + size_t __new_len, int __flags, ...); + +libc_hidden_proto (madvise); + #endif diff --git a/include/sys/msg.h b/include/sys/msg.h index 02bb9aefd0..03e17f915e 100644 --- a/include/sys/msg.h +++ b/include/sys/msg.h @@ -1,8 +1,8 @@ #ifndef _SYS_MSG_H #include <sysvipc/sys/msg.h> -extern int __libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, - int msgflg); +extern ssize_t __libc_msgrcv (int msqid, void *msgp, size_t msgsz, + long int msgtyp, int msgflg); extern int __libc_msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg); diff --git a/include/sys/sendfile.h b/include/sys/sendfile.h new file mode 100644 index 0000000000..abe09769cc --- /dev/null +++ b/include/sys/sendfile.h @@ -0,0 +1 @@ +#include <io/sys/sendfile.h> diff --git a/include/sys/socket.h b/include/sys/socket.h index 937909a125..0a226726aa 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -59,6 +59,14 @@ extern int __connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len); extern int __connect_internal (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) attribute_hidden; +/* Read N bytes into BUF from socket FD. + Returns the number read or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t __recv (int __fd, void *__buf, size_t __n, int __flags) + attribute_hidden; + /* Send N bytes of BUF on socket FD to peer at address ADDR (which is ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */ extern ssize_t __libc_sendto (int __fd, __const void *__buf, size_t __n, diff --git a/include/sys/stat.h b/include/sys/stat.h index 2e2566d9ef..66898b1760 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -29,6 +29,10 @@ extern __inline__ int __mknod (__const char *__path, __mode_t __mode, { return __xmknod (_MKNOD_VER, __path, __mode, &__dev); } +libc_hidden_proto (__xmknodat) + +libc_hidden_proto (__fxstatat) +libc_hidden_proto (__fxstatat64) /* The `stat', `fstat', `lstat' functions have to be handled special since diff --git a/include/sys/sysinfo.h b/include/sys/sysinfo.h index e126bcb0e9..d33055a2b3 100644 --- a/include/sys/sysinfo.h +++ b/include/sys/sysinfo.h @@ -15,4 +15,7 @@ extern long int __get_phys_pages (void); /* Return number of available physical pages of memory in the system. */ extern long int __get_avphys_pages (void); +/* Return maximum number of processes this real user ID can have. */ +extern long int __get_child_max (void); + #endif /* sys/sysinfo.h */ diff --git a/include/sys/syslog.h b/include/sys/syslog.h index e018225333..8b0d59dad6 100644 --- a/include/sys/syslog.h +++ b/include/sys/syslog.h @@ -2,3 +2,8 @@ libc_hidden_proto (syslog) libc_hidden_proto (vsyslog) + +extern void __vsyslog_chk (int __pri, int __flag, __const char *__fmt, + __gnuc_va_list __ap) + __attribute__ ((__format__ (__printf__, 3, 0))); +libc_hidden_proto (__vsyslog_chk) diff --git a/include/sys/time.h b/include/sys/time.h index c70396f04e..ec4055276e 100644 --- a/include/sys/time.h +++ b/include/sys/time.h @@ -20,6 +20,7 @@ extern int __setitimer (enum __itimer_which __which, attribute_hidden; extern int __utimes (__const char *__file, const struct timeval __tvp[2]) attribute_hidden; +extern int __futimes (int fd, __const struct timeval tvp[2]) attribute_hidden; #ifndef NOT_IN_libc # define __gettimeofday(tv, tz) INTUSE(__gettimeofday) (tv, tz) diff --git a/include/sys/xattr.h b/include/sys/xattr.h new file mode 100644 index 0000000000..64f8f56809 --- /dev/null +++ b/include/sys/xattr.h @@ -0,0 +1 @@ +#include <misc/sys/xattr.h> diff --git a/include/time.h b/include/time.h index 795eb5f504..d71f985014 100644 --- a/include/time.h +++ b/include/time.h @@ -5,6 +5,8 @@ # include <time/time.h> # include <xlocale.h> +__BEGIN_DECLS + extern __typeof (strftime_l) __strftime_l; libc_hidden_proto (__strftime_l) extern __typeof (strptime_l) __strptime_l; @@ -17,6 +19,8 @@ libc_hidden_proto (localtime) libc_hidden_proto (strftime) libc_hidden_proto (strptime) +librt_hidden_proto (clock_gettime) + /* Now define the internal interfaces. */ struct tm; @@ -77,7 +81,10 @@ extern long int __tzname_max (void); extern int __nanosleep (__const struct timespec *__requested_time, struct timespec *__remaining); -libc_hidden_proto(__nanosleep) +libc_hidden_proto (__nanosleep) +extern int __nanosleep_nocancel (__const struct timespec *__requested_time, + struct timespec *__remaining) + attribute_hidden; extern int __getdate_r (__const char *__string, struct tm *__resbufp); @@ -87,13 +94,16 @@ extern int __getclktck (void); /* strptime support. */ /* Status of lookup: do we use the locale data or the raw data? */ +#ifndef __cplusplus +/* C++ cannot deal with using 'not'. */ enum ptime_locale_status { not, loc, raw }; extern char * __strptime_internal (const char *rp, const char *fmt, struct tm *tm, enum ptime_locale_status *decided, - int era_cnt, __locale_t loc) + int era_cnt, __locale_t locparam) internal_function; +#endif extern double __difftime (time_t time1, time_t time0); @@ -103,5 +113,8 @@ extern double __difftime (time_t time1, time_t time0); #ifndef _ISOMAC # define CLOCK_IDFIELD_SIZE 3 #endif + +__END_DECLS + #endif #endif diff --git a/include/unistd.h b/include/unistd.h index f4d6cad7b6..f34d53f223 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -15,6 +15,7 @@ libc_hidden_proto (getlogin_r) libc_hidden_proto (seteuid) libc_hidden_proto (setegid) libc_hidden_proto (tcgetpgrp) +libc_hidden_proto (readlinkat) /* Now define the internal interfaces. */ extern int __access (__const char *__name, int __type); @@ -96,10 +97,10 @@ extern int __setgid (__gid_t __gid); extern int __setpgid (__pid_t __pid, __pid_t __pgid); libc_hidden_proto (__setpgid) extern int __setregid (__gid_t __rgid, __gid_t __egid); -extern int __getresuid (__uid_t *__euid, __uid_t *__ruid, __uid_t *__suid); -extern int __getresgid (__gid_t *__egid, __gid_t *__rgid, __gid_t *__sgid); -extern int __setresuid (__uid_t __euid, __uid_t __ruid, __uid_t __suid); -extern int __setresgid (__gid_t __egid, __gid_t __rgid, __gid_t __sgid); +extern int __getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid); +extern int __getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid); +extern int __setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid); +extern int __setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid); libc_hidden_proto (__getresuid) libc_hidden_proto (__getresgid) libc_hidden_proto (__setresuid) @@ -161,5 +162,7 @@ extern __pid_t __libc_fork (void); /* Suspend the process until a signal arrives. This always returns -1 and sets `errno' to EINTR. */ extern int __libc_pause (void); +/* Not cancelable variant. */ +extern int __pause_nocancel (void) attribute_hidden; #endif diff --git a/include/wchar.h b/include/wchar.h index 73bd4a8fef..89e9a4f81e 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -56,7 +56,6 @@ extern int __wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) extern int __wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n) __attribute_pure__; -extern int __wcscoll (__const wchar_t *__s1, __const wchar_t *__s2); extern size_t __wcslen (__const wchar_t *__s) __attribute_pure__; extern size_t __wcsnlen (__const wchar_t *__s, size_t __maxlen) __attribute_pure__; @@ -83,6 +82,8 @@ extern size_t __wcsnrtombs (char *__restrict __dst, __const wchar_t **__restrict __src, size_t __nwc, size_t __len, __mbstate_t *__restrict __ps); +extern wchar_t *__wcsncpy (wchar_t *__restrict __dest, + __const wchar_t *__restrict __src, size_t __n); extern wchar_t *__wcpcpy (wchar_t *__dest, __const wchar_t *__src); extern wchar_t *__wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n); @@ -106,12 +107,22 @@ extern int __vswprintf (wchar_t *__restrict __s, size_t __n, /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */; extern int __fwprintf (__FILE *__restrict __s, __const wchar_t *__restrict __format, ...) - /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */; + /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */; extern int __vfwprintf (__FILE *__restrict __s, __const wchar_t *__restrict __format, __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */; +extern int __vfwprintf_chk (FILE *__restrict __s, int __flag, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */; - +extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n, + int __flag, size_t __s_len, + __const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */; +libc_hidden_proto (__vfwprintf_chk) +libc_hidden_proto (__vswprintf_chk) /* Internal functions. */ extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len, |