Skip to content

Commit

Permalink
Fix attributes for fortify functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
mpolacek committed Apr 29, 2012
1 parent ecf0ebf commit 5ac3ea1
Show file tree
Hide file tree
Showing 27 changed files with 148 additions and 117 deletions.
32 changes: 32 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,35 @@
2012-04-29 Marek Polacek <[email protected]>

* 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 <[email protected]>

* Makerules (tests): Remove enable-check-abi protection.
Expand Down
2 changes: 1 addition & 1 deletion debug/tst-chk1.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion include/stdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 4 additions & 4 deletions io/bits/fcntl2.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions io/bits/poll2.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
{
Expand Down
2 changes: 1 addition & 1 deletion io/fcntl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <bits/fcntl2.h>
#endif
Expand Down
2 changes: 1 addition & 1 deletion io/sys/poll.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <bits/poll2.h>
#endif

Expand Down
2 changes: 1 addition & 1 deletion libio/bits/stdio-ldbl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion libio/bits/stdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
40 changes: 20 additions & 20 deletions libio/bits/stdio2.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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))
{
Expand All @@ -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, ...))
{
Expand All @@ -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))
{
Expand All @@ -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 ());
Expand All @@ -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
Expand All @@ -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)
{
Expand Down Expand Up @@ -151,29 +151,29 @@ 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,
...))
{
return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __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, ...))
{
Expand All @@ -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))
{
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
{
Expand Down
4 changes: 2 additions & 2 deletions misc/bits/syslog-ldbl.h
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions misc/bits/syslog.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 ());
Expand All @@ -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);
Expand Down
23 changes: 11 additions & 12 deletions misc/sys/cdefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) \
Expand Down Expand Up @@ -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

Expand Down
Loading

0 comments on commit 5ac3ea1

Please sign in to comment.