From d0c4e39d12f903e06db262656cff2e24d267bed7 Mon Sep 17 00:00:00 2001 
 | 
From: Kevin Cernekee <cernekee@chromium.org> 
 | 
Date: Wed, 4 Jan 2017 14:30:25 -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_timeout_* 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_cttimeout.c | 44 +++++++++++++++++--------------------------- 
 | 
 3 files changed, 20 insertions(+), 31 deletions(-) 
 | 
  
 | 
diff --git a/doxygen.cfg.in b/doxygen.cfg.in 
 | 
index 8e5d449..09c3ce0 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 nfct_timeout _container_policy_cb 
 | 
+EXCLUDE_SYMBOLS        = nfct_timeout _container_policy_cb 
 | 
 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_cttimeout.c b/src/libnetfilter_cttimeout.c 
 | 
index 7844a1f..a0a7185 100644 
 | 
--- a/src/libnetfilter_cttimeout.c 
 | 
+++ b/src/libnetfilter_cttimeout.c 
 | 
@@ -187,7 +187,7 @@ struct nfct_timeout { 
 | 
  * In case of success, this function returns a valid pointer, otherwise NULL 
 | 
  * s returned and errno is appropriately set. 
 | 
  */ 
 | 
-struct nfct_timeout *nfct_timeout_alloc(void) 
 | 
+struct nfct_timeout __EXPORTED *nfct_timeout_alloc(void) 
 | 
 { 
 | 
     struct nfct_timeout *t; 
 | 
  
 | 
@@ -197,19 +197,17 @@ struct nfct_timeout *nfct_timeout_alloc(void) 
 | 
  
 | 
     return t; 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_alloc); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_free - release one conntrack timeout object 
 | 
  * \param t pointer to the conntrack timeout object 
 | 
  */ 
 | 
-void nfct_timeout_free(struct nfct_timeout *t) 
 | 
+void __EXPORTED nfct_timeout_free(struct nfct_timeout *t) 
 | 
 { 
 | 
     if (t->timeout) 
 | 
         free(t->timeout); 
 | 
     free(t); 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_free); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_attr_set - set one attribute of the conntrack timeout object 
 | 
@@ -217,7 +215,7 @@ EXPORT_SYMBOL(nfct_timeout_free); 
 | 
  * \param type attribute type you want to set 
 | 
  * \param data pointer to data that will be used to set this attribute 
 | 
  */ 
 | 
-int 
 | 
+int __EXPORTED 
 | 
 nfct_timeout_attr_set(struct nfct_timeout *t, uint32_t type, const void *data) 
 | 
 { 
 | 
     switch(type) { 
 | 
@@ -236,7 +234,6 @@ nfct_timeout_attr_set(struct nfct_timeout *t, uint32_t type, const void *data) 
 | 
     t->attrset |= (1 << type); 
 | 
     return 0; 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_attr_set); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_attr_set_u8 - set one attribute of the conntrack timeout object 
 | 
@@ -244,12 +241,11 @@ EXPORT_SYMBOL(nfct_timeout_attr_set); 
 | 
  * \param type attribute type you want to set 
 | 
  * \param data pointer to data that will be used to set this attribute 
 | 
  */ 
 | 
-int 
 | 
+int __EXPORTED 
 | 
 nfct_timeout_attr_set_u8(struct nfct_timeout *t, uint32_t type, uint8_t data) 
 | 
 { 
 | 
     return nfct_timeout_attr_set(t, type, &data); 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_attr_set_u8); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_attr_set_u16 - set one attribute of the conntrack timeout object 
 | 
@@ -257,23 +253,21 @@ EXPORT_SYMBOL(nfct_timeout_attr_set_u8); 
 | 
  * \param type attribute type you want to set 
 | 
  * \param data pointer to data that will be used to set this attribute 
 | 
  */ 
 | 
-int 
 | 
+int __EXPORTED 
 | 
 nfct_timeout_attr_set_u16(struct nfct_timeout *t, uint32_t type, uint16_t data) 
 | 
 { 
 | 
     return nfct_timeout_attr_set(t, type, &data); 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_attr_set_u16); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_attr_unset - unset one attribute of the conntrack timeout object 
 | 
  * \param t pointer to the conntrack timeout object 
 | 
  * \param type attribute type you want to set 
 | 
  */ 
 | 
-void nfct_timeout_attr_unset(struct nfct_timeout *t, uint32_t type) 
 | 
+void __EXPORTED nfct_timeout_attr_unset(struct nfct_timeout *t, uint32_t type) 
 | 
 { 
 | 
     t->attrset &= ~(1 << type); 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_attr_unset); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_policy_attr_set_u32 - set one attribute of the policy 
 | 
@@ -281,7 +275,7 @@ EXPORT_SYMBOL(nfct_timeout_attr_unset); 
 | 
  * \param type attribute type you want to set 
 | 
  * \param data data that will be used to set this attribute 
 | 
  */ 
 | 
-int 
 | 
+int __EXPORTED 
 | 
 nfct_timeout_policy_attr_set_u32(struct nfct_timeout *t, 
 | 
                  uint32_t type, uint32_t data) 
 | 
 { 
 | 
@@ -319,18 +313,17 @@ nfct_timeout_policy_attr_set_u32(struct nfct_timeout *t, 
 | 
  
 | 
     return 0; 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_policy_attr_set_u32); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_policy_attr_unset - unset one attribute of the policy 
 | 
  * \param t pointer to the conntrack timeout object 
 | 
  * \param type attribute type you want to set 
 | 
  */ 
 | 
-void nfct_timeout_policy_attr_unset(struct nfct_timeout *t, uint32_t type) 
 | 
+void __EXPORTED 
 | 
+nfct_timeout_policy_attr_unset(struct nfct_timeout *t, uint32_t type) 
 | 
 { 
 | 
     t->attrset &= ~(1 << type); 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_policy_attr_unset); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_policy_attr_to_name - get state name from protocol state number 
 | 
@@ -340,7 +333,8 @@ EXPORT_SYMBOL(nfct_timeout_policy_attr_unset); 
 | 
  * This function returns NULL if unsupported protocol or state number is passed. 
 | 
  * Otherwise, a pointer to valid string is returned. 
 | 
  */ 
 | 
-const char *nfct_timeout_policy_attr_to_name(uint8_t l4proto, uint32_t state) 
 | 
+const char __EXPORTED * 
 | 
+nfct_timeout_policy_attr_to_name(uint8_t l4proto, uint32_t state) 
 | 
 { 
 | 
     if (timeout_protocol[l4proto].state_to_name == NULL) { 
 | 
         printf("no array state name\n"); 
 | 
@@ -354,7 +348,6 @@ const char *nfct_timeout_policy_attr_to_name(uint8_t l4proto, uint32_t state) 
 | 
  
 | 
     return timeout_protocol[l4proto].state_to_name[state]; 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_policy_attr_to_name); 
 | 
  
 | 
 /** 
 | 
  * @} 
 | 
@@ -438,8 +431,9 @@ nfct_timeout_snprintf_default(char *buf, size_t size, 
 | 
  * This function returns -1 in case that some mandatory attributes are 
 | 
  * missing. On sucess, it returns 0. 
 | 
  */ 
 | 
-int nfct_timeout_snprintf(char *buf, size_t size, const struct nfct_timeout *t, 
 | 
-              unsigned int type, unsigned int flags) 
 | 
+int __EXPORTED 
 | 
+nfct_timeout_snprintf(char *buf, size_t size, const struct nfct_timeout *t, 
 | 
+              unsigned int type, unsigned int flags) 
 | 
 { 
 | 
     int ret = 0; 
 | 
  
 | 
@@ -454,7 +448,6 @@ int nfct_timeout_snprintf(char *buf, size_t size, const struct nfct_timeout *t, 
 | 
  
 | 
     return ret; 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_snprintf); 
 | 
  
 | 
 /** 
 | 
  * @} 
 | 
@@ -477,7 +470,7 @@ EXPORT_SYMBOL(nfct_timeout_snprintf); 
 | 
  * - CTNL_MSG_TIMEOUT_GET: get conntrack timeout object. 
 | 
  * - CTNL_MSG_TIMEOUT_DEL: delete conntrack timeout object. 
 | 
  */ 
 | 
-struct nlmsghdr * 
 | 
+struct nlmsghdr __EXPORTED * 
 | 
 nfct_timeout_nlmsg_build_hdr(char *buf, uint8_t cmd, 
 | 
                  uint16_t flags, uint32_t seq) 
 | 
 { 
 | 
@@ -496,14 +489,13 @@ nfct_timeout_nlmsg_build_hdr(char *buf, uint8_t cmd, 
 | 
  
 | 
     return nlh; 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_nlmsg_build_hdr); 
 | 
  
 | 
 /** 
 | 
  * nfct_timeout_nlmsg_build_payload - build payload from ct timeout object 
 | 
  * \param nlh: netlink message that you want to use to add the payload. 
 | 
  * \param t: pointer to a conntrack timeout object 
 | 
  */ 
 | 
-void 
 | 
+void __EXPORTED 
 | 
 nfct_timeout_nlmsg_build_payload(struct nlmsghdr *nlh, 
 | 
                  const struct nfct_timeout *t) 
 | 
 { 
 | 
@@ -532,7 +524,6 @@ nfct_timeout_nlmsg_build_payload(struct nlmsghdr *nlh, 
 | 
     } 
 | 
  
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_nlmsg_build_payload); 
 | 
  
 | 
 static int 
 | 
 timeout_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data) 
 | 
@@ -629,7 +620,7 @@ timeout_parse_attr_data(struct nfct_timeout *t, const struct nlattr *nest) 
 | 
  * This function returns -1 in case that some mandatory attributes are 
 | 
  * missing. On sucess, it returns 0. 
 | 
  */ 
 | 
-int 
 | 
+int __EXPORTED 
 | 
 nfct_timeout_nlmsg_parse_payload(const struct nlmsghdr *nlh, 
 | 
                  struct nfct_timeout *t) 
 | 
 { 
 | 
@@ -654,7 +645,6 @@ nfct_timeout_nlmsg_parse_payload(const struct nlmsghdr *nlh, 
 | 
     } 
 | 
     return 0; 
 | 
 } 
 | 
-EXPORT_SYMBOL(nfct_timeout_nlmsg_parse_payload); 
 | 
  
 | 
 /** 
 | 
  * @} 
 | 
--  
 | 
cgit v1.1 
 |