From f58c5b09fb59baf07c942d373fc4d522b27e73c6 Mon Sep 17 00:00:00 2001
From: Kevin Cernekee <cernekee@chromium.org>
Date: Wed, 4 Jan 2017 14:30:26 -0800
Subject: Use __EXPORTED rather than EXPORT_SYMBOL

clang is sensitive to the ordering of
__attribute__((visibility("default"))) relative to the function
body.  gcc is not.  So if we try to re-declare an existing function
with default visibility, clang prints a warning and generates
a broken .so file in which nfct_helper_* are not exported to library
callers.

Move the attribute up into the function definition to make clang happy.

Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
 doxygen.cfg.in              |  2 +-
 src/internal.h              |  5 ++-
 src/libnetfilter_cthelper.c | 83 ++++++++++++++++++---------------------------
 3 files changed, 36 insertions(+), 54 deletions(-)

diff --git a/doxygen.cfg.in b/doxygen.cfg.in
index cac9b05..190b7cd 100644
--- a/doxygen.cfg.in
+++ b/doxygen.cfg.in
@@ -72,7 +72,7 @@ RECURSIVE              = YES
 EXCLUDE                = 
 EXCLUDE_SYMLINKS       = NO
 EXCLUDE_PATTERNS       = */.git/* .*.d
-EXCLUDE_SYMBOLS        = EXPORT_SYMBOL
+EXCLUDE_SYMBOLS        = 
 EXAMPLE_PATH           = 
 EXAMPLE_PATTERNS       = 
 EXAMPLE_RECURSIVE      = NO
diff --git a/src/internal.h b/src/internal.h
index 3a88d1a..5d78171 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -3,10 +3,9 @@
 
 #include "config.h"
 #ifdef HAVE_VISIBILITY_HIDDEN
-#	define __visible	__attribute__((visibility("default")))
-#	define EXPORT_SYMBOL(x)	typeof(x) (x) __visible
+#	define __EXPORTED	__attribute__((visibility("default")))
 #else
-#	define EXPORT_SYMBOL
+#	define __EXPORTED
 #endif
 
 #endif
diff --git a/src/libnetfilter_cthelper.c b/src/libnetfilter_cthelper.c
index f8f58e6..af543a1 100644
--- a/src/libnetfilter_cthelper.c
+++ b/src/libnetfilter_cthelper.c
@@ -99,17 +99,16 @@ struct nfct_helper {
  * In case of success, this function returns a valid pointer, otherwise NULL
  * s returned and errno is appropriately set.
  */
-struct nfct_helper *nfct_helper_alloc(void)
+struct nfct_helper __EXPORTED *nfct_helper_alloc(void)
 {
 	return calloc(1, sizeof(struct nfct_helper));
 }
-EXPORT_SYMBOL(nfct_helper_alloc);
 
 /**
  * nfct_helper_free - release one helper object
  * \param nfct_helper pointer to the helper object
  */
-void nfct_helper_free(struct nfct_helper *h)
+void __EXPORTED nfct_helper_free(struct nfct_helper *h)
 {
 	int i;
 
@@ -119,7 +118,6 @@ void nfct_helper_free(struct nfct_helper *h)
 	}
 	free(h);
 }
-EXPORT_SYMBOL(nfct_helper_free);
 
 /**
  * nfct_helper_policy_alloc - allocate a new helper policy object
@@ -127,21 +125,19 @@ EXPORT_SYMBOL(nfct_helper_free);
  * In case of success, this function returns a valid pointer, otherwise NULL
  * s returned and errno is appropriately set.
  */
-struct nfct_helper_policy *nfct_helper_policy_alloc(void)
+struct nfct_helper_policy __EXPORTED *nfct_helper_policy_alloc(void)
 {
 	return calloc(1, sizeof(struct nfct_helper_policy));
 }
