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


Reply via email to