[ovs-dev] [PATCH 1/2] sparse: Fix sparse when compiling DPDK.

Daniele Di Proietto diproiettod at vmware.com
Fri May 22 17:08:25 UTC 2015


I was running an old version, getting it from the upstream repo helped,
thanks!

I manage to compile everything without warnings if I apply the following
incremental

---8<---

diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
index c80c4c2..0456ee6 100644
--- a/include/sparse/automake.mk
+++ b/include/sparse/automake.mk
@@ -1,6 +1,7 @@
 noinst_HEADERS += \
 	include/sparse/arpa/inet.h \
 	include/sparse/assert.h \
+	include/sparse/bmi2intrin.h \
 	include/sparse/emmintrin.h \
 	include/sparse/math.h \
 	include/sparse/netinet/in.h \
diff --git a/include/sparse/bmi2intrin.h b/include/sparse/bmi2intrin.h
new file mode 100644
index 0000000..3ee37bb
--- /dev/null
+++ b/include/sparse/bmi2intrin.h
@@ -0,0 +1,25 @@
+/* Copyright (c) 2015 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CHECKER__
+#error "Use this header only with sparse.  It is not a correct
implementation."
+#endif
+
+/* Sparse doesn't know the __int128 type used by GCC 4.9 *intrin.h
headers.
+ * We cannot use a typedef because the type is used with a qualifier
+ * ('unsigned __int128') */
+#define __int128 int
+#include_next <bmi2intrin.h>
+#undef __int128
diff --git a/include/sparse/emmintrin.h b/include/sparse/emmintrin.h
index 7c788dc..3810f55 100644
--- a/include/sparse/emmintrin.h
+++ b/include/sparse/emmintrin.h
@@ -17,5 +17,11 @@
 #error "Use this header only with sparse.  It is not a correct
implementation."
 #endif

-/* Sparse doesn't support SSE2 so the "real" header file quits with an
error.
- * Instead, we simply do nothing thereby surpressing the message. */
+/* GCC 4.8 *intrin.h headers do not work if these are not defined */
+#define __SSE2__
+#define __SSE__
+#define __MMX__
+#include_next <emmintrin.h>
+#undef __MMX__
+#undef __SSE__
+#undef __SSE2__


---8<---


I have tested this with GCC 4.8 and GCC 4.9 headers.

If you're happy with the above change feel free to merge it:

Acked-by: Daniele Di Proietto <diproiettod at vmware.com>


On 19/05/2015 22:34, "Ethan Jackson" <ethan at nicira.com> wrote:

