blob: 699d0d922b3b78d213ee3243a596d9c8968fc200 [file] [log] [blame]
Brad Bishop26bdd442019-08-16 17:08:17 -04001From 6b76c76e6b3f93c422d666f49ee68df9d5426078 Mon Sep 17 00:00:00 2001
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08002From: 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---
Brad Bishop26bdd442019-08-16 17:08:17 -040013 src/flowtable.c | 54 ++++++++++++++++++++++++-------------------------
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080014 1 file changed, 27 insertions(+), 27 deletions(-)
15
16diff --git a/src/flowtable.c b/src/flowtable.c
Brad Bishop26bdd442019-08-16 17:08:17 -040017index 1f7ba30..80de952 100644
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080018--- 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;
Brad Bishop26bdd442019-08-16 17:08:17 -040052@@ -95,7 +96,6 @@ void nftnl_flowtable_unset(struct nftnl_flowtable *c, uint16_t attr)
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080053
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),
Brad Bishop26bdd442019-08-16 17:08:17 -040060@@ -104,6 +104,7 @@ static uint32_t nftnl_flowtable_validate[NFTNL_FLOWTABLE_MAX + 1] = {
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080061 [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 {
Brad Bishop26bdd442019-08-16 17:08:17 -040068@@ -169,32 +170,32 @@ int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080069 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 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400106@@ -228,21 +229,21 @@ const void *nftnl_flowtable_get_data(const struct nftnl_flowtable *c,
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800107 }
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 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400130 uint32_t data_len = 0;
131@@ -252,8 +253,8 @@ uint32_t nftnl_flowtable_get_u32(const struct nftnl_flowtable *c, uint16_t attr)
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800132
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 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400140 uint32_t data_len = 0;
141@@ -263,8 +264,8 @@ int32_t nftnl_flowtable_get_s32(const struct nftnl_flowtable *c, uint16_t attr)
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800142
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 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400151@@ -300,7 +301,6 @@ void nftnl_flowtable_nlmsg_build_payload(struct nlmsghdr *nlh,
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800152 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 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400159@@ -415,6 +415,7 @@ static int nftnl_flowtable_parse_hook(struct nlattr *attr, struct nftnl_flowtabl
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800160 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] = {};
Brad Bishop26bdd442019-08-16 17:08:17 -0400167@@ -463,7 +464,6 @@ int nftnl_flowtable_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_flowtab
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800168
169 return ret;
170 }
171-EXPORT_SYMBOL(nftnl_flowtable_nlmsg_parse);
172
173 static const char *nftnl_hooknum2str(int family, int hooknum)
174 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400175@@ -516,14 +516,15 @@ static inline int nftnl_str2hooknum(int family, const char *hook)
176 return -1;
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800177 }
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 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400183 errno = EOPNOTSUPP;
184 return -1;
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800185 }
186-EXPORT_SYMBOL(nftnl_flowtable_parse);
187
188+EXPORT_SYMBOL(nftnl_flowtable_parse_file);
189 int nftnl_flowtable_parse_file(struct nftnl_flowtable *c,
190 enum nftnl_parse_type type,
191 FILE *fp, struct nftnl_parse_err *err)
Brad Bishop26bdd442019-08-16 17:08:17 -0400192@@ -531,7 +532,6 @@ int nftnl_flowtable_parse_file(struct nftnl_flowtable *c,
193 errno = EOPNOTSUPP;
194 return -1;
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800195 }
196-EXPORT_SYMBOL(nftnl_flowtable_parse_file);
197
Brad Bishop26bdd442019-08-16 17:08:17 -0400198 static int nftnl_flowtable_snprintf_default(char *buf, size_t size,
199 const struct nftnl_flowtable *c)
200@@ -587,6 +587,7 @@ static int nftnl_flowtable_cmd_snprintf(char *buf, size_t size,
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800201 return offset;
202 }
203
204+EXPORT_SYMBOL(nftnl_flowtable_snprintf);
205 int nftnl_flowtable_snprintf(char *buf, size_t size, const struct nftnl_flowtable *c,
206 uint32_t type, uint32_t flags)
207 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400208@@ -596,7 +597,6 @@ int nftnl_flowtable_snprintf(char *buf, size_t size, const struct nftnl_flowtabl
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800209 return nftnl_flowtable_cmd_snprintf(buf, size, c, nftnl_flag2cmd(flags),
210 type, flags);
211 }
212-EXPORT_SYMBOL(nftnl_flowtable_snprintf);
213
214 static int nftnl_flowtable_do_snprintf(char *buf, size_t size, const void *c,
215 uint32_t cmd, uint32_t type, uint32_t flags)
Brad Bishop26bdd442019-08-16 17:08:17 -0400216@@ -604,18 +604,19 @@ static int nftnl_flowtable_do_snprintf(char *buf, size_t size, const void *c,
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800217 return nftnl_flowtable_snprintf(buf, size, c, type, flags);
218 }
219
220+EXPORT_SYMBOL(nftnl_flowtable_fprintf);
221 int nftnl_flowtable_fprintf(FILE *fp, const struct nftnl_flowtable *c,
222 uint32_t type, uint32_t flags)
223 {
224 return nftnl_fprintf(fp, c, NFTNL_CMD_UNSPEC, type, flags,
225 nftnl_flowtable_do_snprintf);
226 }
227-EXPORT_SYMBOL(nftnl_flowtable_fprintf);
228
229 struct nftnl_flowtable_list {
230 struct list_head list;
231 };
232
233+EXPORT_SYMBOL(nftnl_flowtable_list_alloc);
234 struct nftnl_flowtable_list *nftnl_flowtable_list_alloc(void)
235 {
236 struct nftnl_flowtable_list *list;
Brad Bishop26bdd442019-08-16 17:08:17 -0400237@@ -628,8 +629,8 @@ struct nftnl_flowtable_list *nftnl_flowtable_list_alloc(void)
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800238
239 return list;
240 }
241-EXPORT_SYMBOL(nftnl_flowtable_list_alloc);
242
243+EXPORT_SYMBOL(nftnl_flowtable_list_free);
244 void nftnl_flowtable_list_free(struct nftnl_flowtable_list *list)
245 {
246 struct nftnl_flowtable *s, *tmp;
Brad Bishop26bdd442019-08-16 17:08:17 -0400247@@ -640,34 +641,34 @@ void nftnl_flowtable_list_free(struct nftnl_flowtable_list *list)
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800248 }
249 xfree(list);
250 }
251-EXPORT_SYMBOL(nftnl_flowtable_list_free);
252
253+EXPORT_SYMBOL(nftnl_flowtable_list_is_empty);
254 int nftnl_flowtable_list_is_empty(const struct nftnl_flowtable_list *list)
255 {
256 return list_empty(&list->list);
257 }
258-EXPORT_SYMBOL(nftnl_flowtable_list_is_empty);
259
260+EXPORT_SYMBOL(nftnl_flowtable_list_add);
261 void nftnl_flowtable_list_add(struct nftnl_flowtable *s,
262 struct nftnl_flowtable_list *list)
263 {
264 list_add(&s->head, &list->list);
265 }
266-EXPORT_SYMBOL(nftnl_flowtable_list_add);
267
268+EXPORT_SYMBOL(nftnl_flowtable_list_add_tail);
269 void nftnl_flowtable_list_add_tail(struct nftnl_flowtable *s,
270 struct nftnl_flowtable_list *list)
271 {
272 list_add_tail(&s->head, &list->list);
273 }
274-EXPORT_SYMBOL(nftnl_flowtable_list_add_tail);
275
276+EXPORT_SYMBOL(nftnl_flowtable_list_del);
277 void nftnl_flowtable_list_del(struct nftnl_flowtable *s)
278 {
279 list_del(&s->head);
280 }
281-EXPORT_SYMBOL(nftnl_flowtable_list_del);
282
283+EXPORT_SYMBOL(nftnl_flowtable_list_foreach);
284 int nftnl_flowtable_list_foreach(struct nftnl_flowtable_list *flowtable_list,
285 int (*cb)(struct nftnl_flowtable *t, void *data), void *data)
286 {
Brad Bishop26bdd442019-08-16 17:08:17 -0400287@@ -681,4 +682,3 @@ int nftnl_flowtable_list_foreach(struct nftnl_flowtable_list *flowtable_list,
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800288 }
289 return 0;
290 }
291-EXPORT_SYMBOL(nftnl_flowtable_list_foreach);
Brad Bishop26bdd442019-08-16 17:08:17 -0400292--
2932.17.1
294