summaryrefslogtreecommitdiffstats
path: root/sys/sys/cdefs.h
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2015-06-29 00:30:30 +0000
committerpfg <pfg@FreeBSD.org>2015-06-29 00:30:30 +0000
commitdf33b4e60849441d2371c86bf57ddf42a0563637 (patch)
treef3a6dacc750a1042d5fb31eade998fb08a480bb0 /sys/sys/cdefs.h
parent2120b1ed16dc65b7d4b2ab07ed54f3a7282eb12a (diff)
downloadFreeBSD-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.h6
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
/*
OpenPOWER on IntegriCloud