Message ID | 20240801111054.818765-1-andre.przywara@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [kvmtool] remove wordsize.h inclusion (for musl compatibility) | expand |
Hi Andre, On Thu, Aug 01, 2024 at 12:10:54PM +0100, Andre Przywara wrote: > The wordsize.h header file and the __WORDSIZE definition do not seem > to be universal, the musl libc for instance has the definition in a > different header file. This breaks compilation of kvmtool against musl. > > The two leading underscores suggest a compiler-internal symbol anyway, so > let's just remove that particular macro usage entirely, and replace it > with the number we really want: the size of a "long" type. > > Reported-by: J. Neuschäfer <j.neuschaefer@gmx.net> > Signed-off-by: Andre Przywara <andre.przywara@arm.com> > --- > Hi, > > can someone test this on a proper/pure musl installation? I tested this > with Ubuntu's musl-gcc wrapper, but this didn't show the problem before, > so I guess there are subtle differences. > > Cheers, > Andre > > include/linux/bitops.h | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/include/linux/bitops.h b/include/linux/bitops.h > index ae33922f5..ee8fd5609 100644 > --- a/include/linux/bitops.h > +++ b/include/linux/bitops.h > @@ -1,15 +1,13 @@ > #ifndef _KVM_LINUX_BITOPS_H_ > #define _KVM_LINUX_BITOPS_H_ > > -#include <bits/wordsize.h> > - > #include <linux/kernel.h> > #include <linux/compiler.h> > #include <asm/hweight.h> > > -#define BITS_PER_LONG __WORDSIZE > #define BITS_PER_BYTE 8 > -#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) > +#define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long)) > +#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG) This makes perfect sense to me. I would just like to point out that the code already used this definition for the number of bits in a long, in the BITS_TO_LONGS() macro, where it used BITS_PER_BYTE * sizeof(long) instead of BITS_PER_LONG. Also tested this by cross-compiling for arm and arm64 on an x86 host, and compiling natively for arm64. Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com> Thanks, Alex > > #define BIT_WORD(nr) ((nr) / BITS_PER_LONG) > > -- > 2.25.1 >
On Thu, Aug 01, 2024 at 12:10:54PM +0100, Andre Przywara wrote: > The wordsize.h header file and the __WORDSIZE definition do not seem > to be universal, the musl libc for instance has the definition in a > different header file. This breaks compilation of kvmtool against musl. > > The two leading underscores suggest a compiler-internal symbol anyway, so > let's just remove that particular macro usage entirely, and replace it > with the number we really want: the size of a "long" type. > > Reported-by: J. Neuschäfer <j.neuschaefer@gmx.net> > Signed-off-by: Andre Przywara <andre.przywara@arm.com> > --- > Hi, > > can someone test this on a proper/pure musl installation? I tested this > with Ubuntu's musl-gcc wrapper, but this didn't show the problem before, > so I guess there are subtle differences. Compile-tested successfully on Alpine Linux 3.21 (gcc 13.2.1, musl 1.2.5). Thanks a lot! -- jn
On Thu, 01 Aug 2024 12:10:54 +0100, Andre Przywara wrote: > The wordsize.h header file and the __WORDSIZE definition do not seem > to be universal, the musl libc for instance has the definition in a > different header file. This breaks compilation of kvmtool against musl. > > The two leading underscores suggest a compiler-internal symbol anyway, so > let's just remove that particular macro usage entirely, and replace it > with the number we really want: the size of a "long" type. > > [...] Applied to kvmtool (master), thanks! [1/1] remove wordsize.h inclusion (for musl compatibility) https://git.kernel.org/will/kvmtool/c/0592f8f829c8 Cheers,
diff --git a/include/linux/bitops.h b/include/linux/bitops.h index ae33922f5..ee8fd5609 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h @@ -1,15 +1,13 @@ #ifndef _KVM_LINUX_BITOPS_H_ #define _KVM_LINUX_BITOPS_H_ -#include <bits/wordsize.h> - #include <linux/kernel.h> #include <linux/compiler.h> #include <asm/hweight.h> -#define BITS_PER_LONG __WORDSIZE #define BITS_PER_BYTE 8 -#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) +#define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long)) +#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG) #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
The wordsize.h header file and the __WORDSIZE definition do not seem to be universal, the musl libc for instance has the definition in a different header file. This breaks compilation of kvmtool against musl. The two leading underscores suggest a compiler-internal symbol anyway, so let's just remove that particular macro usage entirely, and replace it with the number we really want: the size of a "long" type. Reported-by: J. Neuschäfer <j.neuschaefer@gmx.net> Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- Hi, can someone test this on a proper/pure musl installation? I tested this with Ubuntu's musl-gcc wrapper, but this didn't show the problem before, so I guess there are subtle differences. Cheers, Andre include/linux/bitops.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)