Author: dim
Date: Thu Dec 15 19:42:25 2011
New Revision: 228536
URL: http://svn.freebsd.org/changeset/base/228536

Log:
  The TCB_GET32() and TCB_GET64() macros in the i386 and amd64-specific
  versions of pthread_md.h have a special case of dereferencing a null
  pointer.  Clang warns about this with:
  
  In file included from lib/libthr/arch/i386/i386/pthread_md.c:36:
  lib/libthr/arch/i386/include/pthread_md.h:96:10: error: indirection of 
non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
          return (TCB_GET32(tcb_self));
                  ^~~~~~~~~~~~~~~~~~~
  lib/libthr/arch/i386/include/pthread_md.h:73:13: note: expanded from:
              : "m" (*(u_int *)(__tcb_offset(name))));            \
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  lib/libthr/arch/i386/include/pthread_md.h:96:10: note: consider using 
__builtin_trap() or qualifying pointer with 'volatile'
  
  Since this indirection is done relative to the fs or gs segment, to
  retrieve thread-specific data, it is an exception to the rule.
  
  Therefore, add a volatile qualifier to tell the compiler we really want
  to dereference a zero address.
  
  MFC after:    1 week

Modified:
  head/lib/libthr/arch/amd64/include/pthread_md.h
  head/lib/libthr/arch/i386/include/pthread_md.h

Modified: head/lib/libthr/arch/amd64/include/pthread_md.h
==============================================================================
--- head/lib/libthr/arch/amd64/include/pthread_md.h     Thu Dec 15 17:54:23 
2011        (r228535)
+++ head/lib/libthr/arch/amd64/include/pthread_md.h     Thu Dec 15 19:42:25 
2011        (r228536)
@@ -71,7 +71,7 @@ struct tcb {
        u_long __i;                                             \
        __asm __volatile("movq %%fs:%1, %0"                     \
            : "=r" (__i)                                        \
-           : "m" (*(u_long *)(__tcb_offset(name))));           \
+           : "m" (*(volatile u_long *)(__tcb_offset(name))));  \
        __result = (__tcb_type(name))__i;                       \
                                                                \
        __result;                                               \

Modified: head/lib/libthr/arch/i386/include/pthread_md.h
==============================================================================
--- head/lib/libthr/arch/i386/include/pthread_md.h      Thu Dec 15 17:54:23 
2011        (r228535)
+++ head/lib/libthr/arch/i386/include/pthread_md.h      Thu Dec 15 19:42:25 
2011        (r228536)
@@ -70,7 +70,7 @@ struct tcb {
        u_int __i;                                              \
        __asm __volatile("movl %%gs:%1, %0"                     \
            : "=r" (__i)                                        \
-           : "m" (*(u_int *)(__tcb_offset(name))));            \
+           : "m" (*(volatile u_int *)(__tcb_offset(name))));   \
        __result = (__tcb_type(name))__i;                       \
                                                                \
        __result;                                               \
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to