aboutsummaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch
blob: df84550be0c4dac770515da0d657cb3687ddc0be (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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
From: Stefan Schmidt <stefan.schmidt@huawei.com>
Subject: Turn off sign compare for musl libc

When building with musl and clang the usage of CMSG_NXTHDR results in
sign-compare error. Disable the check only in this specific part of the
code with a #pragma.

| /home/stefan/huawei/yocto-upstream/yoe/workspace/sources/ot-br-posix/third_party/openthread/repo/src/posix/platform/udp.cpp:147:28: fatal error: comparison of integers of different signs: 'unsigned long' and 'long' [-Wsign-compare]
|         cmsg             = CMSG_NXTHDR(&msg, cmsg);
|                            ^~~~~~~~~~~~~~~~~~~~~~~
| /home/stefan/huawei/yocto-upstream/yoe/build/tmp/work/cortexa57-yoe-linux-musl/ot-br-posix/0.3.0+git999-r0/recipe-sysroot/usr/include/sys/socket.h:358:44: note: expanded from macro 'CMSG_NXTHDR'
|         __CMSG_LEN(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) - (unsigned char *)(cmsg) \
|         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1 error generated.

Idea and fix taken from
recipes-devtools/breakpad/breakpad/0001-Turn-off-sign-compare-for-musl-libc.patch
by Khem Raj.

Upstream-Status: Inappropriate [OE specific]

Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com>

diff --git a/src/backbone_router/nd_proxy.cpp b/src/backbone_router/nd_proxy.cpp
index 7136878c3d..8a223c95c7 100644
--- a/src/backbone_router/nd_proxy.cpp
+++ b/src/backbone_router/nd_proxy.cpp
@@ -185,9 +185,18 @@ void NdProxyManager::ProcessMulticastNeighborSolicition()
         VerifyOrExit(icmp6header->icmp6_type == ND_NEIGHBOR_SOLICIT, error = OTBR_ERROR_PARSE);
 
         otbrLogDebug("NdProxyManager: Received ND-NS from %s", src.ToString().c_str());
-
+#ifndef __GLIBC__
+  // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes
+  // clang to throw sign-compare warning. This is to suppress the warning
+  // inline.
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wsign-compare"
+#endif
         for (cmsghdr = CMSG_FIRSTHDR(&msghdr); cmsghdr; cmsghdr = CMSG_NXTHDR(&msghdr, cmsghdr))
-        {
+#ifndef __GLIBC__
+  #pragma clang diagnostic pop
+#endif
+	{
             if (cmsghdr->cmsg_level != IPPROTO_IPV6)
             {
                 continue;
Submodule third_party/openthread/repo contains modified content
diff --git a/third_party/openthread/repo/src/posix/platform/infra_if.cpp b/third_party/openthread/repo/src/posix/platform/infra_if.cpp
index 9f93d2b1c..1ed40fe50 100644
--- a/third_party/openthread/repo/src/posix/platform/infra_if.cpp
+++ b/third_party/openthread/repo/src/posix/platform/infra_if.cpp
@@ -228,7 +228,17 @@ otError InfraNetif::SendIcmp6Nd(uint32_t            aInfraIfIndex,
     packetInfo->ipi6_ifindex = mInfraIfIndex;
 
     // Per section 6.1.2 of RFC 4861, we need to send the ICMPv6 message with IP Hop Limit 255.
+#ifndef __GLIBC__
+  // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes
+  // clang to throw sign-compare warning. This is to suppress the warning
+  // inline.
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wsign-compare"
+#endif
     cmsgPointer             = CMSG_NXTHDR(&msgHeader, cmsgPointer);
+#ifndef __GLIBC__
+  #pragma clang diagnostic pop
+#endif
     cmsgPointer->cmsg_level = IPPROTO_IPV6;
     cmsgPointer->cmsg_type  = IPV6_HOPLIMIT;
     cmsgPointer->cmsg_len   = CMSG_LEN(sizeof(hopLimit));
@@ -481,7 +491,17 @@ void InfraNetif::ReceiveIcmp6Message(void)
 
     bufferLength = static_cast<uint16_t>(rval);
 
+#ifndef __GLIBC__
+  // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes
+  // clang to throw sign-compare warning. This is to suppress the warning
+  // inline.
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wsign-compare"
+#endif
     for (cmh = CMSG_FIRSTHDR(&msg); cmh; cmh = CMSG_NXTHDR(&msg, cmh))
+#ifndef __GLIBC__
+  #pragma clang diagnostic pop
+#endif
     {
         if (cmh->cmsg_level == IPPROTO_IPV6 && cmh->cmsg_type == IPV6_PKTINFO &&
             cmh->cmsg_len == CMSG_LEN(sizeof(struct in6_pktinfo)))
diff --git a/third_party/openthread/repo/src/posix/platform/udp.cpp b/third_party/openthread/repo/src/posix/platform/udp.cpp
index b7aacc5fa..a814fea70 100644
--- a/third_party/openthread/repo/src/posix/platform/udp.cpp
+++ b/third_party/openthread/repo/src/posix/platform/udp.cpp
@@ -144,8 +144,18 @@ otError transmitPacket(int aFd, uint8_t *aPayload, uint16_t aLength, const otMes
     {
         struct in6_pktinfo pktinfo;
 
+#ifndef __GLIBC__
+  // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes
+  // clang to throw sign-compare warning. This is to suppress the warning
+  // inline.
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wsign-compare"
+#endif
         cmsg             = CMSG_NXTHDR(&msg, cmsg);
-        cmsg->cmsg_level = IPPROTO_IPV6;
+#ifndef __GLIBC__
+  #pragma clang diagnostic pop
+#endif
+	cmsg->cmsg_level = IPPROTO_IPV6;
         cmsg->cmsg_type  = IPV6_PKTINFO;
         cmsg->cmsg_len   = CMSG_LEN(sizeof(pktinfo));
 
@@ -200,7 +210,17 @@ otError receivePacket(int aFd, uint8_t *aPayload, uint16_t &aLength, otMessageIn
     VerifyOrExit(rval > 0, perror("recvmsg"));
     aLength = static_cast<uint16_t>(rval);
 
+#ifndef __GLIBC__
+  // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes
+  // clang to throw sign-compare warning. This is to suppress the warning
+  // inline.
+  #pragma clang diagnostic push
+  #pragma clang diagnostic ignored "-Wsign-compare"
+#endif
     for (struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg); cmsg != nullptr; cmsg = CMSG_NXTHDR(&msg, cmsg))
+#ifndef __GLIBC__
+  #pragma clang diagnostic pop
+#endif
     {
         if (cmsg->cmsg_level == IPPROTO_IPV6)
         {