-EXPORT_SYMBOL(nfct_helper_policy_alloc);
 
 /**
  * nfct_helper_free - release one helper policy object
  * \param nfct_helper pointer to the helper object
  */
-void nfct_helper_policy_free(struct nfct_helper_policy *p)
+void __EXPORTED nfct_helper_policy_free(struct nfct_helper_policy *p)
 {
 	free(p);
 }
-EXPORT_SYMBOL(nfct_helper_policy_free);
 
 /**
  * nfct_helper_policy_attr_set - set one attribute of the helper object
@@ -149,7 +145,7 @@ EXPORT_SYMBOL(nfct_helper_policy_free);
  * \param type attribute type you want to set
  * \param data pointer to data that will be used to set this attribute
  */
-void
+void __EXPORTED
 nfct_helper_policy_attr_set(struct nfct_helper_policy *p,
 			    enum nfct_helper_policy_attr_type type,
 			    const void *data)
@@ -170,7 +166,6 @@ nfct_helper_policy_attr_set(struct nfct_helper_policy *p,
 		break;
 	}
 }
-EXPORT_SYMBOL(nfct_helper_policy_attr_set);
 
 /**
  * nfct_helper_attr_set_str - set one attribute the helper object
@@ -178,23 +173,21 @@ EXPORT_SYMBOL(nfct_helper_policy_attr_set);
  * \param type attribute type you want to set
  * \param name string that will be used to set this attribute
  */
-void
+void __EXPORTED
 nfct_helper_policy_attr_set_str(struct nfct_helper_policy *p,
 				enum nfct_helper_policy_attr_type type,
 				const char *name)
 {
 	nfct_helper_policy_attr_set(p, type, name);
 }
-EXPORT_SYMBOL(nfct_helper_policy_attr_set_str);
 
-void
+void __EXPORTED
 nfct_helper_policy_attr_set_u32(struct nfct_helper_policy *p,
 				enum nfct_helper_policy_attr_type type,
 				uint32_t value)
 {
 	nfct_helper_policy_attr_set(p, type, &value);
 }
-EXPORT_SYMBOL(nfct_helper_policy_attr_set_u32);
 
 /**
  * nfct_helper_attr_set - set one attribute of the helper object
@@ -202,7 +195,7 @@ EXPORT_SYMBOL(nfct_helper_policy_attr_set_u32);
  * \param type attribute type you want to set
  * \param data pointer to data that will be used to set this attribute
  */
-void
+void __EXPORTED
 nfct_helper_attr_set(struct nfct_helper *h,
 		     enum nfct_helper_attr_type type, const void *data)
 {
@@ -250,7 +243,6 @@ nfct_helper_attr_set(struct nfct_helper *h,
 		break;
 	}
 }
-EXPORT_SYMBOL(nfct_helper_attr_set);
 
 /**
  * nfct_helper_attr_set_str - set one attribute the helper object
@@ -258,44 +250,40 @@ EXPORT_SYMBOL(nfct_helper_attr_set);
  * \param type attribute type you want to set
  * \param name string that will be used to set this attribute
  */
-void
+void __EXPORTED
 nfct_helper_attr_set_str(struct nfct_helper *nfct_helper, enum nfct_helper_attr_type type,
 		    const char *name)
 {
 	nfct_helper_attr_set(nfct_helper, type, name);
 }
-EXPORT_SYMBOL(nfct_helper_attr_set_str);
 
-void
+void __EXPORTED
 nfct_helper_attr_set_u8(struct nfct_helper *nfct_helper,
 			 enum nfct_helper_attr_type type, uint8_t value)
 {
 	nfct_helper_attr_set(nfct_helper, type, &value);
 }
-EXPORT_SYMBOL(nfct_helper_attr_set_u8);
 
-void
+void __EXPORTED
 nfct_helper_attr_set_u16(struct nfct_helper *nfct_helper,
 			 enum nfct_helper_attr_type type, uint16_t value)
 {
 	nfct_helper_attr_set(nfct_helper, type, &value);
 }
