diff --git a/ChangeLog b/ChangeLog index ed5b53363f..2de9a0c72a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,35 @@ +2012-04-29 Marek Polacek + + * misc/sys/cdefs.h (__attribute_artificial__): New macro. + (__fortify_function): New macro. + (__extern_always_inline): Don't use __attribute__ ((__artificial__)). + * libio/bits/stdio-ldbl.h: Use __fortify_function in place of + __extern_always_inline. + * libio/bits/stdio2.h: Likewise. + * libio/bits/stdio.h: Likewise. + * string/string.h: Likewise. + * string/bits/string3.h: Likewise. + * include/stdio.h: Likewise. + * stdlib/bits/stdlib.h: Likewise. + * stdlib/stdlib.h: Likewise. + * rt/bits/mqueue2.h: Likewise. + * rt/mqueue.h: Likewise. + * posix/bits/unistd.h: Likewise. + * posix/unistd.h: Likewise. + * io/bits/poll2.h: Likewise. + * io/bits/fcntl2.h: Likewise. + * io/fcntl.h: Likewise. + * io/sys/poll.h: Likewise. + * misc/bits/syslog.h: Likewise. + * misc/bits/syslog-ldbl.h: Likewise. + * misc/sys/syslog.h: Likewise. + * socket/bits/socket2.h: Likewise. + * socket/sys/socket.h: Likewise. + * debug/tst-chk1.c: Likewise. + * wcsmbs/bits/wchar2.h: Likewise. + * wcsmbs/bits/wchar-ldbl.h: Likewise. + * wcsmbs/wchar.h: Likewise. + 2012-04-29 Andreas Jaeger * Makerules (tests): Remove enable-check-abi protection. diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c index b8745ee66c..7ffc9fec90 100644 --- a/debug/tst-chk1.c +++ b/debug/tst-chk1.c @@ -148,7 +148,7 @@ do_test (void) #endif ); -#if defined __USE_FORTIFY_LEVEL && !defined __extern_always_inline +#if defined __USE_FORTIFY_LEVEL && !defined __fortify_function printf ("Test skipped"); if (l0 == 0) return 0; diff --git a/include/stdio.h b/include/stdio.h index bd0209aaac..a2c73a452d 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -176,7 +176,7 @@ extern char *__REDIRECT (__gets_warn, (char *__str), gets) __wur __warnattr ("please use fgets or getline instead, gets can't " "specify buffer size"); -__extern_always_inline __wur char * +__fortify_function __wur char * gets (char *__str) { if (__bos (__str) != (size_t) -1) diff --git a/io/bits/fcntl2.h b/io/bits/fcntl2.h index 09b81e6a8a..76df18b1d7 100644 --- a/io/bits/fcntl2.h +++ b/io/bits/fcntl2.h @@ -37,7 +37,7 @@ __errordecl (__open_too_many_args, __errordecl (__open_missing_mode, "open with O_CREAT in second argument needs 3 arguments"); -__extern_always_inline int +__fortify_function int open (const char *__path, int __oflag, ...) { if (__va_arg_pack_len () > 1) @@ -69,7 +69,7 @@ __errordecl (__open64_too_many_args, __errordecl (__open64_missing_mode, "open64 with O_CREAT in second argument needs 3 arguments"); -__extern_always_inline int +__fortify_function int open64 (const char *__path, int __oflag, ...) { if (__va_arg_pack_len () > 1) @@ -113,7 +113,7 @@ __errordecl (__openat_too_many_args, __errordecl (__openat_missing_mode, "openat with O_CREAT in third argument needs 4 arguments"); -__extern_always_inline int +__fortify_function int openat (int __fd, const char *__path, int __oflag, ...) { if (__va_arg_pack_len () > 1) @@ -147,7 +147,7 @@ __errordecl (__openat64_too_many_args, __errordecl (__openat64_missing_mode, "openat64 with O_CREAT in third argument needs 4 arguments"); -__extern_always_inline int +__fortify_function int openat64 (int __fd, const char *__path, int __oflag, ...) { if (__va_arg_pack_len () > 1) diff --git a/io/bits/poll2.h b/io/bits/poll2.h index 862de2879e..404af1f7d8 100644 --- a/io/bits/poll2.h +++ b/io/bits/poll2.h @@ -32,7 +32,7 @@ extern int __REDIRECT (__poll_chk_warn, (struct pollfd *__fds, nfds_t __nfds, __poll_chk) __warnattr ("poll called with fds buffer too small file nfds entries"); -__extern_always_inline int +__fortify_function int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout) { if (__bos (__fds) != (__SIZE_TYPE__) -1) @@ -61,7 +61,7 @@ extern int __REDIRECT (__ppoll_chk_warn, (struct pollfd *__fds, nfds_t __nfds, __ppoll_chk) __warnattr ("ppoll called with fds buffer too small file nfds entries"); -__extern_always_inline int +__fortify_function int ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout, const __sigset_t *__ss) { diff --git a/io/fcntl.h b/io/fcntl.h index 1192cf584c..8b8726a440 100644 --- a/io/fcntl.h +++ b/io/fcntl.h @@ -263,7 +263,7 @@ extern int posix_fallocate64 (int __fd, __off64_t __offset, __off64_t __len); /* Define some inlines helping to catch common problems. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline \ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function \ && defined __va_arg_pack_len # include #endif diff --git a/io/sys/poll.h b/io/sys/poll.h index 6089b618b6..9d78ff8360 100644 --- a/io/sys/poll.h +++ b/io/sys/poll.h @@ -72,7 +72,7 @@ __END_DECLS /* Define some inlines helping to catch common problems. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function # include #endif diff --git a/libio/bits/stdio-ldbl.h b/libio/bits/stdio-ldbl.h index 5700dd9d7d..3cc6ec416d 100644 --- a/libio/bits/stdio-ldbl.h +++ b/libio/bits/stdio-ldbl.h @@ -75,7 +75,7 @@ __LDBL_REDIR_DECL (obstack_printf) __LDBL_REDIR_DECL (obstack_vprintf) #endif -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function __LDBL_REDIR_DECL (__sprintf_chk) __LDBL_REDIR_DECL (__vsprintf_chk) # if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98 diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h index 81f4c7dd03..4dbfef8254 100644 --- a/libio/bits/stdio.h +++ b/libio/bits/stdio.h @@ -30,7 +30,7 @@ #ifdef __USE_EXTERN_INLINES /* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different inline. */ -# if !(__USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline) +# if !(__USE_FORTIFY_LEVEL > 0 && defined __fortify_function) /* Write formatted output to stdout from argument list ARG. */ __STDIO_INLINE int vprintf (const char *__restrict __fmt, _G_va_list __arg) diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h index 7b0bdeb95f..2aca88d029 100644 --- a/libio/bits/stdio2.h +++ b/libio/bits/stdio2.h @@ -27,7 +27,7 @@ extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen, _G_va_list __ap) __THROW; #ifdef __va_arg_pack -__extern_always_inline int +__fortify_function int __NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...)) { return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1, @@ -39,7 +39,7 @@ __NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...)) __VA_ARGS__) #endif -__extern_always_inline int +__fortify_function int __NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt, _G_va_list __ap)) { @@ -57,7 +57,7 @@ extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag, _G_va_list __ap) __THROW; # ifdef __va_arg_pack -__extern_always_inline int +__fortify_function int __NTH (snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...)) { @@ -70,7 +70,7 @@ __NTH (snprintf (char *__restrict __s, size_t __n, __VA_ARGS__) # endif -__extern_always_inline int +__fortify_function int __NTH (vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, _G_va_list __ap)) { @@ -91,14 +91,14 @@ extern int __vprintf_chk (int __flag, const char *__restrict __format, _G_va_list __ap); # ifdef __va_arg_pack -__extern_always_inline int +__fortify_function int fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...) { return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ()); } -__extern_always_inline int +__fortify_function int printf (const char *__restrict __fmt, ...) { return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ()); @@ -110,7 +110,7 @@ printf (const char *__restrict __fmt, ...) __fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__) # endif -__extern_always_inline int +__fortify_function int vprintf (const char *__restrict __fmt, _G_va_list __ap) { #ifdef __USE_EXTERN_INLINES @@ -120,7 +120,7 @@ vprintf (const char *__restrict __fmt, _G_va_list __ap) #endif } -__extern_always_inline int +__fortify_function int vfprintf (FILE *__restrict __stream, const char *__restrict __fmt, _G_va_list __ap) { @@ -151,14 +151,14 @@ extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack, __THROW __attribute__ ((__format__ (__printf__, 3, 0))); # ifdef __va_arg_pack -__extern_always_inline int +__fortify_function int __NTH (asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...)) { return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ()); } -__extern_always_inline int +__fortify_function int __NTH (__asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...)) { @@ -166,14 +166,14 @@ __NTH (__asprintf (char **__restrict __ptr, const char *__restrict __fmt, __va_arg_pack ()); } -__extern_always_inline int +__fortify_function int dprintf (int __fd, const char *__restrict __fmt, ...) { return __dprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ()); } -__extern_always_inline int +__fortify_function int __NTH (obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...)) { @@ -191,20 +191,20 @@ __NTH (obstack_printf (struct obstack *__restrict __obstack, __obstack_printf_chk (obstack, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__) # endif -__extern_always_inline int +__fortify_function int __NTH (vasprintf (char **__restrict __ptr, const char *__restrict __fmt, _G_va_list __ap)) { return __vasprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt, __ap); } -__extern_always_inline int +__fortify_function int vdprintf (int __fd, const char *__restrict __fmt, _G_va_list __ap) { return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap); } -__extern_always_inline int +__fortify_function int __NTH (obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, _G_va_list __ap)) { @@ -223,7 +223,7 @@ extern char *__REDIRECT (__gets_warn, (char *__str), gets) __wur __warnattr ("please use fgets or getline instead, gets can't " "specify buffer size"); -__extern_always_inline __wur char * +__fortify_function __wur char * gets (char *__str) { if (__bos (__str) != (size_t) -1) @@ -243,7 +243,7 @@ extern char *__REDIRECT (__fgets_chk_warn, __wur __warnattr ("fgets called with bigger size than length " "of destination buffer"); -__extern_always_inline __wur char * +__fortify_function __wur char * fgets (char *__restrict __s, int __n, FILE *__restrict __stream) { if (__bos (__s) != (size_t) -1) @@ -272,7 +272,7 @@ extern size_t __REDIRECT (__fread_chk_warn, __wur __warnattr ("fread called with bigger size * nmemb than length " "of destination buffer"); -__extern_always_inline __wur size_t +__fortify_function __wur size_t fread (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) { @@ -301,7 +301,7 @@ extern char *__REDIRECT (__fgets_unlocked_chk_warn, __wur __warnattr ("fgets_unlocked called with bigger size than length " "of destination buffer"); -__extern_always_inline __wur char * +__fortify_function __wur char * fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream) { if (__bos (__s) != (size_t) -1) @@ -333,7 +333,7 @@ extern size_t __REDIRECT (__fread_unlocked_chk_warn, __wur __warnattr ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer"); -__extern_always_inline __wur size_t +__fortify_function __wur size_t fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) { diff --git a/misc/bits/syslog-ldbl.h b/misc/bits/syslog-ldbl.h index f71dbb46fd..bd70a51911 100644 --- a/misc/bits/syslog-ldbl.h +++ b/misc/bits/syslog-ldbl.h @@ -1,5 +1,5 @@ /* -mlong-double-64 compatibility mode for syslog functions. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006-2012 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 @@ -26,7 +26,7 @@ __LDBL_REDIR_DECL (syslog) __LDBL_REDIR_DECL (vsyslog) #endif -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function __LDBL_REDIR_DECL (__syslog_chk) # ifdef __USE_BSD diff --git a/misc/bits/syslog.h b/misc/bits/syslog.h index dc7c75be50..f9af61dce9 100644 --- a/misc/bits/syslog.h +++ b/misc/bits/syslog.h @@ -25,7 +25,7 @@ extern void __syslog_chk (int __pri, int __flag, const char *__fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); #ifdef __va_arg_pack -__extern_always_inline void +__fortify_function void syslog (int __pri, const char *__fmt, ...) { __syslog_chk (__pri, __USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ()); @@ -41,7 +41,7 @@ extern void __vsyslog_chk (int __pri, int __flag, const char *__fmt, __gnuc_va_list __ap) __attribute__ ((__format__ (__printf__, 3, 0))); -__extern_always_inline void +__fortify_function void vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap) { __vsyslog_chk (__pri, __USE_FORTIFY_LEVEL - 1, __fmt, __ap); diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 724f26e399..f4e96dbe6a 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -140,6 +140,7 @@ /* Fortify support. */ #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) #define __bos0(ptr) __builtin_object_size (ptr, 0) +#define __fortify_function __extern_always_inline __attribute_artificial__ #if __GNUC_PREREQ (4,3) # define __warndecl(name, msg) \ @@ -309,26 +310,24 @@ # define __always_inline __inline #endif +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. */ #if !defined __cplusplus || __GNUC_PREREQ (4,3) # if defined __GNUC_STDC_INLINE__ || defined __cplusplus # define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) -# if __GNUC_PREREQ (4,3) -# define __extern_always_inline \ - extern __always_inline __attribute__ ((__gnu_inline__, __artificial__)) -# else -# define __extern_always_inline \ +# define __extern_always_inline \ extern __always_inline __attribute__ ((__gnu_inline__)) -# endif # else # define __extern_inline extern __inline -# if __GNUC_PREREQ (4,3) -# define __extern_always_inline \ - extern __always_inline __attribute__ ((__artificial__)) -# else -# define __extern_always_inline extern __always_inline -# endif +# define __extern_always_inline extern __always_inline # endif #endif diff --git a/misc/sys/syslog.h b/misc/sys/syslog.h index aed419e446..77123ab503 100644 --- a/misc/sys/syslog.h +++ b/misc/sys/syslog.h @@ -203,7 +203,7 @@ extern void vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap) /* Define some macros helping to catch buffer overflows. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function # include #endif #ifdef __LDBL_COMPAT diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h index 66430c07b7..1100eb2018 100644 --- a/posix/bits/unistd.h +++ b/posix/bits/unistd.h @@ -30,7 +30,7 @@ extern ssize_t __REDIRECT (__read_chk_warn, __wur __warnattr ("read called with bigger length than size of " "the destination buffer"); -__extern_always_inline __wur ssize_t +__fortify_function __wur ssize_t read (int __fd, void *__buf, size_t __nbytes) { if (__bos0 (__buf) != (size_t) -1) @@ -68,7 +68,7 @@ extern ssize_t __REDIRECT (__pread64_chk_warn, "the destination buffer"); # ifndef __USE_FILE_OFFSET64 -__extern_always_inline __wur ssize_t +__fortify_function __wur ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset) { if (__bos0 (__buf) != (size_t) -1) @@ -83,7 +83,7 @@ pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset) return __pread_alias (__fd, __buf, __nbytes, __offset); } # else -__extern_always_inline __wur ssize_t +__fortify_function __wur ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) { if (__bos0 (__buf) != (size_t) -1) @@ -101,7 +101,7 @@ pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) # endif # ifdef __USE_LARGEFILE64 -__extern_always_inline __wur ssize_t +__fortify_function __wur ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) { if (__bos0 (__buf) != (size_t) -1) @@ -135,7 +135,7 @@ extern ssize_t __REDIRECT_NTH (__readlink_chk_warn, __nonnull ((1, 2)) __wur __warnattr ("readlink called with bigger length " "than size of destination buffer"); -__extern_always_inline __nonnull ((1, 2)) __wur ssize_t +__fortify_function __nonnull ((1, 2)) __wur ssize_t __NTH (readlink (const char *__restrict __path, char *__restrict __buf, size_t __len)) { @@ -169,7 +169,7 @@ extern ssize_t __REDIRECT_NTH (__readlinkat_chk_warn, "length than size of destination " "buffer"); -__extern_always_inline __nonnull ((2, 3)) __wur ssize_t +__fortify_function __nonnull ((2, 3)) __wur ssize_t __NTH (readlinkat (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len)) { @@ -196,7 +196,7 @@ extern char *__REDIRECT_NTH (__getcwd_chk_warn, __wur __warnattr ("getcwd caller with bigger length than size of " "destination buffer"); -__extern_always_inline __wur char * +__fortify_function __wur char * __NTH (getcwd (char *__buf, size_t __size)) { if (__bos (__buf) != (size_t) -1) @@ -217,7 +217,7 @@ extern char *__REDIRECT_NTH (__getwd_warn, (char *__buf), getwd) __nonnull ((1)) __wur __warnattr ("please use getcwd instead, as getwd " "doesn't specify buffer size"); -__extern_always_inline __nonnull ((1)) __attribute_deprecated__ __wur char * +__fortify_function __nonnull ((1)) __attribute_deprecated__ __wur char * __NTH (getwd (char *__buf)) { if (__bos (__buf) != (size_t) -1) @@ -236,7 +236,7 @@ extern size_t __REDIRECT_NTH (__confstr_chk_warn, __warnattr ("confstr called with bigger length than size of destination " "buffer"); -__extern_always_inline size_t +__fortify_function size_t __NTH (confstr (int __name, char *__buf, size_t __len)) { if (__bos (__buf) != (size_t) -1) @@ -261,7 +261,7 @@ extern int __REDIRECT_NTH (__getgroups_chk_warn, __wur __warnattr ("getgroups called with bigger group count than what " "can fit into destination buffer"); -__extern_always_inline int +__fortify_function int __NTH (getgroups (int __size, __gid_t __list[])) { if (__bos (__list) != (size_t) -1) @@ -287,7 +287,7 @@ extern int __REDIRECT_NTH (__ttyname_r_chk_warn, __nonnull ((2)) __warnattr ("ttyname_r called with bigger buflen than " "size of destination buffer"); -__extern_always_inline int +__fortify_function int __NTH (ttyname_r (int __fd, char *__buf, size_t __buflen)) { if (__bos (__buf) != (size_t) -1) @@ -313,7 +313,7 @@ extern int __REDIRECT (__getlogin_r_chk_warn, __nonnull ((1)) __warnattr ("getlogin_r called with bigger buflen than " "size of destination buffer"); -__extern_always_inline int +__fortify_function int getlogin_r (char *__buf, size_t __buflen) { if (__bos (__buf) != (size_t) -1) @@ -340,7 +340,7 @@ extern int __REDIRECT_NTH (__gethostname_chk_warn, __nonnull ((1)) __warnattr ("gethostname called with bigger buflen than " "size of destination buffer"); -__extern_always_inline int +__fortify_function int __NTH (gethostname (char *__buf, size_t __buflen)) { if (__bos (__buf) != (size_t) -1) @@ -369,7 +369,7 @@ extern int __REDIRECT_NTH (__getdomainname_chk_warn, "buflen than size of destination " "buffer"); -__extern_always_inline int +__fortify_function int __NTH (getdomainname (char *__buf, size_t __buflen)) { if (__bos (__buf) != (size_t) -1) diff --git a/posix/unistd.h b/posix/unistd.h index 1f4d64516e..9839761b52 100644 --- a/posix/unistd.h +++ b/posix/unistd.h @@ -1165,7 +1165,7 @@ extern char *ctermid (char *__s) __THROW; /* Define some macros helping to catch buffer overflows. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function # include #endif diff --git a/rt/bits/mqueue2.h b/rt/bits/mqueue2.h index 87365304c2..b92194a660 100644 --- a/rt/bits/mqueue2.h +++ b/rt/bits/mqueue2.h @@ -34,7 +34,7 @@ __errordecl (__mq_open_wrong_number_of_args, __errordecl (__mq_open_missing_mode_and_attr, "mq_open with O_CREAT in second argument needs 4 arguments"); -__extern_always_inline mqd_t +__fortify_function mqd_t __NTH (mq_open (const char *__name, int __oflag, ...)) { if (__va_arg_pack_len () != 0 && __va_arg_pack_len () != 2) diff --git a/rt/mqueue.h b/rt/mqueue.h index b80d7491b2..9e2eafb18a 100644 --- a/rt/mqueue.h +++ b/rt/mqueue.h @@ -90,7 +90,7 @@ extern int mq_timedsend (mqd_t __mqdes, const char *__msg_ptr, #endif /* Define some inlines helping to catch common problems. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline \ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function \ && defined __va_arg_pack_len # include #endif diff --git a/socket/bits/socket2.h b/socket/bits/socket2.h index d12f06adf6..89a486464d 100644 --- a/socket/bits/socket2.h +++ b/socket/bits/socket2.h @@ -1,5 +1,5 @@ /* Checking macros for socket functions. - Copyright (C) 2005, 2007 Free Software Foundation, Inc. + Copyright (C) 2005-2012 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 @@ -30,7 +30,7 @@ extern ssize_t __REDIRECT (__recv_chk_warn, __warnattr ("recv called with bigger length than size of destination " "buffer"); -__extern_always_inline ssize_t +__fortify_function ssize_t recv (int __fd, void *__buf, size_t __n, int __flags) { if (__bos0 (__buf) != (size_t) -1) @@ -60,7 +60,7 @@ extern ssize_t __REDIRECT (__recvfrom_chk_warn, __warnattr ("recvfrom called with bigger length than size of " "destination buffer"); -__extern_always_inline ssize_t +__fortify_function ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len) { diff --git a/socket/sys/socket.h b/socket/sys/socket.h index 556ae905f6..787c2b907e 100644 --- a/socket/sys/socket.h +++ b/socket/sys/socket.h @@ -246,7 +246,7 @@ extern int isfdtype (int __fd, int __fdtype) __THROW; /* Define some macros helping to catch buffer overflows. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function # include #endif diff --git a/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h index 43c45a63ab..084b43847c 100644 --- a/stdlib/bits/stdlib.h +++ b/stdlib/bits/stdlib.h @@ -33,7 +33,7 @@ extern char *__REDIRECT_NTH (__realpath_chk_warn, __warnattr ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer"); -__extern_always_inline __wur char * +__fortify_function __wur char * __NTH (realpath (const char *__restrict __name, char *__restrict __resolved)) { if (__bos (__resolved) != (size_t) -1) @@ -60,7 +60,7 @@ extern int __REDIRECT_NTH (__ptsname_r_chk_warn, __nonnull ((2)) __warnattr ("ptsname_r called with buflen bigger than " "size of buf"); -__extern_always_inline int +__fortify_function int __NTH (ptsname_r (int __fd, char *__buf, size_t __buflen)) { if (__bos (__buf) != (size_t) -1) @@ -79,7 +79,7 @@ extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen) extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar), wctomb) __wur; -__extern_always_inline __wur int +__fortify_function __wur int __NTH (wctomb (char *__s, wchar_t __wchar)) { /* We would have to include to get a definition of MB_LEN_MAX. @@ -109,7 +109,7 @@ extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn, __warnattr ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"); -__extern_always_inline size_t +__fortify_function size_t __NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len)) { @@ -140,7 +140,7 @@ extern size_t __REDIRECT_NTH (__wcstombs_chk_warn, size_t __len, size_t __dstlen), __wcstombs_chk) __warnattr ("wcstombs called with dst buffer smaller than len"); -__extern_always_inline size_t +__fortify_function size_t __NTH (wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len)) { diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h index cdc9e02e13..f652eda3fe 100644 --- a/stdlib/stdlib.h +++ b/stdlib/stdlib.h @@ -953,7 +953,7 @@ extern int getloadavg (double __loadavg[], int __nelem) /* Define some macros helping to catch buffer overflows. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function # include #endif #ifdef __LDBL_COMPAT diff --git a/string/bits/string3.h b/string/bits/string3.h index ebd7049211..cc611dfd3b 100644 --- a/string/bits/string3.h +++ b/string/bits/string3.h @@ -44,21 +44,21 @@ __warndecl (__warn_memset_zero_len, #endif -__extern_always_inline void * +__fortify_function void * __NTH (memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len)) { return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); } -__extern_always_inline void * +__fortify_function void * __NTH (memmove (void *__dest, const void *__src, size_t __len)) { return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest)); } #ifdef __USE_GNU -__extern_always_inline void * +__fortify_function void * __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len)) { @@ -72,7 +72,7 @@ __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src, especially problematic if the intended fill value is zero. In this case no work is done at all. We detect these problems by referring non-existing functions. */ -__extern_always_inline void * +__fortify_function void * __NTH (memset (void *__dest, int __ch, size_t __len)) { if (__builtin_constant_p (__len) && __len == 0 @@ -85,27 +85,27 @@ __NTH (memset (void *__dest, int __ch, size_t __len)) } #ifdef __USE_BSD -__extern_always_inline void +__fortify_function void __NTH (bcopy (const void *__src, void *__dest, size_t __len)) { (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest)); } -__extern_always_inline void +__fortify_function void __NTH (bzero (void *__dest, size_t __len)) { (void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest)); } #endif -__extern_always_inline char * +__fortify_function char * __NTH (strcpy (char *__restrict __dest, const char *__restrict __src)) { return __builtin___strcpy_chk (__dest, __src, __bos (__dest)); } #ifdef __USE_GNU -__extern_always_inline char * +__fortify_function char * __NTH (stpcpy (char *__restrict __dest, const char *__restrict __src)) { return __builtin___stpcpy_chk (__dest, __src, __bos (__dest)); @@ -113,7 +113,7 @@ __NTH (stpcpy (char *__restrict __dest, const char *__restrict __src)) #endif -__extern_always_inline char * +__fortify_function char * __NTH (strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len)) { @@ -126,7 +126,7 @@ extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n, extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src, size_t __n), stpncpy); -__extern_always_inline char * +__fortify_function char * __NTH (stpncpy (char *__dest, const char *__src, size_t __n)) { if (__bos (__dest) != (size_t) -1 @@ -136,14 +136,14 @@ __NTH (stpncpy (char *__dest, const char *__src, size_t __n)) } -__extern_always_inline char * +__fortify_function char * __NTH (strcat (char *__restrict __dest, const char *__restrict __src)) { return __builtin___strcat_chk (__dest, __src, __bos (__dest)); } -__extern_always_inline char * +__fortify_function char * __NTH (strncat (char *__restrict __dest, const char *__restrict __src, size_t __len)) { diff --git a/string/string.h b/string/string.h index e77714b89f..7bb505fc64 100644 --- a/string/string.h +++ b/string/string.h @@ -634,7 +634,7 @@ extern char *basename (const char *__filename) __THROW __nonnull ((1)); # include # endif -# if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +# if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function /* Functions with security checks. */ # include # endif diff --git a/wcsmbs/bits/wchar-ldbl.h b/wcsmbs/bits/wchar-ldbl.h index 6ac712da2f..15f61b5a4f 100644 --- a/wcsmbs/bits/wchar-ldbl.h +++ b/wcsmbs/bits/wchar-ldbl.h @@ -1,5 +1,5 @@ /* -mlong-double-64 compatibility mode for functions. - Copyright (C) 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2006-2012 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 @@ -32,7 +32,7 @@ __LDBL_REDIR_DECL (vswprintf); && !defined __REDIRECT \ && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) __LDBL_REDIR1_DECL (fwscanf, __nldbl___isoc99_fwscanf) -__LDBL_REDIR1_DECL (wscanf, __nldbl___isoc99_wscanf) +__LDBL_REDIR1_DECL (wscanf, __nldbl___isoc99_wscanf) __LDBL_REDIR1_DECL (swscanf, __nldbl___isoc99_swscanf) # else __LDBL_REDIR_DECL (fwscanf); @@ -48,7 +48,7 @@ __LDBL_REDIR1_DECL (wcstold, wcstod); # if !defined __USE_GNU && !defined __REDIRECT \ && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) __LDBL_REDIR1_DECL (vfwscanf, __nldbl___isoc99_vfwscanf) -__LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc99_vwscanf) +__LDBL_REDIR1_DECL (vwscanf, __nldbl___isoc99_vwscanf) __LDBL_REDIR1_DECL (vswscanf, __nldbl___isoc99_vswscanf) # else __LDBL_REDIR_DECL (vfwscanf); @@ -62,7 +62,7 @@ __END_NAMESPACE_C99 __LDBL_REDIR1_DECL (wcstold_l, wcstod_l); #endif -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function __LDBL_REDIR_DECL (__swprintf_chk) __LDBL_REDIR_DECL (__vswprintf_chk) # if __USE_FORTIFY_LEVEL > 1 diff --git a/wcsmbs/bits/wchar2.h b/wcsmbs/bits/wchar2.h index 852cbc3b8b..08d71c8b5a 100644 --- a/wcsmbs/bits/wchar2.h +++ b/wcsmbs/bits/wchar2.h @@ -35,7 +35,7 @@ extern wchar_t *__REDIRECT_NTH (__wmemcpy_chk_warn, __warnattr ("wmemcpy called with length bigger than size of destination " "buffer"); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n)) { @@ -64,7 +64,7 @@ extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn, __warnattr ("wmemmove called with length bigger than size of destination " "buffer"); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)) { if (__bos0 (__s1) != (size_t) -1) @@ -96,7 +96,7 @@ extern wchar_t *__REDIRECT_NTH (__wmempcpy_chk_warn, __warnattr ("wmempcpy called with length bigger than size of destination " "buffer"); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n)) { @@ -125,7 +125,7 @@ extern wchar_t *__REDIRECT_NTH (__wmemset_chk_warn, __warnattr ("wmemset called with length bigger than size of destination " "buffer"); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n)) { if (__bos0 (__s) != (size_t) -1) @@ -148,7 +148,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscpy_alias, (wchar_t *__restrict __dest, const wchar_t *__restrict __src), wcscpy); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) { if (__bos (__dest) != (size_t) -1) @@ -164,7 +164,7 @@ extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias, (wchar_t *__restrict __dest, const wchar_t *__restrict __src), wcpcpy); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) { if (__bos (__dest) != (size_t) -1) @@ -187,7 +187,7 @@ extern wchar_t *__REDIRECT_NTH (__wcsncpy_chk_warn, __warnattr ("wcsncpy called with length bigger than size of destination " "buffer"); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n)) { @@ -218,7 +218,7 @@ extern wchar_t *__REDIRECT_NTH (__wcpncpy_chk_warn, __warnattr ("wcpncpy called with length bigger than size of destination " "buffer"); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n)) { @@ -242,7 +242,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscat_alias, (wchar_t *__restrict __dest, const wchar_t *__restrict __src), wcscat); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) { if (__bos (__dest) != (size_t) -1) @@ -259,7 +259,7 @@ extern wchar_t *__REDIRECT_NTH (__wcsncat_alias, const wchar_t *__restrict __src, size_t __n), wcsncat); -__extern_always_inline wchar_t * +__fortify_function wchar_t * __NTH (wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n)) { @@ -281,7 +281,7 @@ extern int __REDIRECT_NTH_LDBL (__swprintf_alias, swprintf); #ifdef __va_arg_pack -__extern_always_inline int +__fortify_function int __NTH (swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...)) { @@ -311,7 +311,7 @@ extern int __REDIRECT_NTH_LDBL (__vswprintf_alias, const wchar_t *__restrict __fmt, __gnuc_va_list __ap), vswprintf); -__extern_always_inline int +__fortify_function int __NTH (vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap)) { @@ -335,13 +335,13 @@ extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format, __gnuc_va_list __ap); # ifdef __va_arg_pack -__extern_always_inline int +__fortify_function int wprintf (const wchar_t *__restrict __fmt, ...) { return __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ()); } -__extern_always_inline int +__fortify_function int fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...) { return __fwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, @@ -354,13 +354,13 @@ fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...) __fwprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__) # endif -__extern_always_inline int +__fortify_function int vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap) { return __vwprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap); } -__extern_always_inline int +__fortify_function int vfwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) { @@ -380,7 +380,7 @@ extern wchar_t *__REDIRECT (__fgetws_chk_warn, __wur __warnattr ("fgetws called with bigger size than length " "of destination buffer"); -__extern_always_inline __wur wchar_t * +__fortify_function __wur wchar_t * fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) { if (__bos (__s) != (size_t) -1) @@ -411,7 +411,7 @@ extern wchar_t *__REDIRECT (__fgetws_unlocked_chk_warn, __wur __warnattr ("fgetws_unlocked called with bigger size than length " "of destination buffer"); -__extern_always_inline __wur wchar_t * +__fortify_function __wur wchar_t * fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) { if (__bos (__s) != (size_t) -1) @@ -436,7 +436,7 @@ extern size_t __REDIRECT_NTH (__wcrtomb_alias, (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps), wcrtomb) __wur; -__extern_always_inline __wur size_t +__fortify_function __wur size_t __NTH (wcrtomb (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps)) { @@ -470,7 +470,7 @@ extern size_t __REDIRECT_NTH (__mbsrtowcs_chk_warn, __warnattr ("mbsrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"); -__extern_always_inline size_t +__fortify_function size_t __NTH (mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps)) { @@ -504,7 +504,7 @@ extern size_t __REDIRECT_NTH (__wcsrtombs_chk_warn, size_t __dstlen), __wcsrtombs_chk) __warnattr ("wcsrtombs called with dst buffer smaller than len"); -__extern_always_inline size_t +__fortify_function size_t __NTH (wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps)) { @@ -538,7 +538,7 @@ extern size_t __REDIRECT_NTH (__mbsnrtowcs_chk_warn, __warnattr ("mbsnrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"); -__extern_always_inline size_t +__fortify_function size_t __NTH (mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps)) { @@ -574,7 +574,7 @@ extern size_t __REDIRECT_NTH (__wcsnrtombs_chk_warn, size_t __dstlen), __wcsnrtombs_chk) __warnattr ("wcsnrtombs called with dst buffer smaller than len"); -__extern_always_inline size_t +__fortify_function size_t __NTH (wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps)) { diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h index b88e41260c..29042c68b5 100644 --- a/wcsmbs/wchar.h +++ b/wcsmbs/wchar.h @@ -880,7 +880,7 @@ extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, #endif /* Define some macros helping to catch buffer overflows. */ -#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function # include #endif