aboutsummaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-daemons/lldpad/lldpad/0001-get-inline-functions-work-with-both-gnu11-and-gnu89.patch
blob: 9ff7c0f8fb66bbd75c3612136698d6d0b2108c81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
From 67399dcc2575c0e9c64fc77354f9653127cddf64 Mon Sep 17 00:00:00 2001
From: Roy Li <rongqing.li@windriver.com>
Date: Mon, 14 Sep 2015 17:07:26 +0800
Subject: [PATCH] get inline functions work with both gnu11 and gnu89

Upstream-status: Pending

After gcc upgraded to gcc5, and if the codes are compiled without optimization(-O0),
and the below error will happen:

./include/lldp_8021qaz.h:237:12: error: inline function 'ieee8021qaz_clif_cmd' declared but never defined [-Werror]
 inline int ieee8021qaz_clif_cmd(void *data, struct sockaddr_un *from,
            ^
./include/lldp_8021qaz.h:222:13: error: inline function 'set_prio_map' declared but never defined [-Werror]
 inline void set_prio_map(u32 *prio_map, u8 prio, int tc);
             ^
./include/lldp_8021qaz.h:221:12: error: inline function 'get_prio_map' declared but never defined [-Werror]
 inline int get_prio_map(u32 prio_map, int tc);

gcc5 defaults to -std=gnu11 instead of -std=gnu89, and it requires that exactly one C
source file has the callable copy of the inline function. Consider the following
program:

  inline int
  foo (void)
  {
    return 42;
  }

  int
  main (void)
  {
    return foo ();
  }

The program above will not link with the C99 inline semantics, because no out-of-line
function foo is generated. To fix this, either mark the function foo as static, or
add the following declaration:
  static inline int foo (void);

more information refer to: https://gcc.gnu.org/gcc-5/porting_to.html;

but the use of "extern inline" will lead to the compilation issue if gcc is not
gcc5, so replace inline with "static inline"

Signed-off-by: Roy Li <rongqing.li@windriver.com>
---
 include/lldp_8021qaz.h | 5 -----
 lldp_8021qaz.c         | 4 ++--
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/include/lldp_8021qaz.h b/include/lldp_8021qaz.h
index 55353b8..d321625 100644
--- a/include/lldp_8021qaz.h
+++ b/include/lldp_8021qaz.h
@@ -218,8 +218,6 @@ int ieee8021qaz_mod_app(struct app_tlv_head *head, int peer,
 			u8 prio, u8 sel, u16 proto, u32 ops);
 int ieee8021qaz_app_sethw(char *ifname, struct app_tlv_head *head);
 
-inline int get_prio_map(u32 prio_map, int tc);
-inline void set_prio_map(u32 *prio_map, u8 prio, int tc);
 
 struct ieee8021qaz_tlvs *ieee8021qaz_data(const char *);
 
@@ -234,9 +232,6 @@ int ieee8021qaz_rchange(struct port *port, struct lldp_agent *,
 void ieee8021qaz_ifup(char *ifname, struct lldp_agent *);
 void ieee8021qaz_ifdown(char *ifname, struct lldp_agent *);
 u8 ieee8021qaz_mibDeleteObject(struct port *port, struct lldp_agent *);
-inline int ieee8021qaz_clif_cmd(void *data, struct sockaddr_un *from,
-				socklen_t fromlen, char *ibuf, int ilen,
-				char *rbuf);
 int ieee8021qaz_check_operstate(void);
 int get_dcbx_hw(const char *ifname, __u8 *dcbx);
 
diff --git a/lldp_8021qaz.c b/lldp_8021qaz.c
index 094676d..f154317 100644
--- a/lldp_8021qaz.c
+++ b/lldp_8021qaz.c
@@ -396,7 +396,7 @@ static int read_cfg_file(char *ifname, struct lldp_agent *agent,
 	return 0;
 }
 
-inline int get_prio_map(u32 prio_map, int prio)
+static inline int get_prio_map(u32 prio_map, int prio)
 {
 	if (prio > 7)
 		return 0;
@@ -404,7 +404,7 @@ inline int get_prio_map(u32 prio_map, int prio)
 	return (prio_map >> (4 * (7-prio))) & 0xF;
 }
 
-inline void set_prio_map(u32 *prio_map, u8 prio, int tc)
+static inline void set_prio_map(u32 *prio_map, u8 prio, int tc)
 {
 	u32 mask = ~(0xffffffff & (0xF << (4 * (7-prio))));
 	*prio_map &= mask;
-- 
1.9.1