Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Sep 2012 10:09:54 -0700
From:      Jim Harris <jim.harris@gmail.com>
To:        Garrett Cooper <yanegomi@gmail.com>
Cc:        "current@freebsd.org" <current@freebsd.org>
Subject:   Re: buildworld broke in sbin/nvmecontrol; r240620 suspected
Message-ID:  <CAJP=Hc8e9Gku4GOyX1wa4_B8FVtMwykypiu=NT0EsNr7yGHUbQ@mail.gmail.com>
In-Reply-To: <7BCCAFEA-693E-479A-B1BD-AAA625164DCC@gmail.com>
References:  <20120918125303.GN3357@albert.catwhisker.org> <7BCCAFEA-693E-479A-B1BD-AAA625164DCC@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Sep 18, 2012 at 8:28 AM, Garrett Cooper <yanegomi@gmail.com> wrote:
> On Sep 18, 2012, at 5:53 AM, David Wolfskill <david@catwhisker.org> wrote=
:
>
>> This was on:
>>
>> FreeBSD g1-227.catwhisker.org 10.0-CURRENT FreeBSD 10.0-CURRENT #681 240=
597M: Mon Sep 17 15:34:41 PDT 2012     root@d134.dwolf.juniper.net.:/usr/ob=
j/usr/src/sys/CANARY  i386
>>
>> using clang as the C compiler:
>>
>> ...
>> =3D=3D=3D> sbin/nvmecontrol (all)
>> clang -O2 -pipe  -std=3Dgnu99 -Qunused-arguments -fstack-protector -Wsys=
tem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict=
-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual =
-Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wchar-su=
bscripts -Winline -Wnested-externs -Wredundant-decls -Wold-style-definition=
 -Wno-pointer-sign -Wno-empty-body -Wno-string-plus-int -c /usr/src/sbin/nv=
mecontrol/nvmecontrol.c
>> /usr/src/sbin/nvmecontrol/nvmecontrol.c:77:6: error: cast from 'struct n=
vme_controller_data *' to 'uint32_t *' (aka 'unsigned int *') increases req=
uired alignment from 1 to 4 [-Werror,-Wcast-align]
>>        p =3D (uint32_t *)cdata;
>>            ^~~~~~~~~~~~~~~~~
>> 1 error generated.
>> *** [nvmecontrol.o] Error code 1
>> 1 error
>> *** [all] Error code 2
>> 1 error
>> *** [sbin.all__D] Error code 2
>
> Probably should be using memcpy for that.
> Thanks!
> -Garrett

I think adding __aligned(4) to struct nvme_controller_data is the better wa=
y
to go.  This structure is already marked as __packed which seems to
cause clang to think the structure could be unaligned.  I've confirmed
this fixes the issue.

An an FYI - If I remove the __packed specifier (and do not add __aligned),
clang compiles without nvmecontrol without warning as well.

Regards,

-Jim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJP=Hc8e9Gku4GOyX1wa4_B8FVtMwykypiu=NT0EsNr7yGHUbQ>