>I think you're running into the issue that sparse doesn't understand
>the "gnu_inline" macro which is used extensively in the DPDK header
>files.  If you run tip of master sparse
>(git://git.kernel.org/pub/scm/devel/sparse/sparse.git) it should work
>for you.
>
>In the past we've typically required relatively bleeding edge sparse
>builds due to similar reasons, so IMO I'm fine with making this
>requirement.  Also, it's unclear to me how to auto generate these
>stubs, it's actually somewhat difficult requiring a lot of manually
>tuning.
>
>Ethan
>
>On Mon, May 18, 2015 at 1:20 PM, Daniele Di Proietto
><diproiettod at vmware.com> wrote:
>> On my system (I'm using GCC 4.9 and sparse 0.4.5) I need
>> lots of other headers like emmintrin.h to compile without
>> warnings.
>>
>> The complete list is:
>>
>> adxintrin.h,ammintrin.h,avx2intrin.h,avx512fintrin.h,
>> avxintrin.h,bmi2intrin.h,bmiintrin.h,f16cintrin.h,
>> fma4intrin.h,fmaintrin.h,fxsrintrin.h,ia32intrin.h,
>> immintrin.h,lwpintrin.h,lzcntintrin.h,mm3dnow.h,
>> mmintrin.h,pmmintrin.h,popcntintrin.h,prfchwintrin.h,
>> rdseedintrin.h,smmintrin.h,tbmintrin.h,tmmintrin.h,
>> wmmintrin.h,xmmintrin.h,xopintrin.h,xsaveintrin.h,
>> xsaveoptintrin.h
>>
>> Do we want to generate these at build time, maybe?
>>
>> On 18/05/2015 16:53, "Ethan Jackson" <ethan at nicira.com> wrote:
>>
>>>Sparse doesn't like several of the DPDK header files.  This patch
>>>works around it so we can get analysis when compiling DPDK.
>>>
>>>Signed-off-by: Ethan Jackson <ethan at nicira.com>
>>>---
>>> include/sparse/automake.mk  |  4 ++++
>>> include/sparse/emmintrin.h  | 21 +++++++++++++++++++++
>>> include/sparse/rte_atomic.h | 25 +++++++++++++++++++++++++
>>> include/sparse/rte_lcore.h  | 23 +++++++++++++++++++++++
>>> include/sparse/rte_vect.h   | 23 +++++++++++++++++++++++
>>> 5 files changed, 96 insertions(+)
>>> create mode 100644 include/sparse/emmintrin.h
>>> create mode 100644 include/sparse/rte_atomic.h
>>> create mode 100644 include/sparse/rte_lcore.h
>>> create mode 100644 include/sparse/rte_vect.h
>>>
>>>diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
>>>index 572c7c2..c80c4c2 100644
>>>--- a/include/sparse/automake.mk
>>>+++ b/include/sparse/automake.mk
>>>@@ -1,10 +1,14 @@
>>> noinst_HEADERS += \
>>>         include/sparse/arpa/inet.h \
>>>         include/sparse/assert.h \
>>>+        include/sparse/emmintrin.h \
>>>         include/sparse/math.h \
>>>         include/sparse/netinet/in.h \
>>>         include/sparse/netinet/ip6.h \
>>>         include/sparse/netpacket/packet.h \
>>>         include/sparse/pthread.h \
>>>+        include/sparse/rte_atomic.h \
>>>+        include/sparse/rte_lcore.h \
>>>+        include/sparse/rte_vect.h \
>>>         include/sparse/sys/socket.h \
>>>         include/sparse/sys/wait.h
>>>diff --git a/include/sparse/emmintrin.h b/include/sparse/emmintrin.h
>>>new file mode 100644
>>>index 0000000..7c788dc
>>>--- /dev/null
>>>+++ b/include/sparse/emmintrin.h
>>>@@ -0,0 +1,21 @@
>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>+ *
>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>+ * you may not use this file except in compliance with the License.
>>>+ * You may obtain a copy of the License at:
>>>+ *
>>>+ *
>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>se
>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>=S
>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>mC
>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>+ *
>>>+ * Unless required by applicable law or agreed to in writing, software
>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>implied.
>>>+ * See the License for the specific language governing permissions and
>>>+ * limitations under the License.
>>>+ */
>>>+
>>>+#ifndef __CHECKER__
>>>+#error "Use this header only with sparse.  It is not a correct
>>>implementation."
>>>+#endif
>>>+
>>>+/* Sparse doesn't support SSE2 so the "real" header file quits with an
>>>error.
>>>+ * Instead, we simply do nothing thereby surpressing the message. */
>>>diff --git a/include/sparse/rte_atomic.h b/include/sparse/rte_atomic.h
>>>new file mode 100644
>>>index 0000000..ae49fe5
>>>--- /dev/null
>>>+++ b/include/sparse/rte_atomic.h
>>>@@ -0,0 +1,25 @@
>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>+ *
>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>+ * you may not use this file except in compliance with the License.
>>>+ * You may obtain a copy of the License at:
>>>+ *
>>>+ *
>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>se
>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>=S
>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>mC
>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>+ *
>>>+ * Unless required by applicable law or agreed to in writing, software
>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>implied.
>>>+ * See the License for the specific language governing permissions and
>>>+ * limitations under the License.
>>>+ */
>>>+
>>>+#ifndef __CHECKER__
>>>+#error "Use this header only with sparse.  It is not a correct
>>>implementation."
>>>+#endif
>>>+
>>>+/* Fix sparse technicality about types in one of the function calls by
>>>just
>>>+ * ignoring it. */
>>>+#define __sync_add_and_fetch(a, b) (0)
>>>+
>>>+/* Get actual <rte_atomic.h> definitions for us to annotate and build
>>>on. */
>>>+#include_next <rte_atomic.h>
>>>diff --git a/include/sparse/rte_lcore.h b/include/sparse/rte_lcore.h
>>>new file mode 100644
>>>index 0000000..584bfe1
>>>--- /dev/null
>>>+++ b/include/sparse/rte_lcore.h
>>>@@ -0,0 +1,23 @@
>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>+ *
>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>+ * you may not use this file except in compliance with the License.
>>>+ * You may obtain a copy of the License at:
>>>+ *
>>>+ *
>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>se
>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>=S
>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>mC
>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>+ *
>>>+ * Unless required by applicable law or agreed to in writing, software
>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>implied.
>>>+ * See the License for the specific language governing permissions and
>>>+ * limitations under the License.
>>>+ */
>>>+
>>>+#ifndef __CHECKER__
>>>+#error "Use this header only with sparse.  It is not a correct
>>>implementation."
>>>+#endif
>>>+
>>>+typedef int rte_cpuset_t;
>>>+
>>>+/* Get actual <rte_lcore.h> definitions for us to annotate and build
>>>on.
>>>*/
>>>+#include_next <rte_lcore.h>
>>>diff --git a/include/sparse/rte_vect.h b/include/sparse/rte_vect.h
>>>new file mode 100644
>>>index 0000000..6f6625b
>>>--- /dev/null
>>>+++ b/include/sparse/rte_vect.h
>>>@@ -0,0 +1,23 @@
>>>+/* Copyright (c) 2015 Nicira, Inc.
>>>+ *
>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>+ * you may not use this file except in compliance with the License.
>>>+ * You may obtain a copy of the License at:
>>>+ *
>>>+ *
>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__www.apache.org_licen
>>>se
>>>s_LICENSE-2D2.0&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r
>>>=S
>>>mB5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshiu
>>>mC
>>>E9wwf7RTwL7R6E&s=XbDR6JeYnydOdBUZ9vrXLn17h0EOW9wIF7lhpFjM_fo&e=
>>>+ *
>>>+ * Unless required by applicable law or agreed to in writing, software
>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>implied.
>>>+ * See the License for the specific language governing permissions and
>>>+ * limitations under the License.
>>>+ */
>>>+
>>>+#ifndef __CHECKER__
>>>+#error "Use this header only with sparse.  It is not a correct
>>>implementation."
>>>+#endif
>>>+
>>>+typedef int __m128i;
>>>+
>>>+/* Get actual <rte_vect.h> definitions for us to annotate and build on.
>>>*/
>>>+#include_next <rte_vect.h>
>>>--
>>>1.9.1
>>>
>>>_______________________________________________
>>>dev mailing list
>>>dev at openvswitch.org
>>>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mail
>>>ma
>>>n_listinfo_dev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=
>>>Sm
>>>B5nZacmXNq0gKCC1s_Cw5yUNjxgD4v5kJqZ2uWLlE&m=B8EAybkydoKA6-zjSe0T_2cshium
>>>CE
>>>9wwf7RTwL7R6E&s=oleBRmY2dr-PG6K8DPzFmAQrpw7AwfLUqGMNhho-KH0&e=
>>




More information about the dev mailing list