From: Matthias Kaehlcke <mka@chromium.org>
To: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Michal Marek <mmarek@suse.com>,
Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Grant Grundler <grundler@chromium.org>,
Greg Hackmann <ghackmann@google.com>,
Michael Davidson <md@google.com>
Subject: Re: [PATCH 1/2] kbuild: clang: Disable 'address-of-packed-member' warning
Date: Mon, 8 May 2017 16:18:50 -0700 [thread overview]
Message-ID: <20170508231850.GG128305@google.com> (raw)
In-Reply-To: <CAK7LNATysoDBqaTDT2zGs-ycHNqoX=RLfbG=1uHzLrVOiwO6fw@mail.gmail.com>
Hi Masahiro,
El Sun, May 07, 2017 at 01:52:25AM +0900 Masahiro Yamada ha dit:
> 2017-05-02 10:23 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
> > Hi Masahiro,
> >
> > El Sun, Apr 30, 2017 at 10:59:52PM +0900 Masahiro Yamada ha dit:
> >
> >> 2017-04-22 6:39 GMT+09:00 Matthias Kaehlcke <mka@chromium.org>:
> >> > clang generates plenty of these warnings in different parts of the code,
> >> > to an extent that the warnings are little more than noise. Disable the
> >> > 'address-of-packed-member' warning.
> >> >
> >> > Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> >>
> >>
> >> As far as I compiled arch/x86/configs/x86_64_defconfig,
> >> all address-of-packed-member warnings came from the single point:
> >>
> >> ./arch/x86/include/asm/processor.h:534:30: warning: taking address of
> >> packed member 'sp0' of class or structure 'x86_hw_tss' may result in
> >> an unaligned pointer value [-Waddress-of-packed-member]
> >> return this_cpu_read_stable(cpu_tss.x86_tss.sp0);
> >> ^~~~~~~~~~~~~~~~~~~
> >> ./arch/x86/include/asm/percpu.h:391:59: note: expanded from macro
> >> 'this_cpu_read_stable'
> >> #define this_cpu_read_stable(var) percpu_stable_op("mov", var)
> >> ^~~
> >> ./arch/x86/include/asm/percpu.h:228:16: note: expanded from macro
> >> 'percpu_stable_op'
> >> : "p" (&(var))); \
> >> ^~~
> >>
> >>
> >>
> >> For this case, I was able to fix it with the following patch:
> >>
> >>
> >> diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h
> >> index 9fa0360..de25d1c 100644
> >> --- a/arch/x86/include/asm/percpu.h
> >> +++ b/arch/x86/include/asm/percpu.h
> >> @@ -211,26 +211,27 @@ do {
> >> \
> >> #define percpu_stable_op(op, var) \
> >> ({ \
> >> typeof(var) pfo_ret__; \
> >> + void *__p = &(var); \
> >> switch (sizeof(var)) { \
> >> case 1: \
> >> asm(op "b "__percpu_arg(P1)",%0" \
> >> : "=q" (pfo_ret__) \
> >> - : "p" (&(var))); \
> >> + : "p" (__p)); \
> >> break; \
> >> case 2: \
> >> asm(op "w "__percpu_arg(P1)",%0" \
> >> : "=r" (pfo_ret__) \
> >> - : "p" (&(var))); \
> >> + : "p" (__p)); \
> >> break; \
> >> case 4: \
> >> asm(op "l "__percpu_arg(P1)",%0" \
> >> : "=r" (pfo_ret__) \
> >> - : "p" (&(var))); \
> >> + : "p" (__p)); \
> >> break; \
> >> case 8: \
> >> asm(op "q "__percpu_arg(P1)",%0" \
> >> : "=r" (pfo_ret__) \
> >> - : "p" (&(var))); \
> >> + : "p" (__p)); \
> >> break; \
> >> default: __bad_percpu_size(); \
> >> } \
> >
> > Thanks for having a look!
> >
> > It is odd though that you only see warnings from that origin, I
> > encounter plenty of others with x86_64_defconfig, mostly stemming
> > from uaccess macros:
> >
> > kernel/power/user.c:439:35: warning: taking address of packed member
> > 'dev' of class or structure 'compat_resume_swap_area' may result in an
> > unaligned pointer value [-Waddress-of-packed-member]
> > err |= get_user(swap_area.dev, &u_swap_area->dev);
> > ^~~~~~~~~~~~~~~~
> > ./arch/x86/include/asm/uaccess.h:168:23: note: expanded from macro 'get_user'
> > register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX); \
> > ^~~
> > ./arch/x86/include/asm/uaccess.h:132:41: note: expanded from macro '__inttype'
> > __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
> > ^
> >
> > I looked into fixing different cases, but didn't see a clear path
> > forward since we can't just cast the type away as in your patch above.
>
>
> Curious.
> I tested clang 3.0 thru 4.0, but I could not reproduce this.
>
> This part just calculates sizeof(*(ptr)).
> I think it is a false positive warning bug if clang reports this.
The instance above is indeed somewhat doubtful, in any case there are
plenty of others, most of them from fs/compat.c using __get/put_user_xyz():
fs/compat.c:366:33: warning: taking address of packed member 'l_whence' of class or structure 'compat_flock64' may result in an unaligned pointer value [-Waddress-of-packed-member]
__get_user(kfl->l_whence, &ufl->l_whence) ||
^~~~~~~~~~~~~
arch/x86/include/asm/uaccess.h:505:27: note: expanded from macro '__get_user'
__get_user_nocheck((x), (ptr), sizeof(*(ptr)))
^~~
arch/x86/include/asm/uaccess.h:436:29: note: expanded from macro '__get_user_nocheck'
__get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT); \
^~~
arch/x86/include/asm/uaccess.h:361:21: note: expanded from macro '__get_user_size'
__get_user_asm(x, ptr, retval, "w", "w", "=r", errret); \
^~~
arch/x86/include/asm/uaccess.h:385:19: note: expanded from macro '__get_user_asm'
: "m" (__m(addr)), "i" (errret), "0" (err))
^~~~
arch/x86/include/asm/uaccess.h:444:51: note: expanded from macro '__m'
#define __m(x) (*(struct __large_struct __user *)(x))
^
The clang version I use is fairly recent since it includes some
fixes needed to build a working kernel (mostly for ARM64).
clang --version
Chromium OS 5.0_pre300080-r1 clang version 5.0.0
Cheers
Matthias
next prev parent reply other threads:[~2017-05-08 23:18 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-21 21:39 [PATCH 0/2] kbuild: clang: Disable spurious warnings Matthias Kaehlcke
2017-04-21 21:39 ` [PATCH 1/2] kbuild: clang: Disable 'address-of-packed-member' warning Matthias Kaehlcke
2017-04-30 13:59 ` Masahiro Yamada
2017-05-02 1:23 ` Matthias Kaehlcke
2017-05-06 16:52 ` Masahiro Yamada
2017-05-08 23:18 ` Matthias Kaehlcke [this message]
2017-05-16 6:31 ` Masahiro Yamada
2017-05-16 21:32 ` Doug Anderson
2017-06-22 1:19 ` Masahiro Yamada
2017-04-21 21:39 ` [PATCH 2/2] kbuild: clang: Disable the 'duplicate-decl-specifier' warning Matthias Kaehlcke
2017-04-30 14:01 ` Masahiro Yamada
2017-05-04 19:50 ` Matthias Kaehlcke
2017-05-08 8:29 ` Masahiro Yamada
2017-05-16 21:41 ` Doug Anderson
2017-05-17 7:35 ` Arnd Bergmann
2017-05-17 18:45 ` Matthias Kaehlcke
2017-05-24 0:04 ` Matthias Kaehlcke
2017-05-24 8:21 ` Arnd Bergmann
2017-06-21 9:11 ` Masahiro Yamada
2017-06-21 10:11 ` Arnd Bergmann
2017-06-21 16:58 ` Matthias Kaehlcke
2017-06-21 17:59 ` Arnd Bergmann
2017-06-21 21:19 ` Matthias Kaehlcke
2017-07-31 16:35 ` Matthias Kaehlcke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170508231850.GG128305@google.com \
--to=mka@chromium.org \
--cc=ghackmann@google.com \
--cc=grundler@chromium.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=md@google.com \
--cc=mmarek@suse.com \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.