Without this replacement header, building netdev-dpdk.c provokes several "sparse" warnings:
/usr/include/dpdk/rte_memcpy.h:515:33: warning: incorrect type in argument 1 (different type sizes) /usr/include/dpdk/rte_memcpy.h:515:33: expected long long const [usertype] *__P /usr/include/dpdk/rte_memcpy.h:515:33: got int const [usertype] *<noident> /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:20: error: undefined identifier '__builtin_ia32_loaddqu' /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:11: error: cast from unknown type /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:3: error: undefined identifier '__builtin_ia32_storedqu' /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:698:43: error: not a function <noident> /usr/lib/gcc/i686-linux-gnu/6//include/emmintrin.h:716:27: error: not a function <noident> ... Signed-off-by: Ben Pfaff <b...@ovn.org> --- include/sparse/automake.mk | 1 + include/sparse/rte_memcpy.h | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 include/sparse/rte_memcpy.h diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk index 0456ee67d481..f3282c260414 100644 --- a/include/sparse/automake.mk +++ b/include/sparse/automake.mk @@ -10,6 +10,7 @@ noinst_HEADERS += \ include/sparse/pthread.h \ include/sparse/rte_atomic.h \ include/sparse/rte_lcore.h \ + include/sparse/rte_memcpy.h \ include/sparse/rte_vect.h \ include/sparse/sys/socket.h \ include/sparse/sys/wait.h diff --git a/include/sparse/rte_memcpy.h b/include/sparse/rte_memcpy.h new file mode 100644 index 000000000000..5cd3f013ea8b --- /dev/null +++ b/include/sparse/rte_memcpy.h @@ -0,0 +1,39 @@ +/* Copyright (c) 2017 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 RTE_MEMCPY_H +#define RTE_MEMCPY_H 1 + +#ifndef __CHECKER__ +#error "Use this header only with sparse. It is not a correct implementation." +#endif + +/* Include the same headers as the real rte_memcpy(). */ +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <rte_vect.h> + +/* Declare the same functions as the real rte_memcpy.h, without defining them. + * This gives sparse the information it needs without provoking sparse's + * complaints about the implementations. */ +void rte_mov16(uint8_t *, const uint8_t *); +void rte_mov32(uint8_t *, const uint8_t *); +void rte_mov64(uint8_t *, const uint8_t *); +void rte_mov128(uint8_t *, const uint8_t *); +void rte_mov256(uint8_t *, const uint8_t *); +void *rte_memcpy(void *, const void *, size_t); + +#endif /* RTE_MEMCPY_H_WRAPPER */ -- 2.10.2 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev