* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
[not found] <cover.1443628457.git.hns@goldelico.com>
@ 2015-09-30 15:56 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 15:56 UTC (permalink / raw)
To: Szabolcs Nagy, Russell King, Nathan Lynch, Will Deacon
Cc: linux-arm-kernel, LKML, Marek Belisko
If the host toolchain is not glibc based then the arm kernel build
fails with
HOSTCC arch/arm/vdso/vdsomunge
arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
cross-compiler.
Reason: byteswap.h is a glibc only header.
Changed to detect the host and include the right file as described at:
https://bugs.freedesktop.org/show_bug.cgi?id=8882
Tested to compile on Mac OS X 10.9.5 host.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
index aedec81..5364cea 100644
--- a/arch/arm/vdso/vdsomunge.c
+++ b/arch/arm/vdso/vdsomunge.c
@@ -45,7 +45,25 @@
* it does.
*/
+#if defined(__linux__)
#include <byteswap.h>
+#elif defined(__OpenBSD__)
+#include <sys/endian.h>
+#define bswap_16 __swap16
+#define bswap_32 __swap32
+#define bswap_64 __swap64
+#elif defined(__APPLE__)
+#include <libkern/OSByteOrder.h>
+#define bswap_16 OSSwapInt16
+#define bswap_32 OSSwapInt32
+#define bswap_64 OSSwapInt64
+#else
+#include <sys/endian.h>
+#define bswap_16 bswap16
+#define bswap_32 bswap32
+#define bswap_64 bswap64
+#endif
+
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
--
2.5.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 15:56 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 15:56 UTC (permalink / raw)
To: linux-arm-kernel
If the host toolchain is not glibc based then the arm kernel build
fails with
HOSTCC arch/arm/vdso/vdsomunge
arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
cross-compiler.
Reason: byteswap.h is a glibc only header.
Changed to detect the host and include the right file as described at:
https://bugs.freedesktop.org/show_bug.cgi?id=8882
Tested to compile on Mac OS X 10.9.5 host.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
index aedec81..5364cea 100644
--- a/arch/arm/vdso/vdsomunge.c
+++ b/arch/arm/vdso/vdsomunge.c
@@ -45,7 +45,25 @@
* it does.
*/
+#if defined(__linux__)
#include <byteswap.h>
+#elif defined(__OpenBSD__)
+#include <sys/endian.h>
+#define bswap_16 __swap16
+#define bswap_32 __swap32
+#define bswap_64 __swap64
+#elif defined(__APPLE__)
+#include <libkern/OSByteOrder.h>
+#define bswap_16 OSSwapInt16
+#define bswap_32 OSSwapInt32
+#define bswap_64 OSSwapInt64
+#else
+#include <sys/endian.h>
+#define bswap_16 bswap16
+#define bswap_32 bswap32
+#define bswap_64 bswap64
+#endif
+
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
--
2.5.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 15:56 ` H. Nikolaus Schaller
@ 2015-09-30 16:02 ` Ard Biesheuvel
-1 siblings, 0 replies; 38+ messages in thread
From: Ard Biesheuvel @ 2015-09-30 16:02 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: Szabolcs Nagy, Russell King, Nathan Lynch, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
> If the host toolchain is not glibc based then the arm kernel build
> fails with
>
> HOSTCC arch/arm/vdso/vdsomunge
> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>
> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
> cross-compiler.
>
> Reason: byteswap.h is a glibc only header.
>
> Changed to detect the host and include the right file as described at:
>
> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>
> Tested to compile on Mac OS X 10.9.5 host.
>
> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
> ---
> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
> index aedec81..5364cea 100644
> --- a/arch/arm/vdso/vdsomunge.c
> +++ b/arch/arm/vdso/vdsomunge.c
> @@ -45,7 +45,25 @@
> * it does.
> */
>
> +#if defined(__linux__)
> #include <byteswap.h>
> +#elif defined(__OpenBSD__)
> +#include <sys/endian.h>
> +#define bswap_16 __swap16
> +#define bswap_32 __swap32
> +#define bswap_64 __swap64
> +#elif defined(__APPLE__)
> +#include <libkern/OSByteOrder.h>
> +#define bswap_16 OSSwapInt16
> +#define bswap_32 OSSwapInt32
> +#define bswap_64 OSSwapInt64
> +#else
> +#include <sys/endian.h>
> +#define bswap_16 bswap16
> +#define bswap_32 bswap32
> +#define bswap_64 bswap64
> +#endif
> +
Have you tried this?
#define bswap_16 __builtin_bswap16
#define bswap_32 __builtin_bswap32
#define bswap_64 __builtin_bswap64
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 16:02 ` Ard Biesheuvel
0 siblings, 0 replies; 38+ messages in thread
From: Ard Biesheuvel @ 2015-09-30 16:02 UTC (permalink / raw)
To: linux-arm-kernel
On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
> If the host toolchain is not glibc based then the arm kernel build
> fails with
>
> HOSTCC arch/arm/vdso/vdsomunge
> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>
> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
> cross-compiler.
>
> Reason: byteswap.h is a glibc only header.
>
> Changed to detect the host and include the right file as described at:
>
> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>
> Tested to compile on Mac OS X 10.9.5 host.
>
> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
> ---
> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
> index aedec81..5364cea 100644
> --- a/arch/arm/vdso/vdsomunge.c
> +++ b/arch/arm/vdso/vdsomunge.c
> @@ -45,7 +45,25 @@
> * it does.
> */
>
> +#if defined(__linux__)
> #include <byteswap.h>
> +#elif defined(__OpenBSD__)
> +#include <sys/endian.h>
> +#define bswap_16 __swap16
> +#define bswap_32 __swap32
> +#define bswap_64 __swap64
> +#elif defined(__APPLE__)
> +#include <libkern/OSByteOrder.h>
> +#define bswap_16 OSSwapInt16
> +#define bswap_32 OSSwapInt32
> +#define bswap_64 OSSwapInt64
> +#else
> +#include <sys/endian.h>
> +#define bswap_16 bswap16
> +#define bswap_32 bswap32
> +#define bswap_64 bswap64
> +#endif
> +
Have you tried this?
#define bswap_16 __builtin_bswap16
#define bswap_32 __builtin_bswap32
#define bswap_64 __builtin_bswap64
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 16:02 ` Ard Biesheuvel
@ 2015-09-30 16:13 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 16:13 UTC (permalink / raw)
To: Ard Biesheuvel
Cc: Szabolcs Nagy, Russell King, Nathan Lynch, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>> If the host toolchain is not glibc based then the arm kernel build
>> fails with
>>
>> HOSTCC arch/arm/vdso/vdsomunge
>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>>
>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
>> cross-compiler.
>>
>> Reason: byteswap.h is a glibc only header.
>>
>> Changed to detect the host and include the right file as described at:
>>
>> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>>
>> Tested to compile on Mac OS X 10.9.5 host.
>>
>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
>> ---
>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
>> 1 file changed, 18 insertions(+)
>>
>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>> index aedec81..5364cea 100644
>> --- a/arch/arm/vdso/vdsomunge.c
>> +++ b/arch/arm/vdso/vdsomunge.c
>> @@ -45,7 +45,25 @@
>> * it does.
>> */
>>
>> +#if defined(__linux__)
>> #include <byteswap.h>
>> +#elif defined(__OpenBSD__)
>> +#include <sys/endian.h>
>> +#define bswap_16 __swap16
>> +#define bswap_32 __swap32
>> +#define bswap_64 __swap64
>> +#elif defined(__APPLE__)
>> +#include <libkern/OSByteOrder.h>
>> +#define bswap_16 OSSwapInt16
>> +#define bswap_32 OSSwapInt32
>> +#define bswap_64 OSSwapInt64
>> +#else
>> +#include <sys/endian.h>
>> +#define bswap_16 bswap16
>> +#define bswap_32 bswap32
>> +#define bswap_64 bswap64
>> +#endif
>> +
>
> Have you tried this?
>
> #define bswap_16 __builtin_bswap16
> #define bswap_32 __builtin_bswap32
> #define bswap_64 __builtin_bswap64
>
> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
OS X host uses llvm and I am not sure if these builtins are
always available.
So it replaces an include file dependency by a compiler
built-in dependency. IMHO my approach is more general
and should cover a broader range of compile hosts.
This is a tool compiled by HOSTCC to be run on the build
host - so I think we can't assume to have a gcc host compiler
(while for the CC cross-compiler we can).
Thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 16:13 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 16:13 UTC (permalink / raw)
To: linux-arm-kernel
Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>> If the host toolchain is not glibc based then the arm kernel build
>> fails with
>>
>> HOSTCC arch/arm/vdso/vdsomunge
>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>>
>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
>> cross-compiler.
>>
>> Reason: byteswap.h is a glibc only header.
>>
>> Changed to detect the host and include the right file as described at:
>>
>> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>>
>> Tested to compile on Mac OS X 10.9.5 host.
>>
>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
>> ---
>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
>> 1 file changed, 18 insertions(+)
>>
>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>> index aedec81..5364cea 100644
>> --- a/arch/arm/vdso/vdsomunge.c
>> +++ b/arch/arm/vdso/vdsomunge.c
>> @@ -45,7 +45,25 @@
>> * it does.
>> */
>>
>> +#if defined(__linux__)
>> #include <byteswap.h>
>> +#elif defined(__OpenBSD__)
>> +#include <sys/endian.h>
>> +#define bswap_16 __swap16
>> +#define bswap_32 __swap32
>> +#define bswap_64 __swap64
>> +#elif defined(__APPLE__)
>> +#include <libkern/OSByteOrder.h>
>> +#define bswap_16 OSSwapInt16
>> +#define bswap_32 OSSwapInt32
>> +#define bswap_64 OSSwapInt64
>> +#else
>> +#include <sys/endian.h>
>> +#define bswap_16 bswap16
>> +#define bswap_32 bswap32
>> +#define bswap_64 bswap64
>> +#endif
>> +
>
> Have you tried this?
>
> #define bswap_16 __builtin_bswap16
> #define bswap_32 __builtin_bswap32
> #define bswap_64 __builtin_bswap64
>
> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
OS X host uses llvm and I am not sure if these builtins are
always available.
So it replaces an include file dependency by a compiler
built-in dependency. IMHO my approach is more general
and should cover a broader range of compile hosts.
This is a tool compiled by HOSTCC to be run on the build
host - so I think we can't assume to have a gcc host compiler
(while for the CC cross-compiler we can).
Thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 16:13 ` H. Nikolaus Schaller
@ 2015-09-30 16:17 ` Ard Biesheuvel
-1 siblings, 0 replies; 38+ messages in thread
From: Ard Biesheuvel @ 2015-09-30 16:17 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: Szabolcs Nagy, Russell King, Nathan Lynch, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>
> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>
>> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>> If the host toolchain is not glibc based then the arm kernel build
>>> fails with
>>>
>>> HOSTCC arch/arm/vdso/vdsomunge
>>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>>>
>>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
>>> cross-compiler.
>>>
>>> Reason: byteswap.h is a glibc only header.
>>>
>>> Changed to detect the host and include the right file as described at:
>>>
>>> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>>>
>>> Tested to compile on Mac OS X 10.9.5 host.
>>>
>>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
>>> ---
>>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
>>> 1 file changed, 18 insertions(+)
>>>
>>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>>> index aedec81..5364cea 100644
>>> --- a/arch/arm/vdso/vdsomunge.c
>>> +++ b/arch/arm/vdso/vdsomunge.c
>>> @@ -45,7 +45,25 @@
>>> * it does.
>>> */
>>>
>>> +#if defined(__linux__)
>>> #include <byteswap.h>
>>> +#elif defined(__OpenBSD__)
>>> +#include <sys/endian.h>
>>> +#define bswap_16 __swap16
>>> +#define bswap_32 __swap32
>>> +#define bswap_64 __swap64
>>> +#elif defined(__APPLE__)
>>> +#include <libkern/OSByteOrder.h>
>>> +#define bswap_16 OSSwapInt16
>>> +#define bswap_32 OSSwapInt32
>>> +#define bswap_64 OSSwapInt64
>>> +#else
>>> +#include <sys/endian.h>
>>> +#define bswap_16 bswap16
>>> +#define bswap_32 bswap32
>>> +#define bswap_64 bswap64
>>> +#endif
>>> +
>>
>> Have you tried this?
>>
>> #define bswap_16 __builtin_bswap16
>> #define bswap_32 __builtin_bswap32
>> #define bswap_64 __builtin_bswap64
>>
>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>
> OS X host uses llvm and I am not sure if these builtins are
> always available.
>
I am pretty sure recent clang supports these as well. Could you please try it?
> So it replaces an include file dependency by a compiler
> built-in dependency. IMHO my approach is more general
> and should cover a broader range of compile hosts.
>
> This is a tool compiled by HOSTCC to be run on the build
> host - so I think we can't assume to have a gcc host compiler
> (while for the CC cross-compiler we can).
>
If my suggestion works, we'll support host side GCC and clang without
decorating the source code with lots of #ifdefs for OSes few people
care about. That would be an improvement imo
Thanks,
Ard.
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 16:17 ` Ard Biesheuvel
0 siblings, 0 replies; 38+ messages in thread
From: Ard Biesheuvel @ 2015-09-30 16:17 UTC (permalink / raw)
To: linux-arm-kernel
On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>
> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>
>> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>> If the host toolchain is not glibc based then the arm kernel build
>>> fails with
>>>
>>> HOSTCC arch/arm/vdso/vdsomunge
>>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>>>
>>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
>>> cross-compiler.
>>>
>>> Reason: byteswap.h is a glibc only header.
>>>
>>> Changed to detect the host and include the right file as described at:
>>>
>>> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>>>
>>> Tested to compile on Mac OS X 10.9.5 host.
>>>
>>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
>>> ---
>>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
>>> 1 file changed, 18 insertions(+)
>>>
>>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>>> index aedec81..5364cea 100644
>>> --- a/arch/arm/vdso/vdsomunge.c
>>> +++ b/arch/arm/vdso/vdsomunge.c
>>> @@ -45,7 +45,25 @@
>>> * it does.
>>> */
>>>
>>> +#if defined(__linux__)
>>> #include <byteswap.h>
>>> +#elif defined(__OpenBSD__)
>>> +#include <sys/endian.h>
>>> +#define bswap_16 __swap16
>>> +#define bswap_32 __swap32
>>> +#define bswap_64 __swap64
>>> +#elif defined(__APPLE__)
>>> +#include <libkern/OSByteOrder.h>
>>> +#define bswap_16 OSSwapInt16
>>> +#define bswap_32 OSSwapInt32
>>> +#define bswap_64 OSSwapInt64
>>> +#else
>>> +#include <sys/endian.h>
>>> +#define bswap_16 bswap16
>>> +#define bswap_32 bswap32
>>> +#define bswap_64 bswap64
>>> +#endif
>>> +
>>
>> Have you tried this?
>>
>> #define bswap_16 __builtin_bswap16
>> #define bswap_32 __builtin_bswap32
>> #define bswap_64 __builtin_bswap64
>>
>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>
> OS X host uses llvm and I am not sure if these builtins are
> always available.
>
I am pretty sure recent clang supports these as well. Could you please try it?
> So it replaces an include file dependency by a compiler
> built-in dependency. IMHO my approach is more general
> and should cover a broader range of compile hosts.
>
> This is a tool compiled by HOSTCC to be run on the build
> host - so I think we can't assume to have a gcc host compiler
> (while for the CC cross-compiler we can).
>
If my suggestion works, we'll support host side GCC and clang without
decorating the source code with lots of #ifdefs for OSes few people
care about. That would be an improvement imo
Thanks,
Ard.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 16:17 ` Ard Biesheuvel
@ 2015-09-30 17:25 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 17:25 UTC (permalink / raw)
To: Ard Biesheuvel
Cc: Szabolcs Nagy, Russell King, Nathan Lynch, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
Hi,
Am 30.09.2015 um 18:17 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
> On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>
>> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>>
>>> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>>> If the host toolchain is not glibc based then the arm kernel build
>>>> fails with
>>>>
>>>> HOSTCC arch/arm/vdso/vdsomunge
>>>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>>>>
>>>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
>>>> cross-compiler.
>>>>
>>>> Reason: byteswap.h is a glibc only header.
>>>>
>>>> Changed to detect the host and include the right file as described at:
>>>>
>>>> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>>>>
>>>> Tested to compile on Mac OS X 10.9.5 host.
>>>>
>>>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
>>>> ---
>>>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
>>>> 1 file changed, 18 insertions(+)
>>>>
>>>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>>>> index aedec81..5364cea 100644
>>>> --- a/arch/arm/vdso/vdsomunge.c
>>>> +++ b/arch/arm/vdso/vdsomunge.c
>>>> @@ -45,7 +45,25 @@
>>>> * it does.
>>>> */
>>>>
>>>> +#if defined(__linux__)
>>>> #include <byteswap.h>
>>>> +#elif defined(__OpenBSD__)
>>>> +#include <sys/endian.h>
>>>> +#define bswap_16 __swap16
>>>> +#define bswap_32 __swap32
>>>> +#define bswap_64 __swap64
>>>> +#elif defined(__APPLE__)
>>>> +#include <libkern/OSByteOrder.h>
>>>> +#define bswap_16 OSSwapInt16
>>>> +#define bswap_32 OSSwapInt32
>>>> +#define bswap_64 OSSwapInt64
>>>> +#else
>>>> +#include <sys/endian.h>
>>>> +#define bswap_16 bswap16
>>>> +#define bswap_32 bswap32
>>>> +#define bswap_64 bswap64
>>>> +#endif
>>>> +
>>>
>>> Have you tried this?
>>>
>>> #define bswap_16 __builtin_bswap16
>>> #define bswap_32 __builtin_bswap32
>>> #define bswap_64 __builtin_bswap64
>>>
>>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>>
>> OS X host uses llvm and I am not sure if these builtins are
>> always available.
>>
>
> I am pretty sure recent clang supports these as well. Could you please try it?
What release date (= feature set) of a compiler would you no longer consider as "recent"?
>
>> So it replaces an include file dependency by a compiler
>> built-in dependency. IMHO my approach is more general
>> and should cover a broader range of compile hosts.
>>
>> This is a tool compiled by HOSTCC to be run on the build
>> host - so I think we can't assume to have a gcc host compiler
>> (while for the CC cross-compiler we can).
>>
>
> If my suggestion works, we'll support host side GCC and clang without
> decorating the source code with lots of #ifdefs for OSes few people
> care about. That would be an improvement imo
Indeed it would be the best solution.
But at least my Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
it does *not* work (see also for example http://sourceforge.net/p/flac/bugs/416/ ).
Clang 3.5 appears to provide all features of GCC 4.7.
I have checked and it appears that __builtin_bswap16 only became available in
GCC 4.8 (released 2013-03-22). And maybe in Clang 3.7.
Unfortunately I could not find a reference what the minimum required gcc for
the Linux HOSTCC currently is.
So if we require gcc >= 4.8 just by this small tool, this should be made well
known and well decided.
Therefore I would propose to use the #ifdef approach now and revise 5 years
after gcc 4.8 release (2013 ==> 2018) if __builtin_bswap16 (or something else)
has become a widely available standard.
I can add this to the patch commit V2 for reference.
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 17:25 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 17:25 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
Am 30.09.2015 um 18:17 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
> On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>
>> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>>
>>> On 30 September 2015 at 17:56, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>>> If the host toolchain is not glibc based then the arm kernel build
>>>> fails with
>>>>
>>>> HOSTCC arch/arm/vdso/vdsomunge
>>>> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>>>>
>>>> Observed with omap2plus_defconfig and compile on Mac OS X with arm ELF
>>>> cross-compiler.
>>>>
>>>> Reason: byteswap.h is a glibc only header.
>>>>
>>>> Changed to detect the host and include the right file as described at:
>>>>
>>>> https://bugs.freedesktop.org/show_bug.cgi?id=8882
>>>>
>>>> Tested to compile on Mac OS X 10.9.5 host.
>>>>
>>>> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
>>>> ---
>>>> arch/arm/vdso/vdsomunge.c | 18 ++++++++++++++++++
>>>> 1 file changed, 18 insertions(+)
>>>>
>>>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>>>> index aedec81..5364cea 100644
>>>> --- a/arch/arm/vdso/vdsomunge.c
>>>> +++ b/arch/arm/vdso/vdsomunge.c
>>>> @@ -45,7 +45,25 @@
>>>> * it does.
>>>> */
>>>>
>>>> +#if defined(__linux__)
>>>> #include <byteswap.h>
>>>> +#elif defined(__OpenBSD__)
>>>> +#include <sys/endian.h>
>>>> +#define bswap_16 __swap16
>>>> +#define bswap_32 __swap32
>>>> +#define bswap_64 __swap64
>>>> +#elif defined(__APPLE__)
>>>> +#include <libkern/OSByteOrder.h>
>>>> +#define bswap_16 OSSwapInt16
>>>> +#define bswap_32 OSSwapInt32
>>>> +#define bswap_64 OSSwapInt64
>>>> +#else
>>>> +#include <sys/endian.h>
>>>> +#define bswap_16 bswap16
>>>> +#define bswap_32 bswap32
>>>> +#define bswap_64 bswap64
>>>> +#endif
>>>> +
>>>
>>> Have you tried this?
>>>
>>> #define bswap_16 __builtin_bswap16
>>> #define bswap_32 __builtin_bswap32
>>> #define bswap_64 __builtin_bswap64
>>>
>>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>>
>> OS X host uses llvm and I am not sure if these builtins are
>> always available.
>>
>
> I am pretty sure recent clang supports these as well. Could you please try it?
What release date (= feature set) of a compiler would you no longer consider as "recent"?
>
>> So it replaces an include file dependency by a compiler
>> built-in dependency. IMHO my approach is more general
>> and should cover a broader range of compile hosts.
>>
>> This is a tool compiled by HOSTCC to be run on the build
>> host - so I think we can't assume to have a gcc host compiler
>> (while for the CC cross-compiler we can).
>>
>
> If my suggestion works, we'll support host side GCC and clang without
> decorating the source code with lots of #ifdefs for OSes few people
> care about. That would be an improvement imo
Indeed it would be the best solution.
But at least my Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
it does *not* work (see also for example http://sourceforge.net/p/flac/bugs/416/ ).
Clang 3.5 appears to provide all features of GCC 4.7.
I have checked and it appears that __builtin_bswap16 only became available in
GCC 4.8 (released 2013-03-22). And maybe in Clang 3.7.
Unfortunately I could not find a reference what the minimum required gcc for
the Linux HOSTCC currently is.
So if we require gcc >= 4.8 just by this small tool, this should be made well
known and well decided.
Therefore I would propose to use the #ifdef approach now and revise 5 years
after gcc 4.8 release (2013 ==> 2018) if __builtin_bswap16 (or something else)
has become a widely available standard.
I can add this to the patch commit V2 for reference.
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 16:17 ` Ard Biesheuvel
@ 2015-09-30 17:37 ` Nathan Lynch
-1 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-09-30 17:37 UTC (permalink / raw)
To: Ard Biesheuvel
Cc: H. Nikolaus Schaller, Szabolcs Nagy, Russell King, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
On 09/30/2015 11:17 AM, Ard Biesheuvel wrote:
> On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>
>> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>>>
>>> Have you tried this?
>>>
>>> #define bswap_16 __builtin_bswap16
>>> #define bswap_32 __builtin_bswap32
>>> #define bswap_64 __builtin_bswap64
>>>
>>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>>
>> OS X host uses llvm and I am not sure if these builtins are
>> always available.
>>
>
> I am pretty sure recent clang supports these as well. Could you please try it?
Well, I think GCC did not provide __builtin_bswap16 consistently until
the 4.8 release:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624
That seems too recent to me.
vdsomunge makes only three or four potentially byteswapped accesses to
the ELF header. It's not worth a lot of effort to try to use the most
optimal implementation available. Why not just use a generic
implementation like is found in mips' elf2ecoff?
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 17:37 ` Nathan Lynch
0 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-09-30 17:37 UTC (permalink / raw)
To: linux-arm-kernel
On 09/30/2015 11:17 AM, Ard Biesheuvel wrote:
> On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>
>> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>>>
>>> Have you tried this?
>>>
>>> #define bswap_16 __builtin_bswap16
>>> #define bswap_32 __builtin_bswap32
>>> #define bswap_64 __builtin_bswap64
>>>
>>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>>
>> OS X host uses llvm and I am not sure if these builtins are
>> always available.
>>
>
> I am pretty sure recent clang supports these as well. Could you please try it?
Well, I think GCC did not provide __builtin_bswap16 consistently until
the 4.8 release:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624
That seems too recent to me.
vdsomunge makes only three or four potentially byteswapped accesses to
the ELF header. It's not worth a lot of effort to try to use the most
optimal implementation available. Why not just use a generic
implementation like is found in mips' elf2ecoff?
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 17:37 ` Nathan Lynch
@ 2015-09-30 17:47 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 17:47 UTC (permalink / raw)
To: Nathan Lynch
Cc: Ard Biesheuvel, Szabolcs Nagy, Russell King, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
> On 09/30/2015 11:17 AM, Ard Biesheuvel wrote:
>> On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>>
>>> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>>>>
>>>> Have you tried this?
>>>>
>>>> #define bswap_16 __builtin_bswap16
>>>> #define bswap_32 __builtin_bswap32
>>>> #define bswap_64 __builtin_bswap64
>>>>
>>>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>>>
>>> OS X host uses llvm and I am not sure if these builtins are
>>> always available.
>>>
>>
>> I am pretty sure recent clang supports these as well. Could you please try it?
>
> Well, I think GCC did not provide __builtin_bswap16 consistently until
> the 4.8 release:
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624
>
> That seems too recent to me.
Same for me.
>
> vdsomunge makes only three or four potentially byteswapped accesses to
> the ELF header. It's not worth a lot of effort to try to use the most
> optimal implementation available.
Especially as it does not run on the target device but the build host.
> Why not just use a generic
> implementation like is found in mips' elf2ecoff?
Do you have a reference?
I can't find byte swapping in
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 17:47 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 17:47 UTC (permalink / raw)
To: linux-arm-kernel
Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
> On 09/30/2015 11:17 AM, Ard Biesheuvel wrote:
>> On 30 September 2015 at 18:13, H. Nikolaus Schaller <hns@goldelico.com> wrote:
>>>
>>> Am 30.09.2015 um 18:02 schrieb Ard Biesheuvel <ard.biesheuvel@linaro.org>:
>>>>
>>>> Have you tried this?
>>>>
>>>> #define bswap_16 __builtin_bswap16
>>>> #define bswap_32 __builtin_bswap32
>>>> #define bswap_64 __builtin_bswap64
>>>>
>>>> https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
>>>
>>> OS X host uses llvm and I am not sure if these builtins are
>>> always available.
>>>
>>
>> I am pretty sure recent clang supports these as well. Could you please try it?
>
> Well, I think GCC did not provide __builtin_bswap16 consistently until
> the 4.8 release:
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624
>
> That seems too recent to me.
Same for me.
>
> vdsomunge makes only three or four potentially byteswapped accesses to
> the ELF header. It's not worth a lot of effort to try to use the most
> optimal implementation available.
Especially as it does not run on the target device but the build host.
> Why not just use a generic
> implementation like is found in mips' elf2ecoff?
Do you have a reference?
I can't find byte swapping in
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 17:47 ` H. Nikolaus Schaller
@ 2015-09-30 18:17 ` Nathan Lynch
-1 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-09-30 18:17 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: Ard Biesheuvel, Szabolcs Nagy, Russell King, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
On 09/30/2015 12:47 PM, H. Nikolaus Schaller wrote:
>
> Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
>> Why not just use a generic
>> implementation like is found in mips' elf2ecoff?
>
> Do you have a reference?
> I can't find byte swapping in
>
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3
See the swab16 and swab32 macros (yes, "swab" not "swap").
Or the __constant_swab* macros in include/linux/uapi/swab.h.
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 18:17 ` Nathan Lynch
0 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-09-30 18:17 UTC (permalink / raw)
To: linux-arm-kernel
On 09/30/2015 12:47 PM, H. Nikolaus Schaller wrote:
>
> Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
>> Why not just use a generic
>> implementation like is found in mips' elf2ecoff?
>
> Do you have a reference?
> I can't find byte swapping in
>
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3
See the swab16 and swab32 macros (yes, "swab" not "swap").
Or the __constant_swab* macros in include/linux/uapi/swab.h.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
2015-09-30 18:17 ` Nathan Lynch
@ 2015-09-30 19:08 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 19:08 UTC (permalink / raw)
To: Nathan Lynch
Cc: Ard Biesheuvel, Szabolcs Nagy, Russell King, Will Deacon,
Marek Belisko, LKML, linux-arm-kernel
Am 30.09.2015 um 20:17 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
> On 09/30/2015 12:47 PM, H. Nikolaus Schaller wrote:
>>
>> Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
>>> Why not just use a generic
>>> implementation like is found in mips' elf2ecoff?
>>
>> Do you have a reference?
>> I can't find byte swapping in
>>
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3
>
> See the swab16 and swab32 macros (yes, "swab" not "swap").
>
> Or the __constant_swab* macros in include/linux/uapi/swab.h.
>
Ah, I did search for swaP...
And, I though that they are more conditional on the CPU endianness but that
would be sort of htons() and ntohl() and friends.
Then I see no problem adding such macros and getting rid of the #include
completely. Which is compiler independent and OS independent.
Will prepare and submit a V2 asap.
Thanks and BR,
Nikolaus
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h
@ 2015-09-30 19:08 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-09-30 19:08 UTC (permalink / raw)
To: linux-arm-kernel
Am 30.09.2015 um 20:17 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
> On 09/30/2015 12:47 PM, H. Nikolaus Schaller wrote:
>>
>> Am 30.09.2015 um 19:37 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
>>> Why not just use a generic
>>> implementation like is found in mips' elf2ecoff?
>>
>> Do you have a reference?
>> I can't find byte swapping in
>>
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/mips/boot/elf2ecoff.c?id=refs/tags/v4.3-rc3
>
> See the swab16 and swab32 macros (yes, "swab" not "swap").
>
> Or the __constant_swab* macros in include/linux/uapi/swab.h.
>
Ah, I did search for swaP...
And, I though that they are more conditional on the CPU endianness but that
would be sort of htons() and ntohl() and friends.
Then I see no problem adding such macros and getting rid of the #include
completely. Which is compiler independent and OS independent.
Will prepare and submit a V2 asap.
Thanks and BR,
Nikolaus
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
[not found] ` <cover.1443791320.git.hns@goldelico.com>
@ 2015-10-02 13:10 ` H. Nikolaus Schaller
2015-10-03 8:20 ` H. Nikolaus Schaller
1 sibling, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-02 13:10 UTC (permalink / raw)
To: linux-arm-kernel
If the host toolchain is not glibc based then the arm kernel build
fails with
HOSTCC arch/arm/vdso/vdsomunge
arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
Observed: with omap2plus_defconfig and compile on Mac OS X with arm ELF
cross-compiler.
Reason: byteswap.h is a glibc only header.
Solution: replace by private byte-swapping macros (taken from
arch/mips/boot/elf2ecoff.c)
Tested to compile on Mac OS X 10.9.5 host.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
arch/arm/vdso/vdsomunge.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
index aedec81..27a9a0b 100644
--- a/arch/arm/vdso/vdsomunge.c
+++ b/arch/arm/vdso/vdsomunge.c
@@ -45,7 +45,18 @@
* it does.
*/
-#include <byteswap.h>
+#define swab16(x) \
+ ((unsigned short)( \
+ (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
+
+#define swab32(x) \
+ ((unsigned int)( \
+ (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
+
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
@@ -104,17 +115,17 @@ static void cleanup(void)
static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
{
- return swap ? bswap_32(word) : word;
+ return swap ? swab32(word) : word;
}
static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
{
- return swap ? bswap_16(half) : half;
+ return swap ? swab16(half) : half;
}
static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
{
- *dst = swap ? bswap_32(val) : val;
+ *dst = swap ? swab32(val) : val;
}
int main(int argc, char **argv)
--
2.5.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
[not found] ` <cover.1443791320.git.hns@goldelico.com>
2015-10-02 13:10 ` [PATCH] ARM: fix vdsomunge not to depend " H. Nikolaus Schaller
@ 2015-10-03 8:20 ` H. Nikolaus Schaller
1 sibling, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-03 8:20 UTC (permalink / raw)
To: linux-arm-kernel
If the host toolchain is not glibc based then the arm kernel build
fails with
HOSTCC arch/arm/vdso/vdsomunge
arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
Observed: with omap2plus_defconfig and compile on Mac OS X with arm ELF
cross-compiler.
Reason: byteswap.h is a glibc only header.
Solution: replace by private byte-swapping macros (taken from
arch/mips/boot/elf2ecoff.c)
Tested to compile on Mac OS X 10.9.5 host.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
arch/arm/vdso/vdsomunge.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
index aedec81..27a9a0b 100644
--- a/arch/arm/vdso/vdsomunge.c
+++ b/arch/arm/vdso/vdsomunge.c
@@ -45,7 +45,18 @@
* it does.
*/
-#include <byteswap.h>
+#define swab16(x) \
+ ((unsigned short)( \
+ (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
+
+#define swab32(x) \
+ ((unsigned int)( \
+ (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
+
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
@@ -104,17 +115,17 @@ static void cleanup(void)
static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
{
- return swap ? bswap_32(word) : word;
+ return swap ? swab32(word) : word;
}
static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
{
- return swap ? bswap_16(half) : half;
+ return swap ? swab16(half) : half;
}
static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
{
- *dst = swap ? bswap_32(val) : val;
+ *dst = swap ? swab32(val) : val;
}
int main(int argc, char **argv)
--
2.5.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-09-30 15:56 ` H. Nikolaus Schaller
@ 2015-10-03 20:46 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-03 20:46 UTC (permalink / raw)
To: Szabolcs Nagy, Russell King, Nathan Lynch, Will Deacon
Cc: linux-arm-kernel, linux-kernel, marek
If the host toolchain is not glibc based then the arm kernel build
fails with
HOSTCC arch/arm/vdso/vdsomunge
arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
Observed: with omap2plus_defconfig and compile on Mac OS X with arm ELF
cross-compiler.
Reason: byteswap.h is a glibc only header.
Solution: replace by private byte-swapping macros (taken from
arch/mips/boot/elf2ecoff.c)
Tested to compile on Mac OS X 10.9.5 host.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
arch/arm/vdso/vdsomunge.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
index aedec81..27a9a0b 100644
--- a/arch/arm/vdso/vdsomunge.c
+++ b/arch/arm/vdso/vdsomunge.c
@@ -45,7 +45,18 @@
* it does.
*/
-#include <byteswap.h>
+#define swab16(x) \
+ ((unsigned short)( \
+ (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
+
+#define swab32(x) \
+ ((unsigned int)( \
+ (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
+
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
@@ -104,17 +115,17 @@ static void cleanup(void)
static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
{
- return swap ? bswap_32(word) : word;
+ return swap ? swab32(word) : word;
}
static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
{
- return swap ? bswap_16(half) : half;
+ return swap ? swab16(half) : half;
}
static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
{
- *dst = swap ? bswap_32(val) : val;
+ *dst = swap ? swab32(val) : val;
}
int main(int argc, char **argv)
--
2.5.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-03 20:46 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-03 20:46 UTC (permalink / raw)
To: linux-arm-kernel
If the host toolchain is not glibc based then the arm kernel build
fails with
HOSTCC arch/arm/vdso/vdsomunge
arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
Observed: with omap2plus_defconfig and compile on Mac OS X with arm ELF
cross-compiler.
Reason: byteswap.h is a glibc only header.
Solution: replace by private byte-swapping macros (taken from
arch/mips/boot/elf2ecoff.c)
Tested to compile on Mac OS X 10.9.5 host.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
---
arch/arm/vdso/vdsomunge.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
index aedec81..27a9a0b 100644
--- a/arch/arm/vdso/vdsomunge.c
+++ b/arch/arm/vdso/vdsomunge.c
@@ -45,7 +45,18 @@
* it does.
*/
-#include <byteswap.h>
+#define swab16(x) \
+ ((unsigned short)( \
+ (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
+
+#define swab32(x) \
+ ((unsigned int)( \
+ (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
+
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
@@ -104,17 +115,17 @@ static void cleanup(void)
static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
{
- return swap ? bswap_32(word) : word;
+ return swap ? swab32(word) : word;
}
static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
{
- return swap ? bswap_16(half) : half;
+ return swap ? swab16(half) : half;
}
static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
{
- *dst = swap ? bswap_32(val) : val;
+ *dst = swap ? swab32(val) : val;
}
int main(int argc, char **argv)
--
2.5.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-03 20:46 ` H. Nikolaus Schaller
@ 2015-10-14 12:47 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-14 12:47 UTC (permalink / raw)
To: Szabolcs Nagy, Russell King, Nathan Lynch, Will Deacon
Cc: linux-arm-kernel, linux-kernel, marek
ping.
Am 03.10.2015 um 22:46 schrieb H. Nikolaus Schaller <hns@goldelico.com>:
> If the host toolchain is not glibc based then the arm kernel build
> fails with
>
> HOSTCC arch/arm/vdso/vdsomunge
> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>
> Observed: with omap2plus_defconfig and compile on Mac OS X with arm ELF
> cross-compiler.
>
> Reason: byteswap.h is a glibc only header.
>
> Solution: replace by private byte-swapping macros (taken from
> arch/mips/boot/elf2ecoff.c)
>
> Tested to compile on Mac OS X 10.9.5 host.
>
> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
> ---
> arch/arm/vdso/vdsomunge.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
> index aedec81..27a9a0b 100644
> --- a/arch/arm/vdso/vdsomunge.c
> +++ b/arch/arm/vdso/vdsomunge.c
> @@ -45,7 +45,18 @@
> * it does.
> */
>
> -#include <byteswap.h>
> +#define swab16(x) \
> + ((unsigned short)( \
> + (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
> +
> +#define swab32(x) \
> + ((unsigned int)( \
> + (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
> + (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
> + (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
> +
> #include <elf.h>
> #include <errno.h>
> #include <fcntl.h>
> @@ -104,17 +115,17 @@ static void cleanup(void)
>
> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
> {
> - return swap ? bswap_32(word) : word;
> + return swap ? swab32(word) : word;
> }
>
> static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
> {
> - return swap ? bswap_16(half) : half;
> + return swap ? swab16(half) : half;
> }
>
> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
> {
> - *dst = swap ? bswap_32(val) : val;
> + *dst = swap ? swab32(val) : val;
> }
>
> int main(int argc, char **argv)
> --
> 2.5.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-14 12:47 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-14 12:47 UTC (permalink / raw)
To: linux-arm-kernel
ping.
Am 03.10.2015 um 22:46 schrieb H. Nikolaus Schaller <hns@goldelico.com>:
> If the host toolchain is not glibc based then the arm kernel build
> fails with
>
> HOSTCC arch/arm/vdso/vdsomunge
> arch/arm/vdso/vdsomunge.c:48:22: fatal error: byteswap.h: No such file or directory
>
> Observed: with omap2plus_defconfig and compile on Mac OS X with arm ELF
> cross-compiler.
>
> Reason: byteswap.h is a glibc only header.
>
> Solution: replace by private byte-swapping macros (taken from
> arch/mips/boot/elf2ecoff.c)
>
> Tested to compile on Mac OS X 10.9.5 host.
>
> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
> ---
> arch/arm/vdso/vdsomunge.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
> index aedec81..27a9a0b 100644
> --- a/arch/arm/vdso/vdsomunge.c
> +++ b/arch/arm/vdso/vdsomunge.c
> @@ -45,7 +45,18 @@
> * it does.
> */
>
> -#include <byteswap.h>
> +#define swab16(x) \
> + ((unsigned short)( \
> + (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
> +
> +#define swab32(x) \
> + ((unsigned int)( \
> + (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
> + (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
> + (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
> +
> #include <elf.h>
> #include <errno.h>
> #include <fcntl.h>
> @@ -104,17 +115,17 @@ static void cleanup(void)
>
> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
> {
> - return swap ? bswap_32(word) : word;
> + return swap ? swab32(word) : word;
> }
>
> static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
> {
> - return swap ? bswap_16(half) : half;
> + return swap ? swab16(half) : half;
> }
>
> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
> {
> - *dst = swap ? bswap_32(val) : val;
> + *dst = swap ? swab32(val) : val;
> }
>
> int main(int argc, char **argv)
> --
> 2.5.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-14 12:47 ` H. Nikolaus Schaller
@ 2015-10-14 14:16 ` Nathan Lynch
-1 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-10-14 14:16 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: Szabolcs Nagy, Russell King, Will Deacon, linux-arm-kernel,
linux-kernel, marek
On 10/14/2015 07:47 AM, H. Nikolaus Schaller wrote:
>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>> index aedec81..27a9a0b 100644
>> --- a/arch/arm/vdso/vdsomunge.c
>> +++ b/arch/arm/vdso/vdsomunge.c
>> @@ -45,7 +45,18 @@
>> * it does.
>> */
>>
>> -#include <byteswap.h>
>> +#define swab16(x) \
>> + ((unsigned short)( \
>> + (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>> +
>> +#define swab32(x) \
>> + ((unsigned int)( \
>> + (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
>> + (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
>> + (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>> +
>> #include <elf.h>
>> #include <errno.h>
>> #include <fcntl.h>
>> @@ -104,17 +115,17 @@ static void cleanup(void)
>>
>> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
>> {
>> - return swap ? bswap_32(word) : word;
>> + return swap ? swab32(word) : word;
>> }
>>
>> static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
>> {
>> - return swap ? bswap_16(half) : half;
>> + return swap ? swab16(half) : half;
>> }
>>
>> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
>> {
>> - *dst = swap ? bswap_32(val) : val;
>> + *dst = swap ? swab32(val) : val;
>> }
> ping.
Sorry for the delay.
This is okay but I'd prefer the swab macros to be below the #include
lines, and it would be easier for me to deal with a patch that isn't
whitespace-damaged.
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-14 14:16 ` Nathan Lynch
0 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-10-14 14:16 UTC (permalink / raw)
To: linux-arm-kernel
On 10/14/2015 07:47 AM, H. Nikolaus Schaller wrote:
>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>> index aedec81..27a9a0b 100644
>> --- a/arch/arm/vdso/vdsomunge.c
>> +++ b/arch/arm/vdso/vdsomunge.c
>> @@ -45,7 +45,18 @@
>> * it does.
>> */
>>
>> -#include <byteswap.h>
>> +#define swab16(x) \
>> + ((unsigned short)( \
>> + (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>> +
>> +#define swab32(x) \
>> + ((unsigned int)( \
>> + (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
>> + (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
>> + (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>> +
>> #include <elf.h>
>> #include <errno.h>
>> #include <fcntl.h>
>> @@ -104,17 +115,17 @@ static void cleanup(void)
>>
>> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
>> {
>> - return swap ? bswap_32(word) : word;
>> + return swap ? swab32(word) : word;
>> }
>>
>> static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
>> {
>> - return swap ? bswap_16(half) : half;
>> + return swap ? swab16(half) : half;
>> }
>>
>> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
>> {
>> - *dst = swap ? bswap_32(val) : val;
>> + *dst = swap ? swab32(val) : val;
>> }
> ping.
Sorry for the delay.
This is okay but I'd prefer the swab macros to be below the #include
lines, and it would be easier for me to deal with a patch that isn't
whitespace-damaged.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-14 14:16 ` Nathan Lynch
@ 2015-10-15 5:52 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-15 5:52 UTC (permalink / raw)
To: Nathan Lynch
Cc: Szabolcs Nagy, Russell King, Will Deacon, linux-arm-kernel,
linux-kernel, marek
Am 14.10.2015 um 16:16 schrieb Nathan Lynch <nathan_lynch@mentor.com>:
> On 10/14/2015 07:47 AM, H. Nikolaus Schaller wrote:
>>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>>> index aedec81..27a9a0b 100644
>>> --- a/arch/arm/vdso/vdsomunge.c
>>> +++ b/arch/arm/vdso/vdsomunge.c
>>> @@ -45,7 +45,18 @@
>>> * it does.
>>> */
>>>
>>> -#include <byteswap.h>
>>> +#define swab16(x) \
>>> + ((unsigned short)( \
>>> + (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
>>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>>> +
>>> +#define swab32(x) \
>>> + ((unsigned int)( \
>>> + (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
>>> + (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
>>> + (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
>>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>>> +
>>> #include <elf.h>
>>> #include <errno.h>
>>> #include <fcntl.h>
>>> @@ -104,17 +115,17 @@ static void cleanup(void)
>>>
>>> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
>>> {
>>> - return swap ? bswap_32(word) : word;
>>> + return swap ? swab32(word) : word;
>>> }
>>>
>>> static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
>>> {
>>> - return swap ? bswap_16(half) : half;
>>> + return swap ? swab16(half) : half;
>>> }
>>>
>>> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
>>> {
>>> - *dst = swap ? bswap_32(val) : val;
>>> + *dst = swap ? swab32(val) : val;
>>> }
>> ping.
>
> Sorry for the delay.
>
> This is okay but I'd prefer the swab macros to be below the #include
> lines,
Ok.
> and it would be easier for me to deal with a patch that isn't
> whitespace-damaged.
You mean:
ERROR: space prohibited before that close parenthesis ')'
#46: FILE: arch/arm/vdso/vdsomunge.c:64:
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
ERROR: space prohibited before that close parenthesis ')'
#53: FILE: arch/arm/vdso/vdsomunge.c:71:
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
Well, I had copied that verbatim from arch/mips/boot/elf2ecoff.c and
thought that it is better readable, but it is easy to fix.
V3 is coming.
BR and thanks,
Nikolaus
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-15 5:52 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-15 5:52 UTC (permalink / raw)
To: linux-arm-kernel
Am 14.10.2015 um 16:16 schrieb Nathan Lynch <nathan_lynch@mentor.com>:
> On 10/14/2015 07:47 AM, H. Nikolaus Schaller wrote:
>>> diff --git a/arch/arm/vdso/vdsomunge.c b/arch/arm/vdso/vdsomunge.c
>>> index aedec81..27a9a0b 100644
>>> --- a/arch/arm/vdso/vdsomunge.c
>>> +++ b/arch/arm/vdso/vdsomunge.c
>>> @@ -45,7 +45,18 @@
>>> * it does.
>>> */
>>>
>>> -#include <byteswap.h>
>>> +#define swab16(x) \
>>> + ((unsigned short)( \
>>> + (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
>>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>>> +
>>> +#define swab32(x) \
>>> + ((unsigned int)( \
>>> + (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
>>> + (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
>>> + (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
>>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>>> +
>>> #include <elf.h>
>>> #include <errno.h>
>>> #include <fcntl.h>
>>> @@ -104,17 +115,17 @@ static void cleanup(void)
>>>
>>> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
>>> {
>>> - return swap ? bswap_32(word) : word;
>>> + return swap ? swab32(word) : word;
>>> }
>>>
>>> static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
>>> {
>>> - return swap ? bswap_16(half) : half;
>>> + return swap ? swab16(half) : half;
>>> }
>>>
>>> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
>>> {
>>> - *dst = swap ? bswap_32(val) : val;
>>> + *dst = swap ? swab32(val) : val;
>>> }
>> ping.
>
> Sorry for the delay.
>
> This is okay but I'd prefer the swab macros to be below the #include
> lines,
Ok.
> and it would be easier for me to deal with a patch that isn't
> whitespace-damaged.
You mean:
ERROR: space prohibited before that close parenthesis ')'
#46: FILE: arch/arm/vdso/vdsomunge.c:64:
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
ERROR: space prohibited before that close parenthesis ')'
#53: FILE: arch/arm/vdso/vdsomunge.c:71:
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
Well, I had copied that verbatim from arch/mips/boot/elf2ecoff.c and
thought that it is better readable, but it is easy to fix.
V3 is coming.
BR and thanks,
Nikolaus
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-15 5:52 ` H. Nikolaus Schaller
@ 2015-10-15 16:37 ` Russell King - ARM Linux
-1 siblings, 0 replies; 38+ messages in thread
From: Russell King - ARM Linux @ 2015-10-15 16:37 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: Nathan Lynch, Szabolcs Nagy, Will Deacon, linux-arm-kernel,
linux-kernel, marek
On Thu, Oct 15, 2015 at 07:52:38AM +0200, H. Nikolaus Schaller wrote:
> ERROR: space prohibited before that close parenthesis ')'
> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
I have a pet hatred of too many parens. I also have a hatred of idiotic
casts. What about changing the above to one of:
(((x) & 0xff00) >> 8)
(((x) >> 8) & 0xff)
>
> ERROR: space prohibited before that close parenthesis ')'
> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
and one of:
(((x) & 0xff000000) >> 24)
(((x) >> 24) & 0xff)
?
--
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-15 16:37 ` Russell King - ARM Linux
0 siblings, 0 replies; 38+ messages in thread
From: Russell King - ARM Linux @ 2015-10-15 16:37 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Oct 15, 2015 at 07:52:38AM +0200, H. Nikolaus Schaller wrote:
> ERROR: space prohibited before that close parenthesis ')'
> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
I have a pet hatred of too many parens. I also have a hatred of idiotic
casts. What about changing the above to one of:
(((x) & 0xff00) >> 8)
(((x) >> 8) & 0xff)
>
> ERROR: space prohibited before that close parenthesis ')'
> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
and one of:
(((x) & 0xff000000) >> 24)
(((x) >> 24) & 0xff)
?
--
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-15 16:37 ` Russell King - ARM Linux
@ 2015-10-15 16:52 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-15 16:52 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Nathan Lynch, Szabolcs Nagy, Will Deacon, linux-arm-kernel,
linux-kernel, marek
Am 15.10.2015 um 18:37 schrieb Russell King - ARM Linux <linux@arm.linux.org.uk>:
> On Thu, Oct 15, 2015 at 07:52:38AM +0200, H. Nikolaus Schaller wrote:
>> ERROR: space prohibited before that close parenthesis ')'
>> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>
> I have a pet hatred of too many parens. I also have a hatred of idiotic
> casts. What about changing the above to one of:
>
> (((x) & 0xff00) >> 8)
> (((x) >> 8) & 0xff)
>
>>
>> ERROR: space prohibited before that close parenthesis ')'
>> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>
> and one of:
>
> (((x) & 0xff000000) >> 24)
> (((x) >> 24) & 0xff)
>
> ?
Well, the semantics is sometimes the same but I think readability goes down
because the macro becomes quite un-symmetric and for >> 8 you should
better be sure that values are unsigned if combining with | operator.
Of course it is questionable why the constants (with U and UL modifiers)
are casted.
The full macro (as copied verbatim from existing arch/mips/boot/elf2ecoff.c) is:
+#define swab16(x) \
+ ((unsigned short)( \
+ (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8)))
+
+#define swab32(x) \
+ ((unsigned int)( \
+ (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24)))
+
I have already submitted a V3 of this patch, so please comment that.
A question is why this is not generally available for all HOSTCC based tools
so that we could simply include some header. But since that is no kernel
code but a tool, I think it is not really necessary to put significant efforts
into this piece of code.
This was probably the intention of the original code to simply include
byteswap.h - then you don't even see how complex the macros are -
but it is not a standard header.
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-15 16:52 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-15 16:52 UTC (permalink / raw)
To: linux-arm-kernel
Am 15.10.2015 um 18:37 schrieb Russell King - ARM Linux <linux@arm.linux.org.uk>:
> On Thu, Oct 15, 2015 at 07:52:38AM +0200, H. Nikolaus Schaller wrote:
>> ERROR: space prohibited before that close parenthesis ')'
>> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>
> I have a pet hatred of too many parens. I also have a hatred of idiotic
> casts. What about changing the above to one of:
>
> (((x) & 0xff00) >> 8)
> (((x) >> 8) & 0xff)
>
>>
>> ERROR: space prohibited before that close parenthesis ')'
>> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>
> and one of:
>
> (((x) & 0xff000000) >> 24)
> (((x) >> 24) & 0xff)
>
> ?
Well, the semantics is sometimes the same but I think readability goes down
because the macro becomes quite un-symmetric and for >> 8 you should
better be sure that values are unsigned if combining with | operator.
Of course it is questionable why the constants (with U and UL modifiers)
are casted.
The full macro (as copied verbatim from existing arch/mips/boot/elf2ecoff.c) is:
+#define swab16(x) \
+ ((unsigned short)( \
+ (((unsigned short)(x) & (unsigned short)0x00ffU) << 8) | \
+ (((unsigned short)(x) & (unsigned short)0xff00U) >> 8)))
+
+#define swab32(x) \
+ ((unsigned int)( \
+ (((unsigned int)(x) & (unsigned int)0x000000ffUL) << 24) | \
+ (((unsigned int)(x) & (unsigned int)0x0000ff00UL) << 8) | \
+ (((unsigned int)(x) & (unsigned int)0x00ff0000UL) >> 8) | \
+ (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24)))
+
I have already submitted a V3 of this patch, so please comment that.
A question is why this is not generally available for all HOSTCC based tools
so that we could simply include some header. But since that is no kernel
code but a tool, I think it is not really necessary to put significant efforts
into this piece of code.
This was probably the intention of the original code to simply include
byteswap.h - then you don't even see how complex the macros are -
but it is not a standard header.
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-15 5:52 ` H. Nikolaus Schaller
@ 2015-10-15 17:07 ` Nathan Lynch
-1 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-10-15 17:07 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: Szabolcs Nagy, Russell King, Will Deacon, linux-arm-kernel,
linux-kernel, marek
On 10/15/2015 12:52 AM, H. Nikolaus Schaller wrote:
> Am 14.10.2015 um 16:16 schrieb Nathan Lynch <nathan_lynch@mentor.com>:
>> and it would be easier for me to deal with a patch that isn't
>> whitespace-damaged.
>
> You mean:
>
> ERROR: space prohibited before that close parenthesis ')'
> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>
> ERROR: space prohibited before that close parenthesis ')'
> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>
> Well, I had copied that verbatim from arch/mips/boot/elf2ecoff.c and
> thought that it is better readable, but it is easy to fix.
That's not what I was referring to, but it is fine to fix that too.
What I meant was that the first column of the patch body is corrupted.
Your v2 has hunks like this (bad):
static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
{
- return swap ? bswap_32(word) : word;
+ return swap ? swab32(word) : word;
}
Your v3 has this (good):
static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
{
- *dst = swap ? bswap_32(val) : val;
+ *dst = swap ? swab32(val) : val;
}
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-15 17:07 ` Nathan Lynch
0 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-10-15 17:07 UTC (permalink / raw)
To: linux-arm-kernel
On 10/15/2015 12:52 AM, H. Nikolaus Schaller wrote:
> Am 14.10.2015 um 16:16 schrieb Nathan Lynch <nathan_lynch@mentor.com>:
>> and it would be easier for me to deal with a patch that isn't
>> whitespace-damaged.
>
> You mean:
>
> ERROR: space prohibited before that close parenthesis ')'
> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>
> ERROR: space prohibited before that close parenthesis ')'
> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>
> Well, I had copied that verbatim from arch/mips/boot/elf2ecoff.c and
> thought that it is better readable, but it is easy to fix.
That's not what I was referring to, but it is fine to fix that too.
What I meant was that the first column of the patch body is corrupted.
Your v2 has hunks like this (bad):
static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
{
- return swap ? bswap_32(word) : word;
+ return swap ? swab32(word) : word;
}
Your v3 has this (good):
static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
{
- *dst = swap ? bswap_32(val) : val;
+ *dst = swap ? swab32(val) : val;
}
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-15 17:07 ` Nathan Lynch
@ 2015-10-15 17:16 ` H. Nikolaus Schaller
-1 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-15 17:16 UTC (permalink / raw)
To: Nathan Lynch
Cc: Szabolcs Nagy, Russell King, Will Deacon, linux-arm-kernel,
linux-kernel, marek
Am 15.10.2015 um 19:07 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
> On 10/15/2015 12:52 AM, H. Nikolaus Schaller wrote:
>> Am 14.10.2015 um 16:16 schrieb Nathan Lynch <nathan_lynch@mentor.com>:
>>> and it would be easier for me to deal with a patch that isn't
>>> whitespace-damaged.
>>
>> You mean:
>>
>> ERROR: space prohibited before that close parenthesis ')'
>> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>>
>> ERROR: space prohibited before that close parenthesis ')'
>> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>>
>> Well, I had copied that verbatim from arch/mips/boot/elf2ecoff.c and
>> thought that it is better readable, but it is easy to fix.
>
> That's not what I was referring to, but it is fine to fix that too.
>
> What I meant was that the first column of the patch body is corrupted.
> Your v2 has hunks like this (bad):
>
> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
> {
> - return swap ? bswap_32(word) : word;
> + return swap ? swab32(word) : word;
> }
>
>
> Your v3 has this (good):
>
> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
> {
> - *dst = swap ? bswap_32(val) : val;
> + *dst = swap ? swab32(val) : val;
> }
Does this mean it is ok now in V3 in all cases? I have switched my patch editor
tool from indirect git imap-send to git send-email (which appears to be more
compatible).
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-15 17:16 ` H. Nikolaus Schaller
0 siblings, 0 replies; 38+ messages in thread
From: H. Nikolaus Schaller @ 2015-10-15 17:16 UTC (permalink / raw)
To: linux-arm-kernel
Am 15.10.2015 um 19:07 schrieb Nathan Lynch <Nathan_Lynch@mentor.com>:
> On 10/15/2015 12:52 AM, H. Nikolaus Schaller wrote:
>> Am 14.10.2015 um 16:16 schrieb Nathan Lynch <nathan_lynch@mentor.com>:
>>> and it would be easier for me to deal with a patch that isn't
>>> whitespace-damaged.
>>
>> You mean:
>>
>> ERROR: space prohibited before that close parenthesis ')'
>> #46: FILE: arch/arm/vdso/vdsomunge.c:64:
>> + (((unsigned short)(x) & (unsigned short)0xff00U) >> 8) ))
>>
>> ERROR: space prohibited before that close parenthesis ')'
>> #53: FILE: arch/arm/vdso/vdsomunge.c:71:
>> + (((unsigned int)(x) & (unsigned int)0xff000000UL) >> 24) ))
>>
>> Well, I had copied that verbatim from arch/mips/boot/elf2ecoff.c and
>> thought that it is better readable, but it is easy to fix.
>
> That's not what I was referring to, but it is fine to fix that too.
>
> What I meant was that the first column of the patch body is corrupted.
> Your v2 has hunks like this (bad):
>
> static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
> {
> - return swap ? bswap_32(word) : word;
> + return swap ? swab32(word) : word;
> }
>
>
> Your v3 has this (good):
>
> static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
> {
> - *dst = swap ? bswap_32(val) : val;
> + *dst = swap ? swab32(val) : val;
> }
Does this mean it is ok now in V3 in all cases? I have switched my patch editor
tool from indirect git imap-send to git send-email (which appears to be more
compatible).
BR and thanks,
Nikolaus Schaller
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
2015-10-15 17:16 ` H. Nikolaus Schaller
@ 2015-10-15 17:23 ` Nathan Lynch
-1 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-10-15 17:23 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: Szabolcs Nagy, Russell King, Will Deacon, linux-arm-kernel,
linux-kernel, marek
On 10/15/2015 12:16 PM, H. Nikolaus Schaller wrote:
> Does this mean it is ok now in V3 in all cases? I have switched my patch editor
> tool from indirect git imap-send to git send-email (which appears to be more
> compatible).
v3 applied without issue, so yes, in that respect it is fine.
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v2] ARM: fix vdsomunge not to depend on glibc specific byteswap.h
@ 2015-10-15 17:23 ` Nathan Lynch
0 siblings, 0 replies; 38+ messages in thread
From: Nathan Lynch @ 2015-10-15 17:23 UTC (permalink / raw)
To: linux-arm-kernel
On 10/15/2015 12:16 PM, H. Nikolaus Schaller wrote:
> Does this mean it is ok now in V3 in all cases? I have switched my patch editor
> tool from indirect git imap-send to git send-email (which appears to be more
> compatible).
v3 applied without issue, so yes, in that respect it is fine.
^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2015-10-15 17:24 UTC | newest]
Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <cover.1443628457.git.hns@goldelico.com>
2015-09-30 15:56 ` [PATCH] ARM: fix vdsomunge depends on glibc specific byteswap.h H. Nikolaus Schaller
2015-09-30 15:56 ` H. Nikolaus Schaller
2015-09-30 16:02 ` Ard Biesheuvel
2015-09-30 16:02 ` Ard Biesheuvel
2015-09-30 16:13 ` H. Nikolaus Schaller
2015-09-30 16:13 ` H. Nikolaus Schaller
2015-09-30 16:17 ` Ard Biesheuvel
2015-09-30 16:17 ` Ard Biesheuvel
2015-09-30 17:25 ` H. Nikolaus Schaller
2015-09-30 17:25 ` H. Nikolaus Schaller
2015-09-30 17:37 ` Nathan Lynch
2015-09-30 17:37 ` Nathan Lynch
2015-09-30 17:47 ` H. Nikolaus Schaller
2015-09-30 17:47 ` H. Nikolaus Schaller
2015-09-30 18:17 ` Nathan Lynch
2015-09-30 18:17 ` Nathan Lynch
2015-09-30 19:08 ` H. Nikolaus Schaller
2015-09-30 19:08 ` H. Nikolaus Schaller
[not found] ` <cover.1443791320.git.hns@goldelico.com>
2015-10-02 13:10 ` [PATCH] ARM: fix vdsomunge not to depend " H. Nikolaus Schaller
2015-10-03 8:20 ` H. Nikolaus Schaller
2015-10-03 20:46 ` [PATCH v2] " H. Nikolaus Schaller
2015-10-03 20:46 ` H. Nikolaus Schaller
2015-10-14 12:47 ` H. Nikolaus Schaller
2015-10-14 12:47 ` H. Nikolaus Schaller
2015-10-14 14:16 ` Nathan Lynch
2015-10-14 14:16 ` Nathan Lynch
2015-10-15 5:52 ` H. Nikolaus Schaller
2015-10-15 5:52 ` H. Nikolaus Schaller
2015-10-15 16:37 ` Russell King - ARM Linux
2015-10-15 16:37 ` Russell King - ARM Linux
2015-10-15 16:52 ` H. Nikolaus Schaller
2015-10-15 16:52 ` H. Nikolaus Schaller
2015-10-15 17:07 ` Nathan Lynch
2015-10-15 17:07 ` Nathan Lynch
2015-10-15 17:16 ` H. Nikolaus Schaller
2015-10-15 17:16 ` H. Nikolaus Schaller
2015-10-15 17:23 ` Nathan Lynch
2015-10-15 17:23 ` Nathan Lynch
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.