[dpdk-dev] [PATCH] test-pmd: Fix pointer aliasing error

Qiu, Michael michael.qiu at intel.com
Wed Dec 3 16:19:34 CET 2014


On 2014/12/3 22:51, Richardson, Bruce wrote:
> On Wed, Dec 03, 2014 at 01:59:58PM +0000, Qiu, Michael wrote:
>> On 2014/12/3 19:43, Richardson, Bruce wrote:
>>> On Wed, Dec 03, 2014 at 07:28:19PM +0800, Michael Qiu wrote:
>>>> app/test-pmd/csumonly.c: In function ‘get_psd_sum’:
>>>> build/include/rte_ip.h:161: error: dereferencing pointer ‘u16’
>>>> 	does break strict-aliasing rules
>>>> build/include/rte_ip.h:157: note: initialized from here
>>>> 	...
>>>>
>>>> The root cause is that, compile enable strict aliasing by default,
>>>> while in function rte_raw_cksum() try to convert 'const char *'
>>>> to 'const uint16_t *'.
>>>>
>>> What compiler version is this with? Is there any other way to fix this
>>> other than disabling the compiler warnings. Turning off strict aliasing may
>>> affect performance as it reduces the number of optimizations that the compiler
>>> can perform.
>> The compile version is:
>>
>> $ gcc -v
>> Using built-in specs.
>> Target: x86_64-redhat-linux
>> ...
>> gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
>>
>>
>> The OS is centos6.5 x86_64
>>
>>
>> Actually, another possible solution is, as gcc manual shows, use union.
>> In function rte_raw_cksum() of lib/librte_net/rte_ip.h:
>>
>> static inline uint16_t
>> rte_raw_cksum(const char *buf, size_t len){
>>     union {
>>         const char *ubuf;
>>         const uint16_t *uu16;
>>     } convert;
>>
>>     convert.ubuf = buf;
>>     const uint16_t *u16 = convert.uu16;
>>     ...
>> }
>>
>> This may be work, but not test yet.
>>
>> Any comments about this solution?
> what happens if you make rte_raw_cksum take a void * (or const void *) parameter
> instead of "const char *"?

"size_t len" is for type char, it is the the array size(for char array
is byte numbers), if we use void *, the meaning maybe confuse I think.
But it should work with other code change.

Thanks,
Michael
>
> /Bruce
>



More information about the dev mailing list