Add __BEGIN_PUBLIC / __END_PUBLIC, __BEGIN_HIDDEN / __END_HIDDEN and

__dso_public and __dso_hidden markers. Change __BEGIN_DECLS /
__END_DECLS to include __BEGIN_PUBLIC / __END_PUBLIC.
This commit is contained in:
joerg 2010-08-07 21:03:18 +00:00
parent 11e43416a1
commit 981352168f
1 changed files with 28 additions and 11 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: cdefs.h,v 1.79 2010/07/31 00:04:43 joerg Exp $ */ /* $NetBSD: cdefs.h,v 1.80 2010/08/07 21:03:18 joerg Exp $ */
/* /*
* Copyright (c) 1991, 1993 * Copyright (c) 1991, 1993
@ -63,16 +63,6 @@
#include <sys/cdefs_aout.h> #include <sys/cdefs_aout.h>
#endif #endif
#if defined(__cplusplus)
#define __BEGIN_DECLS extern "C" {
#define __END_DECLS }
#define __static_cast(x,y) static_cast<x>(y)
#else
#define __BEGIN_DECLS
#define __END_DECLS
#define __static_cast(x,y) (x)y
#endif
/* /*
* The __CONCAT macro is used to concatenate parts of symbol names, e.g. * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
* with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
@ -228,6 +218,33 @@
#define __used __unused #define __used __unused
#endif #endif
#if __GNUC_PREREQ__(4, 0)
# define __dso_public __attribute__((__visibility__("default")))
# define __dso_hidden __attribute__((__visibility__("hidden")))
# define __BEGIN_PUBLIC _Pragma("GCC visibility push(default)")
# define __END_PUBLIC _Pragma("GCC visibility pop")
# define __BEGIN_HIDDEN _Pragma("GCC visibility push(hidden)")
# define __END_HIDDEN _Pragma("GCC visibility pop")
#else
# define __dso_public
# define __dso_hidden
# define __BEGIN_PUBLIC
# define __END_PUBLIC
# define __BEGIN_HIDDEN
# define __END_HIDDEN
#endif
#if defined(__cplusplus)
#define __BEGIN_DECLS __BEGIN_PUBLIC extern "C" {
#define __END_DECLS } __END_PUBLIC
#define __static_cast(x,y) static_cast<x>(y)
#else
#define __BEGIN_DECLS __BEGIN_PUBLIC
#define __END_DECLS __END_PUBLIC
#define __static_cast(x,y) (x)y
#endif
/* /*
* Non-static C99 inline functions are optional bodies. They don't * Non-static C99 inline functions are optional bodies. They don't
* create global symbols if not used, but can be replaced if desirable. * create global symbols if not used, but can be replaced if desirable.