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
This commit is contained in:
Pedro F. Giffuni 2015-06-29 00:30:30 +00:00
parent 7bb3697b4e
commit 1374252397
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=284917

View File

@ -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
/*