Date: Thu, 29 Mar 2012 17:25:40 +0300 From: Jaakko Heinonen <jh@FreeBSD.org> To: Dimitry Andric <dim@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r233419 - head/sys/x86/include Message-ID: <20120329142539.GA51516@jh> In-Reply-To: <201203241007.q2OA7MtS024789@svn.freebsd.org> References: <201203241007.q2OA7MtS024789@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, On 2012-03-24, Dimitry Andric wrote: > Fix the following clang warning in sys/dev/dcons/dcons.c, caused by the > recent changes in sys/x86/include/endian.h: > > sys/dev/dcons/dcons.c:190:15: error: implicit conversion from '__uint32_t' (aka 'unsigned int') to '__uint16_t' (aka 'unsigned short') changes value from 1684238190 to 28526 [-Werror,-Wconstant-conversion] > buf->magic = ntohl(DCONS_MAGIC); > ^~~~~~~~~~~~~~~~~~ > sys/sys/param.h:306:18: note: expanded from: > #define ntohl(x) __ntohl(x) > ^ > ./x86/endian.h:128:20: note: expanded from: > #define __ntohl(x) __bswap32(x) > ^ > ./x86/endian.h:78:20: note: expanded from: > __bswap32_gen((__uint32_t)(x)) : __bswap32_var(x)) > ^ > ./x86/endian.h:68:26: note: expanded from: > (((__uint32_t)__bswap16(x) << 16) | __bswap16((x) >> 16)) > ^ > ./x86/endian.h:75:53: note: expanded from: > __bswap16_gen((__uint16_t)(x)) : __bswap16_var(x))) > ~~~~~~~~~~~~~ ^ > > This is because the __bswapXX_gen() macros (for x86) call the regular > __bswapXX() macros. Since the __bswapXX_gen() variants are only called > when their arguments are constant, there is no need to do that constancy > check recursively. Also, it causes the above error with clang. > > Fix it by calling __bswap16_gen() from __bswap32_gen(), and similarly, > __bswap32_gen() from __bswap64_gen(). > > While here, add extra parentheses around the __bswap16_gen() macro > expansion, to prevent unexpected side effects. > > Modified: > head/sys/x86/include/endian.h This commit seems to have broken kernel dumping for me. I always get: # savecore savecore: error reading first dump header at offset 4143647740 in /dev/ada0s1b: Invalid argument The offset varies. FreeBSD x 10.0-CURRENT FreeBSD 10.0-CURRENT #826 r233419M: Thu Mar 29 15:46:12 EEST 2012 x@x:X i386 Dumping works with r233418. -- Jaakko
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120329142539.GA51516>