On Tue, Oct 12, 2021 at 11:54 AM <zhihongx.p...@intel.com> wrote: > > From: Zhihong Peng <zhihongx.p...@intel.com> > > DPDK ASan functionality is currently only supported Linux x86_64. > Support other platforms, need to define ASAN_SHADOW_OFFSET value > according to google ASan document, and configure meson > (config/meson.build). > > Signed-off-by: Xueqin Lin <xueqin....@intel.com> > Signed-off-by: Zhihong Peng <zhihongx.p...@intel.com> > --- > v7: Split doc and code into two. > v8: No change. > v9: Modify the definition of RTE_MALLOC_ASAN. > --- > config/meson.build | 2 + > lib/eal/common/malloc_elem.c | 26 ++++- > lib/eal/common/malloc_elem.h | 194 ++++++++++++++++++++++++++++++++++- > lib/eal/common/malloc_heap.c | 12 +++ > lib/eal/common/rte_malloc.c | 9 +- > 5 files changed, 238 insertions(+), 5 deletions(-) > > diff --git a/config/meson.build b/config/meson.build > index 5170b79fed..1ae9390e68 100644 > --- a/config/meson.build > +++ b/config/meson.build > @@ -419,6 +419,8 @@ if get_option('b_sanitize') == 'address' > error('broken dependency, "libasan"') > endif > endif > + > + dpdk_conf.set10('RTE_MALLOC_ASAN', true)
The test on architecture == x86_64 is missing. ARM compilation with ASan is broken. $ ./devtools/test-meson-builds.sh ... ... ninja: Entering directory `/home/dmarchan/builds/build-arm64-bluefield' [0/1] Regenerating build files. The Meson build system Version: 0.59.0 Source dir: /home/dmarchan/dpdk Build dir: /home/dmarchan/builds/build-arm64-bluefield ... [2/2784] Compiling C object lib/librte_eal.a.p/eal_common_eal_common_memzone.c.o FAILED: lib/librte_eal.a.p/eal_common_eal_common_memzone.c.o aarch64-linux-gnu-gcc -Ilib/librte_eal.a.p -Ilib -I../../dpdk/lib -I. -I../../dpdk -Iconfig -I../../dpdk/config -Ilib/eal/include -I../../dpdk/lib/eal/include -Ilib/eal/linux/include -I../../dpdk/lib/eal/linux/include -Ilib/eal/arm/include -I../../dpdk/lib/eal/arm/include -Ilib/eal/common -I../../dpdk/lib/eal/common -Ilib/eal -I../../dpdk/lib/eal -Ilib/kvargs -I../../dpdk/lib/kvargs -Ilib/metrics -I../../dpdk/lib/metrics -Ilib/telemetry -I../../dpdk/lib/telemetry -fdiagnostics-color=always -fsanitize=address -fno-omit-frame-pointer -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Werror -O2 -g -include rte_config.h -Wextra -Wcast-qual -Wdeprecated -Wformat -Wformat-nonliteral -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wpointer-arith -Wsign-compare -Wstrict-prototypes -Wundef -Wwrite-strings -Wno-address-of-packed-member -Wno-packed-not-aligned -Wno-missing-field-initializers -Wno-zero-length-bounds -D_GNU_SOURCE -fPIC -mcpu=cortex-a72 -DALLOW_EXPERIMENTAL_API -DALLOW_INTERNAL_API -Wno-format-truncation '-DABI_VERSION="22.0"' -DRTE_LIBEAL_USE_GETENTROPY -DRTE_LOG_DEFAULT_LOGTYPE=lib.eal -MD -MQ lib/librte_eal.a.p/eal_common_eal_common_memzone.c.o -MF lib/librte_eal.a.p/eal_common_eal_common_memzone.c.o.d -o lib/librte_eal.a.p/eal_common_eal_common_memzone.c.o -c ../../dpdk/lib/eal/common/eal_common_memzone.c In file included from ../../dpdk/lib/eal/include/rte_log.h:25, from ../../dpdk/lib/eal/common/eal_common_memzone.c:14: ../../dpdk/lib/eal/common/malloc_elem.h: In function ‘asan_set_zone’: ../../dpdk/lib/eal/common/malloc_elem.h:118:35: error: ‘ASAN_SHADOW_OFFSET’ undeclared (first use in this function); did you mean ‘ASAN_SHADOW_SCALE’? 118 | RTE_PTR_ADD(ASAN_MEM_SHIFT(mem), ASAN_SHADOW_OFFSET) | ^~~~~~~~~~~~~~~~~~ ../../dpdk/lib/eal/include/rte_common.h:250:58: note: in definition of macro ‘RTE_PTR_ADD’ 250 | #define RTE_PTR_ADD(ptr, x) ((void*)((uintptr_t)(ptr) + (x))) | ^ ../../dpdk/lib/eal/common/malloc_elem.h:142:12: note: in expansion of macro ‘ASAN_MEM_TO_SHADOW’ 142 | shadow = ASAN_MEM_TO_SHADOW((uintptr_t)ptr + offset); | ^~~~~~~~~~~~~~~~~~ ../../dpdk/lib/eal/common/malloc_elem.h:118:35: note: each undeclared identifier is reported only once for each function it appears in 118 | RTE_PTR_ADD(ASAN_MEM_SHIFT(mem), ASAN_SHADOW_OFFSET) | ^~~~~~~~~~~~~~~~~~ ../../dpdk/lib/eal/include/rte_common.h:250:58: note: in definition of macro ‘RTE_PTR_ADD’ 250 | #define RTE_PTR_ADD(ptr, x) ((void*)((uintptr_t)(ptr) + (x))) | ^ ../../dpdk/lib/eal/common/malloc_elem.h:142:12: note: in expansion of macro ‘ASAN_MEM_TO_SHADOW’ 142 | shadow = ASAN_MEM_TO_SHADOW((uintptr_t)ptr + offset); | ^~~~~~~~~~~~~~~~~~ ../../dpdk/lib/eal/common/malloc_elem.h: In function ‘asan_set_redzone’: ../../dpdk/lib/eal/common/malloc_elem.h:118:35: error: ‘ASAN_SHADOW_OFFSET’ undeclared (first use in this function); did you mean ‘ASAN_SHADOW_SCALE’? 118 | RTE_PTR_ADD(ASAN_MEM_SHIFT(mem), ASAN_SHADOW_OFFSET) | ^~~~~~~~~~~~~~~~~~ ../../dpdk/lib/eal/include/rte_common.h:250:58: note: in definition of macro ‘RTE_PTR_ADD’ 250 | #define RTE_PTR_ADD(ptr, x) ((void*)((uintptr_t)(ptr) + (x))) | ^ ../../dpdk/lib/eal/common/malloc_elem.h:196:18: note: in expansion of macro ‘ASAN_MEM_TO_SHADOW’ 196 | front_shadow = ASAN_MEM_TO_SHADOW(head_redzone); | ^~~~~~~~~~~~~~~~~~ ../../dpdk/lib/eal/common/malloc_elem.h: In function ‘asan_clear_redzone’: ../../dpdk/lib/eal/common/malloc_elem.h:118:35: error: ‘ASAN_SHADOW_OFFSET’ undeclared (first use in this function); did you mean ‘ASAN_SHADOW_SCALE’? 118 | RTE_PTR_ADD(ASAN_MEM_SHIFT(mem), ASAN_SHADOW_OFFSET) | ^~~~~~~~~~~~~~~~~~ ../../dpdk/lib/eal/include/rte_common.h:250:58: note: in definition of macro ‘RTE_PTR_ADD’ 250 | #define RTE_PTR_ADD(ptr, x) ((void*)((uintptr_t)(ptr) + (x))) | ^ ../../dpdk/lib/eal/common/malloc_elem.h:235:17: note: in expansion of macro ‘ASAN_MEM_TO_SHADOW’ 235 | head_shadow = ASAN_MEM_TO_SHADOW(head_redzone); | ^~~~~~~~~~~~~~~~~~ [31/2784] Compiling C object lib/librte_eal.a.p/eal_linux_eal_interrupts.c.o ninja: build stopped: subcommand failed. -- David Marchand -- David Marchand