Hi, If elements of the vector are 54 bytes and first is aligned, accessing the second one should not generate instructions that assume it is aligned as well. So based on that and your description, this is a gcc bug, right? The issue does not occur on gcc 6.3, 6.4 but occurs on 7.2.0 and 7.3.1 (and I’ve seen it a while ago on 5.x).
Regards, Radu From: vpp-dev@lists.fd.io [mailto:vpp-dev@lists.fd.io] On Behalf Of Florin Coras Sent: Thursday, April 26, 2018 4:13 PM To: Nicolau, Radu <radu.nico...@intel.com> Cc: vpp-dev@lists.fd.io Subject: Re: [vpp-dev] segfault due to movaps unaligned access Hi Radu, The problem was that the vector was expected to have cacheline size aligned data, but the elements in the vector were not a multiple of a cache line (size was 54). As a result, the first element was aligned and the rest were not. The vector infra just allocates an aligned chunk of memory, it does not guarantee anything with respect to individual element placement. Hope it helps! Cheers, Florin On Apr 26, 2018, at 1:53 AM, Nicolau, Radu <radu.nico...@intel.com<mailto:radu.nico...@intel.com>> wrote: Hi Florin, Thanks! The patch fixes the issue. Any idea why is it happening? Regards, Radu From: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> [mailto:vpp-dev@lists.fd.io] On Behalf Of Florin Coras Sent: Tuesday, April 24, 2018 11:25 PM To: Nicolau, Radu <radu.nico...@intel.com<mailto:radu.nico...@intel.com>> Cc: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Subject: Re: [vpp-dev] segfault due to movaps unaligned access Hi Radu, Making the crypto_worker_main_t a full cache line in size (see patch [1]) seems to solve the issue. Could you confirm? Florin [1] https://gerrit.fd.io/r/#/c/12086/ On Apr 24, 2018, at 9:23 AM, Radu Nicolau <radu.nico...@intel.com<mailto:radu.nico...@intel.com>> wrote: Hello all, We’re seeing a weird issue, that is a segfault that looks to be caused by a movaps instruction that is trying to access an address that is not 16 byte aligned. The call originates from a vec_validate_init_empty_aligned that has the argument aligned to 16 bytes. I have seen something like this in the past, we couldn’t find a root cause and considered it a GCC bug (version 5 then), but now it pops up again on version 7, so probably it isn’t. Any idea? A snapshot of the gdb screen below. gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0 https://postimg.cc/image/9jy4p38at/ thanks and I will appreciate any help, Radu