> -----Original Message----- > From: David Marchand <david.march...@redhat.com> > Sent: Thursday, October 14, 2021 12:45 AM > To: Peng, ZhihongX <zhihongx.p...@intel.com> > Cc: Burakov, Anatoly <anatoly.bura...@intel.com>; Ananyev, Konstantin > <konstantin.anan...@intel.com>; Stephen Hemminger > <step...@networkplumber.org>; dev <dev@dpdk.org>; Lin, Xueqin > <xueqin....@intel.com>; Richardson, Bruce <bruce.richard...@intel.com>; > Thomas Monjalon <tho...@monjalon.net> > Subject: Re: [PATCH v9 2/3] DPDK code adapts to ASan > > 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.
The v10 version will be fixed. All meson code: if get_option('b_sanitize') == 'address' or get_option('b_sanitize') == 'address,undefined' if cc.get_id() == 'gcc' asan_dep = cc.find_library('asan', required: true) if (not cc.links('int main(int argc, char *argv[]) { return 0; }', dependencies: asan_dep)) error('broken dependency, "libasan"') endif add_project_link_arguments('-lasan', language: 'c') dpdk_extra_ldflags += '-lasan' endif if exec_env == 'linux' and arch_subdir == 'x86' dpdk_conf.set10('RTE_MALLOC_ASAN', true) endif endif > > > -- > David Marchand > > > > > -- > David Marchand