-EXPORT_SYMBOL(nfct_helper_attr_set_u16);
 
-void
+void __EXPORTED
 nfct_helper_attr_set_u32(struct nfct_helper *nfct_helper,
 			 enum nfct_helper_attr_type type, uint32_t value)
 {
 	nfct_helper_attr_set(nfct_helper, type, &value);
 }
-EXPORT_SYMBOL(nfct_helper_attr_set_u32);
 
 /**
  * nfct_helper_attr_unset - unset one attribute the helper object
  * \param nfct_helper pointer to the helper object
  * \param type attribute type you want to set
  */
-void
+void __EXPORTED
 nfct_helper_attr_unset(struct nfct_helper *nfct_helper, enum nfct_helper_attr_type type)
 {
 	switch(type) {
@@ -307,7 +295,6 @@ nfct_helper_attr_unset(struct nfct_helper *nfct_helper, enum nfct_helper_attr_ty
 		break;
 	}
 }
-EXPORT_SYMBOL(nfct_helper_attr_unset);
 
 /**
  * nfct_helper_attr_get - get one attribute the helper object
@@ -317,8 +304,9 @@ EXPORT_SYMBOL(nfct_helper_attr_unset);
  * This function returns a valid pointer to the attribute data. If a
  * unsupported attribute is used, this returns NULL.
  */
-const void *nfct_helper_attr_get(struct nfct_helper *helper,
-				 enum nfct_helper_attr_type type)
+const void __EXPORTED *
+nfct_helper_attr_get(struct nfct_helper *helper,
+		     enum nfct_helper_attr_type type)
 {
 	const void *ret = NULL;
 
@@ -358,7 +346,6 @@ const void *nfct_helper_attr_get(struct nfct_helper *helper,
 	}
 	return ret;
 }
-EXPORT_SYMBOL(nfct_helper_attr_get);
 
 /**
  * nfct_helper_attr_get_str - get one attribute the helper object
@@ -368,13 +355,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get);
  * This function returns a valid pointer to the beginning of the string.
  * If the attribute is unsupported, this returns NULL.
  */
-const char *
+const char __EXPORTED *
 nfct_helper_attr_get_str(struct nfct_helper *nfct_helper,
 			 enum nfct_helper_attr_type type)
 {
 	return (const char *)nfct_helper_attr_get(nfct_helper, type);
 }
-EXPORT_SYMBOL(nfct_helper_attr_get_str);
 
 /**
  * nfct_helper_attr_get_u8 - get one attribute the helper object
@@ -384,12 +370,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_str);
  * This function returns a unsigned 8-bits integer. If the attribute is
  * unsupported, this returns NULL.
  */
-uint8_t nfct_helper_attr_get_u8(struct nfct_helper *nfct_helper,
-				  enum nfct_helper_attr_type type)
+uint8_t __EXPORTED
+nfct_helper_attr_get_u8(struct nfct_helper *nfct_helper,
+			enum nfct_helper_attr_type type)
 {
 	return *((uint8_t *)nfct_helper_attr_get(nfct_helper, type));
 }
-EXPORT_SYMBOL(nfct_helper_attr_get_u8);
 
 /**
  * nfct_helper_attr_get_u16 - get one attribute the helper object
@@ -399,12 +385,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u8);
  * This function returns a unsigned 16-bits integer. If the attribute is
  * unsupported, this returns NULL.
  */
-uint16_t nfct_helper_attr_get_u16(struct nfct_helper *nfct_helper,
-				  enum nfct_helper_attr_type type)
+uint16_t __EXPORTED
+nfct_helper_attr_get_u16(struct nfct_helper *nfct_helper,
+			 enum nfct_helper_attr_type type)
 {
 	return *((uint16_t *)nfct_helper_attr_get(nfct_helper, type));
 }
-EXPORT_SYMBOL(nfct_helper_attr_get_u16);
 
 /**
  * nfct_helper_attr_get_u32 - get one attribute the helper object
@@ -414,12 +400,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u16);
  * This function returns a unsigned 32-bits integer. If the attribute is
  * unsupported, this returns NULL.
  */
-uint32_t nfct_helper_attr_get_u32(struct nfct_helper *nfct_helper,
-				  enum nfct_helper_attr_type type)
+uint32_t __EXPORTED
+nfct_helper_attr_get_u32(struct nfct_helper *nfct_helper,
+			 enum nfct_helper_attr_type type)
 {
 	return *((uint32_t *)nfct_helper_attr_get(nfct_helper, type));
 }
-EXPORT_SYMBOL(nfct_helper_attr_get_u32);
 
 /**
  * nfct_helper_snprintf - print helper object into one buffer
@@ -431,9 +417,10 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u32);
  * This function returns -1 in case that some mandatory attributes are
  * missing. On sucess, it returns 0.
  */
-int nfct_helper_snprintf(char *buf, size_t size,
-			 struct nfct_helper *helper,
-			 unsigned int type, unsigned int flags)
+int __EXPORTED
+nfct_helper_snprintf(char *buf, size_t size,
+		     struct nfct_helper *helper,
+		     unsigned int type, unsigned int flags)
 {
 	int ret;
 
@@ -454,7 +441,6 @@ int nfct_helper_snprintf(char *buf, size_t size,
 
 	return ret;
 }
-EXPORT_SYMBOL(nfct_helper_snprintf);
 
 /**
  * @}
@@ -490,7 +476,7 @@ EXPORT_SYMBOL(nfct_helper_snprintf);
  * - Command NFNL_MSG_ACCT_DEL, to delete one specific nfct_helper object (if
  *   unused, otherwise you hit EBUSY).
  */
-struct nlmsghdr *
+struct nlmsghdr __EXPORTED *
 nfct_helper_nlmsg_build_hdr(char *buf, uint8_t cmd,
 			    uint16_t flags, uint32_t seq)
 {
@@ -509,7 +495,6 @@ nfct_helper_nlmsg_build_hdr(char *buf, uint8_t cmd,
 
 	return nlh;
 }
-EXPORT_SYMBOL(nfct_helper_nlmsg_build_hdr);
 
 static void
 nfct_helper_nlmsg_build_policy(struct nlmsghdr *nlh,
@@ -530,7 +515,7 @@ nfct_helper_nlmsg_build_policy(struct nlmsghdr *nlh,
  * \param nlh: netlink message that you want to use to add the payload.
  * \param nfct_helper: pointer to a helper object
  */
-void
+void __EXPORTED
 nfct_helper_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfct_helper *h)
 {
 	struct nlattr *nest;
@@ -593,7 +578,6 @@ nfct_helper_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfct_helper *h)
 	if (h->bitset & (1 << NFCTH_ATTR_STATUS))
 		mnl_attr_put_u32(nlh, NFCTH_STATUS, ntohl(h->status));
 }
-EXPORT_SYMBOL(nfct_helper_nlmsg_build_payload);
 
 static int
 nfct_helper_nlmsg_parse_tuple_cb(const struct nlattr *attr, void *data)
@@ -795,7 +779,7 @@ nfct_helper_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data)
  * This function returns -1 in case that some mandatory attributes are
  * missing. On sucess, it returns 0.
  */
-int
+int __EXPORTED
 nfct_helper_nlmsg_parse_payload(const struct nlmsghdr *nlh,
 				struct nfct_helper *h)
 {
@@ -832,7 +816,6 @@ nfct_helper_nlmsg_parse_payload(const struct nlmsghdr *nlh,
 	}
 	return 0;
 }
-EXPORT_SYMBOL(nfct_helper_nlmsg_parse_payload);
 
 /**
  * @}
-- 
cgit v1.1

