mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-02 23:48:17 -07:00
net-libs/libnetfilter_cttimeout: add upstream fix for building under clang
Also switch to using subslots w/libmnl.
This commit is contained in:
committed by
Mike Frysinger
parent
0ef3a2a660
commit
8041e8a7dd
@@ -0,0 +1,266 @@
|
||||
fix from upstream
|
||||
|
||||
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: [PATCH] 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 8e5d4495eb41..09c3ce00e422 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 3a88d1a1f7d8..5d781718ddad 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 7844a1f9c19a..a0a71851b0eb 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);
|
||||
|
||||
/**
|
||||
* @}
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# Copyright 1999-2017 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI="5"
|
||||
|
||||
inherit linux-info autotools-utils
|
||||
|
||||
DESCRIPTION="netlink interface to the connection tracking timeout infrastructure in the kernel packet filter"
|
||||
HOMEPAGE="http://www.netfilter.org/projects/libnetfilter_cttimeout"
|
||||
SRC_URI="http://www.netfilter.org/projects/${PN}/files/${P}.tar.bz2"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~x86"
|
||||
IUSE="static-libs"
|
||||
|
||||
RDEPEND="net-libs/libmnl:="
|
||||
DEPEND="${RDEPEND}
|
||||
virtual/pkgconfig"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${P}-clang-export.patch
|
||||
)
|
||||
|
||||
CONFIG_CHECK="~NF_CT_NETLINK_TIMEOUT"
|
||||
|
||||
pkg_setup() {
|
||||
linux-info_pkg_setup
|
||||
kernel_is lt 3 4 0 && ewarn "requires at least 3.4.0 kernel version"
|
||||
}
|
||||
Reference in New Issue
Block a user