blob: 995fd59a5362cb8b367f17c3a61b52e823bd44ab [file] [log] [blame]
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08001From 21eb59fbd071ebffb8495232766824944fb521a0 Mon Sep 17 00:00:00 2001
2From: Alex Kiernan <alex.kiernan@gmail.com>
3Date: Wed, 7 Nov 2018 21:19:53 +0000
4Subject: [PATCH] Move exports before symbol definition
5
6Based on 7966020 ("src: Fix exporting symbols with clang"), when
7EXPORT_SYMBOL is located after function definition, clang won't properly
8export the function, resulting in a library with no symbols when built with
9clang.
10
11Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
12---
13 src/flowtable.c | 54 +++++++++++++++++++++++++++---------------------------
14 1 file changed, 27 insertions(+), 27 deletions(-)
15
16diff --git a/src/flowtable.c b/src/flowtable.c
17index c1ddae4..d7434e3 100644
18--- a/src/flowtable.c
19+++ b/src/flowtable.c
20@@ -34,12 +34,13 @@ struct nftnl_flowtable {
21 uint32_t flags;
22 };
23
24+EXPORT_SYMBOL(nftnl_flowtable_alloc);
25 struct nftnl_flowtable *nftnl_flowtable_alloc(void)
26 {
27 return calloc(1, sizeof(struct nftnl_flowtable));
28 }
29-EXPORT_SYMBOL(nftnl_flowtable_alloc);
30
31+EXPORT_SYMBOL(nftnl_flowtable_free);
32 void nftnl_flowtable_free(const struct nftnl_flowtable *c)
33 {
34 int i;
35@@ -56,14 +57,14 @@ void nftnl_flowtable_free(const struct nftnl_flowtable *c)
36 }
37 xfree(c);
38 }
39-EXPORT_SYMBOL(nftnl_flowtable_free);
40
41+EXPORT_SYMBOL(nftnl_flowtable_is_set);
42 bool nftnl_flowtable_is_set(const struct nftnl_flowtable *c, uint16_t attr)
43 {
44 return c->flags & (1 << attr);
45 }
46-EXPORT_SYMBOL(nftnl_flowtable_is_set);
47
48+EXPORT_SYMBOL(nftnl_flowtable_unset);
49 void nftnl_flowtable_unset(struct nftnl_flowtable *c, uint16_t attr)
50 {
51 int i;
52@@ -96,7 +97,6 @@ void nftnl_flowtable_unset(struct nftnl_flowtable *c, uint16_t attr)
53
54 c->flags &= ~(1 << attr);
55 }
56-EXPORT_SYMBOL(nftnl_flowtable_unset);
57
58 static uint32_t nftnl_flowtable_validate[NFTNL_FLOWTABLE_MAX + 1] = {
59 [NFTNL_FLOWTABLE_HOOKNUM] = sizeof(uint32_t),
60@@ -105,6 +105,7 @@ static uint32_t nftnl_flowtable_validate[NFTNL_FLOWTABLE_MAX + 1] = {
61 [NFTNL_FLOWTABLE_FLAGS] = sizeof(uint32_t),
62 };
63
64+EXPORT_SYMBOL(nftnl_flowtable_set_data);
65 int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
66 const void *data, uint32_t data_len)
67 {
68@@ -170,32 +171,32 @@ int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
69 c->flags |= (1 << attr);
70 return 0;
71 }
72-EXPORT_SYMBOL(nftnl_flowtable_set_data);
73
74+EXPORT_SYMBOL(nftnl_flowtable_set);
75 void nftnl_flowtable_set(struct nftnl_flowtable *c, uint16_t attr, const void *data)
76 {
77 nftnl_flowtable_set_data(c, attr, data, nftnl_flowtable_validate[attr]);
78 }
79-EXPORT_SYMBOL(nftnl_flowtable_set);
80
81+EXPORT_SYMBOL(nftnl_flowtable_set_u32);
82 void nftnl_flowtable_set_u32(struct nftnl_flowtable *c, uint16_t attr, uint32_t data)
83 {
84 nftnl_flowtable_set_data(c, attr, &data, sizeof(uint32_t));
85 }
86-EXPORT_SYMBOL(nftnl_flowtable_set_u32);
87
88+EXPORT_SYMBOL(nftnl_flowtable_set_s32);
89 void nftnl_flowtable_set_s32(struct nftnl_flowtable *c, uint16_t attr, int32_t data)
90 {
91 nftnl_flowtable_set_data(c, attr, &data, sizeof(int32_t));
92 }
93-EXPORT_SYMBOL(nftnl_flowtable_set_s32);
94
95+EXPORT_SYMBOL(nftnl_flowtable_set_str);
96 int nftnl_flowtable_set_str(struct nftnl_flowtable *c, uint16_t attr, const char *str)
97 {
98 return nftnl_flowtable_set_data(c, attr, str, strlen(str) + 1);
99 }
100-EXPORT_SYMBOL(nftnl_flowtable_set_str);
101
102+EXPORT_SYMBOL(nftnl_flowtable_get_data);
103 const void *nftnl_flowtable_get_data(const struct nftnl_flowtable *c,
104 uint16_t attr, uint32_t *data_len)
105 {
106@@ -229,21 +230,21 @@ const void *nftnl_flowtable_get_data(const struct nftnl_flowtable *c,
107 }
108 return NULL;
109 }
110-EXPORT_SYMBOL(nftnl_flowtable_get_data);
111
112+EXPORT_SYMBOL(nftnl_flowtable_get);
113 const void *nftnl_flowtable_get(const struct nftnl_flowtable *c, uint16_t attr)
114 {
115 uint32_t data_len;
116 return nftnl_flowtable_get_data(c, attr, &data_len);
117 }
118-EXPORT_SYMBOL(nftnl_flowtable_get);
119
120+EXPORT_SYMBOL(nftnl_flowtable_get_str);
121 const char *nftnl_flowtable_get_str(const struct nftnl_flowtable *c, uint16_t attr)
122 {
123 return nftnl_flowtable_get(c, attr);
124 }
125-EXPORT_SYMBOL(nftnl_flowtable_get_str);
126
127+EXPORT_SYMBOL(nftnl_flowtable_get_u32);
128 uint32_t nftnl_flowtable_get_u32(const struct nftnl_flowtable *c, uint16_t attr)
129 {
130 uint32_t data_len;
131@@ -253,8 +254,8 @@ uint32_t nftnl_flowtable_get_u32(const struct nftnl_flowtable *c, uint16_t attr)
132
133 return val ? *val : 0;
134 }
135-EXPORT_SYMBOL(nftnl_flowtable_get_u32);
136
137+EXPORT_SYMBOL(nftnl_flowtable_get_s32);
138 int32_t nftnl_flowtable_get_s32(const struct nftnl_flowtable *c, uint16_t attr)
139 {
140 uint32_t data_len;
141@@ -264,8 +265,8 @@ int32_t nftnl_flowtable_get_s32(const struct nftnl_flowtable *c, uint16_t attr)
142
143 return val ? *val : 0;
144 }
145-EXPORT_SYMBOL(nftnl_flowtable_get_s32);
146
147+EXPORT_SYMBOL(nftnl_flowtable_nlmsg_build_payload);
148 void nftnl_flowtable_nlmsg_build_payload(struct nlmsghdr *nlh,
149 const struct nftnl_flowtable *c)
150 {
151@@ -301,7 +302,6 @@ void nftnl_flowtable_nlmsg_build_payload(struct nlmsghdr *nlh,
152 if (c->flags & (1 << NFTNL_FLOWTABLE_SIZE))
153 mnl_attr_put_u32(nlh, NFTA_FLOWTABLE_SIZE, htonl(c->size));
154 }
155-EXPORT_SYMBOL(nftnl_flowtable_nlmsg_build_payload);
156
157 static int nftnl_flowtable_parse_attr_cb(const struct nlattr *attr, void *data)
158 {
159@@ -412,6 +412,7 @@ static int nftnl_flowtable_parse_hook(struct nlattr *attr, struct nftnl_flowtabl
160 return 0;
161 }
162
163+EXPORT_SYMBOL(nftnl_flowtable_nlmsg_parse);
164 int nftnl_flowtable_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_flowtable *c)
165 {
166 struct nlattr *tb[NFTA_FLOWTABLE_MAX + 1] = {};
167@@ -460,7 +461,6 @@ int nftnl_flowtable_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_flowtab
168
169 return ret;
170 }
171-EXPORT_SYMBOL(nftnl_flowtable_nlmsg_parse);
172
173 static const char *nftnl_hooknum2str(int family, int hooknum)
174 {
175@@ -612,20 +612,20 @@ static int nftnl_flowtable_do_parse(struct nftnl_flowtable *c,
176 return ret;
177 }
178
179+EXPORT_SYMBOL(nftnl_flowtable_parse);
180 int nftnl_flowtable_parse(struct nftnl_flowtable *c, enum nftnl_parse_type type,
181 const char *data, struct nftnl_parse_err *err)
182 {
183 return nftnl_flowtable_do_parse(c, type, data, err, NFTNL_PARSE_BUFFER);
184 }
185-EXPORT_SYMBOL(nftnl_flowtable_parse);
186
187+EXPORT_SYMBOL(nftnl_flowtable_parse_file);
188 int nftnl_flowtable_parse_file(struct nftnl_flowtable *c,
189 enum nftnl_parse_type type,
190 FILE *fp, struct nftnl_parse_err *err)
191 {
192 return nftnl_flowtable_do_parse(c, type, fp, err, NFTNL_PARSE_FILE);
193 }
194-EXPORT_SYMBOL(nftnl_flowtable_parse_file);
195
196 static int nftnl_flowtable_export(char *buf, size_t size,
197 const struct nftnl_flowtable *c, int type)
198@@ -720,6 +720,7 @@ static int nftnl_flowtable_cmd_snprintf(char *buf, size_t size,
199 return offset;
200 }
201
202+EXPORT_SYMBOL(nftnl_flowtable_snprintf);
203 int nftnl_flowtable_snprintf(char *buf, size_t size, const struct nftnl_flowtable *c,
204 uint32_t type, uint32_t flags)
205 {
206@@ -729,7 +730,6 @@ int nftnl_flowtable_snprintf(char *buf, size_t size, const struct nftnl_flowtabl
207 return nftnl_flowtable_cmd_snprintf(buf, size, c, nftnl_flag2cmd(flags),
208 type, flags);
209 }
210-EXPORT_SYMBOL(nftnl_flowtable_snprintf);
211
212 static int nftnl_flowtable_do_snprintf(char *buf, size_t size, const void *c,
213 uint32_t cmd, uint32_t type, uint32_t flags)
214@@ -737,18 +737,19 @@ static int nftnl_flowtable_do_snprintf(char *buf, size_t size, const void *c,
215 return nftnl_flowtable_snprintf(buf, size, c, type, flags);
216 }
217
218+EXPORT_SYMBOL(nftnl_flowtable_fprintf);
219 int nftnl_flowtable_fprintf(FILE *fp, const struct nftnl_flowtable *c,
220 uint32_t type, uint32_t flags)
221 {
222 return nftnl_fprintf(fp, c, NFTNL_CMD_UNSPEC, type, flags,
223 nftnl_flowtable_do_snprintf);
224 }
225-EXPORT_SYMBOL(nftnl_flowtable_fprintf);
226
227 struct nftnl_flowtable_list {
228 struct list_head list;
229 };
230
231+EXPORT_SYMBOL(nftnl_flowtable_list_alloc);
232 struct nftnl_flowtable_list *nftnl_flowtable_list_alloc(void)
233 {
234 struct nftnl_flowtable_list *list;
235@@ -761,8 +762,8 @@ struct nftnl_flowtable_list *nftnl_flowtable_list_alloc(void)
236
237 return list;
238 }
239-EXPORT_SYMBOL(nftnl_flowtable_list_alloc);
240
241+EXPORT_SYMBOL(nftnl_flowtable_list_free);
242 void nftnl_flowtable_list_free(struct nftnl_flowtable_list *list)
243 {
244 struct nftnl_flowtable *s, *tmp;
245@@ -773,34 +774,34 @@ void nftnl_flowtable_list_free(struct nftnl_flowtable_list *list)
246 }
247 xfree(list);
248 }
249-EXPORT_SYMBOL(nftnl_flowtable_list_free);
250
251+EXPORT_SYMBOL(nftnl_flowtable_list_is_empty);
252 int nftnl_flowtable_list_is_empty(const struct nftnl_flowtable_list *list)
253 {
254 return list_empty(&list->list);
255 }
256-EXPORT_SYMBOL(nftnl_flowtable_list_is_empty);
257
258+EXPORT_SYMBOL(nftnl_flowtable_list_add);
259 void nftnl_flowtable_list_add(struct nftnl_flowtable *s,
260 struct nftnl_flowtable_list *list)
261 {
262 list_add(&s->head, &list->list);
263 }
264-EXPORT_SYMBOL(nftnl_flowtable_list_add);
265
266+EXPORT_SYMBOL(nftnl_flowtable_list_add_tail);
267 void nftnl_flowtable_list_add_tail(struct nftnl_flowtable *s,
268 struct nftnl_flowtable_list *list)
269 {
270 list_add_tail(&s->head, &list->list);
271 }
272-EXPORT_SYMBOL(nftnl_flowtable_list_add_tail);
273
274+EXPORT_SYMBOL(nftnl_flowtable_list_del);
275 void nftnl_flowtable_list_del(struct nftnl_flowtable *s)
276 {
277 list_del(&s->head);
278 }
279-EXPORT_SYMBOL(nftnl_flowtable_list_del);
280
281+EXPORT_SYMBOL(nftnl_flowtable_list_foreach);
282 int nftnl_flowtable_list_foreach(struct nftnl_flowtable_list *flowtable_list,
283 int (*cb)(struct nftnl_flowtable *t, void *data), void *data)
284 {
285@@ -814,4 +815,3 @@ int nftnl_flowtable_list_foreach(struct nftnl_flowtable_list *flowtable_list,
286 }
287 return 0;
288 }
289-EXPORT_SYMBOL(nftnl_flowtable_list_foreach);