diff options
author | pfg <pfg@FreeBSD.org> | 2015-06-29 00:30:30 +0000 |
---|---|---|
committer | pfg <pfg@FreeBSD.org> | 2015-06-29 00:30:30 +0000 |
commit | df33b4e60849441d2371c86bf57ddf42a0563637 (patch) | |
tree | f3a6dacc750a1042d5fb31eade998fb08a480bb0 /sys/sys/cdefs.h | |
parent | 2120b1ed16dc65b7d4b2ab07ed54f3a7282eb12a (diff) | |
download | FreeBSD-src-df33b4e60849441d2371c86bf57ddf42a0563637.zip FreeBSD-src-df33b4e60849441d2371c86bf57ddf42a0563637.tar.gz |
Add a new __sentinel attribute.
The sentinel attribute was originally implemented in OpenBSD's gcc and
later adopted by upstream GCC 4.0 (and clang). From the OpenBSD's
gcc-local manpage:
- gcc recognizes the extra attribute __sentinel__, which can be used to
mark varargs function that need a NULL pointer to mark argument
termination, like execl(3). This exposes latent bugs for 64-bit
architectures, where a terminating 0 will expand to a 32-bit int, and
not a full-fledged 64-bits pointer.
While here sort the visibility attributes.
Hinted-by: OpenBSD
Diffstat (limited to 'sys/sys/cdefs.h')
-rw-r--r-- | sys/sys/cdefs.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h index 23e567c..1a511cf 100644 --- a/sys/sys/cdefs.h +++ b/sys/sys/cdefs.h @@ -469,11 +469,13 @@ #endif #if __GNUC_PREREQ__(4, 0) -#define __hidden __attribute__((__visibility__("hidden"))) +#define __sentinel __attribute__((__sentinel__)) #define __exported __attribute__((__visibility__("default"))) +#define __hidden __attribute__((__visibility__("hidden"))) #else -#define __hidden +#define __sentinel #define __exported +#define __hidden #endif /* |