From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <michael.qiu@intel.com>
Received: from mga01.intel.com (mga01.intel.com [192.55.52.88])
 by dpdk.org (Postfix) with ESMTP id C65C97EB0
 for <dev@dpdk.org>; Wed,  3 Dec 2014 22:49:18 +0100 (CET)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by fmsmga101.fm.intel.com with ESMTP; 03 Dec 2014 11:46:22 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.07,508,1413270000"; d="scan'208";a="641838922"
Received: from kmsmsx151.gar.corp.intel.com ([172.21.73.86])
 by fmsmga002.fm.intel.com with ESMTP; 03 Dec 2014 06:00:07 -0800
Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by
 KMSMSX151.gar.corp.intel.com (172.21.73.86) with Microsoft SMTP Server (TLS)
 id 14.3.195.1; Wed, 3 Dec 2014 22:00:06 +0800
Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.110]) by
 SHSMSX103.ccr.corp.intel.com ([169.254.4.240]) with mapi id 14.03.0195.001;
 Wed, 3 Dec 2014 21:59:59 +0800
From: "Qiu, Michael" <michael.qiu@intel.com>
To: "Richardson, Bruce" <bruce.richardson@intel.com>, Michael Qiu
 <qdy220091330@gmail.com>
Thread-Topic: [PATCH] test-pmd: Fix pointer aliasing error
Thread-Index: AQHQDuxQX/2B2GdrV0OV5lPAliaykw==
Date: Wed, 3 Dec 2014 13:59:58 +0000
Message-ID: <533710CFB86FA344BFBF2D6802E60286C9C531@SHSMSX101.ccr.corp.intel.com>
References: <1417606044-3432-1-git-send-email-michael.qiu@intel.com>
 <1417606099-3489-1-git-send-email-michael.qiu@intel.com>
 <20141203114258.GA2396@bricha3-MOBL3>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [10.239.127.40]
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH] test-pmd: Fix pointer aliasing error
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 03 Dec 2014 21:49:19 -0000

On 2014/12/3 19:43, Richardson, Bruce wrote:=0A=
> On Wed, Dec 03, 2014 at 07:28:19PM +0800, Michael Qiu wrote:=0A=
>> app/test-pmd/csumonly.c: In function =91get_psd_sum=92:=0A=
>> build/include/rte_ip.h:161: error: dereferencing pointer =91u16=92=0A=
>> 	does break strict-aliasing rules=0A=
>> build/include/rte_ip.h:157: note: initialized from here=0A=
>> 	...=0A=
>>=0A=
>> The root cause is that, compile enable strict aliasing by default,=0A=
>> while in function rte_raw_cksum() try to convert 'const char *'=0A=
>> to 'const uint16_t *'.=0A=
>>=0A=
> What compiler version is this with? Is there any other way to fix this=0A=
> other than disabling the compiler warnings. Turning off strict aliasing m=
ay=0A=
> affect performance as it reduces the number of optimizations that the com=
piler=0A=
> can perform.=0A=
=0A=
The compile version is:=0A=
=0A=
$ gcc -v=0A=
Using built-in specs.=0A=
Target: x86_64-redhat-linux=0A=
...=0A=
gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)=0A=
=0A=
=0A=
The OS is centos6.5 x86_64=0A=
=0A=
=0A=
Actually, another possible solution is, as gcc manual shows, use union.=0A=
In function rte_raw_cksum() of lib/librte_net/rte_ip.h:=0A=
=0A=
static inline uint16_t=0A=
rte_raw_cksum(const char *buf, size_t len){=0A=
    union {=0A=
        const char *ubuf;=0A=
        const uint16_t *uu16;=0A=
    } convert;=0A=
=0A=
    convert.ubuf =3D buf;=0A=
    const uint16_t *u16 =3D convert.uu16;=0A=
    ...=0A=
}=0A=
=0A=
This may be work, but not test yet.=0A=
=0A=
Any comments about this solution?=0A=
=0A=
Thanks,=0A=
Michael=0A=
>=0A=
> /Bruce=0A=
>=0A=
>> Need to add CFLAG '-Wno-strict-aliasing' to avoid this issue.=0A=
>>=0A=
>> Signed-off-by: Michael Qiu <michael.qiu@intel.com>=0A=
>> ---=0A=
>>  app/test-pmd/Makefile | 2 +-=0A=
>>  1 file changed, 1 insertion(+), 1 deletion(-)=0A=
>>=0A=
>> diff --git a/app/test-pmd/Makefile b/app/test-pmd/Makefile=0A=
>> index 97dc2e6..995c874 100644=0A=
>> --- a/app/test-pmd/Makefile=0A=
>> +++ b/app/test-pmd/Makefile=0A=
>> @@ -38,7 +38,7 @@ ifeq ($(CONFIG_RTE_TEST_PMD),y)=0A=
>>  #=0A=
>>  APP =3D testpmd=0A=
>>  =0A=
>> -CFLAGS +=3D -O3=0A=
>> +CFLAGS +=3D -O3 -Wno-strict-aliasing=0A=
>>  CFLAGS +=3D $(WERROR_FLAGS)=0A=
>>  =0A=
>>  ifeq ($(CONFIG_RTE_LIBRTE_PMD_PCAP),y)=0A=
>> -- =0A=
>> 1.9.3=0A=
>>=0A=
=0A=