Thanks for looking into it! In addition, If I understand correctly, using __attribute__((aligned(xxx))) on structs that are only allocated from heap doesn’t actually do anything (but sometimes confuse gcc into generating misaligned accesses).
From: Dave Barach (dbarach) [mailto:[email protected]] Sent: Thursday, April 26, 2018 5:08 PM To: Nicolau, Radu <[email protected]>; Florin Coras <[email protected]> Cc: [email protected] Subject: RE: [vpp-dev] segfault due to movaps unaligned access Yes, it’s arguably a compiler bug. But, it makes no sense to vec_validate_aligned(…), pool_get_aligned(…) etc. objects whose size is not a multiple of the alignment request. Only the first element will be aligned to the specified boundary. __attribute__((aligned(xxx))) is not the same thing as ensuring that objects are sized correctly. D. From: [email protected]<mailto:[email protected]> <[email protected]<mailto:[email protected]>> On Behalf Of Radu Nicolau Sent: Thursday, April 26, 2018 4:54 AM To: Florin Coras <[email protected]<mailto:[email protected]>> Cc: [email protected]<mailto:[email protected]> Subject: Re: [vpp-dev] segfault due to movaps unaligned access Hi Florin, Thanks! The patch fixes the issue. Any idea why is it happening? Regards, Radu From: [email protected]<mailto:[email protected]> [mailto:[email protected]] On Behalf Of Florin Coras Sent: Tuesday, April 24, 2018 11:25 PM To: Nicolau, Radu <[email protected]<mailto:[email protected]>> Cc: [email protected]<mailto:[email protected]> 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 <[email protected]<mailto:[email protected]>> 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
