Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Jul 2012 20:37:21 -0400
From:      Kim Culhan <w8hdkim@gmail.com>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        freebsd-current@freebsd.org, Dimitry Andric <dim@freebsd.org>
Subject:   Re: -current build failure
Message-ID:  <CAKZxVQUtyej=yE=vUgZewyJfyS1vyxJRvFZk224BCkO7EcEfSA@mail.gmail.com>
In-Reply-To: <20120721211628.GE2676@deviant.kiev.zoral.com.ua>
References:  <CAKZxVQV5xhFDN_WbTk-EMoQ18N8u1f4YhqKSJQFUzbX4NZxhUA@mail.gmail.com> <50097BF0.9010103@FreeBSD.org> <CAKZxVQXC6DuX5UTn3goNM9toxSVkP8-7bazTk%2Ba7yLEy7RsJYA@mail.gmail.com> <20120721211628.GE2676@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Jul 21, 2012 at 5:16 PM, Konstantin Belousov
<kostikbel@gmail.com> wrote:
> On Sat, Jul 21, 2012 at 04:00:45PM -0400, Kim Culhan wrote:
>> On Fri, Jul 20, 2012 at 11:40 AM, Dimitry Andric <dim@freebsd.org> wrote:
>> > On 2012-07-20 16:49, Kim Culhan wrote:
>> >>  Seeing this for r:238655
>> > ...
>> >> In file included from /usr/src/sys/modules/dtrace/dtrace/../../../sys/pcpu.h:44:
>> >> ./machine/pcpu.h:226:13: error: indirection of non-volatile null
>> >> pointer will be deleted, not trap
>> >>       [-Werror,-Wnull-dereference]
>> >>             : "m" (*(char *)OFFSETOF_CURTHREAD));
>> >>                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> >> ./machine/pcpu.h:226:13: note: consider using __builtin_trap() or
>> >> qualifying pointer with 'volatile'
>> >
>> > That's indeed a valid warning from clang, since OFFSETOF_CURTHREAD is
>> > usually zero.  It's probably due to recent work on dtrace.  I'm not in
>> > the neighborhood of a FreeBSD box right now to verify, but can you
>> > please try to change the cast to "(volatile char *)"?  That should fix
>> > the warning.
>>
>> Yes it did, I know there are many considerations wrt to this warning.
>
> This should be equivalent to what you tried. Can you test build and
> boot resulting kernel with this patch ?
>
> diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h
> index 5d1fd4d..7b3c934 100644
> --- a/sys/amd64/include/pcpu.h
> +++ b/sys/amd64/include/pcpu.h
> @@ -217,16 +217,22 @@ extern struct pcpu *pcpup;
>  #define        PCPU_SET(member, val)   __PCPU_SET(pc_ ## member, val)
>
>  #define        OFFSETOF_CURTHREAD      0
> +#ifdef __clang__
> +#define        VOLATILE        volatile
> +#else
> +#define        VOLATILE
> +#endif
>  static __inline __pure2 struct thread *
>  __curthread(void)
>  {
>         struct thread *td;
>
>         __asm("movq %%gs:%1,%0" : "=r" (td)
> -           : "m" (*(char *)OFFSETOF_CURTHREAD));
> +           : "m" (*(VOLATILE char *)OFFSETOF_CURTHREAD));
>         return (td);
>  }
>  #define        curthread               (__curthread())
> +#undef VOLATILE
>
>  #define        OFFSETOF_CURPCB         32
>  static __inline __pure2 struct pcb *

The resulting kernel appears to run the same as the kernel tried earlier.

Hope this helps.

thanks
-kim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAKZxVQUtyej=yE=vUgZewyJfyS1vyxJRvFZk224BCkO7EcEfSA>